mirror of https://github.com/KLayout/klayout.git
Multiple stacks for net tracer - finished selection box in net tracer dialog
This commit is contained in:
parent
511f55d4da
commit
7b4b345cf4
|
|
@ -1631,6 +1631,14 @@ LAYBASIC_PUBLIC Class<lay::LayoutViewBase> decl_LayoutViewBase ("lay", "LayoutVi
|
||||||
"Before version 0.25 this event was based on the observer pattern obsolete now. The corresponding methods "
|
"Before version 0.25 this event was based on the observer pattern obsolete now. The corresponding methods "
|
||||||
"(add_cellview_observer/remove_cellview_observer) have been removed in 0.25.\n"
|
"(add_cellview_observer/remove_cellview_observer) have been removed in 0.25.\n"
|
||||||
) +
|
) +
|
||||||
|
gsi::event ("on_apply_technology", static_cast<tl::event<int> (lay::LayoutViewBase::*)> (&lay::LayoutViewBase::apply_technology_event), gsi::arg ("cellview_index"),
|
||||||
|
"@brief An event indicating that a cellview has requested a new technology\n"
|
||||||
|
"\n"
|
||||||
|
"If the technology of a cellview is changed, this event is triggered.\n"
|
||||||
|
"The integer parameter of this event will indicate the cellview that has changed.\n"
|
||||||
|
"\n"
|
||||||
|
"This event has been introduced in version 0.28.\n"
|
||||||
|
) +
|
||||||
gsi::event ("on_file_open", static_cast<tl::Event (lay::LayoutViewBase::*)> (&lay::LayoutViewBase::file_open_event),
|
gsi::event ("on_file_open", static_cast<tl::Event (lay::LayoutViewBase::*)> (&lay::LayoutViewBase::file_open_event),
|
||||||
"@brief An event indicating that a file was opened\n"
|
"@brief An event indicating that a file was opened\n"
|
||||||
"\n"
|
"\n"
|
||||||
|
|
|
||||||
|
|
@ -2314,6 +2314,8 @@ LayoutViewBase::signal_apply_technology (lay::LayoutHandle *layout_handle)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
apply_technology_event (int (i));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -677,6 +677,14 @@ public:
|
||||||
*/
|
*/
|
||||||
tl::event<int> cellview_changed_event;
|
tl::event<int> cellview_changed_event;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief A event signalling that one cellview has requested a new technology
|
||||||
|
*
|
||||||
|
* This event is triggered if a cellview has requested a new technology.
|
||||||
|
* The argument is the index of the cellview that received the new technology.
|
||||||
|
*/
|
||||||
|
tl::event<int> apply_technology_event;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief An event signalling that a file has been loaded.
|
* @brief An event signalling that a file has been loaded.
|
||||||
*
|
*
|
||||||
|
|
|
||||||
|
|
@ -29,24 +29,14 @@
|
||||||
<property name="spacing">
|
<property name="spacing">
|
||||||
<number>6</number>
|
<number>6</number>
|
||||||
</property>
|
</property>
|
||||||
<item row="3" column="0" rowspan="2" colspan="8">
|
<item row="3" column="0" rowspan="2" colspan="9">
|
||||||
<widget class="Line" name="line">
|
<widget class="Line" name="line">
|
||||||
<property name="orientation">
|
<property name="orientation">
|
||||||
<enum>Qt::Horizontal</enum>
|
<enum>Qt::Horizontal</enum>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="5" column="0" rowspan="2">
|
<item row="1" column="0" colspan="9">
|
||||||
<widget class="QPushButton" name="configure_pb">
|
|
||||||
<property name="text">
|
|
||||||
<string>Configure</string>
|
|
||||||
</property>
|
|
||||||
<property name="autoDefault">
|
|
||||||
<bool>false</bool>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="1" column="0" colspan="8">
|
|
||||||
<widget class="QLabel" name="label_2">
|
<widget class="QLabel" name="label_2">
|
||||||
<property name="sizePolicy">
|
<property name="sizePolicy">
|
||||||
<sizepolicy hsizetype="Preferred" vsizetype="Minimum">
|
<sizepolicy hsizetype="Preferred" vsizetype="Minimum">
|
||||||
|
|
@ -67,7 +57,7 @@ Select one or multiple nets and choose "Export" to export the selected
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="2" column="7">
|
<item row="2" column="8">
|
||||||
<widget class="QFrame" name="frame">
|
<widget class="QFrame" name="frame">
|
||||||
<property name="minimumSize">
|
<property name="minimumSize">
|
||||||
<size>
|
<size>
|
||||||
|
|
@ -196,60 +186,7 @@ Select one or multiple nets and choose "Export" to export the selected
|
||||||
</layout>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="5" column="2">
|
<item row="2" column="0" colspan="8">
|
||||||
<spacer name="horizontalSpacer">
|
|
||||||
<property name="orientation">
|
|
||||||
<enum>Qt::Horizontal</enum>
|
|
||||||
</property>
|
|
||||||
<property name="sizeType">
|
|
||||||
<enum>QSizePolicy::Fixed</enum>
|
|
||||||
</property>
|
|
||||||
<property name="sizeHint" stdset="0">
|
|
||||||
<size>
|
|
||||||
<width>5</width>
|
|
||||||
<height>20</height>
|
|
||||||
</size>
|
|
||||||
</property>
|
|
||||||
</spacer>
|
|
||||||
</item>
|
|
||||||
<item row="5" column="3" rowspan="2">
|
|
||||||
<widget class="QLabel" name="label_5">
|
|
||||||
<property name="text">
|
|
||||||
<string>Trace depth:</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="5" column="7" rowspan="2">
|
|
||||||
<widget class="QPushButton" name="close_pb">
|
|
||||||
<property name="text">
|
|
||||||
<string>Close</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="5" column="6" rowspan="2">
|
|
||||||
<widget class="QLabel" name="tech_info_label">
|
|
||||||
<property name="sizePolicy">
|
|
||||||
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
|
|
||||||
<horstretch>1</horstretch>
|
|
||||||
<verstretch>0</verstretch>
|
|
||||||
</sizepolicy>
|
|
||||||
</property>
|
|
||||||
<property name="text">
|
|
||||||
<string/>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="5" column="1" rowspan="2">
|
|
||||||
<widget class="QPushButton" name="stack_pb">
|
|
||||||
<property name="text">
|
|
||||||
<string>Layer Stack</string>
|
|
||||||
</property>
|
|
||||||
<property name="autoDefault">
|
|
||||||
<bool>false</bool>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="2" column="0" colspan="7">
|
|
||||||
<widget class="QSplitter" name="splitter">
|
<widget class="QSplitter" name="splitter">
|
||||||
<property name="sizePolicy">
|
<property name="sizePolicy">
|
||||||
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
|
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
|
||||||
|
|
@ -332,7 +269,6 @@ Select one or multiple nets and choose "Export" to export the selected
|
||||||
<property name="font">
|
<property name="font">
|
||||||
<font>
|
<font>
|
||||||
<pointsize>12</pointsize>
|
<pointsize>12</pointsize>
|
||||||
<weight>75</weight>
|
|
||||||
<bold>true</bold>
|
<bold>true</bold>
|
||||||
</font>
|
</font>
|
||||||
</property>
|
</property>
|
||||||
|
|
@ -477,7 +413,23 @@ p, li { white-space: pre-wrap; }
|
||||||
</widget>
|
</widget>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="0" column="0" colspan="8">
|
<item row="5" column="3">
|
||||||
|
<spacer name="horizontalSpacer">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeType">
|
||||||
|
<enum>QSizePolicy::Fixed</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" stdset="0">
|
||||||
|
<size>
|
||||||
|
<width>5</width>
|
||||||
|
<height>20</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="0" colspan="9">
|
||||||
<widget class="QLabel" name="label_3">
|
<widget class="QLabel" name="label_3">
|
||||||
<property name="sizePolicy">
|
<property name="sizePolicy">
|
||||||
<sizepolicy hsizetype="Preferred" vsizetype="Minimum">
|
<sizepolicy hsizetype="Preferred" vsizetype="Minimum">
|
||||||
|
|
@ -488,7 +440,6 @@ p, li { white-space: pre-wrap; }
|
||||||
<property name="font">
|
<property name="font">
|
||||||
<font>
|
<font>
|
||||||
<pointsize>12</pointsize>
|
<pointsize>12</pointsize>
|
||||||
<weight>75</weight>
|
|
||||||
<italic>false</italic>
|
<italic>false</italic>
|
||||||
<bold>true</bold>
|
<bold>true</bold>
|
||||||
</font>
|
</font>
|
||||||
|
|
@ -498,14 +449,54 @@ p, li { white-space: pre-wrap; }
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="5" column="5" rowspan="2">
|
<item row="5" column="2">
|
||||||
|
<widget class="QComboBox" name="stack_selector">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Preferred" vsizetype="Ignored">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="sizeAdjustPolicy">
|
||||||
|
<enum>QComboBox::AdjustToContents</enum>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="5" column="1">
|
||||||
|
<widget class="QPushButton" name="stack_pb">
|
||||||
|
<property name="text">
|
||||||
|
<string>Layer Stack</string>
|
||||||
|
</property>
|
||||||
|
<property name="autoDefault">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="5" column="0">
|
||||||
|
<widget class="QPushButton" name="configure_pb">
|
||||||
|
<property name="text">
|
||||||
|
<string>Configure</string>
|
||||||
|
</property>
|
||||||
|
<property name="autoDefault">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="5" column="8">
|
||||||
|
<widget class="QPushButton" name="close_pb">
|
||||||
|
<property name="text">
|
||||||
|
<string>Close</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="5" column="6">
|
||||||
<widget class="QLabel" name="label_6">
|
<widget class="QLabel" name="label_6">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>shapes</string>
|
<string>shapes</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="5" column="4" rowspan="2">
|
<item row="5" column="5">
|
||||||
<widget class="QLineEdit" name="depth_le">
|
<widget class="QLineEdit" name="depth_le">
|
||||||
<property name="sizePolicy">
|
<property name="sizePolicy">
|
||||||
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
|
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
|
||||||
|
|
@ -521,6 +512,26 @@ p, li { white-space: pre-wrap; }
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
<item row="5" column="4">
|
||||||
|
<widget class="QLabel" name="label_5">
|
||||||
|
<property name="text">
|
||||||
|
<string>Trace depth:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="5" column="7">
|
||||||
|
<widget class="QLabel" name="tech_info_label">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
|
||||||
|
<horstretch>1</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string/>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
<customwidgets>
|
<customwidgets>
|
||||||
|
|
|
||||||
|
|
@ -92,7 +92,9 @@ NetTracerDialog::NetTracerDialog (lay::Dispatcher *root, LayoutViewBase *view)
|
||||||
|
|
||||||
view->layer_list_changed_event.add (this, &NetTracerDialog::layer_list_changed);
|
view->layer_list_changed_event.add (this, &NetTracerDialog::layer_list_changed);
|
||||||
|
|
||||||
|
attach_events ();
|
||||||
update_info ();
|
update_info ();
|
||||||
|
update_list_of_stacks ();
|
||||||
}
|
}
|
||||||
|
|
||||||
NetTracerDialog::~NetTracerDialog ()
|
NetTracerDialog::~NetTracerDialog ()
|
||||||
|
|
@ -101,6 +103,69 @@ NetTracerDialog::~NetTracerDialog ()
|
||||||
clear_nets ();
|
clear_nets ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
NetTracerDialog::attach_events ()
|
||||||
|
{
|
||||||
|
detach_from_all_events ();
|
||||||
|
|
||||||
|
mp_view->layer_list_changed_event.add (this, &NetTracerDialog::layer_list_changed);
|
||||||
|
|
||||||
|
db::Technologies::instance ()->technology_changed_event.add (this, &NetTracerDialog::update_list_of_stacks_with_technology);
|
||||||
|
db::Technologies::instance ()->technologies_changed_event.add (this, &NetTracerDialog::update_list_of_stacks);
|
||||||
|
|
||||||
|
mp_view->cellviews_changed_event.add (this, &NetTracerDialog::update_list_of_stacks);
|
||||||
|
mp_view->apply_technology_event.add (this, &NetTracerDialog::update_list_of_stacks_with_cellview);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
NetTracerDialog::update_list_of_stacks_with_technology (db::Technology *)
|
||||||
|
{
|
||||||
|
update_list_of_stacks ();
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
NetTracerDialog::update_list_of_stacks_with_cellview (int)
|
||||||
|
{
|
||||||
|
update_list_of_stacks ();
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
NetTracerDialog::update_list_of_stacks ()
|
||||||
|
{
|
||||||
|
QString current_name = stack_selector->currentText ();
|
||||||
|
|
||||||
|
std::set<QString> names;
|
||||||
|
for (unsigned int cvi = 0; cvi < mp_view->cellviews (); ++cvi) {
|
||||||
|
const db::Technology *tech = mp_view->cellview (cvi)->technology ();
|
||||||
|
if (tech) {
|
||||||
|
const db::NetTracerTechnologyComponent *tech_component = dynamic_cast <const db::NetTracerTechnologyComponent *> (tech->component_by_name (db::net_tracer_component_name ()));
|
||||||
|
if (tech_component) {
|
||||||
|
for (auto d = tech_component->begin (); d != tech_component->end (); ++d) {
|
||||||
|
names.insert (tl::to_qstring (d->name ()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
stack_selector->clear ();
|
||||||
|
|
||||||
|
int current_index = 0;
|
||||||
|
int i = 0;
|
||||||
|
for (auto n = names.begin (); n != names.end (); ++n, ++i) {
|
||||||
|
if (n->isEmpty ()) {
|
||||||
|
stack_selector->addItem (tr ("(default)"), QVariant (*n));
|
||||||
|
} else {
|
||||||
|
stack_selector->addItem (*n, QVariant (*n));
|
||||||
|
}
|
||||||
|
if (*n == current_name) {
|
||||||
|
current_index = i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
stack_selector->setVisible (stack_selector->count () >= 2);
|
||||||
|
stack_selector->setCurrentIndex (current_index);
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
NetTracerDialog::clear_nets ()
|
NetTracerDialog::clear_nets ()
|
||||||
{
|
{
|
||||||
|
|
@ -290,14 +355,27 @@ NetTracerDialog::get_net_tracer_setup (const lay::CellView &cv, db::NetTracerDat
|
||||||
if (! tech) {
|
if (! tech) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
const db::NetTracerConnectivity *tech_component = dynamic_cast <const db::NetTracerConnectivity *> (tech->component_by_name (db::net_tracer_component_name ()));
|
|
||||||
|
const db::NetTracerTechnologyComponent *tech_component = dynamic_cast <const db::NetTracerTechnologyComponent *> (tech->component_by_name (db::net_tracer_component_name ()));
|
||||||
if (! tech_component) {
|
if (! tech_component) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set up the net tracer environment
|
std::string stack_name = tl::to_string (stack_selector->itemData (stack_selector->currentIndex ()).toString ());
|
||||||
data = tech_component->get_tracer_data (cv->layout ());
|
|
||||||
|
|
||||||
|
const db::NetTracerConnectivity *connectivity = 0;
|
||||||
|
for (auto d = tech_component->begin (); d != tech_component->end () && ! connectivity; ++d) {
|
||||||
|
if (d->name () == stack_name) {
|
||||||
|
connectivity = d.operator-> ();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (! connectivity) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Set up the net tracer environment
|
||||||
|
data = connectivity->get_tracer_data (cv->layout ());
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -545,6 +623,7 @@ NetTracerDialog::configure (const std::string &name, const std::string &value)
|
||||||
update_highlights ();
|
update_highlights ();
|
||||||
adjust_view ();
|
adjust_view ();
|
||||||
update_info ();
|
update_info ();
|
||||||
|
update_list_of_stacks ();
|
||||||
}
|
}
|
||||||
|
|
||||||
return taken;
|
return taken;
|
||||||
|
|
@ -1243,6 +1322,7 @@ BEGIN_PROTECTED
|
||||||
lay::TechComponentSetupDialog dialog (this, &tech, db::net_tracer_component_name ());
|
lay::TechComponentSetupDialog dialog (this, &tech, db::net_tracer_component_name ());
|
||||||
if (dialog.exec ()) {
|
if (dialog.exec ()) {
|
||||||
*db::Technologies::instance ()->technology_by_name (tech.name ()) = tech;
|
*db::Technologies::instance ()->technology_by_name (tech.name ()) = tech;
|
||||||
|
update_list_of_stacks ();
|
||||||
}
|
}
|
||||||
|
|
||||||
END_PROTECTED
|
END_PROTECTED
|
||||||
|
|
|
||||||
|
|
@ -112,6 +112,11 @@ private:
|
||||||
|
|
||||||
void commit ();
|
void commit ();
|
||||||
size_t get_trace_depth ();
|
size_t get_trace_depth ();
|
||||||
|
void attach_events ();
|
||||||
|
void update_list_of_stacks_with_technology (db::Technology *);
|
||||||
|
void update_list_of_stacks_with_cellview (int);
|
||||||
|
void update_list_of_stacks ();
|
||||||
|
|
||||||
void update_highlights ();
|
void update_highlights ();
|
||||||
void adjust_view ();
|
void adjust_view ();
|
||||||
void clear_markers ();
|
void clear_markers ();
|
||||||
|
|
|
||||||
|
|
@ -300,8 +300,6 @@ NetTracerTechComponentEditor::del_clicked ()
|
||||||
selected_rows.insert (i->row ());
|
selected_rows.insert (i->row ());
|
||||||
}
|
}
|
||||||
|
|
||||||
stack_tree->setCurrentIndex (QModelIndex ());
|
|
||||||
|
|
||||||
int offset = 0;
|
int offset = 0;
|
||||||
for (std::set<int>::const_iterator r = selected_rows.begin (); r != selected_rows.end (); ++r) {
|
for (std::set<int>::const_iterator r = selected_rows.begin (); r != selected_rows.end (); ++r) {
|
||||||
m_data.erase (m_data.begin () + (*r - offset));
|
m_data.erase (m_data.begin () + (*r - offset));
|
||||||
|
|
@ -309,6 +307,7 @@ NetTracerTechComponentEditor::del_clicked ()
|
||||||
}
|
}
|
||||||
|
|
||||||
update ();
|
update ();
|
||||||
|
stack_tree->setCurrentItem (0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
@ -345,11 +344,10 @@ NetTracerTechComponentEditor::move_up_clicked ()
|
||||||
|
|
||||||
// select the new items
|
// select the new items
|
||||||
for (std::set <int>::const_iterator s = selected_rows.begin (); s != selected_rows.end (); ++s) {
|
for (std::set <int>::const_iterator s = selected_rows.begin (); s != selected_rows.end (); ++s) {
|
||||||
stack_tree->selectionModel ()->select (stack_tree->model ()->index (*s, 0), QItemSelectionModel::Select | QItemSelectionModel::Rows);
|
stack_tree->topLevelItem (*s)->setSelected (true);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (n_current >= 0) {
|
if (n_current >= 0) {
|
||||||
stack_tree->selectionModel ()->select (stack_tree->model ()->index (n_current, 0), QItemSelectionModel::Current | QItemSelectionModel::Rows);
|
stack_tree->setCurrentItem (stack_tree->topLevelItem (n_current), 0, QItemSelectionModel::Current);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -389,11 +387,10 @@ NetTracerTechComponentEditor::move_down_clicked ()
|
||||||
|
|
||||||
// select the new items
|
// select the new items
|
||||||
for (std::set <int>::const_iterator s = selected_rows.begin (); s != selected_rows.end (); ++s) {
|
for (std::set <int>::const_iterator s = selected_rows.begin (); s != selected_rows.end (); ++s) {
|
||||||
stack_tree->selectionModel ()->select (stack_tree->model ()->index (*s, 0), QItemSelectionModel::Select | QItemSelectionModel::Rows);
|
stack_tree->topLevelItem (*s)->setSelected (true);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (n_current >= 0) {
|
if (n_current >= 0) {
|
||||||
stack_tree->selectionModel ()->select (stack_tree->model ()->index (n_current, 0), QItemSelectionModel::Current | QItemSelectionModel::Rows);
|
stack_tree->setCurrentItem (stack_tree->topLevelItem (n_current), 0, QItemSelectionModel::Current);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue