Linked Views: Refactored and cleaned up more. Refactored some features.

This commit is contained in:
Jacob Støren
2015-09-24 14:29:13 +02:00
parent 5e0505dfe8
commit d83d9e967b
10 changed files with 131 additions and 240 deletions

View File

@@ -42,25 +42,25 @@ bool RicLinkViewFeature::isCommandEnabled()
RimView* activeView = RiaApplication::instance()->activeReservoirView(); RimView* activeView = RiaApplication::instance()->activeReservoirView();
if (!activeView) return false; if (!activeView) return false;
RimProject* proj = RiaApplication::instance()->project(); RimViewController* viewController = activeView->controllingViewLink();
if (!proj->findViewLinkerFromView(activeView))
if(viewController)
{ {
RimViewLinkerCollection* viewLinkerCollection = proj->viewLinkerCollection(); return false;
if (viewLinkerCollection) }
else
{ {
RimViewLinker* viewLinker = viewLinkerCollection->viewLinker(); RimViewLinker* vLinker = RimViewLinker::viewLinkerIfMainView(activeView);
if (viewLinker) if (!vLinker)
{
if (viewLinker->viewLinks().size() > 0)
{ {
return true; return true;
} }
} else
} {
}
return false; return false;
} }
}
}
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///

View File

@@ -125,29 +125,9 @@ void RicLinkVisibleViewsFeature::findNotLinkedVisibleViews(std::vector<RimView*>
void RicLinkVisibleViewsFeature::linkViews(std::vector<RimView*>& views) void RicLinkVisibleViewsFeature::linkViews(std::vector<RimView*>& views)
{ {
RimProject* proj = RiaApplication::instance()->project(); RimProject* proj = RiaApplication::instance()->project();
RimViewLinker* viewLinker = NULL; RimViewLinker* viewLinker = proj->viewLinkerCollection->viewLinker();
if (proj->viewLinkerCollection->viewLinker()) if (!viewLinker)
{
// We have a view linker, add not already linked views
viewLinker = proj->viewLinkerCollection->viewLinker();
for (size_t i = 0; i < views.size(); i++)
{
RimView* rimView = views[i];
if (rimView == viewLinker->masterView()) continue;
RimViewController* viewLink = new RimViewController;
viewLink->setManagedView(rimView);
viewLinker->viewLinks.push_back(viewLink);
viewLink->initAfterReadRecursively();
viewLink->updateOptionSensitivity();
viewLink->updateUiIconFromActiveState();
}
}
else
{ {
// Create a new view linker // Create a new view linker
@@ -167,35 +147,23 @@ void RicLinkVisibleViewsFeature::linkViews(std::vector<RimView*>& views)
viewLinker = new RimViewLinker; viewLinker = new RimViewLinker;
proj->viewLinkerCollection()->viewLinker = viewLinker; proj->viewLinkerCollection()->viewLinker = viewLinker;
viewLinker->setMasterView(masterView); viewLinker->setMasterView(masterView);
}
for (size_t i = 0; i < views.size(); i++) for (size_t i = 0; i < views.size(); i++)
{ {
RimView* rimView = views[i]; RimView* rimView = views[i];
if (rimView == masterView) continue; if (rimView == viewLinker->masterView()) continue;
RimViewController* viewLink = new RimViewController; viewLinker->addDependentView(rimView);
viewLink->setManagedView(rimView);
viewLinker->viewLinks.push_back(viewLink);
viewLink->initAfterReadRecursively();
viewLink->updateOptionSensitivity();
viewLink->updateUiIconFromActiveState();
} }
viewLinker->updateUiIcon(); viewLinker->updateUiNameAndIcon();
} viewLinker->updateDependentViews();
viewLinker->applyAllOperations();
proj->viewLinkerCollection.uiCapability()->updateConnectedEditors(); proj->viewLinkerCollection.uiCapability()->updateConnectedEditors();
proj->updateConnectedEditors(); proj->updateConnectedEditors();
// Set managed view collection to selected and expanded in project tree RiuMainWindow::instance()->projectTreeView()->setExpanded(viewLinker, true);
caf::PdmUiTreeView* projTreeView = RiuMainWindow::instance()->projectTreeView();
QModelIndex modIndex = projTreeView->findModelIndex(viewLinker);
projTreeView->treeView()->setCurrentIndex(modIndex);
projTreeView->treeView()->setExpanded(modIndex, true);
} }

View File

@@ -70,51 +70,18 @@ void RicSetMasterViewFeature::onActionTriggered(bool isChecked)
RimView* previousMasterView = viewLinker->masterView(); RimView* previousMasterView = viewLinker->masterView();
RimViewController* previousViewLink = RimViewLinker::viewLinkForView(activeView);
if (previousViewLink)
{
size_t indexToErase = cvf::UNDEFINED_SIZE_T;
for (size_t i = 0; i < viewLinker->viewLinks.size(); i++)
{
if (viewLinker->viewLinks()[i] == previousViewLink)
{
indexToErase = i;
}
}
if (indexToErase != cvf::UNDEFINED_SIZE_T)
{
viewLinker->viewLinks().erase(indexToErase);
}
delete previousViewLink;
}
viewLinker->removeOverrides();
viewLinker->setMasterView(activeView); viewLinker->setMasterView(activeView);
viewLinker->addDependentView(previousMasterView);
if (previousMasterView) viewLinker->updateDependentViews();
{
RimViewController* viewLink = new RimViewController;
viewLink->setManagedView(previousMasterView);
viewLinker->viewLinks.push_back(viewLink);
viewLink->initAfterReadRecursively();
viewLink->updateOptionSensitivity();
viewLink->updateUiIconFromActiveState();
}
viewLinker->applyAllOperations();
proj->viewLinkerCollection.uiCapability()->updateConnectedEditors(); proj->viewLinkerCollection.uiCapability()->updateConnectedEditors();
proj->updateConnectedEditors(); proj->updateConnectedEditors();
// Set managed view collection to selected and expanded in project tree // Set managed view collection to selected and expanded in project tree
caf::PdmUiTreeView* projTreeView = RiuMainWindow::instance()->projectTreeView(); caf::PdmUiTreeView* projTreeView = RiuMainWindow::instance()->projectTreeView();
QModelIndex modIndex = projTreeView->findModelIndex(viewLinker); projTreeView->selectAsCurrentItem(viewLinker);
projTreeView->treeView()->setCurrentIndex(modIndex); projTreeView->setExpanded(viewLinker, true);
projTreeView->treeView()->setExpanded(modIndex, true);
} }
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------

