| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| |
|
| | #include <QMessageBox> |
| |
|
| | #include "lc_layerdialog_ex.h" |
| | #include "lc_layertreeitem.h" |
| | #include "lc_layertreemodel.h" |
| | #include "lc_layertreemodel_options.h" |
| | #include "rs_layer.h" |
| | #include "rs_layerlist.h" |
| |
|
| | LC_LayerDialogEx::LC_LayerDialogEx(QWidget* parent, const QString& name, LC_LayerTreeModel* model, LC_LayerTreeItem *treeItem, RS_LayerList* ll) |
| | : QDialog(parent) |
| | { |
| | setupUi(this); |
| | setModal(true); |
| | setObjectName(name); |
| |
|
| | m_layerTreeModel = model; |
| | m_layerList = ll; |
| | m_editedTreeItem = treeItem; |
| | } |
| |
|
| | void LC_LayerDialogEx::languageChange(){ |
| | retranslateUi(this); |
| | } |
| |
|
| | void LC_LayerDialogEx::setMode(int viewMode){ |
| | int mode = viewMode; |
| | this->setProperty("mode", mode); |
| | leParentPath->setEnabled(false); |
| | switch (mode){ |
| | case LC_LayerDialogEx::MODE_RENAME_VIRTUAL:{ |
| | leName->setFocus(); |
| | wPen->setVisible(false); |
| | cbConstructionLayer ->setVisible(false); |
| | gbLayerType->setVisible(false); |
| | allowChangingLayerType(false); |
| | setWindowTitle(tr("Rename Virtual Layer")); |
| | break; |
| | } |
| | case LC_LayerDialogEx::MODE_ADD_SECONDARY_LAYER:{ |
| | setWindowTitle(tr("Add Secondary Layer")); |
| | leName->setFocus(); |
| | allowChangingLayerType(false); |
| | break; |
| | } |
| | case LC_LayerDialogEx::MODE_ADD_CHILD_LAYER:{ |
| | setWindowTitle(tr("Add Layer")); |
| | leParentPath->setEnabled(false); |
| | leName->setFocus(); |
| | allowChangingLayerType(true); |
| | break; |
| | } |
| | case LC_LayerDialogEx::MODE_ADD_LAYER:{ |
| | setWindowTitle(tr("Add Layer")); |
| | leName->setFocus(); |
| | allowChangingLayerType(true); |
| | break; |
| | } |
| | case LC_LayerDialogEx::MODE_EDIT_LAYER:{ |
| | setWindowTitle(tr("Edit Layer")); |
| | if (m_editedTreeItem->isZero()){ |
| | allowChangingLayerType(false); |
| | leName->setDisabled(true); |
| | } |
| | else { |
| | leName->setFocus(); |
| | allowChangingLayerType(true); |
| | } |
| | break; |
| | } |
| | default: |
| | break; |
| | } |
| | } |
| |
|
| | void LC_LayerDialogEx::allowChangingLayerType(bool value){ |
| | gbLayerType->setEnabled(value); |
| | if (value){ |
| | connect(rbNormal, &QRadioButton::clicked, this, &LC_LayerDialogEx::layerTypeChanged); |
| | connect(rbDimensions, &QRadioButton::clicked, this, &LC_LayerDialogEx::layerTypeChanged); |
| | connect(rbAlternativePosition, &QRadioButton::clicked, this, &LC_LayerDialogEx::layerTypeChanged); |
| | connect(rbInformational, &QRadioButton::clicked, this, &LC_LayerDialogEx::layerTypeChanged); |
| | } |
| | } |
| |
|
| | void LC_LayerDialogEx::setLayerType(int type) const { |
| | switch (type){ |
| | case LC_LayerTreeItem::VIRTUAL: { |
| | gbLayerType->setVisible(false); |
| | break; |
| | } |
| | case LC_LayerTreeItem::NOT_DEFINED_LAYER_TYPE: |
| | case LC_LayerTreeItem::NORMAL: { |
| | gbLayerType->setVisible(true); |
| | rbNormal->setChecked(true); |
| | break; |
| | } |
| | case LC_LayerTreeItem::DIMENSIONAL: { |
| | gbLayerType->setVisible(true); |
| | rbDimensions->setChecked(true); |
| | break; |
| | } |
| | case LC_LayerTreeItem::ALTERNATE_POSITION: { |
| | gbLayerType->setVisible(true); |
| | rbAlternativePosition->setChecked(true); |
| | break; |
| | } |
| | case LC_LayerTreeItem::INFORMATIONAL: { |
| | gbLayerType->setVisible(true); |
| | rbInformational->setChecked(true); |
| | break; |
| | } |
| | default: |
| | break; |
| | } |
| | } |
| |
|
| | int LC_LayerDialogEx::getEditedLayerType() const { |
| | int result = LC_LayerTreeItem::NOT_DEFINED_LAYER_TYPE; |
| | if (rbNormal->isChecked()){ |
| | result = LC_LayerTreeItem::NORMAL; |
| | } |
| | else if (rbDimensions->isChecked()){ |
| | result = LC_LayerTreeItem::DIMENSIONAL; |
| | } |
| | else if (rbAlternativePosition->isChecked()){ |
| | result = LC_LayerTreeItem::ALTERNATE_POSITION; |
| | } |
| | else if (rbInformational->isChecked()){ |
| | result = LC_LayerTreeItem::INFORMATIONAL; |
| | } |
| | return result; |
| | } |
| |
|
| | void LC_LayerDialogEx::setLayerName(const QString& name) const { |
| | leName ->setText(name); |
| | } |
| |
|
| | void LC_LayerDialogEx::setParentPath(const QString &name) const { |
| | leParentPath -> setText(name); |
| | } |
| |
|
| | void LC_LayerDialogEx::disableNames() const { |
| | leName ->setEnabled(false); |
| | leParentPath ->setVisible(false); |
| | lParentPathName->setVisible(false); |
| | } |
| |
|
| | void LC_LayerDialogEx::setLayer(const RS_Layer* layer) const { |
| | if (layer != nullptr){ |
| | wPen->setVisible(true); |
| | wPen->setPen(layer->getPen(), false, false, tr("Default Pen")); |
| | cbConstructionLayer->setChecked(layer->isConstruction()); |
| | cbConstructionLayer->setVisible(true); |
| | } |
| | else{ |
| | wPen ->setVisible(false); |
| | cbConstructionLayer ->setVisible(false); |
| | } |
| | } |
| |
|
| | RS_Pen LC_LayerDialogEx::getPen() const { |
| | return wPen->getPen(); |
| | } |
| | void LC_LayerDialogEx::init(){ |
| | leName->setFocus(); |
| | wPen->setVisible(false); |
| | cbConstructionLayer->setVisible(false); |
| | setWindowTitle(tr("Rename Layer")); |
| | } |
| |
|
| | void LC_LayerDialogEx::layerTypeChanged() const { |
| | int layerType = -1; |
| | if (rbNormal->isChecked()){ |
| | layerType = LC_LayerTreeItem::NORMAL; |
| | } |
| | else if (rbDimensions ->isChecked()){ |
| | layerType = LC_LayerTreeItem::DIMENSIONAL; |
| | } |
| | else if (rbAlternativePosition -> isChecked()){ |
| | layerType = LC_LayerTreeItem::ALTERNATE_POSITION; |
| | } |
| | else if (rbInformational->isChecked()){ |
| | layerType = LC_LayerTreeItem::INFORMATIONAL; |
| | } |
| |
|
| | if (layerType > 0){ |
| | RS_Pen defaultPen = m_layerTreeModel ->getOptions()->getDefaultPen(layerType); |
| | RS_Pen penCopy = RS_Pen(defaultPen); |
| | wPen->setPen(penCopy, false, false, tr("Default Pen")); |
| | } |
| | } |
| |
|
| | void LC_LayerDialogEx::validate() { |
| | QString layerName = leName->text(); |
| | if (layerName.trimmed().isEmpty()){ |
| | QMessageBox::information(parentWidget(), |
| | QMessageBox::tr("Layer Properties"), |
| | QMessageBox::tr("Layer empty name is not allowed."), |
| | QMessageBox::Ok); |
| | } |
| | else{ |
| | int newLayerType = getEditedLayerType(); |
| | QStringList newLayerNamesList; |
| |
|
| | int dialogMode = property("mode").toInt(); |
| | switch (dialogMode) { |
| | case MODE_ADD_LAYER: { |
| | QString newLayerName = m_layerTreeModel->createFullLayerName( |
| | m_editedTreeItem, layerName, newLayerType, true); |
| | newLayerNamesList << newLayerName; |
| | break; |
| | } |
| | case MODE_ADD_CHILD_LAYER: |
| | case MODE_ADD_SECONDARY_LAYER: { |
| | QString newLayerName = m_layerTreeModel->createFullLayerName( |
| | m_editedTreeItem, layerName, newLayerType, true); |
| | newLayerNamesList << newLayerName; |
| | break; |
| | } |
| | case MODE_RENAME_VIRTUAL: { |
| | QString oldLayerName = m_editedTreeItem->getName(); |
| | if (layerName != oldLayerName) { |
| | newLayerNamesList = m_layerTreeModel->getLayersListForRenamedVirtualLayer(m_editedTreeItem, layerName); |
| | } |
| | break; |
| | } |
| | case MODE_EDIT_LAYER: { |
| | QString originalName = m_editedTreeItem->getName(); |
| | int originalLayerType = m_editedTreeItem->getLayerType(); |
| | bool typeChanged = newLayerType != originalLayerType; |
| | bool nameChanged = originalName != layerName; |
| | if (nameChanged || typeChanged) { |
| | |
| | newLayerNamesList = m_layerTreeModel->getLayersListForRenamedPrimary( |
| | m_editedTreeItem, layerName, newLayerType); |
| | } |
| | break; |
| | } |
| | default: |
| | break; |
| | } |
| |
|
| | if (newLayerNamesList.isEmpty()){ |
| | accept(); |
| | } |
| | else{ |
| | bool duplicateNameFound = checkForDuplicatedNames(newLayerNamesList); |
| | if (!duplicateNameFound){ |
| | accept(); |
| | } |
| | } |
| | } |
| | } |
| |
|
| | bool LC_LayerDialogEx::checkForDuplicatedNames(const QStringList &newLayerNamesList) const { |
| | int count = newLayerNamesList.size(); |
| | bool duplicateNameFound = false; |
| | for (int i = 0; i < count; i++) { |
| | QString candidateLayerName = newLayerNamesList.at(i); |
| | |
| | RS_Layer* existingLayer = m_layerList->find(candidateLayerName); |
| | if (existingLayer != nullptr){ |
| | QMessageBox::information(parentWidget(), |
| | QMessageBox::tr("Layer Properties"), |
| | QMessageBox::tr("Attempt to create layer with duplicating name. Duplicated layer name is \n[%1].\n" |
| | "Please specify a different name.") |
| | .arg(candidateLayerName), |
| | QMessageBox::Ok); |
| | leName->setFocus(); |
| | leName->selectAll(); |
| | duplicateNameFound = true; |
| | break; |
| | } |
| | } |
| | return duplicateNameFound; |
| | } |
| |
|
| | QString LC_LayerDialogEx::getLayerName() const { |
| | return leName->text(); |
| | } |
| |
|