///////////////////////////////////////////////////////////////////////////////// // // Copyright (C) 2016 Statoil ASA // // 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 // for more details. // ///////////////////////////////////////////////////////////////////////////////// #pragma once #include "RimWellPath.h" #include "cafPdmField.h" #include "cafPdmObject.h" #include "cafPdmPtrField.h" #include "cafPdmUiOrdering.h" #include "cafTristate.h" class RimCase; class RimWellLogCurve; class RimWellLogPlot; class RimWellLogTrack; class RimWellPath; //================================================================================================== /// //================================================================================================== class RimWellLogCurveCommonDataSource : public caf::PdmObject { CAF_PDM_HEADER_INIT; public: class DoubleComparator { public: DoubleComparator( double eps = 1.0e-6 ); bool operator()( const double& lhs, const double& rhs ) const; private: double m_eps; }; RimWellLogCurveCommonDataSource(); RimCase* caseToApply() const; void setCaseToApply( RimCase* val ); int trajectoryTypeToApply() const; void setTrajectoryTypeToApply( int val ); RimWellPath* wellPathToApply() const; void setWellPathToApply( RimWellPath* val ); int branchIndexToApply() const; void setBranchIndexToApply( int val ); caf::Tristate branchDetectionToApply() const; void setBranchDetectionToApply( caf::Tristate::State val ); caf::Tristate wbsSmoothingToApply() const; void setWbsSmoothingToApply( caf::Tristate::State val ); double wbsSmoothingThreshold() const; void setWbsSmoothingThreshold( double smoothingThreshold ); QString simWellNameToApply() const; void setSimWellNameToApply( const QString& val ); int timeStepToApply() const; void setTimeStepToApply( int val ); void resetDefaultOptions(); void updateDefaultOptions( const std::vector& curves, const std::vector& tracks ); void updateDefaultOptions(); void updateCurvesAndTracks( std::vector& curves, std::vector& tracks ); void updateCurvesAndTracks(); void applyPrevCase(); void applyNextCase(); void applyPrevWell(); void applyNextWell(); void applyPrevTimeStep(); void applyNextTimeStep(); std::vector fieldsToShowInToolbar(); protected: void fieldChangedByUi( const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue ) override; QList calculateValueOptions( const caf::PdmFieldHandle* fieldNeedingOptions, bool* useOptionsOnly ) override; void defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering& uiOrdering ) override; void defineEditorAttribute( const caf::PdmFieldHandle* field, QString uiConfigName, caf::PdmUiEditorAttribute* attribute ) override; void modifyCurrentIndex( caf::PdmValueField* field, int indexOffset ); private: caf::PdmPtrField m_case; caf::PdmField m_trajectoryType; caf::PdmPtrField m_wellPath; caf::PdmField m_simWellName; caf::PdmField m_branchIndex; caf::PdmField m_branchDetection; caf::PdmField m_timeStep; caf::PdmField m_wbsSmoothing; caf::PdmField m_wbsSmoothingThreshold; std::set m_uniqueCases; std::set m_uniqueTrajectoryTypes; std::set m_uniqueWellPaths; std::set m_uniqueWellNames; std::set m_uniqueTimeSteps; std::set m_uniqueBranchDetection; std::set m_uniqueBranchIndices; std::set m_uniqueWbsSmoothing; std::set m_uniqueWbsSmoothingThreshold; };