mirror of https://github.com/KLayout/klayout.git
Fixed some flaws in the layer list
- sometimes, layers which were supposed to be hidden were still shown (e.g. after paste, "add other layer views" etc.) - sometimes, layers were only partially hightlighted due to invalid persistent model indexes.
This commit is contained in:
parent
a7c263bc98
commit
9e3183250f
|
|
@ -204,10 +204,10 @@ LayerControlPanel::LayerControlPanel (lay::LayoutView *view, db::Manager *manage
|
|||
mp_view (view),
|
||||
m_needs_update (true),
|
||||
m_tabs_need_update (true),
|
||||
m_hidden_flags_need_update (true),
|
||||
m_in_update (false),
|
||||
m_phase (0),
|
||||
m_do_update_content_dm (this, &LayerControlPanel::do_update_content),
|
||||
m_do_update_hidden_flags_dm (this, &LayerControlPanel::do_update_hidden_flags),
|
||||
m_no_stipples (false)
|
||||
{
|
||||
setObjectName (QString::fromUtf8 (name));
|
||||
|
|
@ -1661,7 +1661,8 @@ LayerControlPanel::set_text_color (QColor c)
|
|||
void
|
||||
LayerControlPanel::update_hidden_flags ()
|
||||
{
|
||||
m_do_update_hidden_flags_dm ();
|
||||
m_hidden_flags_need_update = true;
|
||||
m_do_update_content_dm ();
|
||||
}
|
||||
|
||||
void
|
||||
|
|
@ -1688,6 +1689,7 @@ LayerControlPanel::begin_updates ()
|
|||
if (! m_in_update) {
|
||||
|
||||
m_in_update = true;
|
||||
m_hidden_flags_need_update = true;
|
||||
|
||||
mp_model->signal_begin_layer_changed (); // this makes the view redraw the data
|
||||
|
||||
|
|
@ -1718,6 +1720,7 @@ LayerControlPanel::cancel_updates ()
|
|||
{
|
||||
m_in_update = false;
|
||||
m_needs_update = false;
|
||||
m_hidden_flags_need_update = false;
|
||||
m_tabs_need_update = false;
|
||||
}
|
||||
|
||||
|
|
@ -1833,7 +1836,7 @@ LayerControlPanel::do_update_content ()
|
|||
mp_layer_list->setCurrentIndex(QModelIndex());
|
||||
|
||||
// this makes the view redraw the data and establishes a valid selection scheme
|
||||
mp_model->signal_layer_changed ();
|
||||
mp_model->signal_layers_changed ();
|
||||
|
||||
// now realize the selection if required
|
||||
if (! m_new_sel.empty ()) {
|
||||
|
|
@ -1875,6 +1878,14 @@ LayerControlPanel::do_update_content ()
|
|||
} else {
|
||||
mp_model->signal_data_changed (); // this makes the view redraw the data
|
||||
}
|
||||
|
||||
if (m_hidden_flags_need_update) {
|
||||
|
||||
do_update_hidden_flags ();
|
||||
|
||||
m_hidden_flags_need_update = false;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
|
|
@ -2007,7 +2018,7 @@ LayerControlPanel::update_required (int f)
|
|||
}
|
||||
|
||||
if ((f & 3) != 0) {
|
||||
m_do_update_hidden_flags_dm ();
|
||||
m_hidden_flags_need_update = true;
|
||||
}
|
||||
|
||||
m_do_update_content_dm ();
|
||||
|
|
|
|||
|
|
@ -341,10 +341,11 @@ private:
|
|||
lay::LayoutView *mp_view;
|
||||
bool m_needs_update;
|
||||
bool m_tabs_need_update;
|
||||
bool m_hidden_flags_need_update;
|
||||
bool m_in_update;
|
||||
std::vector<size_t> m_new_sel;
|
||||
int m_phase;
|
||||
tl::DeferredMethod<LayerControlPanel> m_do_update_content_dm, m_do_update_hidden_flags_dm;
|
||||
tl::DeferredMethod<LayerControlPanel> m_do_update_content_dm;
|
||||
std::set<unsigned int> m_expanded;
|
||||
bool m_no_stipples;
|
||||
QLabel *m_no_stipples_label;
|
||||
|
|
|
|||
|
|
@ -421,9 +421,9 @@ LayerTreeModel::signal_begin_layer_changed ()
|
|||
}
|
||||
|
||||
void
|
||||
LayerTreeModel::signal_layer_changed ()
|
||||
LayerTreeModel::signal_layers_changed ()
|
||||
{
|
||||
// establish a new range of valid iterator indices
|
||||
// establish a new range of valid iterator indices
|
||||
m_id_start = m_id_end;
|
||||
|
||||
// TODO: is there a more efficient way to compute that?
|
||||
|
|
@ -433,6 +433,21 @@ LayerTreeModel::signal_layer_changed ()
|
|||
}
|
||||
m_id_end += max_id + 1;
|
||||
|
||||
// update the persistent indexes
|
||||
|
||||
QModelIndexList indexes = persistentIndexList ();
|
||||
QModelIndexList new_indexes;
|
||||
for (QModelIndexList::const_iterator i = indexes.begin (); i != indexes.end (); ++i) {
|
||||
lay::LayerPropertiesConstIterator li = iterator (*i);
|
||||
if (! li.at_end ()) {
|
||||
new_indexes.push_back (createIndex (li.child_index (), i->column (), (void *) (li.uint () + m_id_start)));
|
||||
} else {
|
||||
new_indexes.push_back (QModelIndex ());
|
||||
}
|
||||
}
|
||||
|
||||
changePersistentIndexList (indexes, new_indexes);
|
||||
|
||||
m_test_shapes_cache.clear ();
|
||||
emit layoutChanged ();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -235,11 +235,12 @@ public:
|
|||
/**
|
||||
* @brief emit a layoutChanged signal
|
||||
*/
|
||||
void signal_layer_changed ();
|
||||
void signal_layers_changed ();
|
||||
|
||||
signals:
|
||||
/**
|
||||
* @brief This signal is emitted to indicate
|
||||
* @brief This signal is emitted to indicate the hidden flags need update by the client
|
||||
* Note this is neither done by the view nor the model. It needs to be implemented elsewhere.
|
||||
*/
|
||||
void hidden_flags_need_update ();
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue