(#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();
std::vector<RimView*> views;
proj->allVisibleViews(views);
proj->allNotLinkedViews(views);
RimView* masterView = NULL;
firstAnchestorOrThisOfType(masterView);
// Add currently linked view to list
if (this->managedView())
{
views.push_back(this->managedView());
}
RimLinkedViews* linkedViews = NULL;
this->firstAnchestorOrThisOfType(linkedViews);
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));
}
}
@ -151,12 +168,17 @@ void RimManagedViewConfig::fieldChangedByUi(const caf::PdmFieldHandle* changedFi
if (m_managedView)
{
RimLinkedViews* linkedViews = NULL;
this->firstAnchestorOrThisOfType(linkedViews);
if (syncCellResult())
{
RimLinkedViews* linkedViews = NULL;
this->firstAnchestorOrThisOfType(linkedViews);
linkedViews->updateCellResult();
}
if (syncCamera())
{
m_managedView->notifyCameraHasChanged();
}
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 allCases(std::vector<RimCase*>& cases);
void allNotLinkedViews(std::vector<RimView*>& views);
void allVisibleViews(std::vector<RimView*>& views);
void createDisplayModelAndRedrawAllViews();

View File

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