/** * Adds a layer to the layer list. * If there is already a layer with the same name, no layer is * added. In that case the layer passed to the methode will be deleted! * If no layer was active so far, the new layer becomes the active one. * * Listeners are notified. */ void RS_LayerList::add(RS_Layer* layer) { RS_DEBUG->print("RS_LayerList::addLayer()"); if (layer==NULL) { return; } // check if layer already exists: RS_Layer* l = find(layer->getName()); if (l==NULL) { layers.append(layer); // notify listeners for (uint i=0; i<layerListListeners.count(); ++i) { RS_LayerListListener* l = layerListListeners.at(i); l->layerAdded(layer); } setModified(true); // if there was no active layer so far, activate this one. if (activeLayer==NULL) { activate(layer); } } else { // if there was no active layer so far, activate this one. if (activeLayer==NULL) { activate(l); } l->setPen(layer->getPen()); delete layer; layer = NULL; } }
/** * Removes a layer from the list. * Listeners are notified after the layer was removed from * the list but before it gets deleted. */ void RS_LayerList::remove(RS_Layer* layer) { RS_DEBUG->print("RS_LayerList::removeLayer()"); if (layer==NULL) { return; } // here the layer is removed from the list but not deleted #if QT_VERSION < 0x040400 emu_qt44_removeOne(layers, layer); #else layers.removeOne(layer); #endif for (int i=0; i<layerListListeners.size(); ++i) { RS_LayerListListener* l = layerListListeners.at(i); l->layerRemoved(layer); } setModified(true); // activate an other layer if necessary: if (activeLayer==layer) { activate(layers.first()); } // now it's save to delete the layer delete layer; }
/** * Freezes or defreezes all layers. * * @param freeze true: freeze, false: defreeze */ void RS_LayerList::freezeAll(bool freeze) { for (uint l=0; l<count(); l++) { at(l)->freeze(freeze); } for (uint i=0; i<layerListListeners.count(); ++i) { RS_LayerListListener* l = layerListListeners.at(i); l->layerToggled(NULL); } }
/** * Locks or unlocks the given layer. * Listeners are notified. */ void RS_LayerList::toggleLock(RS_Layer* layer) { if (layer==NULL) { return; } layer->toggleLock(); // Notify listeners: for (uint i=0; i<layerListListeners.count(); ++i) { RS_LayerListListener* l = layerListListeners.at(i); l->layerToggled(layer); } }
/** * Freezes or defreezes all layers. * * @param freeze true: freeze, false: defreeze */ void RS_LayerList::freezeAll(bool freeze) { for (unsigned l=0; l<count(); l++) { if (at(l)->isVisibleInLayerList()) { at(l)->freeze(freeze); } } setModified(true); for (int i=0; i<layerListListeners.size(); ++i) { RS_LayerListListener* l = layerListListeners.at(i); l->layerToggled(NULL); } }
/** * Swith printing for the given layer on / off. * Listeners are notified. */ void RS_LayerList::togglePrint(RS_Layer* layer) { if (layer==NULL) { return; } layer->togglePrint(); setModified(true); // Notify listeners: for (int i=0; i<layerListListeners.size(); ++i) { RS_LayerListListener* l = layerListListeners.at(i); l->layerToggledPrint(layer); } }
/** * Changes a layer's attributes. The attributes of layer 'layer' * are copied from layer 'source'. * Listeners are notified. */ void RS_LayerList::edit(RS_Layer* layer, const RS_Layer& source) { if (layer==NULL) { return; } *layer = source; for (int i=0; i<layerListListeners.size(); ++i) { RS_LayerListListener* l = layerListListeners.at(i); l->layerEdited(layer); } setModified(true); }
/** * Adds a layer to the layer list. * If there is already a layer with the same name, no layer is * added. In that case the layer passed to the method will be deleted! * If no layer was active so far, the new layer becomes the active one. * * Listeners are notified. */ void RS_LayerList::add(RS_Layer* layer) { RS_DEBUG->print("RS_LayerList::addLayer()"); if (layer==NULL) { return; } // check if layer already exists: RS_Layer* l = find(layer->getName()); if (l==NULL) { layers.append(layer); this->sort(); // notify listeners for (int i=0; i<layerListListeners.size(); ++i) { RS_LayerListListener* l = layerListListeners.at(i); l->layerAdded(layer); } setModified(true); // if there was no active layer so far, activate this one. if (activeLayer==NULL) { activate(layer); } } else { // if there was no active layer so far, activate this one. if (activeLayer==NULL) { activate(l); } l->freeze( layer->isFrozen()); l->lock( layer->isLocked()); l->setPrint( layer->isPrint()); l->setConverted( layer->isConverted()); l->setConstruction( layer->isConstruction()); l->visibleInLayerList( layer->isVisibleInLayerList()); l->setPen(layer->getPen()); delete layer; layer = NULL; } }
/** * Activates the given layer. * * @param notify Notify listeners. */ void RS_LayerList::activate(RS_Layer* layer, bool notify) { RS_DEBUG->print("RS_LayerList::activate notify: %d begin", notify); /*if (layer!=NULL) { RS_DEBUG->print("RS_LayerList::activate: %s", layer->getName().latin1()); } else { RS_DEBUG->print("RS_LayerList::activate: NULL"); }*/ activeLayer = layer; if (notify) { for (int i=0; i<layerListListeners.size(); ++i) { RS_LayerListListener* l = layerListListeners.at(i); l->layerActivated(activeLayer); RS_DEBUG->print("RS_LayerList::activate listener notified"); } } RS_DEBUG->print("RS_LayerList::activate end"); }
/** * Switches on / off the given layer. * Listeners are notified. */ void RS_LayerList::toggle(RS_Layer* layer) { if (!layer) { RS_DEBUG->print(RS_Debug::D_ERROR, "RS_LayerList::toggle: nullptr layer"); return; } // set flags layer->toggle(); setModified(true); // Notify listeners: for (auto *i : layerListListeners) { if (!i) { RS_DEBUG->print(RS_Debug::D_WARNING, "RS_LayerList::toggle: nullptr layer listener"); continue; } RS_LayerListListener *l = (RS_LayerListListener *)i; l->layerToggled(layer); } }
/** * Removes a layer from the list. * Listeners are notified after the layer was removed from * the list but before it gets deleted. */ void RS_LayerList::remove(RS_Layer* layer) { RS_DEBUG->print("RS_LayerList::removeLayer()"); if (layer==NULL) { return; } // here the layer is removed from the list but not deleted layers.remove(layer); for (uint i=0; i<layerListListeners.count(); ++i) { RS_LayerListListener* l = layerListListeners.at(i); l->layerRemoved(layer); } setModified(true); // activate an other layer if necessary: if (activeLayer==layer) { activate(layers.first()); } // now it's save to delete the layer delete layer; }