View File

@@ -42,8 +42,9 @@ bool RicShowLinkOptionsFeature::isCommandEnabled()
RimView* activeView = RiaApplication::instance()->activeReservoirView(); RimView* activeView = RiaApplication::instance()->activeReservoirView();
if (!activeView) return false; if (!activeView) return false;
RimProject* proj = RiaApplication::instance()->project(); RimViewController* viewController = activeView->controllingViewLink();
if (proj->findViewLinkerFromView(activeView))
if (viewController)
{ {
return true; return true;
} }
@@ -59,28 +60,9 @@ void RicShowLinkOptionsFeature::onActionTriggered(bool isChecked)
RimView* activeView = RiaApplication::instance()->activeReservoirView(); RimView* activeView = RiaApplication::instance()->activeReservoirView();
if (!activeView) return; if (!activeView) return;
RimProject* proj = RiaApplication::instance()->project(); RimViewController* viewController = activeView->controllingViewLink();
RimViewLinker* viewLinker = proj->findViewLinkerFromView(activeView);
if (viewLinker)
{
if (viewLinker->masterView() == activeView)
{
RiuMainWindow::instance()->projectTreeView()->selectAsCurrentItem(viewLinker);
return; RiuMainWindow::instance()->projectTreeView()->selectAsCurrentItem(viewController);
}
for (size_t i = 0; i < viewLinker->viewLinks.size(); i++)
{
RimViewController* viewLink = viewLinker->viewLinks[i];
if (viewLink->managedView() == activeView)
{
RiuMainWindow::instance()->projectTreeView()->selectAsCurrentItem(viewLink);
return;
}
}
}
} }
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------

View File

