Skip to content

Commit e062331

Browse files
committed
Merge pull request #858 from SCIInstitute/sort_object_list
Closes #841
2 parents fb54072 + dddbda5 commit e062331

File tree

2 files changed

+34
-11
lines changed

2 files changed

+34
-11
lines changed

src/Interface/Modules/Render/ViewScene.cc

Lines changed: 32 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ using namespace SCIRun::Render;
4646
//------------------------------------------------------------------------------
4747
ViewSceneDialog::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
//------------------------------------------------------------------------------
404423
void ViewSceneDialog::handleUnselectedItem(const QString& name)
405424
{
425+
itemValueChanged_ = true;
406426
unselectedObjectNames_.push_back(name.toStdString());
407427
newGeometryValue();
408428
}
409429

410430
//------------------------------------------------------------------------------
411431
void 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
}

src/Interface/Modules/Render/ViewScene.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,8 +118,10 @@ namespace SCIRun {
118118
bool shown_;
119119
bool hideViewBar_;
120120
bool showConfiguration_;
121+
bool itemValueChanged_;
121122
std::shared_ptr<class ViewSceneItemManager> itemManager_;
122123
std::vector<std::string> unselectedObjectNames_;
124+
std::vector<std::string> previousObjectNames_;
123125

124126
friend class ViewSceneControlsDock;
125127
};

0 commit comments

Comments
 (0)