BOOL LayerManager::ReadSpreadLayerDetails() { ENSURE(CurrentSpread != NULL, "Trying to read the details of a NULL current spread"); ENSURE(LyrDetList.IsEmpty(), "Layer details list not empty"); LyrDetails* LayerDet; Layer* Current = CurrentSpread->FindFirstLayer(); while (Current != NULL) { // Found a layer so record the details LayerDet = new LyrDetails(); if (LayerDet == NULL) { // Inform an error - The error will already be set by new InformError(); return FALSE; } LayerDet->Status = (Current)->GetLayerStatus(); // record the layer status LayerDet->m_pLayer = Current; LayerDet->New = FALSE; LayerDet->Deleted = FALSE; LyrDetList.AddTail(LayerDet); // Add the layers details to the tail of the layer // detail list, so preserving the correct z-order. Current = Current->FindNextLayer(); } ENSURE(!LyrDetList.IsEmpty(), "No layers found on the current spread"); return TRUE; }
BOOL LayerManager::LayerDetailsChanged() { LyrDetails* CurrentLyrDet = (LyrDetails*)LyrDetList.GetHead(); Layer* CurrentLyr = CurrentSpread->FindFirstLayer(); // Get the first layer node ENSURE(CurrentLyrDet != NULL, "There are no layer details on the layer details list"); ENSURE(CurrentLyr != NULL, "The LayerManager's current spread has no layers"); while (CurrentLyrDet != NULL) { // We ignore deleted new layers because they don't change anything if (!(CurrentLyrDet->New && CurrentLyrDet->Deleted)) { if (CurrentLyr != CurrentLyrDet->m_pLayer) // z-order change { return TRUE; } else if ((CurrentLyrDet->New) || (CurrentLyrDet->Deleted)) { return TRUE; // New layer created or existing layer deleted } else if (!(CurrentLyrDet->Status == CurrentLyr->GetLayerStatus())) { // The layer's status has changed return TRUE; } CurrentLyrDet = (LyrDetails*)(LyrDetList.GetNext(CurrentLyrDet)); CurrentLyr = (CurrentLyr->FindNextLayer()); } else CurrentLyrDet = (LyrDetails*)(LyrDetList.GetNext(CurrentLyrDet)); } // Sanity check ENSURE (CurrentLyr == NULL, "CurrentLyr ptr should be NULL"); return FALSE; // Nothing has changed }