@@ -46,7 +46,7 @@ using namespace SCIRun::Render;
4646// ------------------------------------------------------------------------------
4747ViewSceneDialog::ViewSceneDialog (const std::string& name, ModuleStateHandle state,
4848 QWidget* parent /* = 0 */ )
49- : ModuleDialogGeneric(state, parent), mConfigurationDock(0 ), shown_(false ),
49+ : ModuleDialogGeneric(state, parent), mConfigurationDock(0 ), shown_(false ), itemValueChanged_( true ),
5050 itemManager_(new ViewSceneItemManager)
5151{
5252 setupUi (this );
@@ -118,9 +118,7 @@ void ViewSceneDialog::newGeometryValue()
118118 Guard lock (SCIRun::Modules::Render::ViewScene::mutex_.get ());
119119
120120 LOG_DEBUG (" ViewSceneDialog::asyncExecute after locking" );
121-
122- itemManager_->removeAll ();
123-
121+
124122 std::shared_ptr<Render::SRInterface> spire = mSpire .lock ();
125123 if (spire == nullptr )
126124 return ;
@@ -144,23 +142,44 @@ void ViewSceneDialog::newGeometryValue()
144142 }
145143
146144 int port = 0 ;
145+ std::vector<std::string>objectNames;
147146 std::vector<std::string> validObjects;
148147 for (auto it = geomData->begin (); it != geomData->end (); ++it, ++port)
149148 {
150149 boost::shared_ptr<Core::Datatypes::GeometryObject> obj = *it;
151- auto displayName = QString::fromStdString (obj->objectName ).split (' _' ).first ();
152- if (isObjectUnselected (obj->objectName ))
153- {
154- itemManager_->addItem (QString::fromStdString (obj->objectName ), displayName, false );
155- }
156- else
150+ objectNames.push_back (obj->objectName );
151+ if (!isObjectUnselected (obj->objectName ))
157152 {
158153 spire->handleGeomObject (obj, port);
159154 validObjects.push_back (obj->objectName );
160- itemManager_->addItem (QString::fromStdString (obj->objectName ), displayName, true );
161155 }
162156 }
163157 spire->gcInvalidObjects (validObjects);
158+
159+ std::sort (objectNames.begin (), objectNames.end ());
160+ if (previousObjectNames_ != objectNames)
161+ {
162+ itemValueChanged_ = true ;
163+ previousObjectNames_ = objectNames;
164+ }
165+ if (itemValueChanged_)
166+ {
167+ itemManager_->removeAll ();
168+ for (auto it = objectNames.begin (); it != objectNames.end (); ++it)
169+ {
170+ std::string name = *it;
171+ auto displayName = QString::fromStdString (name).split (' _' ).first ();
172+ if (isObjectUnselected (name))
173+ {
174+ itemManager_->addItem (QString::fromStdString (name), displayName, false );
175+ }
176+ else
177+ {
178+ itemManager_->addItem (QString::fromStdString (name), displayName, true );
179+ }
180+ }
181+ itemValueChanged_ = false ;
182+ }
164183 }
165184 else
166185 {
@@ -403,13 +422,15 @@ void ViewSceneDialog::assignBackgroundColor()
403422// ------------------------------------------------------------------------------
404423void ViewSceneDialog::handleUnselectedItem (const QString& name)
405424{
425+ itemValueChanged_ = true ;
406426 unselectedObjectNames_.push_back (name.toStdString ());
407427 newGeometryValue ();
408428}
409429
410430// ------------------------------------------------------------------------------
411431void ViewSceneDialog::handleSelectedItem (const QString& name)
412432{
433+ itemValueChanged_ = true ;
413434 unselectedObjectNames_.erase (std::remove (unselectedObjectNames_.begin (), unselectedObjectNames_.end (), name.toStdString ()), unselectedObjectNames_.end ());
414435 newGeometryValue ();
415436}
0 commit comments