Skip to content

Commit

Permalink
Displaying internal names in the tree view
Browse files Browse the repository at this point in the history
  • Loading branch information
KuzemkoA committed May 23, 2024
1 parent d126352 commit 5536f75
Show file tree
Hide file tree
Showing 7 changed files with 160 additions and 18 deletions.
27 changes: 19 additions & 8 deletions src/Gui/PreferencePages/DlgSettingsUI.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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");
Expand Down Expand Up @@ -451,6 +458,7 @@ void DlgSettingsUI::saveSettings()
ResizableColumn->onSave();
VisibilityIcon->onSave();
HideColumn->onSave();
HideInternalNames->onSave();
HideScrollBar->onSave();
HideHeaderView->onSave();
IconSize->onSave();
Expand Down Expand Up @@ -492,6 +500,7 @@ void DlgSettingsUI::loadSettings()
ResizableColumn->onRestore();
VisibilityIcon->onRestore();
HideColumn->onRestore();
HideInternalNames->onRestore();
HideScrollBar->onRestore();
HideHeaderView->onRestore();
IconSize->onRestore();
Expand Down Expand Up @@ -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()));
Expand Down
1 change: 1 addition & 0 deletions src/Gui/PreferencePages/DlgSettingsUI.h
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
1 change: 1 addition & 0 deletions src/Gui/PreferencePages/DlgSettingsUI.py
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@
'ResizableColumn',
'VisibilityIcon',
'HideColumn',
'HideInternalNames',
'HideScrollBar',
'HideHeaderView',
'IconSize',
Expand Down
44 changes: 34 additions & 10 deletions src/Gui/Tree.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -217,6 +217,7 @@ class Gui::DocumentObjectData {
bool itemHidden;
std::string label;
std::string label2;
std::string internalName;

using Connection = boost::signals2::scoped_connection;

Expand Down Expand Up @@ -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)
Expand Down Expand Up @@ -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) {
Expand All @@ -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);
}

Expand Down Expand Up @@ -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);
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -656,7 +658,8 @@ TreeWidget::TreeWidget(const char* name, QWidget* parent)
documentPartialPixmap = std::make_unique<QPixmap>(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()
Expand Down Expand Up @@ -1048,18 +1051,34 @@ 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);

ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/TreeView");
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) {
Expand Down Expand Up @@ -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());
}
}
}
Expand Down Expand Up @@ -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"));
Expand Down Expand Up @@ -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);
Expand Down
79 changes: 79 additions & 0 deletions src/Gui/TreeParams.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand Down Expand Up @@ -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);
Expand All @@ -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);
Expand Down Expand Up @@ -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);
Expand All @@ -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);
}
Expand Down Expand Up @@ -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",
Expand Down Expand Up @@ -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 "";
Expand Down Expand Up @@ -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();
Expand Down
Loading

0 comments on commit 5536f75

Please sign in to comment.