Refining solution

This commit is contained in:
Matthias Koefferlein 2025-09-28 20:17:52 +02:00
parent 31ddbe24fa
commit 17f4397f1b
3 changed files with 35 additions and 28 deletions

View File

@ -711,42 +711,46 @@ HierarchyControlPanel::select_active (int cellview_index, bool silent)
{
if (cellview_index != m_active_index) {
mp_selector->setCurrentIndex (cellview_index);
change_active_cellview (cellview_index);
if (! silent) {
selection_changed (cellview_index);
emit active_cellview_changed (cellview_index);
}
}
}
void
HierarchyControlPanel::change_active_cellview (int index)
{
search_editing_finished ();
m_active_index = index;
bool split_mode = m_split_mode;
// for more than max_cellviews_in_split_mode cellviews, switch to overlay mode
if (int (m_cellviews.size ()) > max_cellviews_in_split_mode) {
split_mode = false;
}
int i = 0;
for (std::vector <QFrame *>::const_iterator f = mp_cell_list_frames.begin (); f != mp_cell_list_frames.end (); ++f, ++i) {
(*f)->setVisible (i == index || split_mode);
if (i == index) {
mp_cell_lists [i]->setFocus ();
}
}
i = 0;
for (std::vector <QToolButton *>::const_iterator f = mp_cell_list_headers.begin (); f != mp_cell_list_headers.end (); ++f, ++i) {
(*f)->setChecked (i == index);
}
}
void
HierarchyControlPanel::selection_changed (int index)
{
if (index != m_active_index) {
search_editing_finished ();
m_active_index = index;
bool split_mode = m_split_mode;
// for more than max_cellviews_in_split_mode cellviews, switch to overlay mode
if (int (m_cellviews.size ()) > max_cellviews_in_split_mode) {
split_mode = false;
}
int i = 0;
for (std::vector <QFrame *>::const_iterator f = mp_cell_list_frames.begin (); f != mp_cell_list_frames.end (); ++f, ++i) {
(*f)->setVisible (i == index || split_mode);
if (i == index) {
mp_cell_lists [i]->setFocus ();
}
}
i = 0;
for (std::vector <QToolButton *>::const_iterator f = mp_cell_list_headers.begin (); f != mp_cell_list_headers.end (); ++f, ++i) {
(*f)->setChecked (i == index);
}
change_active_cellview (index);
emit active_cellview_changed (index);
}
}

View File

@ -346,6 +346,9 @@ private:
// ask for cell copy mode
bool ask_for_cell_copy_mode (const db::Layout &layout, const std::vector<cell_path_type> &paths, int &cell_copy_mode);
// changes the active cellview
void change_active_cellview (int index);
};
} // namespace lay

View File

@ -418,7 +418,7 @@ LayoutView::LayoutView (lay::LayoutView *source, db::Manager *manager, bool edit
copy_from (source);
bookmarks (source->bookmarks ());
set_active_cellview_index_silent (source->active_cellview_index ());
LayoutView::set_active_cellview_index (source->active_cellview_index ());
}
LayoutView::LayoutView (db::Manager *manager, bool editable, lay::Plugin *plugin_parent, LayoutViewWidget *widget, unsigned int options)
@ -445,7 +445,7 @@ LayoutView::LayoutView (lay::LayoutView *source, db::Manager *manager, bool edit
copy_from (source);
bookmarks (source->bookmarks ());
set_active_cellview_index_silent (source->active_cellview_index ());
LayoutView::set_active_cellview_index (source->active_cellview_index ());
}
bool