(#395) Remove already linked views from visibile views when linking visible views

This commit is contained in:
Magne Sjaastad 2015-09-02 14:22:36 +02:00
parent ccc7703e1f
commit 3e0423cd0f
5 changed files with 95 additions and 7 deletions

View File

@ -21,6 +21,8 @@
#include "RiaApplication.h"
#include "RicLinkVisibleViewsFeatureUi.h"
#include "RimLinkedViews.h"
#include "RimManagedViewConfig.h"
#include "RimProject.h"
@ -28,12 +30,13 @@
#include "RiuMainWindow.h"
#include "cafPdmUiPropertyViewDialog.h"
#include "cafPdmUiTreeView.h"
#include <QAction>
#include <QTreeView>
#include "RicLinkVisibleViewsFeatureUi.h"
#include "cafPdmUiPropertyViewDialog.h"
#include <QMessageBox>
CAF_CMD_SOURCE_INIT(RicLinkVisibleViewsFeature, "RicLinkVisibleViewsFeature");
@ -57,14 +60,20 @@ bool RicLinkVisibleViewsFeature::isCommandEnabled()
void RicLinkVisibleViewsFeature::onActionTriggered(bool isChecked)
{
RimProject* proj = RiaApplication::instance()->project();
std::vector<RimView*> views;
proj->allVisibleViews(views);
CVF_ASSERT(views.size() > 1);
findNotLinkedVisibleViews(views);
if (views.size() < 2)
{
QMessageBox::warning(RiuMainWindow::instance(), "Link Visible Views", "Less than two views available for linking. Please open at least two not linked views before creating a new link group.");
return;
}
RicLinkVisibleViewsFeatureUi featureUi;
featureUi.setViews(views);
caf::PdmUiPropertyViewDialog propertyDialog(NULL, &featureUi, "New View Group", "");
caf::PdmUiPropertyViewDialog propertyDialog(NULL, &featureUi, "Link Visible Views", "");
propertyDialog.setWindowIcon(QIcon(":/chain.png"));
if (propertyDialog.exec() != QDialog::Accepted) return;
@ -109,3 +118,54 @@ void RicLinkVisibleViewsFeature::setupActionLook(QAction* actionToSetup)
actionToSetup->setIcon(QIcon(":/chain.png"));
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RicLinkVisibleViewsFeature::allLinkedViews(std::vector<RimView*>& views)
{
RimProject* proj = RiaApplication::instance()->project();
for (size_t i = 0; i < proj->linkedViews().size(); i++)
{
RimLinkedViews* linkedViews = proj->linkedViews()[i];
linkedViews->allViews(views);
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RicLinkVisibleViewsFeature::findNotLinkedVisibleViews(std::vector<RimView*> &views)
{
RimProject* proj = RiaApplication::instance()->project();
std::vector<RimView*> alreadyLinkedViews;
allLinkedViews(alreadyLinkedViews);
std::vector<RimView*> visibleViews;
proj->allVisibleViews(visibleViews);
bool anyAlreadyLinkedViews = false;
for (size_t i = 0; i < visibleViews.size(); i++)
{
bool isLinked = false;
for (size_t j = 0; j < alreadyLinkedViews.size(); j++)
{
if (visibleViews[i] == alreadyLinkedViews[j])
{
anyAlreadyLinkedViews = true;
isLinked = true;
}
}
if (!isLinked)
{
views.push_back(visibleViews[i]);
}
}
if (anyAlreadyLinkedViews)
{
QMessageBox::warning(RiuMainWindow::instance(), "Link Visible Views", "Detected one or more visible view(s) already part of a Linked View Group.\nThese views were removed from the list of visible views.");
}
}

View File

@ -21,6 +21,10 @@
#include "cafCmdFeature.h"
#include <vector>
class RimView;
//==================================================================================================
///
//==================================================================================================
@ -32,6 +36,11 @@ protected:
// Overrides
virtual bool isCommandEnabled();
virtual void onActionTriggered( bool isChecked );
virtual void setupActionLook( QAction* actionToSetup );
virtual void setupActionLook(QAction* actionToSetup);
private:
void findNotLinkedVisibleViews(std::vector<RimView*> &views);
void allLinkedViews(std::vector<RimView*>& views);
};

View File

@ -24,6 +24,7 @@
#include "RimView.h"
#include "RimLinkedViews.h"
#include "cafPdmUiItem.h"
CAF_PDM_SOURCE_INIT(RicLinkVisibleViewsFeatureUi, "RicLinkVisibleViewsFeatureUi");
@ -34,8 +35,9 @@ RicLinkVisibleViewsFeatureUi::RicLinkVisibleViewsFeatureUi(void)
{
CAF_PDM_InitObject("Link Visible Views Feature UI", ":/chain.png", "", "");
CAF_PDM_InitFieldNoDefault(&m_allViewsAsText, "VisibleViews", "Visible Views", "", "", "");
CAF_PDM_InitFieldNoDefault(&m_allViewsAsText, "VisibleViews", "Visible Views (Case name : View Name)", "", "", "");
m_allViewsAsText.uiCapability()->setUiEditorTypeName(caf::PdmUiTextEditor::uiEditorTypeName());
m_allViewsAsText.uiCapability()->setUiLabelPosition(caf::PdmUiItemInfo::TOP);
CAF_PDM_InitFieldNoDefault(&m_masterView, "MasterView", "Master View", "", "", "");
}

View File

@ -354,3 +354,19 @@ RimView* RimLinkedViews::mainView()
return m_mainView;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimLinkedViews::allViews(std::vector<RimView*>& views)
{
views.push_back(m_mainView());
for (size_t i = 0; i < viewConfigs.size(); i++)
{
if (viewConfigs[i]->managedView())
{
views.push_back(viewConfigs[i]->managedView());
}
}
}

View File

@ -58,6 +58,7 @@ public:
void configureOverrides();
void allViewsForCameraSync(std::vector<RimView*>& views);
void allViews(std::vector<RimView*>& views);
public:
static QString displayNameForView(RimView* view);