@@ -40,19 +40,15 @@ bool RicUnLinkViewFeature::isCommandEnabled()
RimView* activeView = RiaApplication::instance()->activeReservoirView(); RimView* activeView = RiaApplication::instance()->activeReservoirView();
if (!activeView) return false; if (!activeView) return false;
RimProject* proj = RiaApplication::instance()->project(); RimViewController* viewController = activeView->controllingViewLink();
RimViewLinker* viewLinker = proj->findViewLinkerFromView(activeView);
if (viewLinker)
{
if (viewLinker->masterView() == activeView)
{
return false;
}
if (viewController)
{
return true; return true;
} }
return false; return false;
} }
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
@@ -63,16 +59,8 @@ void RicUnLinkViewFeature::onActionTriggered(bool isChecked)
RimView* activeView = RiaApplication::instance()->activeReservoirView(); RimView* activeView = RiaApplication::instance()->activeReservoirView();
if (!activeView) return; if (!activeView) return;
RimProject* proj = RiaApplication::instance()->project(); RimViewController* viewController = activeView->controllingViewLink();
RimViewLinker* viewLinker = proj->findViewLinkerFromView(activeView); caf::SelectionManager::instance()->setSelectedItem(viewController);
if (viewLinker)
{
for (size_t i = 0; i < viewLinker->viewLinks.size(); i++)
{
RimViewController* viewLink = viewLinker->viewLinks[i];
if (viewLink->managedView() == activeView)
{
caf::SelectionManager::instance()->setSelectedItem(viewLink);
caf::CmdFeature* feature = caf::CmdFeatureManager::instance()->getCommandFeature("RicDeleteItemFeature"); caf::CmdFeature* feature = caf::CmdFeatureManager::instance()->getCommandFeature("RicDeleteItemFeature");
if (feature) if (feature)
@@ -82,9 +70,6 @@ void RicUnLinkViewFeature::onActionTriggered(bool isChecked)
return; return;
} }
} }
}
}
}
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///

View File

@@ -147,7 +147,7 @@ void RimViewController::fieldChangedByUi(const caf::PdmFieldHandle* changedField
{ {
if (changedField == &isActive) if (changedField == &isActive)
{ {
updateUiIconFromActiveState(); updateDisplayNameAndIcon();
if (syncCamera()) doSyncCamera(); if (syncCamera()) doSyncCamera();
if (syncTimeStep()) doSyncTimeStep(); if (syncTimeStep()) doSyncTimeStep();
if (syncCellResult()) doSyncCellResult(); if (syncCellResult()) doSyncCellResult();
@@ -228,7 +228,6 @@ void RimViewController::fieldChangedByUi(const caf::PdmFieldHandle* changedField
updateOptionSensitivity(); updateOptionSensitivity();
updateDisplayNameAndIcon(); updateDisplayNameAndIcon();
updateUiIconFromActiveState();
name.uiCapability()->updateConnectedEditors(); name.uiCapability()->updateConnectedEditors();
} }
@@ -246,7 +245,6 @@ void RimViewController::initAfterRead()
{ {
configureOverrides(); configureOverrides();
updateDisplayNameAndIcon(); updateDisplayNameAndIcon();
updateUiIconFromActiveState();
updateOptionSensitivity(); updateOptionSensitivity();
} }
@@ -458,20 +456,13 @@ void RimViewController::removeOverrides()
} }
} }
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimViewController::updateUiIconFromActiveState()
{
RimViewLinker::applyIconEnabledState(this, m_originalIcon, !isActive());
}
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
void RimViewController::updateDisplayNameAndIcon() void RimViewController::updateDisplayNameAndIcon()
{ {
RimViewLinker::findNameAndIconFromView(&name.v(), &m_originalIcon, managedView()); RimViewLinker::findNameAndIconFromView(&name.v(), &m_originalIcon, managedView());
RimViewLinker::applyIconEnabledState(this, m_originalIcon, !isActive());
} }
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------

View File

@@ -68,7 +68,6 @@ public:
void updateOptionSensitivity(); void updateOptionSensitivity();
void removeOverrides(); void removeOverrides();
void updateUiIconFromActiveState();
void updateDisplayNameAndIcon(); void updateDisplayNameAndIcon();
protected: protected:

View File

