(#419) Removed the inapplicable views from the view drop down

This commit is contained in:
Magne Sjaastad 2015-09-07 13:33:27 +02:00
parent 749c596cbf
commit a884d79aff
4 changed files with 71 additions and 7 deletions

View File

@ -76,16 +76,33 @@ QList<caf::PdmOptionItemInfo> RimManagedViewConfig::calculateValueOptions(const
{ {
RimProject* proj = RiaApplication::instance()->project(); RimProject* proj = RiaApplication::instance()->project();
std::vector<RimView*> views; std::vector<RimView*> views;
proj->allVisibleViews(views); proj->allNotLinkedViews(views);
RimView* masterView = NULL; // Add currently linked view to list
firstAnchestorOrThisOfType(masterView); if (this->managedView())
{
views.push_back(this->managedView());
}
RimLinkedViews* linkedViews = NULL;
this->firstAnchestorOrThisOfType(linkedViews);
for (size_t i = 0; i< views.size(); i++) for (size_t i = 0; i< views.size(); i++)
{ {
if (views[i] != masterView) if (views[i] != linkedViews->mainView())
{ {
optionList.push_back(caf::PdmOptionItemInfo(RimLinkedViews::displayNameForView(views[i]), QVariant::fromValue(caf::PdmPointer<caf::PdmObjectHandle>(views[i])))); RimCase* rimCase = NULL;
views[i]->firstAnchestorOrThisOfType(rimCase);
QIcon icon;
if (rimCase)
{
icon = rimCase->uiCapability()->uiIcon();
}
optionList.push_back(caf::PdmOptionItemInfo(RimLinkedViews::displayNameForView(views[i]),
QVariant::fromValue(caf::PdmPointer<caf::PdmObjectHandle>(views[i])),
false,
icon));
} }
} }
@ -150,13 +167,18 @@ void RimManagedViewConfig::fieldChangedByUi(const caf::PdmFieldHandle* changedFi
configureOverridesUpdateDisplayModel(); configureOverridesUpdateDisplayModel();
if (m_managedView) if (m_managedView)
{
if (syncCellResult())
{ {
RimLinkedViews* linkedViews = NULL; RimLinkedViews* linkedViews = NULL;
this->firstAnchestorOrThisOfType(linkedViews); this->firstAnchestorOrThisOfType(linkedViews);
if (syncCellResult())
{
linkedViews->updateCellResult(); linkedViews->updateCellResult();
} }
if (syncCamera())
{
m_managedView->notifyCameraHasChanged();
}
name = RimLinkedViews::displayNameForView(m_managedView); name = RimLinkedViews::displayNameForView(m_managedView);
} }

View File

@ -464,6 +464,45 @@ void RimProject::allCases(std::vector<RimCase*>& cases)
} }
} }
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimProject::allNotLinkedViews(std::vector<RimView*>& views)
{
std::vector<RimCase*> cases;
allCases(cases);
std::vector<RimView*> alreadyLinkedViews;
for (size_t i = 0; i < linkedViews().size(); i++)
{
RimLinkedViews* viewLinker = linkedViews()[i];
viewLinker->allViews(alreadyLinkedViews);
}
for (size_t caseIdx = 0; caseIdx < cases.size(); caseIdx++)
{
RimCase* rimCase = cases[caseIdx];
if (!rimCase) continue;
std::vector<RimView*> caseViews = rimCase->views();
for (size_t viewIdx = 0; viewIdx < caseViews.size(); viewIdx++)
{
bool isLinked = false;
for (size_t lnIdx = 0; lnIdx < alreadyLinkedViews.size(); lnIdx++)
{
if (caseViews[viewIdx] == alreadyLinkedViews[lnIdx])
{
isLinked = true;
}
}
if (!isLinked)
{
views.push_back(caseViews[viewIdx]);
}
}
}
}
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------

View File

@ -81,6 +81,7 @@ public:
void assignIdToCaseGroup(RimIdenticalGridCaseGroup* caseGroup); void assignIdToCaseGroup(RimIdenticalGridCaseGroup* caseGroup);
void allCases(std::vector<RimCase*>& cases); void allCases(std::vector<RimCase*>& cases);
void allNotLinkedViews(std::vector<RimView*>& views);
void allVisibleViews(std::vector<RimView*>& views); void allVisibleViews(std::vector<RimView*>& views);
void createDisplayModelAndRedrawAllViews(); void createDisplayModelAndRedrawAllViews();

View File

@ -570,6 +570,8 @@ void RimView::setOverrideRangeFilterCollection(RimCellRangeFilterCollection* rfc
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
void RimView::notifyCameraHasChanged() void RimView::notifyCameraHasChanged()
{ {
if (!this->viewer()) return;
std::vector<RimView*> viewsToUpdate; std::vector<RimView*> viewsToUpdate;
viewsToUpdate.push_back(this); viewsToUpdate.push_back(this);