Skip to content

Commit 033d2b3

Browse files
authored
Merge pull request #7392 from gadfort/gui-cts
gui: add CTS renderer controls and fix display options
2 parents 8d865ed + 2c6aebe commit 033d2b3

4 files changed

Lines changed: 42 additions & 1 deletion

File tree

src/gui/src/clockWidget.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ namespace gui {
4747
ClockTreeRenderer::ClockTreeRenderer(ClockTree* tree)
4848
: tree_(tree), max_depth_(1), path_to_(nullptr)
4949
{
50+
addDisplayControl(render_label_, true);
5051
}
5152

5253
void ClockTreeRenderer::drawObjects(Painter& painter)
@@ -55,6 +56,10 @@ void ClockTreeRenderer::drawObjects(Painter& painter)
5556
return;
5657
}
5758

59+
if (!checkDisplayControl(render_label_)) {
60+
return;
61+
}
62+
5863
auto* descriptor = Gui::get()->getDescriptor<odb::dbNet*>();
5964
if (descriptor == nullptr) {
6065
return;

src/gui/src/clockWidget.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ class ClockTreeRenderer : public Renderer
6767
odb::dbITerm* path_to_;
6868

6969
static constexpr int pen_width_ = 2;
70+
static constexpr const char* render_label_ = "Clock trees";
7071

7172
void drawTree(Painter& painter,
7273
const Descriptor* descriptor,

src/gui/src/displayControls.cpp

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -267,6 +267,8 @@ DisplayControls::DisplayControls(QWidget* parent)
267267

268268
auto* root = model_->invisibleRootItem();
269269

270+
custom_controls_start_ = -1;
271+
270272
auto layers
271273
= makeParentItem(layers_group_, "Layers", root, Qt::Checked, true);
272274
view_->expand(layers->index());
@@ -535,6 +537,9 @@ DisplayControls::DisplayControls(QWidget* parent)
535537

536538
connect(
537539
this, &DisplayControls::colorChanged, this, &DisplayControls::changed);
540+
541+
custom_controls_start_ = root->rowCount();
542+
538543
// register renderers
539544
if (gui::Gui::get() != nullptr) {
540545
for (auto renderer : gui::Gui::get()->renderers()) {
@@ -1241,8 +1246,20 @@ void DisplayControls::save()
12411246

12421247
void DisplayControls::restore()
12431248
{
1249+
// Collect current controls in case some were removed after save was called.
1250+
std::map<std::string, QStandardItem*> all_controls;
1251+
collectControls(model_->invisibleRootItem(), Visible, all_controls);
1252+
collectControls(model_->invisibleRootItem(), Selectable, all_controls);
1253+
std::set<QStandardItem*> controls;
1254+
1255+
for (auto& [control_name, control] : all_controls) {
1256+
controls.insert(control);
1257+
}
1258+
12441259
for (auto& [control, state] : saved_state_) {
1245-
control->setCheckState(state);
1260+
if (controls.find(control) != controls.end()) {
1261+
control->setCheckState(state);
1262+
}
12461263
}
12471264
}
12481265

@@ -1912,6 +1929,7 @@ void DisplayControls::registerRenderer(Renderer* renderer)
19121929
}
19131930

19141931
auto& add_rows = custom_controls_[renderer];
1932+
19151933
add_rows.insert(add_rows.begin(), rows.begin(), rows.end());
19161934
}
19171935

@@ -1923,6 +1941,22 @@ void DisplayControls::registerRenderer(Renderer* renderer)
19231941
renderer->setSettings(setting->second);
19241942
}
19251943
}
1944+
1945+
// Sort custom_controls
1946+
std::vector<QList<QStandardItem*>> custom_controls;
1947+
while (model_->invisibleRootItem()->rowCount() > custom_controls_start_) {
1948+
custom_controls.push_back(
1949+
model_->takeRow(model_->invisibleRootItem()->rowCount() - 1));
1950+
}
1951+
std::stable_sort(custom_controls.begin(),
1952+
custom_controls.end(),
1953+
[](const QList<QStandardItem*>& list0,
1954+
const QList<QStandardItem*>& list1) {
1955+
return list0[Name]->text() < list1[Name]->text();
1956+
});
1957+
for (const auto& row : custom_controls) {
1958+
model_->appendRow(row);
1959+
}
19261960
}
19271961

19281962
void DisplayControls::unregisterRenderer(Renderer* renderer)

src/gui/src/displayControls.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -531,6 +531,7 @@ class DisplayControls : public QDockWidget,
531531

532532
std::map<const odb::dbTechLayer*, ModelRow> layer_controls_;
533533
std::map<const odb::dbSite*, ModelRow> site_controls_;
534+
int custom_controls_start_;
534535
std::map<Renderer*, std::vector<ModelRow>> custom_controls_;
535536
std::map<std::string, Renderer::Settings> custom_controls_settings_;
536537
std::map<QStandardItem*, Qt::CheckState> saved_state_;

0 commit comments

Comments
 (0)