IndexedColour *ColourDragInformation::GetColourForDocument(Document *pDestDoc) { // If no document supplied, assume the selected docuemnt is the destination if (pDestDoc == NULL) pDestDoc = Document::GetSelected(); // If there is no destination document, or if the colour is transparent, return NULL if (pDestDoc == NULL || TheColour.IsTransparent()) return(NULL); // If it's a document colour and already in the destination document, return it if (pParentDoc == pDestDoc) return(TheColour.FindParentIndexedColour()); // Copy the dragged colour into a temporary DocColour DocColour Temp = TheColour; IndexedColour *TempIxCol = NULL; // Check if we've got an IndexedColour to use... if (Temp.FindParentIndexedColour() == NULL) { // It's a library colour, so we must create a new IndexedColour to use TempIxCol = new IndexedColour(Temp); if (TempIxCol == NULL) return(NULL); // Failure - return "no colour" TempIxCol->SetName(ColourName); if (LibColIsSpot) // If a spot colour, make it so TempIxCol->SetLinkedParent(TempIxCol->FindLastLinkedParent(), COLOURTYPE_SPOT); // And make the DocColour reference it Temp.MakeRefToIndexedColour(TempIxCol); } // Ensure the colour (or a safe equivalent) is in the dest doc, by copying/merging it ColourManager::EnsureColourIsInDocument(pParentDoc, pDestDoc, &Temp); // And delete any temporary IndexedColour we created if (TempIxCol != NULL) delete TempIxCol; // And finally, return the resulting colour return(Temp.FindParentIndexedColour()); }
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 }