From 5536f75440ecf282bb099bfa5dd16ee287ab2d1d Mon Sep 17 00:00:00 2001 From: Kuzma30 Date: Thu, 23 May 2024 13:41:19 +0000 Subject: [PATCH] Displaying internal names in the tree view --- src/Gui/PreferencePages/DlgSettingsUI.cpp | 27 +++++--- src/Gui/PreferencePages/DlgSettingsUI.h | 1 + src/Gui/PreferencePages/DlgSettingsUI.py | 1 + src/Gui/Tree.cpp | 44 ++++++++++--- src/Gui/TreeParams.cpp | 79 +++++++++++++++++++++++ src/Gui/TreeParams.h | 23 +++++++ src/Gui/TreeParams.py | 3 + 7 files changed, 160 insertions(+), 18 deletions(-) diff --git a/src/Gui/PreferencePages/DlgSettingsUI.cpp b/src/Gui/PreferencePages/DlgSettingsUI.cpp index c73ac98022ad..48bc73a740e9 100644 --- a/src/Gui/PreferencePages/DlgSettingsUI.cpp +++ b/src/Gui/PreferencePages/DlgSettingsUI.cpp @@ -106,43 +106,50 @@ DlgSettingsUI::DlgSettingsUI(QWidget* parent) HideColumn->setEntryName("HideColumn"); HideColumn->setParamGrpPath("TreeView"); + // Auto generated code (Tools/params_utils.py:433) + HideInternalNames = new Gui::PrefCheckBox(this); + layoutTreeview->addWidget(HideInternalNames, 5, 0); + HideInternalNames->setChecked(Gui::TreeParams::defaultHideInternalNames()); + HideInternalNames->setEntryName("HideInternalNames"); + HideInternalNames->setParamGrpPath("TreeView"); + // Auto generated code (Tools/params_utils.py:433) HideScrollBar = new Gui::PrefCheckBox(this); - layoutTreeview->addWidget(HideScrollBar, 5, 0); + layoutTreeview->addWidget(HideScrollBar, 6, 0); HideScrollBar->setChecked(Gui::TreeParams::defaultHideScrollBar()); HideScrollBar->setEntryName("HideScrollBar"); HideScrollBar->setParamGrpPath("TreeView"); // Auto generated code (Tools/params_utils.py:433) HideHeaderView = new Gui::PrefCheckBox(this); - layoutTreeview->addWidget(HideHeaderView, 6, 0); + layoutTreeview->addWidget(HideHeaderView, 7, 0); HideHeaderView->setChecked(Gui::TreeParams::defaultHideHeaderView()); HideHeaderView->setEntryName("HideHeaderView"); HideHeaderView->setParamGrpPath("TreeView"); // Auto generated code (Tools/params_utils.py:433) labelIconSize = new QLabel(this); - layoutTreeview->addWidget(labelIconSize, 7, 0); + layoutTreeview->addWidget(labelIconSize, 8, 0); IconSize = new Gui::PrefSpinBox(this); - layoutTreeview->addWidget(IconSize, 7, 1); + layoutTreeview->addWidget(IconSize, 8, 1); IconSize->setValue(Gui::TreeParams::defaultIconSize()); IconSize->setEntryName("IconSize"); IconSize->setParamGrpPath("TreeView"); // Auto generated code (Tools/params_utils.py:433) labelFontSize = new QLabel(this); - layoutTreeview->addWidget(labelFontSize, 8, 0); + layoutTreeview->addWidget(labelFontSize, 9, 0); FontSize = new Gui::PrefSpinBox(this); - layoutTreeview->addWidget(FontSize, 8, 1); + layoutTreeview->addWidget(FontSize, 9, 1); FontSize->setValue(Gui::TreeParams::defaultFontSize()); FontSize->setEntryName("FontSize"); FontSize->setParamGrpPath("TreeView"); // Auto generated code (Tools/params_utils.py:433) labelItemSpacing = new QLabel(this); - layoutTreeview->addWidget(labelItemSpacing, 9, 0); + layoutTreeview->addWidget(labelItemSpacing, 10, 0); ItemSpacing = new Gui::PrefSpinBox(this); - layoutTreeview->addWidget(ItemSpacing, 9, 1); + layoutTreeview->addWidget(ItemSpacing, 10, 1); ItemSpacing->setValue(Gui::TreeParams::defaultItemSpacing()); ItemSpacing->setEntryName("ItemSpacing"); ItemSpacing->setParamGrpPath("TreeView"); @@ -451,6 +458,7 @@ void DlgSettingsUI::saveSettings() ResizableColumn->onSave(); VisibilityIcon->onSave(); HideColumn->onSave(); + HideInternalNames->onSave(); HideScrollBar->onSave(); HideHeaderView->onSave(); IconSize->onSave(); @@ -492,6 +500,7 @@ void DlgSettingsUI::loadSettings() ResizableColumn->onRestore(); VisibilityIcon->onRestore(); HideColumn->onRestore(); + HideInternalNames->onRestore(); HideScrollBar->onRestore(); HideHeaderView->onRestore(); IconSize->onRestore(); @@ -541,6 +550,8 @@ void DlgSettingsUI::retranslateUi() VisibilityIcon->setText(QObject::tr("Show visibility icon")); HideColumn->setToolTip(QApplication::translate("TreeParams", Gui::TreeParams::docHideColumn())); HideColumn->setText(QObject::tr("Hide extra column")); + HideInternalNames->setToolTip(QApplication::translate("TreeParams", Gui::TreeParams::docHideInternalNames())); + HideInternalNames->setText(QObject::tr("Hide Internal Names")); HideScrollBar->setToolTip(QApplication::translate("TreeParams", Gui::TreeParams::docHideScrollBar())); HideScrollBar->setText(QObject::tr("Hide scroll bar")); HideHeaderView->setToolTip(QApplication::translate("TreeParams", Gui::TreeParams::docHideHeaderView())); diff --git a/src/Gui/PreferencePages/DlgSettingsUI.h b/src/Gui/PreferencePages/DlgSettingsUI.h index af4dfab4528a..a1138450254b 100644 --- a/src/Gui/PreferencePages/DlgSettingsUI.h +++ b/src/Gui/PreferencePages/DlgSettingsUI.h @@ -80,6 +80,7 @@ class DlgSettingsUI : public Gui::Dialog::PreferencePage Gui::PrefCheckBox *ResizableColumn = nullptr; Gui::PrefCheckBox *VisibilityIcon = nullptr; Gui::PrefCheckBox *HideColumn = nullptr; + Gui::PrefCheckBox *HideInternalNames = nullptr; Gui::PrefCheckBox *HideScrollBar = nullptr; Gui::PrefCheckBox *HideHeaderView = nullptr; QLabel *labelIconSize = nullptr; diff --git a/src/Gui/PreferencePages/DlgSettingsUI.py b/src/Gui/PreferencePages/DlgSettingsUI.py index 77da4e25cf8f..7f81a9a37942 100644 --- a/src/Gui/PreferencePages/DlgSettingsUI.py +++ b/src/Gui/PreferencePages/DlgSettingsUI.py @@ -50,6 +50,7 @@ 'ResizableColumn', 'VisibilityIcon', 'HideColumn', + 'HideInternalNames', 'HideScrollBar', 'HideHeaderView', 'IconSize', diff --git a/src/Gui/Tree.cpp b/src/Gui/Tree.cpp index 1833a7552399..464f0620e73c 100644 --- a/src/Gui/Tree.cpp +++ b/src/Gui/Tree.cpp @@ -217,6 +217,7 @@ class Gui::DocumentObjectData { bool itemHidden; std::string label; std::string label2; + std::string internalName; using Connection = boost::signals2::scoped_connection; @@ -245,6 +246,7 @@ class Gui::DocumentObjectData { itemHidden = !viewObject->showInTree(); label = viewObject->getObject()->Label.getValue(); label2 = viewObject->getObject()->Label2.getValue(); + internalName = viewObject->getObject()->getNameInDocument(); } void insertItem(DocumentObjectItem* item) @@ -429,7 +431,7 @@ void TreeWidgetItemDelegate::paint(QPainter *painter, // If the second column is not shown, we'll trim the color background when // rendering as transparent overlay. - bool trimBG = TreeParams::getHideColumn(); + bool trimBG = TreeParams::getHideColumn() || TreeParams::getHideInternalNames(); QRect rect = opt.rect; if (index.column() == 0) { @@ -456,9 +458,7 @@ void TreeWidgetItemDelegate::paint(QPainter *painter, } else if (!opt.state.testFlag(QStyle::State_Selected)) painter->fillRect(rect, _TreeItemBackground); } - } - style->drawControl(QStyle::CE_ItemViewItem, &opt, painter, tree); } @@ -534,7 +534,7 @@ TreeWidget::TreeWidget(const char* name, QWidget* parent) this->setDragEnabled(true); this->setAcceptDrops(true); this->setDragDropMode(QTreeWidget::InternalMove); - this->setColumnCount(2); + this->setColumnCount(3); this->setItemDelegate(new TreeWidgetItemDelegate(this)); this->showHiddenAction = new QAction(this); @@ -615,10 +615,12 @@ TreeWidget::TreeWidget(const char* name, QWidget* parent) setupResizableColumn(this); this->header()->setStretchLastSection(false); QObject::connect(this->header(), &QHeaderView::sectionResized, [](int idx, int, int newSize) { - if (idx) + if (idx == 1) TreeParams::setColumnSize2(newSize); - else - TreeParams::setColumnSize1(newSize); + else if (idx == 2) + TreeParams::setColumnSize3(newSize); + else + TreeParams::setColumnSize1(newSize); }); // Add the first main label @@ -656,7 +658,8 @@ TreeWidget::TreeWidget(const char* name, QWidget* parent) documentPartialPixmap = std::make_unique(icon.pixmap(documentPixmap->size(), QIcon::Disabled)); } setColumnHidden(1, TreeParams::getHideColumn()); - header()->setVisible(!TreeParams::getHideColumn()); + setColumnHidden(2, TreeParams::getHideInternalNames()); + header()->setVisible(!TreeParams::getHideColumn() || !TreeParams::getHideInternalNames()); } TreeWidget::~TreeWidget() @@ -1048,6 +1051,7 @@ void TreeWidget::contextMenuEvent(QContextMenuEvent* e) contextMenu.addMenu(&settingsMenu); QAction* action = new QAction(tr("Show description column"), this); + QAction* internalNameAction = new QAction(tr("Show internal name"), this); action->setStatusTip(tr("Show an extra tree view column for item description. The item's description can be set by pressing F2 (or your OS's edit button) or by editing the 'label2' property.")); action->setCheckable(true); @@ -1055,11 +1059,26 @@ void TreeWidget::contextMenuEvent(QContextMenuEvent* e) action->setChecked(!hGrp->GetBool("HideColumn", true)); settingsMenu.addAction(action); - QObject::connect(action, &QAction::triggered, this, [this, action, hGrp]() { + QObject::connect(action, &QAction::triggered, this, [this, action, internalNameAction, hGrp]() { bool show = action->isChecked(); hGrp->SetBool("HideColumn", !show); setColumnHidden(1, !show); - header()->setVisible(show); + header()->setVisible(action->isChecked()||internalNameAction->isChecked()); + }); + + + internalNameAction->setStatusTip(tr("Show an internal name column for items.")); + internalNameAction->setCheckable(true); + + internalNameAction->setChecked(!hGrp->GetBool("HideInternalNames", true)); + + settingsMenu.addAction(internalNameAction); + + QObject::connect(internalNameAction, &QAction::triggered, this, [this, action, internalNameAction, hGrp]() { + bool show = internalNameAction->isChecked(); + hGrp->SetBool("HideInternalNames", !show); + setColumnHidden(2, !show); + header()->setVisible(action->isChecked()||internalNameAction->isChecked()); }); if (contextMenu.actions().count() > 0) { @@ -1373,12 +1392,15 @@ void TreeWidget::setupResizableColumn(TreeWidget *tree) { if(!tree || tree==inst) { inst->header()->setSectionResizeMode(0, mode); inst->header()->setSectionResizeMode(1, mode); + inst->header()->setSectionResizeMode(2, mode); if (TreeParams::getResizableColumn()) { QSignalBlocker blocker(inst); if (TreeParams::getColumnSize1() > 0) inst->header()->resizeSection(0, TreeParams::getColumnSize1()); if (TreeParams::getColumnSize2() > 0) inst->header()->resizeSection(1, TreeParams::getColumnSize2()); + if (TreeParams::getColumnSize3() > 0) + inst->header()->resizeSection(2, TreeParams::getColumnSize3()); } } } @@ -3168,6 +3190,7 @@ void TreeWidget::setupText() { this->headerItem()->setText(0, tr("Labels & Attributes")); this->headerItem()->setText(1, tr("Description")); + this->headerItem()->setText(2, tr("Internal name")); this->showHiddenAction->setText(tr("Show items hidden in tree view")); this->showHiddenAction->setStatusTip(tr("Show items that are marked as 'hidden' in the tree view")); @@ -3763,6 +3786,7 @@ bool DocumentItem::createNewItem(const Gui::ViewProviderDocumentObject& obj, item->setText(0, QString::fromUtf8(data->label.c_str())); if (!data->label2.empty()) item->setText(1, QString::fromUtf8(data->label2.c_str())); + item->setText(2, QString::fromUtf8(data->internalName.c_str())); if (!obj.showInTree() && !showHidden()) item->setHidden(true); item->testStatus(true); diff --git a/src/Gui/TreeParams.cpp b/src/Gui/TreeParams.cpp index acbe950640ab..faede3d53b28 100644 --- a/src/Gui/TreeParams.cpp +++ b/src/Gui/TreeParams.cpp @@ -72,11 +72,13 @@ class TreeParamsP: public ParameterGrp::ObserverType { unsigned long ItemBackground; long ItemBackgroundPadding; bool HideColumn; + bool HideInternalNames; bool HideScrollBar; bool HideHeaderView; bool ResizableColumn; long ColumnSize1; long ColumnSize2; + long ColumnSize3; bool TreeToolTipIcon; bool VisibilityIcon; @@ -145,6 +147,8 @@ class TreeParamsP: public ParameterGrp::ObserverType { funcs["ItemBackgroundPadding"] = &TreeParamsP::updateItemBackgroundPadding; HideColumn = handle->GetBool("HideColumn", true); funcs["HideColumn"] = &TreeParamsP::updateHideColumn; + HideInternalNames = handle->GetBool("HideInternalNames", true); + funcs["HideInternalNames"] = &TreeParamsP::updateHideInternalNames; HideScrollBar = handle->GetBool("HideScrollBar", true); funcs["HideScrollBar"] = &TreeParamsP::updateHideScrollBar; HideHeaderView = handle->GetBool("HideHeaderView", true); @@ -155,6 +159,8 @@ class TreeParamsP: public ParameterGrp::ObserverType { funcs["ColumnSize1"] = &TreeParamsP::updateColumnSize1; ColumnSize2 = handle->GetInt("ColumnSize2", 0); funcs["ColumnSize2"] = &TreeParamsP::updateColumnSize2; + ColumnSize3 = handle->GetInt("ColumnSize3", 0); + funcs["ColumnSize3"] = &TreeParamsP::updateColumnSize3; TreeToolTipIcon = handle->GetBool("TreeToolTipIcon", false); funcs["TreeToolTipIcon"] = &TreeParamsP::updateTreeToolTipIcon; VisibilityIcon = handle->GetBool("VisibilityIcon", false); @@ -365,6 +371,14 @@ class TreeParamsP: public ParameterGrp::ObserverType { TreeParams::onHideColumnChanged(); } } + // Auto generated code (Tools/params_utils.py:296) + static void updateHideInternalNames(TreeParamsP *self) { + auto v = self->handle->GetBool("HideInternalNames", true); + if (self->HideInternalNames != v) { + self->HideInternalNames = v; + TreeParams::onHideInternalNamesChanged(); + } + } // Auto generated code (Tools/params_utils.py:288) static void updateHideScrollBar(TreeParamsP *self) { self->HideScrollBar = self->handle->GetBool("HideScrollBar", true); @@ -390,6 +404,10 @@ class TreeParamsP: public ParameterGrp::ObserverType { self->ColumnSize2 = self->handle->GetInt("ColumnSize2", 0); } // Auto generated code (Tools/params_utils.py:288) + static void updateColumnSize3(TreeParamsP *self) { + self->ColumnSize3 = self->handle->GetInt("ColumnSize3", 0); + } + // Auto generated code (Tools/params_utils.py:288) static void updateTreeToolTipIcon(TreeParamsP *self) { self->TreeToolTipIcon = self->handle->GetBool("TreeToolTipIcon", false); } @@ -1229,6 +1247,34 @@ void TreeParams::removeHideColumn() { instance()->handle->RemoveBool("HideColumn"); } +// Auto generated code (Tools/params_utils.py:350) +const char *TreeParams::docHideInternalNames() { + return QT_TRANSLATE_NOOP("TreeParams", +"Hide extra tree view column - Internal Names."); +} + +// Auto generated code (Tools/params_utils.py:358) +const bool & TreeParams::getHideInternalNames() { + return instance()->HideInternalNames; +} + +// Auto generated code (Tools/params_utils.py:366) +const bool & TreeParams::defaultHideInternalNames() { + const static bool def = true; + return def; +} + +// Auto generated code (Tools/params_utils.py:375) +void TreeParams::setHideInternalNames(const bool &v) { + instance()->handle->SetBool("HideInternalNames",v); + instance()->HideInternalNames = v; +} + +// Auto generated code (Tools/params_utils.py:384) +void TreeParams::removeHideInternalNames() { + instance()->handle->RemoveBool("HideInternalNames"); +} + // Auto generated code (Tools/params_utils.py:350) const char *TreeParams::docHideScrollBar() { return QT_TRANSLATE_NOOP("TreeParams", @@ -1367,6 +1413,33 @@ void TreeParams::removeColumnSize2() { instance()->handle->RemoveInt("ColumnSize2"); } +// Auto generated code (Tools/params_utils.py:350) +const char *TreeParams::docColumnSize3() { + return ""; +} + +// Auto generated code (Tools/params_utils.py:358) +const long & TreeParams::getColumnSize3() { + return instance()->ColumnSize3; +} + +// Auto generated code (Tools/params_utils.py:366) +const long & TreeParams::defaultColumnSize3() { + const static long def = 0; + return def; +} + +// Auto generated code (Tools/params_utils.py:375) +void TreeParams::setColumnSize3(const long &v) { + instance()->handle->SetInt("ColumnSize3",v); + instance()->ColumnSize3 = v; +} + +// Auto generated code (Tools/params_utils.py:384) +void TreeParams::removeColumnSize3() { + instance()->handle->RemoveInt("ColumnSize3"); +} + // Auto generated code (Tools/params_utils.py:350) const char *TreeParams::docTreeToolTipIcon() { return ""; @@ -1523,6 +1596,12 @@ void TreeParams::onHideColumnChanged() tree->setColumnHidden(1, TreeParams::getHideColumn()); } +void TreeParams::onHideInternalNamesChanged() +{ + for(auto tree : TreeWidget::Instances) + tree->setColumnHidden(2, TreeParams::getHideInternalNames()); +} + void TreeParams::onVisibilityIconChanged() { TreeWidget::updateVisibilityIcons(); diff --git a/src/Gui/TreeParams.h b/src/Gui/TreeParams.h index 50792491ba19..71dd0b529489 100644 --- a/src/Gui/TreeParams.h +++ b/src/Gui/TreeParams.h @@ -391,6 +391,19 @@ class GuiExport TreeParams { static void onHideColumnChanged(); //@} + // Auto generated code (Tools/params_utils.py:138) + //@{ + /// Accessor for parameter HideInternalNames + /// + /// Hide extra tree view column - Internal Names. + static const bool & getHideInternalNames(); + static const bool & defaultHideInternalNames(); + static void removeHideInternalNames(); + static void setHideInternalNames(const bool &v); + static const char *docHideInternalNames(); + static void onHideInternalNamesChanged(); + //@} + // Auto generated code (Tools/params_utils.py:138) //@{ /// Accessor for parameter HideScrollBar @@ -448,6 +461,16 @@ class GuiExport TreeParams { static const char *docColumnSize2(); //@} + // Auto generated code (Tools/params_utils.py:138) + //@{ + /// Accessor for parameter ColumnSize3 + static const long & getColumnSize3(); + static const long & defaultColumnSize3(); + static void removeColumnSize3(); + static void setColumnSize3(const long &v); + static const char *docColumnSize3(); + //@} + // Auto generated code (Tools/params_utils.py:138) //@{ /// Accessor for parameter TreeToolTipIcon diff --git a/src/Gui/TreeParams.py b/src/Gui/TreeParams.py index a640753ca880..3f9f382c5876 100644 --- a/src/Gui/TreeParams.py +++ b/src/Gui/TreeParams.py @@ -71,6 +71,8 @@ doc = "Tree view item background padding."), ParamBool('HideColumn', True, on_change=True, title="Hide extra column", doc = "Hide extra tree view column for item description."), + ParamBool('HideInternalNames', True, on_change=True, title="Hide Internal Names", + doc = "Hide extra tree view column - Internal Names."), ParamBool('HideScrollBar', True, title="Hide scroll bar", doc = "Hide tree view scroll bar in dock overlay."), ParamBool('HideHeaderView', True, title="Hide header", @@ -79,6 +81,7 @@ doc = "Allow tree view columns to be manually resized."), ParamInt('ColumnSize1', 0), ParamInt('ColumnSize2', 0), + ParamInt('ColumnSize3', 0), ParamBool('TreeToolTipIcon', False, title='Show icon in tool tip'), ParamBool('VisibilityIcon', False, on_change=True, title='Show visibility icon', doc = "If enabled, show an eye icon before the tree view items, showing the items visibility status. When clicked the visibility is toggled"),