#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");
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
@ -231,6 +232,7 @@ void RicCreateMultipleFracturesFeature::onActionTriggered(bool isChecked)
Riu3DMainWindowTools::mainWindowWidget(), multipleFractionsUi, "Create Multiple Fractures", "");
m_dialog = &propertyDialog;
multipleFractionsUi->setParentDialog(m_dialog);
propertyDialog.resize(QSize(700, 450));
@ -239,7 +241,7 @@ void RicCreateMultipleFracturesFeature::onActionTriggered(bool isChecked)
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()));
pushButton->setDefault(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()));
pushButton->setDefault(false);
pushButton->setAutoDefault(false);
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);
connect(pushButton, SIGNAL(clicked()), this, SLOT(slotClose()));

View File

@ -105,10 +105,20 @@ void RicCreateMultipleFracturesOptionItemUi::fieldChangedByUi(const caf::PdmFiel
const QVariant& oldValue,
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;
this->firstAncestorOrThisOfType(parent);
if (parent)
{
parent->updateButtonsEnableState();
parent->updateConnectedEditors();
}
}

View File

@ -35,6 +35,7 @@
#include "cafPdmUiTableViewEditor.h"
#include "cafPdmUiTextEditor.h"
#include "cafSelectionManagerTools.h"
#include "cafPdmUiPropertyViewDialog.h"
#include "cvfBoundingBox.h"
@ -66,6 +67,12 @@ RicCreateMultipleFracturesOptionItemUi* firstUiOptionContainingK(size_t k,
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());
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
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)
{
size_t index = m_options.index(insertBeforeThisObject);
if (index < m_options.size())
size_t index = m_options.index(insertAfterThisObject);
if (index < m_options.size() - 1)
{
m_options.insert(index, objectToInsert);
m_options.insert(index + 1, objectToInsert);
}
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
//--------------------------------------------------------------------------------------------------

View File

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

View File

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