BOOL LoadBrushDirect::OnLoadDocument(Document* pDoc) { ERROR3IF(pDoc==NULL,"No doc pointer during PrintMarksMan::ConvertAllDocColours!"); Node *CurNode = Node::DocFindFirstDepthFirst(pDoc); Node *NextNode; while (CurNode !=NULL) { // We may be about to chop this node out of the tree, so get the next node now NextNode = CurNode->DocFindNextDepthFirst(); // Use to scan the colour fields of the attribute. UINT32 Context = 0; DocColour *pColour; if (CurNode->IsAnAttribute()) { NodeAttribute *pNodeAttr = (NodeAttribute *) CurNode; // Get the next colour field from the attribute pColour = pNodeAttr->EnumerateColourFields(Context++); while (pColour != NULL) { // For each colour field, make sure the colour is a local DocColour so that // the sub-tree is entirely stand-alone if (pColour->FindParentIndexedColour() != NULL) { ColourGeneric ColDef; ColourContext *cc = ColourManager::GetColourContext(pColour->GetColourModel()); ERROR3IF(cc == NULL, "Can't find colour context?!"); // Get the IndexedColour definition as a standalone colour definition cc->ConvertColour(pColour->FindParentIndexedColour(), &ColDef); // Make the DocColour into a simple standalone "lookalike" of the parent colour *pColour = DocColour(pColour->GetColourModel(), &ColDef); } pColour = pNodeAttr->EnumerateColourFields(Context++); } } CurNode = NextNode; } // All is well we hope. return TRUE; }
BOOL ColourGallery::DoRedefineItem(ListItem *ItemToRedefine) { // Bring up the colour editor on the new colour if (ItemToRedefine != NULL) DoSpecialClick(ItemToRedefine); return(TRUE); #if FALSE ColourList *ColList = ColourManager::GetColourList(); if (ColList == NULL) return(FALSE); DocColour *SourceColour = NULL; if (ColourManager::GetCurrentLineAndFillColours(NULL, &SourceColour)) SourceColour = NULL; // Sourcecolour returned was current attr - don't use if (SourceColour == NULL) { // Nothing to copy to redefine the colour. Report this to the user InformError(_R(IDE_COLGAL_NOSOURCE), _R(IDS_OK)); return(FALSE); } // We have a colour to copy... INT32 Result; IndexedColour *ParentColour = SourceColour->FindParentIndexedColour(); if (ParentColour == NULL) { Result = AskQuestion(_R(IDS_COLGAL_QREDEFINE), _R(IDS_COLGAL_YREDEFINE), _R(IDS_CANCEL)); if (Result == 1) // The user said to go ahead... { // Source is an immediate colour - generate an IndexedColour from its definition ColourGeneric Bob; SourceColour->GetSourceColour(&Bob); *((IndexedColour *)ItemToRedefine) = IndexedColour(SourceColour->GetColourModel(), &Bob); return(TRUE); } return(FALSE); // The user cancelled } if (ParentColour == (IndexedColour *) ItemToRedefine) { InformError(_R(IDE_COLGAL_SAMEITEM)); return(FALSE); } Result = 3; // Default to making a copy of the colour { IndexedColour *NewCol = (IndexedColour *)ItemToRedefine; *NewCol = *ParentColour; if (ParentColour->IsNamed()) { String_128 NewName; // Accomodate overflow- SetName clips this to String_64 NewName.MakeMsg(_R(IDS_COPYOFCOLOUR), (TCHAR *) (*ParentColour->GetName())); ((IndexedColour *)ItemToRedefine)->SetName(NewName); // If the parent was named, then remember it as the 'parent' colour, even // if it was not tint/linked. This will allow the colour editor to default // to linking to a useful colour if tint/link is turned on at a later date. NewCol->SetLinkedParent(ParentColour, NewCol->GetType()); } } if (Result != 0) // Finally, inform the world if this item has changed ColourManager::ColourHasChanged(GetGalleryDocument(), ColList, (IndexedColour *) ItemToRedefine); return(Result != 0); // if Cancelled, return FALSE (no change), else TRUE #endif }