#3303 Create multiple fractures dialog. Prevent overlapping option items. Remove cancel button

This commit is contained in:
Bjørn Erik Jensen 2018-09-14 11:17:14 +02:00
parent f039f84d84
commit de903c0fe0
5 changed files with 88 additions and 16 deletions

View File

@ -47,6 +47,7 @@
CAF_CMD_SOURCE_INIT(RicCreateMultipleFracturesFeature, "RicCreateMultipleFracturesFeature"); CAF_CMD_SOURCE_INIT(RicCreateMultipleFracturesFeature, "RicCreateMultipleFracturesFeature");
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
@ -231,6 +232,7 @@ void RicCreateMultipleFracturesFeature::onActionTriggered(bool isChecked)
Riu3DMainWindowTools::mainWindowWidget(), multipleFractionsUi, "Create Multiple Fractures", ""); Riu3DMainWindowTools::mainWindowWidget(), multipleFractionsUi, "Create Multiple Fractures", "");
m_dialog = &propertyDialog; m_dialog = &propertyDialog;
multipleFractionsUi->setParentDialog(m_dialog);
propertyDialog.resize(QSize(700, 450)); propertyDialog.resize(QSize(700, 450));
@ -239,7 +241,7 @@ void RicCreateMultipleFracturesFeature::onActionTriggered(bool isChecked)
dialogButtonBox->clear(); dialogButtonBox->clear();
{ {
QPushButton* pushButton = dialogButtonBox->addButton("Replace Fractures", QDialogButtonBox::ActionRole); QPushButton* pushButton = dialogButtonBox->addButton(RiuCreateMultipleFractionsUi::REPLACE_FRACTURES_BUTTON_TEXT, QDialogButtonBox::ActionRole);
connect(pushButton, SIGNAL(clicked()), this, SLOT(slotDeleteAndAppendFractures())); connect(pushButton, SIGNAL(clicked()), this, SLOT(slotDeleteAndAppendFractures()));
pushButton->setDefault(false); pushButton->setDefault(false);
pushButton->setAutoDefault(false); pushButton->setAutoDefault(false);
@ -247,20 +249,13 @@ void RicCreateMultipleFracturesFeature::onActionTriggered(bool isChecked)
} }
{ {
QPushButton* pushButton = dialogButtonBox->addButton("Add Fractures", QDialogButtonBox::ActionRole); QPushButton* pushButton = dialogButtonBox->addButton(RiuCreateMultipleFractionsUi::ADD_FRACTURES_BUTTON_TEXT, QDialogButtonBox::ActionRole);
connect(pushButton, SIGNAL(clicked()), this, SLOT(slotAppendFractures())); connect(pushButton, SIGNAL(clicked()), this, SLOT(slotAppendFractures()));
pushButton->setDefault(false); pushButton->setDefault(false);
pushButton->setAutoDefault(false); pushButton->setAutoDefault(false);
pushButton->setToolTip("Add new fractures"); pushButton->setToolTip("Add new fractures");
} }
{
QPushButton* pushButton = dialogButtonBox->addButton("Cancel", QDialogButtonBox::ActionRole);
connect(pushButton, SIGNAL(clicked()), this, SLOT(slotCancel()));
pushButton->setDefault(false);
pushButton->setAutoDefault(false);
}
{ {
QPushButton* pushButton = dialogButtonBox->addButton("Close", QDialogButtonBox::ActionRole); QPushButton* pushButton = dialogButtonBox->addButton("Close", QDialogButtonBox::ActionRole);
connect(pushButton, SIGNAL(clicked()), this, SLOT(slotClose())); connect(pushButton, SIGNAL(clicked()), this, SLOT(slotClose()));

View File

@ -105,10 +105,20 @@ void RicCreateMultipleFracturesOptionItemUi::fieldChangedByUi(const caf::PdmFiel
const QVariant& oldValue, const QVariant& oldValue,
const QVariant& newValue) const QVariant& newValue)
{ {
if (changedField == &m_topKOneBased)
{
if (m_topKOneBased > m_baseKOneBased) m_baseKOneBased = m_topKOneBased;
}
else if (changedField = &m_baseKOneBased)
{
if (m_baseKOneBased < m_topKOneBased) m_topKOneBased = m_baseKOneBased;
}
RiuCreateMultipleFractionsUi* parent = nullptr; RiuCreateMultipleFractionsUi* parent = nullptr;
this->firstAncestorOrThisOfType(parent); this->firstAncestorOrThisOfType(parent);
if (parent) if (parent)
{ {
parent->updateButtonsEnableState();
parent->updateConnectedEditors(); parent->updateConnectedEditors();
} }
} }

View File

@ -35,6 +35,7 @@
#include "cafPdmUiTableViewEditor.h" #include "cafPdmUiTableViewEditor.h"
#include "cafPdmUiTextEditor.h" #include "cafPdmUiTextEditor.h"
#include "cafSelectionManagerTools.h" #include "cafSelectionManagerTools.h"
#include "cafPdmUiPropertyViewDialog.h"
#include "cvfBoundingBox.h" #include "cvfBoundingBox.h"
@ -66,6 +67,12 @@ RicCreateMultipleFracturesOptionItemUi* firstUiOptionContainingK(size_t k,
const std::vector<RicCreateMultipleFracturesOptionItemUi*>& allUiOptions); const std::vector<RicCreateMultipleFracturesOptionItemUi*>& allUiOptions);
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
const QString RiuCreateMultipleFractionsUi::ADD_FRACTURES_BUTTON_TEXT = "Add Fractures";
const QString RiuCreateMultipleFractionsUi::REPLACE_FRACTURES_BUTTON_TEXT = "Replace Fractures";
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
@ -87,6 +94,14 @@ RiuCreateMultipleFractionsUi::RiuCreateMultipleFractionsUi()
m_fractureCreationSummary.uiCapability()->setUiEditorTypeName(caf::PdmUiTextEditor::uiEditorTypeName()); m_fractureCreationSummary.uiCapability()->setUiEditorTypeName(caf::PdmUiTextEditor::uiEditorTypeName());
} }
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RiuCreateMultipleFractionsUi::setParentDialog(QPointer<caf::PdmUiPropertyViewDialog> dialog)
{
m_dialog = dialog;
}
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
@ -117,13 +132,13 @@ std::vector<RicCreateMultipleFracturesOptionItemUi*> RiuCreateMultipleFractionsU
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
void RiuCreateMultipleFractionsUi::insertOptionItem(RicCreateMultipleFracturesOptionItemUi* insertBeforeThisObject, void RiuCreateMultipleFractionsUi::insertOptionItem(RicCreateMultipleFracturesOptionItemUi* insertAfterThisObject,
RicCreateMultipleFracturesOptionItemUi* objectToInsert) RicCreateMultipleFracturesOptionItemUi* objectToInsert)
{ {
size_t index = m_options.index(insertBeforeThisObject); size_t index = m_options.index(insertAfterThisObject);
if (index < m_options.size()) if (index < m_options.size() - 1)
{ {
m_options.insert(index, objectToInsert); m_options.insert(index + 1, objectToInsert);
} }
else else
{ {
@ -350,6 +365,41 @@ std::vector<LocationForNewFracture> RiuCreateMultipleFractionsUi::locationsForNe
} }
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RiuCreateMultipleFractionsUi::updateButtonsEnableState()
{
if (m_dialog)
{
bool hasOverlappingK = false;
const auto& opts = options();
for (int i = 0; i < opts.size(); i++)
{
for (int j = i + 1; j < opts.size(); j++)
{
int absMin = std::min(opts[i]->topKLayer(), opts[j]->topKLayer());
int absMax = std::max(opts[i]->baseKLayer(), opts[j]->baseKLayer());
int leni = opts[i]->baseKLayer() - opts[i]->topKLayer() + 1;
int lenj = opts[j]->baseKLayer() - opts[j]->topKLayer() + 1;
if (absMax - absMin + 1 < leni + lenj)
{
hasOverlappingK = true;
break;
}
}
}
for (auto button : m_dialog->dialogButtonBox()->buttons())
{
if (button->text() == ADD_FRACTURES_BUTTON_TEXT || button->text() == REPLACE_FRACTURES_BUTTON_TEXT)
{
button->setEnabled(!hasOverlappingK);
}
}
}
}
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// Internal definitions /// Internal definitions
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------

View File

@ -20,6 +20,8 @@
#include "RicCreateMultipleFracturesOptionItemUi.h" #include "RicCreateMultipleFracturesOptionItemUi.h"
#include <QPointer>
#include "cafPdmChildArrayField.h" #include "cafPdmChildArrayField.h"
#include "cafPdmField.h" #include "cafPdmField.h"
#include "cafPdmObject.h" #include "cafPdmObject.h"
@ -29,6 +31,11 @@ class RimEclipseCase;
class RimWellPath; class RimWellPath;
class RigMainGrid; class RigMainGrid;
namespace caf
{
class PdmUiPropertyViewDialog;
}
//================================================================================================== //==================================================================================================
/// ///
//================================================================================================== //==================================================================================================
@ -60,14 +67,18 @@ class RiuCreateMultipleFractionsUi : public caf::PdmObject
CAF_PDM_HEADER_INIT; CAF_PDM_HEADER_INIT;
public: public:
static const QString ADD_FRACTURES_BUTTON_TEXT;
static const QString REPLACE_FRACTURES_BUTTON_TEXT;
RiuCreateMultipleFractionsUi(); RiuCreateMultipleFractionsUi();
void setParentDialog(QPointer<caf::PdmUiPropertyViewDialog> dialog);
void setValues(RimEclipseCase* eclipseCase, double minimumDistanceFromWellTip, int maxFracturesPerWell); void setValues(RimEclipseCase* eclipseCase, double minimumDistanceFromWellTip, int maxFracturesPerWell);
void resetValues(); void resetValues();
std::vector<RicCreateMultipleFracturesOptionItemUi*> options() const; std::vector<RicCreateMultipleFracturesOptionItemUi*> options() const;
void insertOptionItem(RicCreateMultipleFracturesOptionItemUi* insertBeforeThisObject, void insertOptionItem(RicCreateMultipleFracturesOptionItemUi* insertAfterThisObject,
RicCreateMultipleFracturesOptionItemUi* objectToInsert); RicCreateMultipleFracturesOptionItemUi* objectToInsert);
void deleteOptionItem(RicCreateMultipleFracturesOptionItemUi* optionsItem); void deleteOptionItem(RicCreateMultipleFracturesOptionItemUi* optionsItem);
@ -80,6 +91,8 @@ public:
std::vector<LocationForNewFracture> locationsForNewFractures() const; std::vector<LocationForNewFracture> locationsForNewFractures() const;
void updateButtonsEnableState();
private: private:
virtual QList<caf::PdmOptionItemInfo> calculateValueOptions(const caf::PdmFieldHandle* fieldNeedingOptions, virtual QList<caf::PdmOptionItemInfo> calculateValueOptions(const caf::PdmFieldHandle* fieldNeedingOptions,
bool* useOptionsOnly) override; bool* useOptionsOnly) override;
@ -100,4 +113,6 @@ private:
caf::PdmProxyValueField<QString> m_fractureCreationSummary; caf::PdmProxyValueField<QString> m_fractureCreationSummary;
std::vector<RimWellPath*> m_wellPaths; std::vector<RimWellPath*> m_wellPaths;
QPointer<caf::PdmUiPropertyViewDialog> m_dialog;
}; };

View File

@ -76,14 +76,16 @@ void RicNewOptionItemFeature::onActionTriggered(bool isChecked)
if (multipleFractionUi) if (multipleFractionUi)
{ {
auto newItem = new RicCreateMultipleFracturesOptionItemUi(); auto newItem = new RicCreateMultipleFracturesOptionItemUi();
if (selectedOptionItem) if (selectedOptionItem)
{ {
newItem->setValues(selectedOptionItem->topKLayer(), newItem->setValues(selectedOptionItem->baseKLayer() + 1,
selectedOptionItem->baseKLayer(), selectedOptionItem->baseKLayer() + 1,
selectedOptionItem->fractureTemplate(), selectedOptionItem->fractureTemplate(),
selectedOptionItem->minimumSpacing()); selectedOptionItem->minimumSpacing());
} }
multipleFractionUi->insertOptionItem(selectedOptionItem, newItem); multipleFractionUi->insertOptionItem(selectedOptionItem, newItem);
multipleFractionUi->updateButtonsEnableState();
multipleFractionUi->updateConnectedEditors(); multipleFractionUi->updateConnectedEditors();
} }
} }