BOOL SGNameDrag::GetStatusLineText(String_256* pText, DragTarget* pDragTarget) { // Validate outputs and object state. ERROR3IF(pText == 0, "SGNameDrag::GetStatusLineText: no output parameter"); if (TheBitmap == 0 || TheBitmap->ActualBitmap == 0) return FALSE; // Only provide status-line help for drops on the document view. if (pDragTarget == 0 || !pDragTarget->IS_KIND_OF(ViewDragTarget)) return FALSE; // Get the name and type of the item being dragged. String_256 strName; m_pSourceItem->GetNameText(&strName); String strTypeDesc(((SGNameGroup*) m_pSourceItem->GetParent())->GetTypeID()); // Describe the object the mouse is over, if any. PageDropInfo pdInfo; ((ViewDragTarget*) pDragTarget)->GetDropInfo(&pdInfo); NodeRenderableInk* pObjectHit = pdInfo.pObjectHit; if (pObjectHit == 0) pText->MakeMsg(_R(IDST_NAMEOP_CANT_DROP), &strName, &strTypeDesc); else { String_64 strObjectDesc; strObjectDesc = pObjectHit->Describe(FALSE); pText->MakeMsg(_R(IDST_NAMEOP_DROP_TO_APPLY), &strName, &strTypeDesc, &strObjectDesc, &strTypeDesc, &strName); } return TRUE; }
void NodeRenderableInk::DeleteFactoredOutAttribs(BOOL Global, AttrTypeSet* pAffectedAttrTypes) { Node* pGroupNode = FindFirstChild(); while(pGroupNode!=NULL) { // Karim 30/08/2000 // Non-optimisable attributes, like feathers and names, // must not be automatically deleted - only automatically delete optimisable ones. if (pGroupNode->IsAnAttribute() && ((NodeAttribute*)pGroupNode)->ShouldBeOptimized()) { NodeAttribute* pGroupAttr = (NodeAttribute*)pGroupNode; CCRuntimeClass* GrouptAttrType = pGroupAttr->GetAttributeType(); if (pAffectedAttrTypes==NULL || pAffectedAttrTypes->InSet(GrouptAttrType)) { // delete this group attr type from all child objects of this group // BUT if obj discards child attrs only delete attr if it also has same value for (Node* pNode=FindFirstChild(); pNode!=NULL; pNode=pNode->FindNext()) { if (pNode->IsAnObject()) { NodeRenderableInk* pObject = (NodeRenderableInk*)pNode; NodeAttribute* pDeadAttr = pObject->GetChildAttrOfType(GrouptAttrType); if (pDeadAttr!=NULL) { // This code used to only test the attribute for equality if pObject // returned TRUE from DiscardsAttributeChildren, otherwise it would // just assume that they are identical and delete it. // The DiscardAttributeChildren checks are now done elsewhere so // this code now just assumes it can delete any attributes that have // got this far. // This optimisation relies on the tree being in a "legal" state // at the start (i.e. correctly optimised) and also helps to correct // problems where attributes may have been incorrectly left on children // (though such "corrections" may change the appearance of the document). pDeadAttr->CascadeDelete(); delete pDeadAttr; } } } } } pGroupNode = pGroupNode->FindNext(); } // Do we need to delete any parent compound's attributes if (Global) { Node* pParent = FindParent(); if (pParent && (pParent->IsCompound())) { // We need to delete the parent's attributes first (Recursive bit) ((NodeRenderableInk*)pParent)->DeleteFactoredOutAttribs(Global, pAffectedAttrTypes); } } }
UINT32 GalleryLineDragInfo::GetCursorID(DragTarget* pDragTarget) { if (pDragTarget && pDragTarget->IS_KIND_OF(ViewDragTarget)) { PageDropInfo PageDropInfo; ((ViewDragTarget*)pDragTarget)->GetDropInfo(&PageDropInfo); NodeRenderableInk* pObjectHit = PageDropInfo.pObjectHit; ObjectDragTarget TargetHit = PageDropInfo.TargetHit; if (IS_A(pAttr, AttrStartArrow) || IS_A(pAttr, AttrEndArrow)) { if (pObjectHit && pObjectHit->IS_KIND_OF(NodePath)) { Path* pPath = &((NodePath*)pObjectHit)->InkPath; BOOL IsStart; if (DropStartOrEndArrow(pPath, PageDropInfo.DropPos, &IsStart)) { TargetHit = IsStart ? STARTCOL_TARGET : ENDCOL_TARGET; } } } ClickModifiers ClickMods = ClickModifiers::GetClickModifiers(); BOOL IsInside = ClickMods.Constrain; if (!IsInside && pObjectHit && pObjectHit->IsCompound()) { TargetHit = MANY_TARGET; } switch (TargetHit) { case FILL_TARGET: return IsInside ? _R(IDC_DROPINSIDEONLINE) : _R(IDC_CANDROPONLINE); case LINE_TARGET: return IsInside ? _R(IDC_DROPINSIDEONLINE) : _R(IDC_CANDROPONLINE); case STARTCOL_TARGET: return IsInside ? _R(IDC_DROPINSIDEONFILLSTART) : _R(IDC_CANDROPONFILLSTART); case ENDCOL_TARGET: return IsInside ? _R(IDC_DROPINSIDEONFILLEND) : _R(IDC_CANDROPONFILLEND); case MANY_TARGET: return IsInside ? _R(IDC_DROPINSIDEONLINE) : _R(IDC_CANDROPONLINE); case NO_TARGET: return _R(IDC_CANDROPONPAGE); default: break; }; return _R(IDC_CANDROPONPAGE); } return _R(IDC_CANTDROP); }
BOOL GalleryLineDragInfo::OnPageDrop(ViewDragTarget* pDragTarget) { PageDropInfo PageDropInfo; ((ViewDragTarget*)pDragTarget)->GetDropInfo(&PageDropInfo); NodeRenderableInk* pObjectHit = PageDropInfo.pObjectHit; NodeAttribute* Attrib = SourceItem->CreateNewAttribute(IsAnAdjustDrag()); if (Attrib == NULL) return FALSE; if (pObjectHit && (IS_A(Attrib, AttrStartArrow) || IS_A(Attrib, AttrEndArrow))) { if (!pObjectHit->IS_KIND_OF(NodePath)) { delete Attrib; return FALSE; } Path* pPath = &((NodePath*)pObjectHit)->InkPath; BOOL IsStart; if (!DropStartOrEndArrow(pPath, PageDropInfo.DropPos, &IsStart)) { delete Attrib; return FALSE; } Attrib = MakeStartOrEndArrow(Attrib, IsStart); } if (pObjectHit) { // Hit a Line Object, so apply attribute to it AttributeManager::ApplyAttribToNode(pObjectHit, Attrib); } else { // Didn't hit anything, so just set the current attribute AttributeManager::AttributeSelected(Attrib); } return TRUE; }
/******************************************************************************************** > CompoundNodeBlendBecomeA::CompoundNodeBlendBecomeA(BecomeAReason ThisReason, CCRuntimeClass* pClass, UndoableOperation* pOp, BOOL sel = TRUE, BOOL First = FALSE, NodeCompound * pNode ) : BecomeA(ThisReason, pClass, pOp, sel, First) Author: David_McClarnon (Xara Group Ltd) <*****@*****.**> Created: 21/2/2000 Inputs: See base class, plus the compound node we're using Outputs: Returns: Purpose: Constructor SeeAlso: - ********************************************************************************************/ BOOL CompoundNodeBlendBecomeA::PassBack(NodeRenderableInk* pNewNode, NodeRenderableInk* pCreatedByNode, CCAttrMap* pAttrMap) { ERROR2IF(pCreatedByNode == NULL, FALSE, "CompoundNodeBlendBecomeA - no created by node"); NodeRenderableInk * pNewCompound = NULL; if (pAttrMap == NULL) { CCAttrMap * pAppliedAttrMap = CCAttrMap::MakeAppliedAttrMap(pCreatedByNode); // pAppliedAttrMap->RemoveIndirectlyAppliedLayeredAttributes(pCreatedByNode,FALSE); pAttrMap = pAppliedAttrMap->Copy(); delete pAppliedAttrMap; } pNewCompound = m_pCompound->CreateTreeFromNodeToBlend(pNewNode, pAttrMap); if (pNewCompound && pNewCompound->IsCompound()) { ((NodeCompound *)pNewCompound)->SetBlendCreatedByNode(m_pCompound); TRACEUSER( "DavidM", _T("Count %d Num path nodes %d\n"), m_Count, m_NumPathNodes); if (m_Count == 0) { ((NodeCompound*)pNewCompound)->SetStartBlendGroupNode(); } if (m_Count == m_NumPathNodes-1) { ((NodeCompound*)pNewCompound)->SetEndBlendGroupNode(); } } m_Count++; return m_pBecomeA->PassBack(pNewCompound, pCreatedByNode, pAttrMap); }
BOOL NodeRenderableInk::LocaliseCommonAttrHelper(BOOL CheckForDuplicates, BOOL Global, AttrTypeSet* pAffectedAttrTypes, BOOL RecursiveForChildren) { // Do we need to globally optimise ? if (Global) { Node* pParent = FindParent(); if (pParent && (pParent->IsCompound())) { // We need to localise the parent's attributes first (Recursive bit) if (!(((NodeRenderableInk*)pParent)->LocaliseCommonAttrHelper(CheckForDuplicates, TRUE, pAffectedAttrTypes))) { return FALSE; // Failed } } } // add all necessary attrs to each child object in the group for (Node* Current=FindFirstChild(); Current!=NULL; Current=Current->FindNext()) { if (RecursiveForChildren && Current->IsCompound()) ((NodeRenderableInk*)Current)->LocaliseCommonAttributes(FALSE, FALSE, NULL, TRUE); if (Current->IsAnObject()) { NodeRenderableInk* pObject = (NodeRenderableInk*)Current; BOOL ChkForDups = CheckForDuplicates; Node* pRoot = RecursiveForChildren ? NULL : this; if(!pObject->MakeAttributeComplete(pRoot,ChkForDups,pAffectedAttrTypes)) return FALSE; // out of memory } } return TRUE; }
BOOL GalleryLineDragInfo::GetStatusLineText(String_256 * TheText, DragTarget* pDragTarget) { ERROR2IF(TheText==NULL,FALSE,"NULL string in GetStatusLineText()"); if (TheBitmap == NULL || TheBitmap->ActualBitmap == NULL) return FALSE; String_256 DragString(_R(IDS_SGLDRAG_DRAG_LINE_ATTR)); // "Dragging line attribute" DragString += String_8(_R(IDS_SGDFONTS_STAT_COLON_SEP)); //" : "; if (pDragTarget && pDragTarget->IS_KIND_OF(ViewDragTarget)) { PageDropInfo PageDropInfo; ((ViewDragTarget*)pDragTarget)->GetDropInfo(&PageDropInfo); NodeRenderableInk* pObjectHit = PageDropInfo.pObjectHit; ObjectDragTarget TargetHit = PageDropInfo.TargetHit; String_256 ObjectDesc = _R(IDS_SGLDRAG_THIS_OBJECT); // " this object"; if (pObjectHit) { ObjectDesc = pObjectHit->Describe(FALSE); } ClickModifiers ClickMods = ClickModifiers::GetClickModifiers(); BOOL IsInside = ClickMods.Constrain; if (!IsInside && pObjectHit && pObjectHit->IsCompound()) { TargetHit = MANY_TARGET; } switch (TargetHit) { case FILL_TARGET: case LINE_TARGET: case STARTCOL_TARGET: case ENDCOL_TARGET: DragString += String_64(_R(IDS_SGLDRAG_DROP_TO_APPLY)); // "Drop to apply this attribute to this "; DragString += ObjectDesc; if (IsInside) DragString += String_64(_R(IDS_SGLDRAG_SPACE_ALONE)); // " alone"; break; case MANY_TARGET: DragString += String_64(_R(IDS_SGLDRAG_DROP_TO_APPLY)); // "Drop to apply this attribute to this "; DragString += ObjectDesc; DragString += String_64(_R(IDS_SGLDRAG_CONTROL_DROP_INSIDE)); // "; Press 'Control' to drop 'Inside'"; break; case NO_TARGET: DragString += String_64(_R(IDS_SGLDRAG_DROP_CURRENT_ATTRIBUTE)); // "Drop to set the Current Attribute"; break; default: break; }; *TheText = DragString; return TRUE; } return FALSE; }
BOOL ColourDragInformation::OnPageDrop(ViewDragTarget* pDragTarget) { PageDropInfo ThePageDropInfo; ((ViewDragTarget*)pDragTarget)->GetDropInfo(&ThePageDropInfo); DocCoord DragPos = ThePageDropInfo.DropPos; ObjectDragTarget TargetType = ThePageDropInfo.TargetHit; NodeRenderableInk* ThisNode = ThePageDropInfo.pObjectHit; // DMc 4/10/99 // test for dragging & dropping onto a bevel/shadow/other compound node which // is grouped if (ThisNode) { if (ThisNode->FindParent()) { if (!ThisNode->FindParent()->PromoteHitTestOnChildrenToMe()) { // any compounds with their 'promotehittest' stuff set above me ? Node * pNode = ThisNode->FindParent(); while (pNode) { if (pNode->IsAnObject()) { if (pNode->PromoteHitTestOnChildrenToMe()) { ThisNode = (NodeRenderableInk *)pNode; } } pNode = pNode->FindParent(); } } } } NodeAttribute *Attrib = NULL; // Get a colour to apply to the Selected doc IndexedColour *IxColToApply = GetColourForDocument(NULL); // And make a DocColour to apply DocColour ColourToApply(COLOUR_TRANS); if (IxColToApply != NULL) ColourToApply.MakeRefToIndexedColour(IxColToApply); if (TargetType == LINE_TARGET) // apply a stroke colour { // Apply a stroke colour to the object(s) we have been dropped onto Attrib = new AttrStrokeColourChange; if (Attrib == NULL) return FALSE; ((AttrStrokeColourChange *)Attrib)->SetStartColour(&ColourToApply); AttributeManager::ApplyAttribToNode(ThisNode, Attrib); } else { // Apply a fill colour to the object(s) we have been dropped onto // This always used to be the case. If there were no objects then we // just set the current fill colour to be the new one. // Now, if no objects are the target then apply a page background colour // otherwise if control is held down set the current fill colour. BOOL Constrain = FALSE; // get object bounds DocRect pSimpleBounds; if (ThisNode) pSimpleBounds = ThisNode->GetBoundingRect(); else { pSimpleBounds.MakeEmpty(); // See if the control key is pressed Constrain = KeyPress::IsConstrainPressed(); } // No node(s) are targetted so see if the constrain key is pressed or not if (ThisNode == NULL && Constrain) { // Use the colour to set the background // We should use the document given to us by the page info class OpBackgroundParam Param; Param.pDocColour = &ColourToApply; Param.pDoc = ThePageDropInfo.pDoc; Param.pSpread = ThePageDropInfo.pSpread; // Obtain a pointer to the op descriptor for the create operation OpDescriptor* pOpDesc = OpDescriptor::FindOpDescriptor(OPTOKEN_BACKGROUND); // Invoke the operation, passing in our parameters pOpDesc->Invoke(&Param); } else { // Apply the colour either to the targetted node(s) or as the current // fill colour, if no nodes are targetted. Attrib = new AttrColourDrop(DragPos, pSimpleBounds, ColourToApply); if (Attrib == NULL) return FALSE; if (ThisNode) ((AttrColourDrop*)Attrib)->SetObjectDroppedOn(ThisNode); AttributeManager::ApplyAttribToNode(ThisNode, Attrib); } } return TRUE; }
BOOL ColourDragInformation::GetStatusLineText(String_256 * TheText, DragTarget* pDragTarget) { ERROR2IF(TheText==NULL,FALSE,"NULL string in GetStatusLineText()"); String_256 DragString(_R(IDS_DRAGCOL_DRAGGING_COLOUR)); // "Dragging colour '"); if (TheColour.IsTransparent()) DragString = _R(IDS_DRAGCOL_DRAGGING_NO_COLOUR); // "Dragging 'no colour' : "; else { IndexedColour *TheIxCol = GetInitiallyDraggedColour(); if (TheIxCol != NULL) DragString += *(TheIxCol->GetName()); // Document IndexedColour else DragString += ColourName; // Library colour DragString += String_16(_R(IDS_DRAGCOL_DRAGGING_COLOUR_RIGHT_BIT)); // "' : "; } if (pDragTarget->IS_KIND_OF(ViewDragTarget)) { PageDropInfo PageDropInfo; ((ViewDragTarget*)pDragTarget)->GetDropInfo(&PageDropInfo); NodeRenderableInk* pObjectHit = PageDropInfo.pObjectHit; ObjectDragTarget TargetHit = PageDropInfo.TargetHit; String_256 ObjectDesc = _R(IDS_DRAGCOL_THIS_OBJECT); //" this object"; if (pObjectHit) { ObjectDesc = pObjectHit->Describe(FALSE); } ClickModifiers ClickMods = ClickModifiers::GetClickModifiers(); BOOL IsInside = ClickMods.Constrain; if (!IsInside && pObjectHit && pObjectHit->IsCompound()) { TargetHit = MANY_TARGET; } switch (TargetHit) { case FILL_TARGET: DragString += String_64(_R(IDS_DRAGCOL_DROP_SET_FILL)); // "Drop to set the fill colour of this "; DragString += ObjectDesc; if (IsInside) DragString += String_64(_R(IDS_DRAGCOL_ALONE)); // " alone"; break; case LINE_TARGET: DragString += String_64(_R(IDS_DRAGCOL_DROP_SET_LINE)); //"Drop to set the line colour of this "; DragString += ObjectDesc; if (IsInside) DragString += String_64(_R(IDS_DRAGCOL_ALONE)); // " alone"; break; case STARTCOL_TARGET: DragString += String_64(_R(IDS_DRAGCOL_DROP_SET_FILL_START)); //"Drop to set the fill start colour of this "; DragString += ObjectDesc; break; case ENDCOL_TARGET: DragString += String_64(_R(IDS_DRAGCOL_DROP_SET_FILL_END)); //"Drop to set the fill end colour of this "; DragString += ObjectDesc; break; case ENDCOL2_TARGET: DragString += String_64(_R(IDS_DRAGCOL_DROP_SET_FILL_END2)); //"Drop to set the fill end colour of this "; DragString += ObjectDesc; break; case ENDCOL3_TARGET: DragString += String_64(_R(IDS_DRAGCOL_DROP_SET_FILL_END3)); //"Drop to set the fill end colour of this "; DragString += ObjectDesc; break; case MANY_TARGET: DragString += String_64(_R(IDS_DRAGCOL_DROP_SET_FILL)); //"Drop to set the fill colour of this "; DragString += ObjectDesc; DragString += String_64(_R(IDS_DRAGCOL_PRESS_CONTROL)); // "; Press 'Control' to drop 'Inside'"; break; case NO_TARGET: if (IsInside) { DragString += String_256(_R(IDS_DRAGCOL_DROP_SETPAGEBACKGROUND)); // "Drop to set the fill colour of the page background"; } else { DragString += String_64(_R(IDS_DRAGCOL_DROP_SET_CURRENT_FILL_COLOUR)); // "Drop to set the 'current fill colour' attribute"; } break; }; *TheText = DragString; return TRUE; } return FALSE; }
BOOL ViewContextMenu::BuildOverView(Spread* pSpread, DocCoord ClickPos, ClickModifiers ClickMods) { ERROR2IF(pSpread==NULL,FALSE,"BuildOverView passed NULL spread pointer"); BOOL ok = TRUE; //---------------------------------------------// // First ask selected nodes if they want to supply items and if so show the blob menu... if (AskBlobsForItems(pSpread, ClickPos, ClickMods)) { // If they supply items then we won't add the normal items about the selection return TRUE; } //---------------------------------------------// // Find what the click was on and show the object menu... // NodeRenderableInk* pHitNode = NodeRenderableInk::FindSimpleAtPoint(pSpread, ClickPos); NodeRenderableInk* pHitNode = FindNodeAtPoint(pSpread,ClickPos); if (pHitNode) { BOOL HitNodeIsGuideline = IS_A(pHitNode,NodeGuideline); if (!HitNodeIsGuideline) // BODGE so that guidelines (which can't be selected) can have a pop-up menu { // Now find out if there's just one node selected and if so ask it for some items... SelRange* pSel = GetApplication()->FindSelection(); if (pSel!=NULL) { Node* pNode = pSel->FindFirst(); if (pNode && pSel->FindNext(pNode) == NULL) { // There's only one object selected so let's ask it about itself... ((NodeRenderableInk*) pNode)->OnNodePopUp(pSpread, ClickPos, this); } } } else pHitNode->OnNodePopUp(pSpread, ClickPos, this); if (!HitNodeIsGuideline) // BODGE to stop guideline pop-up menus having irrelevant menu items { // Build the rest of the standard object menu... // Effect commands ok = ok && BuildEffectCommands(); // Edit commands ok = ok && BuildTransferCommands(TRUE); // Arrange commands // WEBSTER-ranbirr-13/11/96 // #ifndef WEBSTER ok = ok && BuildCommand(OPTOKEN_MAKE_SHAPES); // #endif //webster ok = ok && BuildCommand(OPTOKEN_CONVERTTOBITMAP); // WEBSTER-ranbirr-13/11/96 // Now Taken out by vector stroking code Neville 2/10/97 #ifdef VECTOR_STROKING // ok = ok && BuildCommand(OPTOKEN_MAKE_STROKE); #endif // VECTOR_STROKING ok = ok && BuildCommand(OPTOKEN_COMBINESHAPES,TRUE); MenuItem* pCombineRoot = GetLastItem(); // WEBSTER-ranbirr-13/11/96 // #ifndef WEBSTER ok = ok && BuildCommand(OPTOKEN_ADDSHAPES, FALSE, pCombineRoot); ok = ok && BuildCommand(OPTOKEN_SUBTRACTSHAPES, FALSE, pCombineRoot); ok = ok && BuildCommand(OPTOKEN_INTERSECTSHAPES, FALSE, pCombineRoot); ok = ok && BuildCommand(OPTOKEN_SLICESHAPES, FALSE, pCombineRoot); // #endif //webster #ifndef WEBSTER // Imagesetting submenu ok = ok && BuildCommand(OPTOKEN_IMAGESETTING, TRUE); pCombineRoot = GetLastItem(); ok = ok && BuildCommand(OPTOKEN_OVERPRINTFILL, FALSE, pCombineRoot); ok = ok && BuildCommand(OPTOKEN_OVERPRINTLINE, TRUE, pCombineRoot); ok = ok && BuildCommand(OPTOKEN_PRINTONALLPLATES, FALSE, pCombineRoot); #endif //webster // Utils commands ok = ok && BuildCommand(OPTOKEN_WEBADDRESSDLG); ok = ok && BuildCommand(OPTOKEN_COLOUREDITDLG, TRUE); PORTNOTE("other", "Removed brush edit dialog from popup menu") #ifndef EXCLUDE_FROM_XARALX ok = ok && BuildCommand(OPTOKEN_BRUSHEDIT_DLG); #endif ok = ok && BuildCommand(OPTOKEN_SELECTBRUSH); } return ok; } //---------------------------------------------// // If on white space then show the white space menu... // Window commands // MENUITEM OPTOKEN_TOOLBARDLG // MENUITEM OPTOKEN_VIEWCOLOURBAR // MENUITEM OPTOKEN_VIEWSTATUSBAR // MENUITEM OPTOKEN_VIEWSCROLLBARS // WEBSTER-ranbirr-13/11/96 #ifndef WEBSTER ok = ok && BuildCommand(OPTOKEN_WINDOWNEWVIEW); ok = ok && BuildCommand(OPTOKEN_VIEWFULLSCREEN,TRUE); #else ok = ok && BuildCommand(OPTOKEN_WINDOWNEWVIEW,TRUE); #endif //webster // Paste option - we don't need to do the // BuildTransferCommands as the Cut and Copy operations // are never applicable here... matt-23/08/2000 ok = ok && BuildCommand(OPTOKEN_PASTE, TRUE); // View quality ok = ok && BuildCommand(OPTOKEN_WINDOWQUALITY,FALSE); MenuItem* pQualityRoot = GetLastItem(); ok = ok && BuildCommand(OPTOKEN_QUALITYANTIALIASED, FALSE, pQualityRoot); ok = ok && BuildCommand(OPTOKEN_QUALITYNORMAL, FALSE, pQualityRoot); ok = ok && BuildCommand(OPTOKEN_QUALITYSIMPLE, FALSE, pQualityRoot); ok = ok && BuildCommand(OPTOKEN_QUALITYOUTLINE, FALSE, pQualityRoot); // View commands // WEBSTER-ranbirr-13/11/96 #ifndef WEBSTER ok = ok && BuildCommand(OPTOKEN_SHOWGRID); ok = ok && BuildCommand(OPTOKEN_SHOWGUIDES,TRUE); #else ok = ok && BuildCommand(OPTOKEN_SHOWGRID,TRUE); #endif //webster // WEBSTER-ranbirr-13/11/96 #ifndef WEBSTER ok = ok && BuildCommand(OPTOKEN_SNAPTOGRID); ok = ok && BuildCommand(OPTOKEN_SNAPTOGUIDES); ok = ok && BuildCommand(OPTOKEN_SNAPTOOBJECTS,TRUE); #else ok = ok && BuildCommand(OPTOKEN_SNAPTOGRID,TRUE); #endif //webster ok = ok && BuildCommand(OPTOKEN_DELETEPAGEBACKGROUND); // Page commands (almost "Properties...") ok = ok && BuildCommand(OPTOKEN_PAGESIZEDLG); return ok; }