void RS_ActionLayersEdit::trigger() { RS_DEBUG->print("RS_ActionLayersEdit::trigger"); RS_Layer* layer = NULL; if (graphic!=NULL) { layer = RS_DIALOGFACTORY->requestEditLayerDialog(graphic->getLayerList()); if (layer!=NULL) { graphic->editLayer(graphic->getActiveLayer(), *layer); // update updateable entities on the layer that has changed for (RS_Entity* e=graphic->firstEntity(RS2::ResolveNone); e!=NULL; e=graphic->nextEntity(RS2::ResolveNone)) { RS_Layer* l = e->getLayer(); if (l!=NULL && l->getName()==layer->getName()) { e->update(); } } } } finish(); graphicView->redraw(); }
QVariant QG_LayerModel::data ( const QModelIndex & index, int role ) const { if (!index.isValid() || index.row() >= listLayer.size()) return QVariant(); RS_Layer* lay = listLayer.at(index.row()); if (role ==Qt::DecorationRole) { if (index.column() == VISIBLE) { if (!lay->isFrozen()) { return layerVisible; } else { return layerHidden; } } if (index.column() == LOCKED) { if (!lay->isLocked()) { return layerDefreeze; } else { return layerFreeze; } } } if (role ==Qt::DisplayRole && index.column() == NAME) { return lay->getName(); } //Other roles: return QVariant(); }
/** * Shows a dialog that asks the user if the selected layer * can be removed. Doesn't remove the layer. This is up to the caller. * * @return a pointer to the layer that should be removed. */ RS_Layer* QG_DialogFactory::requestLayerRemovalDialog(RS_LayerList* layerList) { RS_Layer* layer = nullptr; if (!layerList) { RS_DEBUG->print(RS_Debug::D_WARNING, "QG_DialogFactory::requestLayerRemovalDialog(): " "layerList is nullptr"); return nullptr; } /* if (!layerList) { if (container && container->rtti()==RS2::EntityGraphic) { layerList = (RS_LayerList*)container; } else { return nullptr; } }*/ // Layer for parameter livery layer = layerList->getActive(); if (layer) { if (layer->getName()!="0") { QMessageBox msgBox( QMessageBox::Warning, QMessageBox::tr("Remove Layer"), QMessageBox::tr("Layer \"%1\" and all " "entities on it will be removed.\n" "This action can NOT be undone.") .arg(layer->getName()), QMessageBox::Ok | QMessageBox::Cancel); if (msgBox.exec()==QMessageBox::Ok) {} else { layer = nullptr; } } else { QMessageBox::information(parent, QMessageBox::tr("Remove Layer"), QMessageBox::tr("Layer \"%1\" can never " "be removed.") .arg(layer->getName()), QMessageBox::Ok); } } return layer; }
/** * Loads the given pattern file into this pattern. * Entities other than lines are ignored. * * @param filename File name of the pattern file (without path and * extension or full path. */ bool RS_Pattern::loadPattern() { if (loaded) { return true; } RS_DEBUG->print("RS_Pattern::loadPattern"); QString path; // Search for the appropriate pattern if we have only the name of the pattern: if (!fileName.toLower().contains(".dxf")) { QStringList patterns = RS_SYSTEM->getPatternList(); QFileInfo file; for (QStringList::Iterator it = patterns.begin(); it!=patterns.end(); it++) { if (QFileInfo(*it).baseName().toLower()==fileName.toLower()) { path = *it; RS_DEBUG->print("Pattern found: %s", path.toLatin1().data()); break; } } } // We have the full path of the pattern: else { path = fileName; } // No pattern paths found: if (path.isEmpty()) { RS_DEBUG->print("No pattern \"%s\"available.", fileName.toLatin1().data()); return false; } RS_Graphic* gr = new RS_Graphic(); // TODO: Find out why the new dxf filter doesn't work for patterns: RS_FILEIO->fileImport(*gr, path, RS2::FormatDXF1); for (RS_Entity* e=gr->firstEntity(); e!=NULL; e=gr->nextEntity()) { if (e->rtti()==RS2::EntityLine || e->rtti()==RS2::EntityArc) { RS_Layer* l = e->getLayer(); RS_Entity* cl = e->clone(); cl->reparent(this); if (l!=NULL) { cl->setLayer(l->getName()); } addEntity(cl); } } delete gr; loaded = true; RS_DEBUG->print("RS_Pattern::loadPattern: OK"); return true; }
/** * Loads the given pattern file into this pattern. * Entities other than lines are ignored. * * @param filename File name of the pattern file (without path and * extension or full path. */ bool RS_Pattern::loadPattern() { if (loaded) { return true; } RS_DEBUG->print("RS_Pattern::loadPattern"); QString path; // Search for the appropriate pattern if we have only the name of the pattern: if (!fileName.toLower().contains(".dxf")) { QStringList patterns = RS_SYSTEM->getPatternList(); QFileInfo file; for (QStringList::Iterator it = patterns.begin(); it!=patterns.end(); it++) { if (QFileInfo(*it).baseName().toLower()==fileName.toLower()) { path = *it; RS_DEBUG->print("Pattern found: %s", path.toLatin1().data()); break; } } } // We have the full path of the pattern: else { path = fileName; } // No pattern paths found: if (path.isEmpty()) { RS_DEBUG->print("No pattern \"%s\"available.", fileName.toLatin1().data()); return false; } RS_Graphic gr; RS_FileIO::instance()->fileImport(gr, path); for(auto e: gr){ if (e->rtti()==RS2::EntityLine || e->rtti()==RS2::EntityArc) { RS_Layer* l = e->getLayer(); RS_Entity* cl = e->clone(); cl->reparent(this); if (l) { cl->setLayer(l->getName()); } addEntity(cl); } } loaded = true; RS_DEBUG->print("RS_Pattern::loadPattern: OK"); return true; }
/** * Sets the layer shown in the combobox to the given layer. */ void QG_LayerBox::setLayer(RS_Layer& layer) { currentLayer = &layer; //if (layer.getName()=="ByBlock" && showByBlock) { // setCurrentItem(0); //} else { int i = findText(layer.getName()); setCurrentIndex(i); //} //if (currentItem()!=7+(int)showByBlock*2) { slotLayerChanged(currentIndex()); //} }
/** * Initialisation (called manually only once). * * @param layerList Layer list which provides the layer names that are * available. * @param showByBlock true: Show attribute ByBlock. */ void QG_LayerBox::init(RS_LayerList& layerList, bool showByBlock, bool showUnchanged) { this->showByBlock = showByBlock; this->showUnchanged = showUnchanged; this->layerList = &layerList; if (showUnchanged) { addItem(tr("- Unchanged -")); } for (unsigned i=0; i<layerList.count(); ++i) { RS_Layer* lay = layerList.at(i); if (lay!=NULL && (lay->getName()!="ByBlock" || showByBlock)) { addItem(lay->getName()); } } connect(this, SIGNAL(activated(int)), this, SLOT(slotLayerChanged(int))); setCurrentIndex(0); slotLayerChanged(currentIndex()); }
/** * Selects all entities on the given layer. */ void RS_Selection::selectLayer(RS_Entity* e) { if (e==NULL) { return; } bool select = !e->isSelected(); RS_Layer* layer = e->getLayer(true); if (layer==NULL) { return; } RS_String layerName = layer->getName(); selectLayer(layerName, select); }
/** * @return Pointer to the layer with the given name or * \p NULL if no such layer was found. */ RS_Layer* RS_LayerList::find(const QString& name) { //RS_DEBUG->print("RS_LayerList::find begin"); RS_Layer* ret = NULL; for (int i=0; i<layers.size(); ++i) { RS_Layer* l = layers.at(i); if (l->getName()==name) { ret = l; break; } } //RS_DEBUG->print("RS_LayerList::find end"); return ret; }
/** * @return Index of the given layer in the layer list or -1 if the layer * was not found. */ int RS_LayerList::getIndex(const QString& name) { //RS_DEBUG->print("RS_LayerList::find begin"); int ret = -1; for (int i=0; i<layers.size(); i++) { RS_Layer* l = layers.at(i); if (l->getName()==name) { ret = i; break; } } //RS_DEBUG->print("RS_LayerList::find end"); return ret; }
QVariant QG_LayerModel::data ( const QModelIndex & index, int role ) const { if (!index.isValid() || index.row() >= listLayer.size()) return QVariant(); RS_Layer* lay = listLayer.at(index.row()); if (role ==Qt::DecorationRole) { switch(index.column()){ case VISIBLE: if (!lay->isFrozen()) { return layerVisible; } return layerHidden; case LOCKED: if (!lay->isLocked()) { return layerDefreeze; } return layerFreeze; case PRINT: return layerPrint.pixmap(QSize(16,16), lay->isPrint() ? QIcon::Normal : QIcon::Disabled, QIcon::On); case CONSTRUCTION: return layerConstruction.pixmap(QSize(16,16), lay->isConstruction() ? QIcon::Normal : QIcon::Disabled, QIcon::On); case COLOR_SAMPLE: { return createColorSampleForLayer(lay); } default: break; } } if (role ==Qt::DisplayRole && index.column() == NAME) { return lay->getName(); } //Other roles: return QVariant(); }
/** * Selects all entities on the given layer. */ void RS_Selection::selectLayer(const RS_String& layerName, bool select) { for (RS_Entity* en=container->firstEntity(); en!=NULL; en=container->nextEntity()) { if (en!=NULL && en->isVisible() && en->isSelected()!=select && (en->getLayer()==NULL || en->getLayer()->isLocked()==false)) { RS_Layer* l = en->getLayer(true); if (l!=NULL && l->getName()==layerName) { if (graphicView!=NULL) { graphicView->deleteEntity(en); } en->setSelected(select); if (graphicView!=NULL) { graphicView->drawEntity(en); } } } } }
QVariant QG_LayerModel::data ( const QModelIndex & index, int role ) const { if (!index.isValid() || index.row() >= listLayer.size()) return QVariant(); RS_Layer* lay = listLayer.at(index.row()); if (role ==Qt::DecorationRole) { switch(index.column()){ case VISIBLE: if (!lay->isFrozen()) { return layerVisible; } else { return layerHidden; } case LOCKED: if (!lay->isLocked()) { return layerDefreeze; } else { return layerFreeze; } case HelpLayer: return helpLayer.pixmap(QSize(20,20),lay->isHelpLayer() ? QIcon::Disabled: QIcon::Normal, QIcon::On); default: break; } } if (role ==Qt::DisplayRole && index.column() == NAME) { return lay->getName(); } //Other roles: return QVariant(); }