@@ -188,37 +188,18 @@ void RimViewLinker::updateCellResult()
} }
} }
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimViewLinker::updateRangeFilters()
{
if (!isActive()) return;
this->scheduleGeometryRegenForDepViews(RANGE_FILTERED);
this->scheduleGeometryRegenForDepViews(RANGE_FILTERED_INACTIVE);
this->scheduleCreateDisplayModelAndRedrawForDependentViews();
}
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
void RimViewLinker::updatePropertyFilters() void RimViewLinker::updateOverrides()
{ {
if (!isActive()) return; bool isViewlinkerActive = this->isActive();
this->scheduleGeometryRegenForDepViews(PROPERTY_FILTERED);
this->scheduleCreateDisplayModelAndRedrawForDependentViews();
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimViewLinker::configureOverrides()
{
for (size_t i = 0; i < viewLinks.size(); i++) for (size_t i = 0; i < viewLinks.size(); i++)
{ {
RimViewController* viewLink = viewLinks[i]; RimViewController* viewLink = viewLinks[i];
if (viewLink->isActive) if (isViewlinkerActive && viewLink->isActive)
{ {
viewLink->configureOverrides(); viewLink->configureOverrides();
} }
@@ -229,6 +210,20 @@ void RimViewLinker::configureOverrides()
} }
} }
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimViewLinker::removeOverrides()
{
for (size_t i = 0; i < viewLinks.size(); i++)
{
if (viewLinks[i]->managedView())
{
viewLinks[i]->removeOverrides();
}
}
}
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
@@ -253,14 +248,13 @@ void RimViewLinker::allViewsForCameraSync(RimView* source, std::vector<RimView*>
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
void RimViewLinker::applyAllOperations() void RimViewLinker::updateDependentViews()
{ {
configureOverrides(); updateOverrides();
updateCellResult(); updateCellResult();
updateTimeStep(m_masterView, m_masterView->currentTimeStep()); updateTimeStep(m_masterView, m_masterView->currentTimeStep());
updateRangeFilters();
updatePropertyFilters();
updateScaleZ(m_masterView, m_masterView->scaleZ()); updateScaleZ(m_masterView, m_masterView->scaleZ());
updateCamera(m_masterView); updateCamera(m_masterView);
} }
@@ -288,10 +282,20 @@ QString RimViewLinker::displayNameForView(RimView* view)
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
void RimViewLinker::setMasterView(RimView* view) void RimViewLinker::setMasterView(RimView* view)
{ {
RimViewController* previousViewLink = RimViewLinker::viewLinkForView(view);
// Remove the view as dependent view
if (previousViewLink)
{
this->viewLinks.removeChildObject(previousViewLink);
delete previousViewLink;
}
this->removeOverrides();
m_masterView = view; m_masterView = view;
setNameAndIcon(); updateUiNameAndIcon();
updateUiIcon();
} }
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
@@ -323,8 +327,7 @@ void RimViewLinker::allViews(std::vector<RimView*>& views)
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
void RimViewLinker::initAfterRead() void RimViewLinker::initAfterRead()
{ {
setNameAndIcon(); updateUiNameAndIcon();
updateUiIcon();
} }
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
@@ -384,20 +387,14 @@ void RimViewLinker::applyIconEnabledState(caf::PdmObject* obj, const QIcon& icon
obj->setUiIcon(newIcon); obj->setUiIcon(newIcon);
} }
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimViewLinker::updateUiIcon()
{
RimViewLinker::applyIconEnabledState(this, m_originalIcon, false);
}
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
void RimViewLinker::setNameAndIcon() void RimViewLinker::updateUiNameAndIcon()
{ {
RimViewLinker::findNameAndIconFromView(&m_name.v(), &m_originalIcon, m_masterView); RimViewLinker::findNameAndIconFromView(&m_name.v(), &m_originalIcon, m_masterView);
RimViewLinker::applyIconEnabledState(this, m_originalIcon, false);
} }
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
@@ -448,19 +445,6 @@ void RimViewLinker::scheduleCreateDisplayModelAndRedrawForDependentViews()
} }
} }
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimViewLinker::removeOverrides()
{
for (size_t i = 0; i < viewLinks.size(); i++)
{
if (viewLinks[i]->managedView())
{
viewLinks[i]->removeOverrides();
}
}
}
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
@@ -559,7 +543,7 @@ void RimViewLinker::updateCamera(RimView* sourceView)
if (!isActive()) return; if (!isActive()) return;
RimViewController* viewLink = RimViewLinker::viewLinkForView(sourceView); RimViewController* viewLink = sourceView->controllingViewLink();
if (viewLink) if (viewLink)
{ {
if ((!viewLink->isActive() || !viewLink->syncCamera())) if ((!viewLink->isActive() || !viewLink->syncCamera()))
@@ -679,3 +663,31 @@ bool RimViewLinker::isBoundingBoxesOverlappingOrClose(const cvf::BoundingBox& so
return false; return false;
} }
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimViewLinker::addDependentView(RimView* view)
{
CVF_ASSERT(view && view != m_masterView);
RimViewController* viewLink = new RimViewController;
this->viewLinks.push_back(viewLink);
viewLink->setManagedView(view);
viewLink->initAfterReadRecursively();
viewLink->updateOptionSensitivity();
viewLink->updateDisplayNameAndIcon();
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimViewLinker::addViewControllers(caf::PdmUiTreeOrdering& uiTreeOrdering)
{
for (size_t j = 0; j < viewLinks.size(); j++)
{
uiTreeOrdering.add(viewLinks()[j]);
}
}

View File

@@ -52,26 +52,23 @@ public:
void setMasterView(RimView* view); void setMasterView(RimView* view);
RimView* masterView(); RimView* masterView();
caf::PdmChildArrayField<RimViewController*> viewLinks; void addDependentView(RimView* view);
void updateDependentViews();
void applyAllOperations();
void removeOverrides();
void updateCamera(RimView* sourceView); void updateCamera(RimView* sourceView);
void updateTimeStep(RimView* sourceView, int timeStep); void updateTimeStep(RimView* sourceView, int timeStep);
void updateScaleZ(RimView* sourceView, double scaleZ); void updateScaleZ(RimView* sourceView, double scaleZ);
void updateCellResult(); void updateCellResult();
void updateRangeFilters();
void updatePropertyFilters();
void scheduleGeometryRegenForDepViews(RivCellSetEnum geometryType); void scheduleGeometryRegenForDepViews(RivCellSetEnum geometryType);
void scheduleCreateDisplayModelAndRedrawForDependentViews(); void scheduleCreateDisplayModelAndRedrawForDependentViews();
void allViews(std::vector<RimView*>& views); void allViews(std::vector<RimView*>& views);
void updateUiIcon(); void updateUiNameAndIcon();
void setNameAndIcon();
void addViewControllers(caf::PdmUiTreeOrdering& uiTreeOrdering);
static void applyIconEnabledState(caf::PdmObject* obj, const QIcon& icon, bool disable); static void applyIconEnabledState(caf::PdmObject* obj, const QIcon& icon, bool disable);
static void findNameAndIconFromView(QString* name, QIcon* icon, RimView* view); static void findNameAndIconFromView(QString* name, QIcon* icon, RimView* view);
@@ -90,12 +87,15 @@ protected:
private: private:
void allViewsForCameraSync(RimView* source, std::vector<RimView*>& views); void allViewsForCameraSync(RimView* source, std::vector<RimView*>& views);
void configureOverrides();
void updateOverrides();
void removeOverrides();
bool isActive(); bool isActive();
static bool isBoundingBoxesOverlappingOrClose(const cvf::BoundingBox& sourceBB, const cvf::BoundingBox& destBB); static bool isBoundingBoxesOverlappingOrClose(const cvf::BoundingBox& sourceBB, const cvf::BoundingBox& destBB);
private: private:
caf::PdmChildArrayField<RimViewController*> viewLinks;
caf::PdmPtrField<RimView*> m_masterView; caf::PdmPtrField<RimView*> m_masterView;
caf::PdmField<QString> m_name; caf::PdmField<QString> m_name;
QIcon m_originalIcon; QIcon m_originalIcon;

View File

@@ -59,10 +59,7 @@ void RimViewLinkerCollection::defineUiTreeOrdering(caf::PdmUiTreeOrdering& uiTre
if (childObject) if (childObject)
{ {
uiTreeOrdering.add(childObject); uiTreeOrdering.add(childObject);
for (size_t j = 0; j < childObject->viewLinks.size(); j++) childObject->addViewControllers(uiTreeOrdering);
{
uiTreeOrdering.add(childObject->viewLinks()[j]);
}
} }
uiTreeOrdering.setForgetRemainingFields(true); uiTreeOrdering.setForgetRemainingFields(true);
@@ -74,20 +71,10 @@ void RimViewLinkerCollection::defineUiTreeOrdering(caf::PdmUiTreeOrdering& uiTre
void RimViewLinkerCollection::fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue) void RimViewLinkerCollection::fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue)
{ {
if (&isActive == changedField) if (&isActive == changedField)
{
if (isActive)
{ {
if (viewLinker()) if (viewLinker())
{ {
viewLinker()->applyAllOperations(); viewLinker()->updateDependentViews();
}
}
else
{
if (viewLinker())
{
viewLinker()->removeOverrides();
}
} }
} }