2017-05-05 11:21:40 +02:00
/////////////////////////////////////////////////////////////////////////////////
//
2017-05-16 12:49:36 +02:00
// Copyright (C) 2017 Statoil ASA
2017-05-05 11:21:40 +02:00
//
// ResInsight is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// ResInsight is distributed in the hope that it will be useful, but WITHOUT ANY
// WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE.
//
// See the GNU General Public License at <http://www.gnu.org/licenses/gpl.html>
// for more details.
//
/////////////////////////////////////////////////////////////////////////////////
#include "RicNewFishbonesSubsFeature.h"
2017-05-20 20:21:19 +02:00
#include "RiaApplication.h"
#include "RimFishboneWellPathCollection.h"
2017-05-19 15:44:32 +02:00
#include "RimFishbonesCollection.h"
2017-05-20 20:21:19 +02:00
#include "RimFishbonesMultipleSubs.h"
#include "RimView.h"
#include "RimWellPathCollection.h"
2017-05-05 11:21:40 +02:00
#include "RiuMainWindow.h"
#include "cafSelectionManager.h"
#include <QAction>
2017-05-20 20:21:19 +02:00
#include <QMessageBox>
2017-05-05 11:21:40 +02:00
CAF_CMD_SOURCE_INIT ( RicNewFishbonesSubsFeature , "RicNewFishbonesSubsFeature" );
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RicNewFishbonesSubsFeature :: onActionTriggered ( bool isChecked )
{
2017-05-20 14:47:13 +02:00
RimFishbonesCollection * fishbonesCollection = selectedFishbonesCollection ();
CVF_ASSERT ( fishbonesCollection );
2017-05-05 11:21:40 +02:00
RimFishbonesMultipleSubs * obj = new RimFishbonesMultipleSubs ;
2017-05-20 14:47:13 +02:00
obj -> setName ( QString ( "Fishbones Subs (%1)" ). arg ( fishbonesCollection -> fishbonesSubs . size ()));
fishbonesCollection -> fishbonesSubs . push_back ( obj );
2017-05-05 11:21:40 +02:00
2017-05-20 20:21:19 +02:00
RicNewFishbonesSubsFeature :: askUserToSetUsefulScaling ( fishbonesCollection );
2017-05-20 14:47:13 +02:00
fishbonesCollection -> updateConnectedEditors ();
2017-05-05 11:21:40 +02:00
RiuMainWindow :: instance () -> selectAsCurrentItem ( obj );
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
2017-05-20 14:47:13 +02:00
RimFishbonesCollection * RicNewFishbonesSubsFeature :: selectedFishbonesCollection ()
2017-05-05 11:21:40 +02:00
{
2017-05-20 14:47:13 +02:00
RimFishbonesCollection * objToFind = nullptr ;
2017-05-05 11:21:40 +02:00
caf :: PdmUiItem * pdmUiItem = caf :: SelectionManager :: instance () -> selectedItem ();
caf :: PdmObjectHandle * objHandle = dynamic_cast < caf :: PdmObjectHandle *> ( pdmUiItem );
if ( objHandle )
{
2017-05-20 14:47:13 +02:00
objHandle -> firstAncestorOrThisOfType ( objToFind );
2017-05-05 11:21:40 +02:00
}
2017-05-20 14:47:13 +02:00
return objToFind ;
2017-05-05 11:21:40 +02:00
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RicNewFishbonesSubsFeature :: setupActionLook ( QAction * actionToSetup )
{
//actionToSetup->setIcon(QIcon(":/FractureSymbol16x16.png"));
actionToSetup -> setText ( "New Fishbones Subs Definition" );
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
bool RicNewFishbonesSubsFeature :: isCommandEnabled ()
{
2017-05-20 14:47:13 +02:00
if ( selectedFishbonesCollection ())
2017-05-05 11:21:40 +02:00
{
return true ;
}
return false ;
}
2017-05-20 20:21:19 +02:00
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RicNewFishbonesSubsFeature :: askUserToSetUsefulScaling ( RimFishbonesCollection * fishboneCollection )
{
// Always reset well path collection scale factor
CVF_ASSERT ( fishboneCollection );
RimWellPathCollection * wellPathColl = nullptr ;
fishboneCollection -> firstAncestorOrThisOfTypeAsserted ( wellPathColl );
wellPathColl -> wellPathRadiusScaleFactor = 0.01 ;
RimView * activeView = RiaApplication :: instance () -> activeReservoirView ();
if ( ! activeView ) return ;
RiaApplication * app = RiaApplication :: instance ();
QString sessionKey = "AutoAdjustSettingsForFishbones" ;
bool autoAdjustSettings = false ;
QVariant v = app -> cacheDataObject ( sessionKey );
if ( ! v . isValid ())
{
double currentScaleFactor = activeView -> scaleZ ();
if ( fabs ( currentScaleFactor - 1.0 ) < 0.1 ) return ;
QMessageBox msgBox ;
msgBox . setIcon ( QMessageBox :: Question );
QString questionText ;
questionText = QString ( "When displaying Fishbones structures, the view scaling should be set to 1. \n\n Do you want ResInsight to automatically set view scaling to 1?" );
msgBox . setText ( questionText );
msgBox . setStandardButtons ( QMessageBox :: Yes | QMessageBox :: No );
int ret = msgBox . exec ();
if ( ret == QMessageBox :: Yes )
{
autoAdjustSettings = true ;
}
app -> setCacheDataObject ( sessionKey , autoAdjustSettings );
}
else
{
autoAdjustSettings = v . toBool ();
}
if ( autoAdjustSettings )
{
activeView -> setScaleZAndUpdate ( 1.0 );
wellPathColl -> scheduleGeometryRegenAndRedrawViews ();
RiuMainWindow :: instance () -> updateScaleValue ();
}
}