Release adjustments

* Use appendMenuItems instead of ContextCommandBuilder
* Specify RimEclipseCaseCollection menu features once
* Add function to enable up/down arrows for combo box
* Guard crash when closing project
* Improve UI for grid case ensemble
- Create a view for the first case in the ensemble
- Show case name in view title
- Enable up/down buttons to Eclipse case
* Make sure 3D views in grid ensemble are created on project load
This commit is contained in:
Magne Sjaastad
2024-09-16 09:49:22 +02:00
committed by GitHub
parent 1f80503f01
commit 9d66e6195e
22 changed files with 189 additions and 70 deletions

View File

@@ -52,7 +52,9 @@
#include "RimCommandRouter.h"
#include "RimCompletionTemplateCollection.h"
#include "RimEclipseCaseCollection.h"
#include "RimEclipseCaseEnsemble.h"
#include "RimEclipseView.h"
#include "RimEclipseViewCollection.h"
#include "RimEnsembleWellLogsCollection.h"
#include "RimFaultReactivationModelCollection.h"
#include "RimFileWellPath.h"
@@ -713,6 +715,20 @@ bool RiaApplication::loadProject( const QString& projectFileName, ProjectLoadAct
}
}
// Load all grid ensemble views
{
auto gridCaseEnsembles = m_project->activeOilField()->analysisModels()->caseEnsembles.childrenByType();
for ( auto gridCaseEnsemble : gridCaseEnsembles )
{
auto views = gridCaseEnsemble->viewCollection()->views();
for ( auto view : views )
{
view->loadDataAndUpdate();
}
}
}
if ( m_project->viewLinkerCollection() && m_project->viewLinkerCollection()->viewLinker() )
{
m_project->viewLinkerCollection()->viewLinker()->updateOverrides();

View File

@@ -22,13 +22,16 @@
#include "RiaImportEclipseCaseTools.h"
#include "RicCreateGridCaseGroupFromFilesFeature.h"
#include "RicNewViewFeature.h"
#include "RicRecursiveFileSearchDialog.h"
#include "Rim3dView.h"
#include "RimEclipseCaseCollection.h"
#include "RimEclipseCaseEnsemble.h"
#include "RimEclipseResultCase.h"
#include "RimOilField.h"
#include "RimProject.h"
#include "RimViewNameConfig.h"
#include "cafProgressInfo.h"
#include "cafSelectionManager.h"
@@ -46,18 +49,35 @@ void RicCreateGridCaseEnsemblesFromFilesFeature::onActionTriggered( bool isCheck
QString pathCacheName = "INPUT_FILES";
auto [fileNames, groupByEnsemble] = runRecursiveFileSearchDialog( "Import Grid Ensembles", pathCacheName );
std::vector<RimEclipseCaseEnsemble*> gridEnsembles;
if ( groupByEnsemble == RiaEnsembleNameTools::EnsembleGroupingMode::NONE )
{
importSingleGridCaseEnsemble( fileNames );
gridEnsembles.push_back( importSingleGridCaseEnsemble( fileNames ) );
}
else
{
std::vector<QStringList> groupedByEnsemble = RiaEnsembleNameTools::groupFilesByEnsemble( fileNames, groupByEnsemble );
for ( const QStringList& groupedFileNames : groupedByEnsemble )
{
importSingleGridCaseEnsemble( groupedFileNames );
gridEnsembles.push_back( importSingleGridCaseEnsemble( groupedFileNames ) );
}
}
if ( gridEnsembles.empty() ) return;
auto firstEnsemble = gridEnsembles.front();
if ( firstEnsemble->cases().empty() ) return;
auto firstCase = firstEnsemble->cases().front();
if ( !firstCase ) return;
auto view = RicNewViewFeature::addReservoirView( firstCase, nullptr, firstEnsemble->viewCollection() );
if ( view )
{
// Show the case name in the view title, as this is useful information for a grid case ensemble
view->nameConfig()->setAddCaseName( true );
}
}
//--------------------------------------------------------------------------------------------------
@@ -66,14 +86,20 @@ void RicCreateGridCaseEnsemblesFromFilesFeature::onActionTriggered( bool isCheck
void RicCreateGridCaseEnsemblesFromFilesFeature::setupActionLook( QAction* actionToSetup )
{
actionToSetup->setIcon( QIcon( ":/CreateGridCaseGroup16x16.png" ) );
actionToSetup->setText( "&Create Grid Case Ensembles" );
actionToSetup->setText( "&Create Grid Case Ensemble" );
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RicCreateGridCaseEnsemblesFromFilesFeature::importSingleGridCaseEnsemble( const QStringList& fileNames )
RimEclipseCaseEnsemble* RicCreateGridCaseEnsemblesFromFilesFeature::importSingleGridCaseEnsemble( const QStringList& fileNames )
{
RimProject* project = RimProject::current();
CVF_ASSERT( project );
RimOilField* oilfield = project->activeOilField();
if ( !oilfield ) return nullptr;
auto eclipseCaseEnsemble = new RimEclipseCaseEnsemble;
QString ensembleNameSuggestion =
RiaEnsembleNameTools::findSuitableEnsembleName( fileNames, RiaEnsembleNameTools::EnsembleGroupingMode::FMU_FOLDER_STRUCTURE );
@@ -81,12 +107,6 @@ void RicCreateGridCaseEnsemblesFromFilesFeature::importSingleGridCaseEnsemble( c
caf::ProgressInfo progInfo( fileNames.size() + 1, "Creating Grid Ensembles" );
RimProject* project = RimProject::current();
CVF_ASSERT( project );
RimOilField* oilfield = project->activeOilField();
if ( !oilfield ) return;
for ( auto caseFileName : fileNames )
{
auto task = progInfo.task( "Loading files", 1 );
@@ -102,6 +122,8 @@ void RicCreateGridCaseEnsemblesFromFilesFeature::importSingleGridCaseEnsemble( c
oilfield->analysisModels()->caseEnsembles.push_back( eclipseCaseEnsemble );
oilfield->analysisModels()->updateConnectedEditors();
return eclipseCaseEnsemble;
}
//--------------------------------------------------------------------------------------------------

View File

@@ -24,6 +24,8 @@
#include <vector>
class RimEclipseCaseEnsemble;
//==================================================================================================
///
//==================================================================================================
@@ -32,7 +34,8 @@ class RicCreateGridCaseEnsemblesFromFilesFeature : public caf::CmdFeature
CAF_CMD_HEADER_INIT;
RicCreateGridCaseEnsemblesFromFilesFeature()
: m_pathFilter( "*" )
: caf::CmdFeature()
, m_pathFilter( "*" )
, m_fileNameFilter( "*" )
{
}
@@ -41,7 +44,7 @@ protected:
void onActionTriggered( bool isChecked ) override;
void setupActionLook( QAction* actionToSetup ) override;
void importSingleGridCaseEnsemble( const QStringList& fileNames );
RimEclipseCaseEnsemble* importSingleGridCaseEnsemble( const QStringList& fileNames );
std::pair<QStringList, RiaEnsembleNameTools::EnsembleGroupingMode> runRecursiveFileSearchDialog( const QString& dialogTitle,
const QString& pathCacheName );

View File

@@ -42,7 +42,7 @@ CAF_CMD_SOURCE_INIT( RicNewViewFeature, "RicNewViewFeature" );
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RicNewViewFeature::addReservoirView( RimEclipseCase* eclipseCase, RimGeoMechCase* geomCase, RimEclipseViewCollection* viewColl )
Rim3dView* RicNewViewFeature::addReservoirView( RimEclipseCase* eclipseCase, RimGeoMechCase* geomCase, RimEclipseViewCollection* viewColl )
{
Rim3dView* newView = createReservoirView( eclipseCase, geomCase, viewColl );
@@ -53,6 +53,8 @@ void RicNewViewFeature::addReservoirView( RimEclipseCase* eclipseCase, RimGeoMec
// Select the new view to make sure RiaApplication::setActiveReservoirView() is called
Riu3DMainWindowTools::selectAsCurrentItem( newView );
}
return newView;
}
//--------------------------------------------------------------------------------------------------

View File

@@ -37,7 +37,7 @@ class RicNewViewFeature : public caf::CmdFeature
CAF_CMD_HEADER_INIT;
public:
static void addReservoirView( RimEclipseCase* eclipseCase, RimGeoMechCase* geomCase, RimEclipseViewCollection* viewColl );
static Rim3dView* addReservoirView( RimEclipseCase* eclipseCase, RimGeoMechCase* geomCase, RimEclipseViewCollection* viewColl );
protected:
bool isCommandEnabled() const override;

View File

@@ -44,6 +44,7 @@
#include "RimWellPlotTools.h"
#include "RiuMatrixPlotWidget.h"
#include "RiuTools.h"
#include "cafPdmUiComboBoxEditor.h"
#include "cafPdmUiPushButtonEditor.h"
@@ -530,13 +531,7 @@ void RimWellConnectivityTable::defineEditorAttribute( const caf::PdmFieldHandle*
}
if ( field == &m_selectedTimeStep || field == &m_selectedFromTimeStep || field == &m_selectedToTimeStep )
{
auto* attrib = dynamic_cast<caf::PdmUiComboBoxEditorAttribute*>( attribute );
if ( attrib )
{
attrib->nextIcon = QIcon( ":/ComboBoxDown.svg" );
attrib->previousIcon = QIcon( ":/ComboBoxUp.svg" );
attrib->showPreviousAndNextButtons = true;
}
RiuTools::enableUpDownArrowsForComboBox( attribute );
}
}

View File

@@ -114,9 +114,10 @@ public:
virtual RimCase* ownerCase() const = 0;
RiuViewer* viewer() const;
void setName( const QString& name );
QString name() const;
QString autoName() const;
void setName( const QString& name );
QString name() const;
QString autoName() const;
RimViewNameConfig* nameConfig() const;
virtual RiaDefines::View3dContent viewContent() const = 0;
@@ -200,10 +201,9 @@ public:
protected:
static void removeModelByName( cvf::Scene* scene, const cvf::String& modelName );
virtual void setDefaultView();
cvf::Mat4d cameraPosition() const;
cvf::Vec3d cameraPointOfInterest() const;
RimViewNameConfig* nameConfig() const;
virtual void setDefaultView();
cvf::Mat4d cameraPosition() const;
cvf::Vec3d cameraPointOfInterest() const;
void disableGridBoxField();
void disablePerspectiveProjectionField();

View File

@@ -46,8 +46,6 @@
#include "RimCustomObjectiveFunction.h"
#include "RimCustomObjectiveFunctionCollection.h"
#include "RimEclipseCase.h"
#include "RimEclipseCaseCollection.h"
#include "RimEclipseCaseEnsemble.h"
#include "RimEclipseCellColors.h"
#include "RimEclipseContourMapViewCollection.h"
#include "RimEclipseFaultColors.h"
@@ -211,18 +209,7 @@ caf::CmdFeatureMenuBuilder RimContextCommandBuilder::commandsFromSelection()
if ( uiItems.size() == 1 )
{
if ( dynamic_cast<RimEclipseCaseCollection*>( firstUiItem ) )
{
menuBuilder.subMenuStart( "Import" );
menuBuilder << "RicImportEclipseCaseFeature";
menuBuilder << "RicImportEclipseCasesFeature";
menuBuilder << "RicImportInputEclipseCaseFeature";
menuBuilder << "RicCreateGridCaseGroupFromFilesFeature";
menuBuilder << "RicCreateGridCaseEnsemblesFromFilesFeature";
menuBuilder.subMenuEnd();
menuBuilder << "RicEclipseCaseNewGroupFeature";
}
else if ( dynamic_cast<RimGeoMechView*>( firstUiItem ) )
if ( dynamic_cast<RimGeoMechView*>( firstUiItem ) )
{
menuBuilder << "RicPasteGeoMechViewsFeature";
menuBuilder << "Separator";
@@ -264,10 +251,6 @@ caf::CmdFeatureMenuBuilder RimContextCommandBuilder::commandsFromSelection()
menuBuilder << "Separator";
menuBuilder << "RicNewStatisticsCaseFeature";
}
else if ( dynamic_cast<RimEclipseCaseEnsemble*>( firstUiItem ) )
{
menuBuilder << "RicNewViewForGridEnsembleFeature";
}
else if ( dynamic_cast<RimGeoMechModels*>( firstUiItem ) )
{
menuBuilder << "RicImportGeoMechCaseFeature";

View File

@@ -33,6 +33,8 @@
#include "RimIdenticalGridCaseGroup.h"
#include "RimProject.h"
#include "cafCmdFeatureMenuBuilder.h"
CAF_PDM_SOURCE_INIT( RimEclipseCaseCollection, "ResInsightAnalysisModels" );
//--------------------------------------------------------------------------------------------------
///
@@ -110,6 +112,17 @@ void RimEclipseCaseCollection::removeCaseFromAllGroups( RimEclipseCase* reservoi
cases().removeChild( reservoir );
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimEclipseCaseCollection::appendMenuItems( caf::CmdFeatureMenuBuilder& menuBuilder ) const
{
menuBuilder.subMenuStart( "Import" );
menuBuilder << importMenuFeatureNames();
menuBuilder.subMenuEnd();
menuBuilder << "RicEclipseCaseNewGroupFeature";
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
@@ -174,3 +187,17 @@ void RimEclipseCaseCollection::recomputeStatisticsForAllCaseGroups()
}
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
QStringList RimEclipseCaseCollection::importMenuFeatureNames()
{
return { "RicImportEclipseCaseFeature",
"RicImportEclipseCasesFeature",
"RicImportEclipseCaseTimeStepFilterFeature",
"RicImportInputEclipseCaseFeature",
"Separator",
"RicCreateGridCaseGroupFromFilesFeature",
"RicCreateGridCaseEnsemblesFromFilesFeature" };
}

View File

@@ -59,6 +59,11 @@ public:
void recomputeStatisticsForAllCaseGroups();
static QStringList importMenuFeatureNames();
private:
void appendMenuItems( caf::CmdFeatureMenuBuilder& menuBuilder ) const override;
private:
RigMainGrid* registerCaseInGridCollection( RimEclipseCase* rimEclipseCase );
cvf::ref<RigGridManager> m_gridCollection;

View File

@@ -23,6 +23,7 @@
#include "RimEclipseView.h"
#include "RimEclipseViewCollection.h"
#include "cafCmdFeatureMenuBuilder.h"
#include "cafPdmFieldScriptingCapability.h"
#include "cafPdmObjectScriptingCapability.h"
@@ -104,6 +105,8 @@ bool RimEclipseCaseEnsemble::contains( RimEclipseCase* reservoir ) const
//--------------------------------------------------------------------------------------------------
std::vector<RimEclipseCase*> RimEclipseCaseEnsemble::cases() const
{
if ( !m_caseCollection ) return {};
return m_caseCollection->reservoirs.childrenByType();
}
@@ -160,6 +163,14 @@ void RimEclipseCaseEnsemble::fieldChangedByUi( const caf::PdmFieldHandle* change
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimEclipseCaseEnsemble::appendMenuItems( caf::CmdFeatureMenuBuilder& menuBuilder ) const
{
menuBuilder << "RicNewViewForGridEnsembleFeature";
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------

View File

@@ -57,6 +57,7 @@ public:
protected:
QList<caf::PdmOptionItemInfo> calculateValueOptions( const caf::PdmFieldHandle* fieldNeedingOptions ) override;
void fieldChangedByUi( const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue ) override;
void appendMenuItems( caf::CmdFeatureMenuBuilder& menuBuilder ) const override;
private:
caf::PdmField<int> m_groupId;

View File

@@ -101,6 +101,7 @@
#include "Riu3dSelectionManager.h"
#include "RiuMainWindow.h"
#include "RiuTools.h"
#include "RiuViewer.h"
#include "RivReservoirSimWellsPartMgr.h"
@@ -118,6 +119,7 @@
#include "cafOverlayScalarMapperLegend.h"
#include "cafPdmFieldScriptingCapability.h"
#include "cafPdmObjectScriptingCapability.h"
#include "cafPdmUiComboBoxEditor.h"
#include "cafPdmUiTreeOrdering.h"
#include "cvfDrawable.h"
@@ -2084,6 +2086,17 @@ QList<caf::PdmOptionItemInfo> RimEclipseView::calculateValueOptions( const caf::
return RimGridView::calculateValueOptions( fieldNeedingOptions );
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimEclipseView::defineEditorAttribute( const caf::PdmFieldHandle* field, QString uiConfigName, caf::PdmUiEditorAttribute* attribute )
{
if ( field == &m_eclipseCase )
{
RiuTools::enableUpDownArrowsForComboBox( attribute );
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------

View File

@@ -187,6 +187,7 @@ protected:
virtual std::set<RivCellSetEnum> allVisibleFaultGeometryTypes() const;
QList<caf::PdmOptionItemInfo> calculateValueOptions( const caf::PdmFieldHandle* fieldNeedingOptions ) override;
void defineEditorAttribute( const caf::PdmFieldHandle* field, QString uiConfigName, caf::PdmUiEditorAttribute* attribute ) override;
private:
QString createAutoName() const override;

View File

@@ -40,6 +40,7 @@
#include "RimSummaryPlotControls.h"
#include "RiuPlotMainWindow.h"
#include "RiuTools.h"
#include "cafPdmUiComboBoxEditor.h"
#include "cafPdmUiItem.h"
@@ -955,15 +956,12 @@ void RimSummaryPlotSourceStepping::defineEditorAttribute( const caf::PdmFieldHan
}
else
{
RiuTools::enableUpDownArrowsForComboBox( attribute );
QString nextText = RimSummaryPlotControls::nextStepKeyText();
QString prevText = RimSummaryPlotControls::prevStepKeyText();
myAttr->nextButtonText = "Next (" + nextText + ")";
myAttr->prevButtonText = "Previous (" + prevText + ")";
myAttr->nextIcon = QIcon( ":/ComboBoxDown.svg" );
myAttr->previousIcon = QIcon( ":/ComboBoxUp.svg" );
myAttr->showPreviousAndNextButtons = true;
}
}

View File

@@ -49,6 +49,7 @@
#include "RiuQwtPlotWheelZoomer.h"
#include "RiuQwtPlotWidget.h"
#include "RiuQwtPlotZoomer.h"
#include "RiuTools.h"
#include "cafColorTable.h"
#include "cafPdmUiComboBoxEditor.h"
@@ -1366,12 +1367,7 @@ void RimCustomVfpPlot::defineEditorAttribute( const caf::PdmFieldHandle* field,
if ( field == &m_mainDataSource )
{
if ( auto* myAttr = dynamic_cast<caf::PdmUiComboBoxEditorAttribute*>( attribute ) )
{
myAttr->showPreviousAndNextButtons = true;
myAttr->nextIcon = QIcon( ":/ComboBoxDown.svg" );
myAttr->previousIcon = QIcon( ":/ComboBoxUp.svg" );
}
RiuTools::enableUpDownArrowsForComboBox( attribute );
}
}

View File

@@ -45,6 +45,8 @@
#include "RimWellPath.h"
#include "RimWellPathCollection.h"
#include "RiuTools.h"
#include "cafPdmUiCheckBoxEditor.h"
#include "cafPdmUiCheckBoxTristateEditor.h"
#include "cafPdmUiComboBoxEditor.h"
@@ -1083,9 +1085,7 @@ void RimWellLogCurveCommonDataSource::defineEditorAttribute( const caf::PdmField
if ( field == &m_case || field == &m_summaryCase || field == &m_simWellName || field == &m_wellPath || field == &m_timeStep ||
field == &m_rftTimeStep || field == &m_rftSegmentBranchIndex || field == &m_rftWellName )
{
myAttr->showPreviousAndNextButtons = true;
myAttr->nextIcon = QIcon( ":/ComboBoxDown.svg" );
myAttr->previousIcon = QIcon( ":/ComboBoxUp.svg" );
RiuTools::enableUpDownArrowsForComboBox( attribute );
}
QString modifierText;

View File

@@ -18,13 +18,16 @@
#include "RiuMenuBarBuildTools.h"
#include "cafCmdFeatureManager.h"
#include "cvfAssert.h"
#include "RimEclipseCaseCollection.h"
#include "RiuToolTipMenu.h"
#include "RiuTools.h"
#include "cafCmdFeatureManager.h"
#include "cafCmdFeatureMenuBuilder.h"
#include "cvfAssert.h"
#include <QMainWindow>
#include <QMenu>
#include <QMenuBar>
@@ -113,11 +116,7 @@ void RiuMenuBarBuildTools::addImportMenuWithActions( QObject* parent, QMenu* men
QMenu* importMenu = menu->addMenu( "&Import" );
QMenu* importEclipseMenu = importMenu->addMenu( QIcon( ":/Case48x48.png" ), "Eclipse Cases" );
importEclipseMenu->addAction( cmdFeatureMgr->action( "RicImportEclipseCaseFeature" ) );
importEclipseMenu->addAction( cmdFeatureMgr->action( "RicImportEclipseCasesFeature" ) );
importEclipseMenu->addAction( cmdFeatureMgr->action( "RicImportEclipseCaseTimeStepFilterFeature" ) );
importEclipseMenu->addAction( cmdFeatureMgr->action( "RicImportInputEclipseCaseFeature" ) );
importEclipseMenu->addAction( cmdFeatureMgr->action( "RicCreateGridCaseGroupFromFilesFeature" ) );
caf::CmdFeatureMenuBuilder::appendToMenu( importEclipseMenu, RimEclipseCaseCollection::importMenuFeatureNames() );
QMenu* importRoffMenu = importMenu->addMenu( QIcon( ":/Case48x48.png" ), "Roff Grid Models" );
importRoffMenu->addAction( cmdFeatureMgr->action( "RicImportRoffCaseFeature" ) );

View File

@@ -18,8 +18,10 @@
#include "RiuTools.h"
#include "QMenu"
#include "QObject"
#include "cafPdmUiComboBoxEditor.h"
#include <QMenu>
#include <QObject>
//--------------------------------------------------------------------------------------------------
///
@@ -48,3 +50,16 @@ void RiuTools::enableAllActionsOnShow( QObject* object, QMenu* menu )
} );
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RiuTools::enableUpDownArrowsForComboBox( caf::PdmUiEditorAttribute* attribute )
{
if ( auto attrib = dynamic_cast<caf::PdmUiComboBoxEditorAttribute*>( attribute ) )
{
attrib->nextIcon = QIcon( ":/ComboBoxDown.svg" );
attrib->previousIcon = QIcon( ":/ComboBoxUp.svg" );
attrib->showPreviousAndNextButtons = true;
}
}

View File

@@ -23,8 +23,14 @@
class QMenu;
class QObject;
namespace caf
{
class PdmUiEditorAttribute;
}
namespace RiuTools
{
Qt::WindowFlags defaultDialogFlags();
void enableAllActionsOnShow( QObject* object, QMenu* menu );
void enableUpDownArrowsForComboBox( caf::PdmUiEditorAttribute* attribute );
} // end namespace RiuTools

View File

@@ -77,6 +77,19 @@ CmdFeatureMenuBuilder& CmdFeatureMenuBuilder::operator<<( const QString& command
return *this;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
CmdFeatureMenuBuilder& CmdFeatureMenuBuilder::operator<<( const QStringList& commandIds )
{
for ( const QString& commandId : commandIds )
{
*this << commandId;
}
return *this;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
@@ -228,6 +241,16 @@ void CmdFeatureMenuBuilder::appendToMenu( QMenu* menu )
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void CmdFeatureMenuBuilder::appendToMenu( QMenu* menu, const QStringList& commandIds )
{
CmdFeatureMenuBuilder builder;
builder << commandIds;
builder.appendToMenu( menu );
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------

View File

@@ -58,6 +58,7 @@ public:
virtual ~CmdFeatureMenuBuilder();
CmdFeatureMenuBuilder& operator<<( const QString& commandIdOrSeparator );
CmdFeatureMenuBuilder& operator<<( const QStringList& commandIdOrSeparators );
CmdFeatureMenuBuilder& addCmdFeature( const QString commandId, const QString& customUiText = "" );
CmdFeatureMenuBuilder&
addCmdFeatureWithUserData( const QString commandId, const QString& customUiText, const QVariant& userData );
@@ -69,6 +70,8 @@ public:
void appendToMenu( QMenu* menu );
static void appendToMenu( QMenu* menu, const QStringList& commandIds );
bool isCmdFeatureAdded( const QString& commandId );
size_t itemCount() const;