mirror of https://github.com/KLayout/klayout.git
Merge pull request #2164 from KLayout/bugfix/issue-2162
Bugfix/issue 2162
This commit is contained in:
commit
77cc0be2ef
|
|
@ -150,8 +150,7 @@ ShapeEditService::get_edit_layer ()
|
||||||
mp_layout = &(cv->layout ());
|
mp_layout = &(cv->layout ());
|
||||||
mp_cell = cv.cell ();
|
mp_cell = cv.cell ();
|
||||||
|
|
||||||
// fetches the last configuration for the given layer
|
view ()->set_active_cellview_index_silent (cv_index);
|
||||||
view ()->set_active_cellview_index (cv_index);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
@ -173,8 +172,9 @@ ShapeEditService::change_edit_layer (const db::LayerProperties &lp)
|
||||||
close_editor_hooks (false);
|
close_editor_hooks (false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
view ()->set_active_cellview_index_silent (m_cv_index);
|
||||||
|
|
||||||
// fetches the last configuration for the given layer
|
// fetches the last configuration for the given layer
|
||||||
view ()->set_active_cellview_index (m_cv_index);
|
|
||||||
config_recent_for_layer (lp, m_cv_index);
|
config_recent_for_layer (lp, m_cv_index);
|
||||||
|
|
||||||
if (editing ()) {
|
if (editing ()) {
|
||||||
|
|
@ -237,7 +237,9 @@ ShapeEditService::update_edit_layer (const lay::LayerPropertiesConstIterator &cl
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
view ()->set_active_cellview_index (cv_index);
|
// NOTE: we don't want side effects during this operation - i.e. some that
|
||||||
|
// change the selection. Hence no events here.
|
||||||
|
view ()->set_active_cellview_index_silent (cv_index);
|
||||||
|
|
||||||
const lay::ParsedLayerSource &source = cl->source (true /*real*/);
|
const lay::ParsedLayerSource &source = cl->source (true /*real*/);
|
||||||
int layer = cl->layer_index ();
|
int layer = cl->layer_index ();
|
||||||
|
|
|
||||||
|
|
@ -879,6 +879,7 @@ LAYBASIC_PUBLIC Class<lay::LayoutViewBase> decl_LayoutViewBase (decl_Dispatcher,
|
||||||
gsi::method ("active_cellview_index=|#active_setview_index=|#set_active_cellview_index", &lay::LayoutViewBase::set_active_cellview_index, gsi::arg ("index"),
|
gsi::method ("active_cellview_index=|#active_setview_index=|#set_active_cellview_index", &lay::LayoutViewBase::set_active_cellview_index, gsi::arg ("index"),
|
||||||
"@brief Makes the cellview with the given index the active one (shown in hierarchy browser)\n"
|
"@brief Makes the cellview with the given index the active one (shown in hierarchy browser)\n"
|
||||||
"See \\active_cellview_index.\n"
|
"See \\active_cellview_index.\n"
|
||||||
|
"Note, that this changing the active cell view index has side effects such as terminating an editing operation.\n"
|
||||||
"\n"
|
"\n"
|
||||||
"This method has been renamed from set_active_cellview_index to active_cellview_index= in version 0.25. "
|
"This method has been renamed from set_active_cellview_index to active_cellview_index= in version 0.25. "
|
||||||
"The original name is still available, but is deprecated."
|
"The original name is still available, but is deprecated."
|
||||||
|
|
|
||||||
|
|
@ -475,6 +475,12 @@ LayoutViewBase::shutdown ()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// NOTE: this must happen before the services are deleted
|
||||||
|
mp_move_service = 0;
|
||||||
|
mp_selection_service = 0;
|
||||||
|
mp_tracker = 0;
|
||||||
|
mp_zoom_service = 0;
|
||||||
|
|
||||||
// delete all plugins
|
// delete all plugins
|
||||||
std::vector<lay::Plugin *> plugins;
|
std::vector<lay::Plugin *> plugins;
|
||||||
plugins.swap (mp_plugins);
|
plugins.swap (mp_plugins);
|
||||||
|
|
@ -4943,6 +4949,19 @@ LayoutViewBase::active_cellview_index () const
|
||||||
return m_active_cellview_index;
|
return m_active_cellview_index;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
LayoutViewBase::set_active_cellview_index_silent (int index)
|
||||||
|
{
|
||||||
|
enable_active_cellview_changed_event (false);
|
||||||
|
try {
|
||||||
|
set_active_cellview_index (index);
|
||||||
|
enable_active_cellview_changed_event (true, true /*silent*/);
|
||||||
|
} catch (...) {
|
||||||
|
enable_active_cellview_changed_event (true, true /*silent*/);
|
||||||
|
throw;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
LayoutViewBase::set_active_cellview_index (int index)
|
LayoutViewBase::set_active_cellview_index (int index)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -2151,6 +2151,12 @@ public:
|
||||||
*/
|
*/
|
||||||
virtual void set_active_cellview_index (int index);
|
virtual void set_active_cellview_index (int index);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Select a certain cellview for the active one
|
||||||
|
* This version does not emit any events while changing the cellview index
|
||||||
|
*/
|
||||||
|
void set_active_cellview_index_silent (int index);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief An event triggered if the active cellview changes
|
* @brief An event triggered if the active cellview changes
|
||||||
* This event is triggered after the active cellview changed.
|
* This event is triggered after the active cellview changed.
|
||||||
|
|
|
||||||
|
|
@ -707,11 +707,41 @@ HierarchyControlPanel::update_required ()
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
HierarchyControlPanel::select_active (int cellview_index)
|
HierarchyControlPanel::select_active (int cellview_index, bool silent)
|
||||||
{
|
{
|
||||||
if (cellview_index != m_active_index) {
|
if (cellview_index != m_active_index) {
|
||||||
mp_selector->setCurrentIndex (cellview_index);
|
mp_selector->setCurrentIndex (cellview_index);
|
||||||
selection_changed (cellview_index);
|
change_active_cellview (cellview_index);
|
||||||
|
if (! silent) {
|
||||||
|
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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -719,32 +749,8 @@ void
|
||||||
HierarchyControlPanel::selection_changed (int index)
|
HierarchyControlPanel::selection_changed (int index)
|
||||||
{
|
{
|
||||||
if (index != m_active_index) {
|
if (index != m_active_index) {
|
||||||
|
change_active_cellview (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);
|
|
||||||
}
|
|
||||||
|
|
||||||
emit active_cellview_changed (index);
|
emit active_cellview_changed (index);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -140,7 +140,7 @@ public:
|
||||||
* selects the active cellview by index. The index must be
|
* selects the active cellview by index. The index must be
|
||||||
* a valid index within the context of the layout view.
|
* a valid index within the context of the layout view.
|
||||||
*/
|
*/
|
||||||
void select_active (int cellview_index);
|
void select_active (int cellview_index, bool silent = false);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Get the active cellview
|
* @brief Get the active cellview
|
||||||
|
|
@ -346,6 +346,9 @@ private:
|
||||||
|
|
||||||
// ask for cell copy mode
|
// 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);
|
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
|
} // namespace lay
|
||||||
|
|
|
||||||
|
|
@ -1392,7 +1392,8 @@ LayoutView::set_active_cellview_index (int index)
|
||||||
{
|
{
|
||||||
if (index >= 0 && index < int (cellviews ())) {
|
if (index >= 0 && index < int (cellviews ())) {
|
||||||
if (mp_hierarchy_panel) {
|
if (mp_hierarchy_panel) {
|
||||||
mp_hierarchy_panel->select_active (index);
|
// NOTE: we don't send events from here, that is done in "LayoutViewBase::set_active_cellview_index"
|
||||||
|
mp_hierarchy_panel->select_active (index, true /*no events*/);
|
||||||
}
|
}
|
||||||
LayoutViewBase::set_active_cellview_index (index);
|
LayoutViewBase::set_active_cellview_index (index);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue