(#539) When view is unlinked, ask user to keep either override or original range filter collection

This commit is contained in:
Magne Sjaastad 2015-10-21 12:45:35 +02:00
parent 065a688c19
commit 8de8100c3e
12 changed files with 148 additions and 8 deletions

View File

@ -42,11 +42,17 @@ bool RicDeleteAllLinkedViewsFeature::isCommandEnabled()
void RicDeleteAllLinkedViewsFeature::onActionTriggered(bool isChecked)
{
RimProject* proj = RiaApplication::instance()->project();
if (proj->viewLinkerCollection()->viewLinker())
{
delete proj->viewLinkerCollection()->viewLinker();
proj->viewLinkerCollection()->viewLinker = NULL;
RimViewLinker* viewLinker = proj->viewLinkerCollection()->viewLinker();
if (viewLinker)
{
// Remove the view linker object from the view linker collection
// viewLinkerCollection->viewLinker is a PdmChildField containing one RimViewLinker child object
proj->viewLinkerCollection->viewLinker.removeChildObject(viewLinker);
viewLinker->applyRangeFilterCollectionByUserChoice();
delete viewLinker;
proj->uiCapability()->updateConnectedEditors();
}

View File

@ -68,13 +68,14 @@ void RicSetMasterViewFeature::onActionTriggered(bool isChecked)
RimProject* proj = RiaApplication::instance()->project();
RimViewLinker* viewLinker = proj->viewLinkerCollection()->viewLinker();
viewLinker->applyRangeFilterCollectionByUserChoice();
RimView* previousMasterView = viewLinker->masterView();
viewLinker->setMasterView(activeView);
viewLinker->updateDependentViews();
viewLinker->addDependentView(previousMasterView);
proj->viewLinkerCollection.uiCapability()->updateConnectedEditors();
proj->updateConnectedEditors();

View File

@ -60,8 +60,9 @@ void RicUnLinkViewFeature::onActionTriggered(bool isChecked)
if (!activeView) return;
RimViewController* viewController = activeView->viewController();
caf::SelectionManager::instance()->setSelectedItem(viewController);
viewController->applyRangeFilterCollectionByUserChoice();
caf::SelectionManager::instance()->setSelectedItem(viewController);
caf::CmdFeature* feature = caf::CmdFeatureManager::instance()->getCommandFeature("RicDeleteItemFeature");
if (feature)
{

View File

@ -705,3 +705,26 @@ RimCellRangeFilterCollection* RimView::overrideRangeFilterCollection()
return m_overrideRangeFilterCollection();
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimView::replaceRangeFilterCollectionWithOverride()
{
RimCellRangeFilterCollection* overrideRfc = m_overrideRangeFilterCollection;
CVF_ASSERT(overrideRfc);
RimCellRangeFilterCollection* currentRfc = m_rangeFilterCollection;
if (currentRfc)
{
delete currentRfc;
}
// Must call removeChildObject() to make sure the object has no parent
// No parent is required when assigning a object into a field
m_overrideRangeFilterCollection.removeChildObject(overrideRfc);
m_rangeFilterCollection = overrideRfc;
this->uiCapability()->updateConnectedEditors();
}

View File

@ -81,6 +81,7 @@ public:
RimCellRangeFilterCollection* overrideRangeFilterCollection();
void setOverrideRangeFilterCollection(RimCellRangeFilterCollection* rfc);
void replaceRangeFilterCollectionWithOverride();
caf::PdmField< std::vector<int> > windowGeometry;

View File

@ -46,6 +46,8 @@
#include "cafPdmUiTreeOrdering.h"
#include "RigCaseToCaseRangeFilterMapper.h"
#include <QMessageBox>
CAF_PDM_SOURCE_INIT(RimViewController, "ViewController");
//--------------------------------------------------------------------------------------------------
///
@ -148,6 +150,11 @@ void RimViewController::fieldChangedByUi(const caf::PdmFieldHandle* changedField
{
if (changedField == &m_isActive)
{
if (!m_isActive)
{
applyRangeFilterCollectionByUserChoice();
}
updateOverrides();
updateResultColorsControl();
updateCameraLink();
@ -176,6 +183,10 @@ void RimViewController::fieldChangedByUi(const caf::PdmFieldHandle* changedField
}
else if (changedField == &m_syncRangeFilters)
{
if (!m_syncRangeFilters)
{
applyRangeFilterCollectionByUserChoice();
}
updateOverrides();
}
else if (changedField == &m_syncPropertyFilters)
@ -478,7 +489,6 @@ RimViewLinker* RimViewController::ownerViewLinker()
{
RimViewLinker* viewLinker = NULL;
this->firstAnchestorOrThisOfType(viewLinker);
CVF_ASSERT(viewLinker);
return viewLinker;
}
@ -812,3 +822,52 @@ void RimViewController::updateRangeFilterOverrides(RimCellRangeFilter* changedRa
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimViewController::applyRangeFilterCollectionByUserChoice()
{
if (!m_managedView->overrideRangeFilterCollection())
{
return;
}
bool restoreOriginal = askUserToRestoreOriginalRangeFilterCollection(m_managedView->name);
if (restoreOriginal)
{
m_managedView->setOverrideRangeFilterCollection(NULL);
}
else
{
m_managedView->replaceRangeFilterCollectionWithOverride();
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
bool RimViewController::askUserToRestoreOriginalRangeFilterCollection(const QString& viewName)
{
RimView* activeView = RiaApplication::instance()->activeReservoirView();
QMessageBox msgBox(activeView->viewer()->layoutWidget());
msgBox.setIcon(QMessageBox::Question);
QString questionText;
questionText = QString("The linked view named \"%1\" is about to be unlinked. The range filters can either restore the original or keep the current range filters based on the master view.").arg(viewName);
msgBox.setText(questionText);
msgBox.setInformativeText("Do you want to restore the original range filters?");
msgBox.setStandardButtons(QMessageBox::Yes | QMessageBox::No);
int ret = msgBox.exec();
if (ret == QMessageBox::Yes)
{
return true;
}
else
{
return false;
}
}

View File

@ -74,6 +74,8 @@ public:
void updateDisplayNameAndIcon();
void updateRangeFilterOverrides(RimCellRangeFilter* changedRangeFilter);
void applyRangeFilterCollectionByUserChoice();
protected: // Pdm overridden methods
virtual void fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue);
@ -98,6 +100,8 @@ private:
RimGeoMechView* managedGeoView();
static void removeOverrides(RimView* view);
static bool askUserToRestoreOriginalRangeFilterCollection(const QString& viewName);
private:
caf::PdmField<QString> m_name;
caf::PdmPtrField<RimView*> m_managedView;

View File

@ -372,6 +372,14 @@ bool RimViewLinker::isActive()
RimViewLinkerCollection* viewLinkerCollection = NULL;
this->firstAnchestorOrThisOfType(viewLinkerCollection);
if (!viewLinkerCollection)
{
// This will happen when the all linked views are about to be deleted
// The viewLinker is taken out of the viewLinkerCollection, and no parent can be found
// See RicDeleteAllLinkedViewsFeature
return false;
}
return viewLinkerCollection->isActive();
}
@ -614,3 +622,22 @@ void RimViewLinker::addViewControllers(caf::PdmUiTreeOrdering& uiTreeOrdering)
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimViewLinker::applyRangeFilterCollectionByUserChoice()
{
for (size_t j = 0; j < m_viewControllers.size(); j++)
{
m_viewControllers[j]->applyRangeFilterCollectionByUserChoice();
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimViewLinker::removeViewController(RimViewController* viewController)
{
m_viewControllers.removeChildObject(viewController);
}

View File

@ -57,6 +57,7 @@ public:
void addDependentView(RimView* view);
void updateDependentViews();
void removeViewController(RimViewController* viewController);
void updateCamera(RimView* sourceView);
void updateTimeStep(RimView* sourceView, int timeStep);
@ -64,6 +65,7 @@ public:
void updateCellResult();
void updateRangeFilters(RimCellRangeFilter* changedRangeFilter);
void applyRangeFilterCollectionByUserChoice();
void scheduleGeometryRegenForDepViews(RivCellSetEnum geometryType);
void scheduleCreateDisplayModelAndRedrawForDependentViews();

View File

@ -74,6 +74,11 @@ void RimViewLinkerCollection::fieldChangedByUi(const caf::PdmFieldHandle* change
{
if (viewLinker())
{
if (!isActive)
{
viewLinker()->applyRangeFilterCollectionByUserChoice();
}
viewLinker()->updateDependentViews();
}
}

View File

@ -231,6 +231,7 @@ void RiuViewer::mouseReleaseEvent(QMouseEvent* event)
return;
}
event->accept();
m_viewerCommands->displayContextMenu(event);
return;
}

View File

@ -264,7 +264,17 @@ void RiuViewerCommands::displayContextMenu(QMouseEvent* event)
}
}
menu.exec(event->globalPos());
if (menu.actions().size() > 0)
{
// event->accept();
QAction* act = menu.exec(event->globalPos());
/*
if (act)
{
cvf::Trace::show("Jadda");
}
*/
}
}
//--------------------------------------------------------------------------------------------------