mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-25 18:55:39 -06:00
Merge pull request #4942 from OPM/summary-text-edit-in-toolbar
Add combo box to specify text for summary curves
This commit is contained in:
@@ -50,6 +50,7 @@
|
||||
#include "SummaryPlotCommands/RicSummaryPlotFeatureImpl.h"
|
||||
#include "WellLogCommands/RicWellLogPlotCurveFeatureImpl.h"
|
||||
|
||||
#include "cafPdmUiComboBoxEditor.h"
|
||||
#include "cafPdmUiLabelEditor.h"
|
||||
#include "cafPdmUiLineEditor.h"
|
||||
#include "cafPdmUiToolBarEditor.h"
|
||||
@@ -90,6 +91,7 @@ RimSummaryPlotFilterTextCurveSetEditor::RimSummaryPlotFilterTextCurveSetEditor()
|
||||
|
||||
CAF_PDM_InitFieldNoDefault( &m_curveFilterText, "CurveFilterText", "Curve Filter Text", "", toolTipPropertyEditor, "" );
|
||||
m_curveFilterText.uiCapability()->setUiLabelPosition( caf::PdmUiItemInfo::HIDDEN );
|
||||
m_curveFilterText.uiCapability()->setUiEditorTypeName( caf::PdmUiComboBoxEditor::uiEditorTypeName() );
|
||||
|
||||
// Special tool tip for toolbar
|
||||
m_curveFilterText.uiCapability()->setUiToolTip( toolTipToolbar, caf::PdmUiToolBarEditor::uiEditorConfigName() );
|
||||
@@ -381,6 +383,17 @@ void RimSummaryPlotFilterTextCurveSetEditor::fieldChangedByUi( const caf::PdmFie
|
||||
{
|
||||
m_curveFilterText = curveFilterTextWithoutOutdatedLabel();
|
||||
|
||||
{
|
||||
if ( m_historyItems.indexOf( m_curveFilterText ) == -1 )
|
||||
{
|
||||
m_historyItems.push_front( m_curveFilterText );
|
||||
while ( m_historyItems.size() > 10 )
|
||||
{
|
||||
m_historyItems.pop_back();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
m_curveFilterText.uiCapability()->updateConnectedEditors();
|
||||
}
|
||||
|
||||
@@ -430,17 +443,29 @@ void RimSummaryPlotFilterTextCurveSetEditor::defineEditorAttribute( const caf::P
|
||||
{
|
||||
if ( field == &m_curveFilterText )
|
||||
{
|
||||
auto attr = dynamic_cast<caf::PdmUiLineEditorAttribute*>( attribute );
|
||||
if ( attr )
|
||||
{
|
||||
if ( uiConfigName == caf::PdmUiToolBarEditor::uiEditorConfigName() )
|
||||
auto attr = dynamic_cast<caf::PdmUiLineEditorAttribute*>( attribute );
|
||||
if ( attr )
|
||||
{
|
||||
// Special config for toolbar
|
||||
attr->maximumWidth = 150;
|
||||
}
|
||||
if ( uiConfigName == caf::PdmUiToolBarEditor::uiEditorConfigName() )
|
||||
{
|
||||
// Special config for toolbar
|
||||
attr->maximumWidth = 150;
|
||||
}
|
||||
|
||||
attr->selectAllOnFocusEvent = true;
|
||||
attr->placeholderText = "Click to Edit Summary Curves";
|
||||
attr->selectAllOnFocusEvent = true;
|
||||
attr->placeholderText = "Click to define filter";
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
auto attr = dynamic_cast<caf::PdmUiComboBoxEditorAttribute*>( attribute );
|
||||
if ( attr )
|
||||
{
|
||||
attr->enableEditableContent = true;
|
||||
attr->adjustWidthToContents = true;
|
||||
attr->minimumWidth = 100;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -458,6 +483,14 @@ QList<caf::PdmOptionItemInfo>
|
||||
appendOptionItemsForSources( options, false, false );
|
||||
}
|
||||
|
||||
if ( fieldNeedingOptions == &m_curveFilterText )
|
||||
{
|
||||
for ( const auto& s : m_historyItems )
|
||||
{
|
||||
options.push_back( caf::PdmOptionItemInfo( s, s ) );
|
||||
}
|
||||
}
|
||||
|
||||
return options;
|
||||
}
|
||||
|
||||
|
@@ -61,6 +61,7 @@ private:
|
||||
|
||||
caf::PdmField<QString> m_curveFilterLabelText;
|
||||
caf::PdmField<QString> m_curveFilterText;
|
||||
QStringList m_historyItems;
|
||||
|
||||
bool m_isFieldRecentlyChangedFromGui;
|
||||
};
|
||||
|
@@ -20,6 +20,8 @@ void caf::PdmFieldUiCap<FieldType>::setValueFromUiEditor(const QVariant& uiValue
|
||||
{
|
||||
QVariant oldUiBasedQVariant = toUiBasedQVariant();
|
||||
|
||||
bool setUiValueDirectly = false;
|
||||
|
||||
// Check whether we are handling selections of values or actual values
|
||||
if (m_optionEntryCache.size())
|
||||
{
|
||||
@@ -77,17 +79,22 @@ void caf::PdmFieldUiCap<FieldType>::setValueFromUiEditor(const QVariant& uiValue
|
||||
}
|
||||
else
|
||||
{
|
||||
// We are not getting indexes as expected from the UI. For now assert, to catch this condition
|
||||
// but it should possibly be handled as setting the values explicitly. The code for that is below the assert
|
||||
CAF_ASSERT(false);
|
||||
typename FieldType::FieldDataType value;
|
||||
PdmUiFieldSpecialization<typename FieldType::FieldDataType>::setFromVariant(uiValue, value);
|
||||
m_field->setValue(value);
|
||||
m_optionEntryCache.clear();
|
||||
// We are not getting indexes as usually expected when an option cache is present.
|
||||
// This situation can occur if a text field is edited by a combobox allowing user defined input
|
||||
// when a history of recently used strings are stored in a field of string
|
||||
|
||||
setUiValueDirectly = true;
|
||||
}
|
||||
}
|
||||
else
|
||||
{ // Not an option based GUI, the uiValue is a real field value
|
||||
{
|
||||
// Not an option based GUI, the uiValue is a real field value
|
||||
|
||||
setUiValueDirectly = true;
|
||||
}
|
||||
|
||||
if (setUiValueDirectly)
|
||||
{
|
||||
typename FieldType::FieldDataType value;
|
||||
PdmUiFieldSpecialization<typename FieldType::FieldDataType>::setFromVariant(uiValue, value);
|
||||
m_field->setValue(value);
|
||||
|
@@ -59,6 +59,9 @@ set( PROJECT_FILES
|
||||
CustomObjectEditor.h
|
||||
MenuItemProducer.cpp
|
||||
MenuItemProducer.h
|
||||
|
||||
TamComboBox.h
|
||||
TamComboBox.cpp
|
||||
)
|
||||
|
||||
|
||||
|
@@ -6,6 +6,7 @@
|
||||
#include "CustomObjectEditor.h"
|
||||
#include "ManyGroups.h"
|
||||
#include "MenuItemProducer.h"
|
||||
#include "TamComboBox.h"
|
||||
#include "WidgetLayoutTest.h"
|
||||
|
||||
#include "cafAppEnum.h"
|
||||
@@ -16,6 +17,7 @@
|
||||
#include "cafCmdSelectionHelper.h"
|
||||
#endif
|
||||
|
||||
#include "cafCmdFeatureMenuBuilder.h"
|
||||
#include "cafFilePath.h"
|
||||
#include "cafPdmDocument.h"
|
||||
#include "cafPdmObject.h"
|
||||
@@ -37,7 +39,6 @@
|
||||
#include "cafPdmUiTreeView.h"
|
||||
#include "cafSelectionManager.h"
|
||||
|
||||
#include "cafCmdFeatureMenuBuilder.h"
|
||||
#include <QAction>
|
||||
#include <QDockWidget>
|
||||
#include <QFileDialog>
|
||||
@@ -1166,6 +1167,9 @@ void MainWindow::buildTestModel()
|
||||
SingleEditorPdmObject* singleEditorObj = new SingleEditorPdmObject;
|
||||
m_testRoot->objects.push_back(singleEditorObj);
|
||||
|
||||
auto tamComboBox = new TamComboBox;
|
||||
m_testRoot->objects.push_back(tamComboBox);
|
||||
|
||||
DemoPdmObject* demoObj2 = new DemoPdmObject;
|
||||
|
||||
demoObject->m_textField = "Mitt Demo Obj";
|
||||
|
72
Fwk/AppFwk/cafTests/cafTestApplication/TamComboBox.cpp
Normal file
72
Fwk/AppFwk/cafTests/cafTestApplication/TamComboBox.cpp
Normal file
@@ -0,0 +1,72 @@
|
||||
|
||||
#include "TamComboBox.h"
|
||||
|
||||
#include "cafPdmUiComboBoxEditor.h"
|
||||
|
||||
CAF_PDM_SOURCE_INIT(TamComboBox, "TamComboBox");
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
TamComboBox::TamComboBox()
|
||||
{
|
||||
CAF_PDM_InitObject("Cell Filter", "", "", "");
|
||||
|
||||
CAF_PDM_InitField(&m_name, "UserDescription", QString("Filter Name"), "Name", "", "", "");
|
||||
m_name.uiCapability()->setUiEditorTypeName(caf::PdmUiComboBoxEditor::uiEditorTypeName());
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
QList<caf::PdmOptionItemInfo> TamComboBox::calculateValueOptions(const caf::PdmFieldHandle* fieldNeedingOptions,
|
||||
bool* useOptionsOnly)
|
||||
{
|
||||
QList<caf::PdmOptionItemInfo> options;
|
||||
|
||||
for (const auto& s : m_historyItems)
|
||||
{
|
||||
options.push_back(caf::PdmOptionItemInfo(s, s));
|
||||
}
|
||||
|
||||
return options;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
void TamComboBox::fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue)
|
||||
{
|
||||
if (changedField == &m_name)
|
||||
{
|
||||
QString text = m_name();
|
||||
|
||||
if (m_historyItems.indexOf(text) == -1)
|
||||
{
|
||||
m_historyItems.push_front(m_name);
|
||||
while (m_historyItems.size() > 5)
|
||||
{
|
||||
m_historyItems.pop_back();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
void TamComboBox::defineUiOrdering(QString uiConfigName, caf::PdmUiOrdering& uiOrdering) {}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
void TamComboBox::defineEditorAttribute(const caf::PdmFieldHandle* field,
|
||||
QString uiConfigName,
|
||||
caf::PdmUiEditorAttribute* attribute)
|
||||
{
|
||||
auto attr = dynamic_cast<caf::PdmUiComboBoxEditorAttribute*>(attribute);
|
||||
if (attr)
|
||||
{
|
||||
attr->enableEditableContent = true;
|
||||
}
|
||||
}
|
39
Fwk/AppFwk/cafTests/cafTestApplication/TamComboBox.h
Normal file
39
Fwk/AppFwk/cafTests/cafTestApplication/TamComboBox.h
Normal file
@@ -0,0 +1,39 @@
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "cafAppEnum.h"
|
||||
#include "cafPdmField.h"
|
||||
#include "cafPdmObject.h"
|
||||
|
||||
#include <QStringList>
|
||||
|
||||
//==================================================================================================
|
||||
///
|
||||
///
|
||||
//==================================================================================================
|
||||
class TamComboBox : public caf::PdmObject
|
||||
{
|
||||
CAF_PDM_HEADER_INIT;
|
||||
|
||||
public:
|
||||
TamComboBox();
|
||||
|
||||
virtual QList<caf::PdmOptionItemInfo> calculateValueOptions(const caf::PdmFieldHandle* fieldNeedingOptions,
|
||||
bool* useOptionsOnly) override;
|
||||
|
||||
virtual void
|
||||
fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue) override;
|
||||
|
||||
private:
|
||||
caf::PdmField<QString> m_name;
|
||||
|
||||
protected:
|
||||
virtual void defineUiOrdering(QString uiConfigName, caf::PdmUiOrdering& uiOrdering) override;
|
||||
|
||||
virtual void defineEditorAttribute(const caf::PdmFieldHandle* field,
|
||||
QString uiConfigName,
|
||||
caf::PdmUiEditorAttribute* attribute) override;
|
||||
|
||||
private:
|
||||
QStringList m_historyItems;
|
||||
};
|
@@ -37,9 +37,9 @@
|
||||
|
||||
#include "cafPdmUiComboBoxEditor.h"
|
||||
|
||||
#include "cafPdmField.h"
|
||||
#include "cafPdmObject.h"
|
||||
#include "cafPdmUiFieldEditorHandle.h"
|
||||
#include "cafPdmField.h"
|
||||
|
||||
#include "cafFactory.h"
|
||||
#include "cafQShortenedLabel.h"
|
||||
@@ -182,16 +182,17 @@ void PdmUiComboBoxEditor::configureAndUpdateUi(const QString& uiConfigName)
|
||||
}
|
||||
|
||||
// Handle attributes
|
||||
PdmUiComboBoxEditorAttribute attributes;
|
||||
caf::PdmUiObjectHandle* uiObject = uiObj(uiField()->fieldHandle()->ownerObject());
|
||||
if (uiObject)
|
||||
{
|
||||
uiObject->editorAttribute(uiField()->fieldHandle(), uiConfigName, &attributes);
|
||||
uiObject->editorAttribute(uiField()->fieldHandle(), uiConfigName, &m_attributes);
|
||||
}
|
||||
|
||||
if (!m_comboBox.isNull())
|
||||
{
|
||||
m_comboBox->setEnabled(!uiField()->isUiReadOnly(uiConfigName));
|
||||
m_comboBox->setToolTip(uiField()->uiToolTip(uiConfigName));
|
||||
|
||||
|
||||
bool fromMenuOnly = true;
|
||||
QList<PdmOptionItemInfo> options = uiField()->valueOptions(&fromMenuOnly);
|
||||
@@ -207,10 +208,10 @@ void PdmUiComboBoxEditor::configureAndUpdateUi(const QString& uiConfigName)
|
||||
|
||||
if (!options.isEmpty())
|
||||
{
|
||||
for (int i = 0; i < options.size(); i++)
|
||||
for (const auto& option : options)
|
||||
{
|
||||
m_comboBox->addItem(options[i].icon(), options[i].optionUiText());
|
||||
m_comboBox->setIconSize(attributes.iconSize);
|
||||
m_comboBox->addItem(option.icon(), option.optionUiText());
|
||||
m_comboBox->setIconSize(m_attributes.iconSize);
|
||||
}
|
||||
m_comboBox->setCurrentIndex(uiField()->uiValue().toInt());
|
||||
}
|
||||
@@ -220,14 +221,24 @@ void PdmUiComboBoxEditor::configureAndUpdateUi(const QString& uiConfigName)
|
||||
m_comboBox->setCurrentIndex(0);
|
||||
}
|
||||
|
||||
if (attributes.adjustWidthToContents)
|
||||
if (m_attributes.adjustWidthToContents)
|
||||
{
|
||||
m_comboBox->setSizeAdjustPolicy(QComboBox::AdjustToContents);
|
||||
}
|
||||
else if (attributes.minimumContentsLength > 0)
|
||||
else if (m_attributes.minimumContentsLength > 0)
|
||||
{
|
||||
m_comboBox->setSizeAdjustPolicy(QComboBox::AdjustToMinimumContentsLength);
|
||||
m_comboBox->setMinimumContentsLength(attributes.minimumContentsLength);
|
||||
m_comboBox->setMinimumContentsLength(m_attributes.minimumContentsLength);
|
||||
}
|
||||
|
||||
if (m_attributes.enableEditableContent)
|
||||
{
|
||||
m_comboBox->setEditable(true);
|
||||
}
|
||||
|
||||
if (m_attributes.minimumWidth != -1)
|
||||
{
|
||||
m_comboBox->setMinimumWidth(m_attributes.minimumWidth);
|
||||
}
|
||||
|
||||
m_comboBox->blockSignals(false);
|
||||
@@ -235,7 +246,7 @@ void PdmUiComboBoxEditor::configureAndUpdateUi(const QString& uiConfigName)
|
||||
|
||||
if (!m_layout.isNull())
|
||||
{
|
||||
if (attributes.showPreviousAndNextButtons)
|
||||
if (m_attributes.showPreviousAndNextButtons)
|
||||
{
|
||||
if (m_previousItemButton.isNull())
|
||||
{
|
||||
@@ -277,14 +288,14 @@ void PdmUiComboBoxEditor::configureAndUpdateUi(const QString& uiConfigName)
|
||||
}
|
||||
|
||||
// Update button texts
|
||||
if (!attributes.nextButtonText.isEmpty())
|
||||
if (!m_attributes.nextButtonText.isEmpty())
|
||||
{
|
||||
m_nextItemButton->setToolTip(attributes.nextButtonText);
|
||||
m_nextItemButton->setToolTip(m_attributes.nextButtonText);
|
||||
}
|
||||
|
||||
if (!attributes.prevButtonText.isEmpty())
|
||||
if (!m_attributes.prevButtonText.isEmpty())
|
||||
{
|
||||
m_previousItemButton->setToolTip(attributes.prevButtonText);
|
||||
m_previousItemButton->setToolTip(m_attributes.prevButtonText);
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -406,11 +417,24 @@ QWidget* PdmUiComboBoxEditor::createLabelWidget(QWidget * parent)
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
void PdmUiComboBoxEditor::slotIndexActivated(int index)
|
||||
{
|
||||
QVariant v;
|
||||
v = index;
|
||||
if (m_attributes.enableEditableContent)
|
||||
{
|
||||
// Use the text directly, as the item text could be entered directly by the user
|
||||
|
||||
QVariant uintValue(v.toUInt());
|
||||
this->setValueToField(uintValue);
|
||||
auto text = m_comboBox->itemText(index);
|
||||
this->setValueToField(text);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Use index as data carrier to PDM field
|
||||
// The index will be used as a lookup in a list of option items
|
||||
|
||||
QVariant v;
|
||||
v = index;
|
||||
|
||||
QVariant uintValue(v.toUInt());
|
||||
this->setValueToField(uintValue);
|
||||
}
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
|
@@ -61,6 +61,8 @@ public:
|
||||
adjustWidthToContents = false;
|
||||
showPreviousAndNextButtons = false;
|
||||
minimumContentsLength = 8;
|
||||
enableEditableContent = false;
|
||||
minimumWidth = -1;
|
||||
iconSize = QSize(14, 14);
|
||||
}
|
||||
|
||||
@@ -69,9 +71,13 @@ public:
|
||||
bool showPreviousAndNextButtons;
|
||||
int minimumContentsLength; // The length of string to adjust to if adjustWidthToContents = false.
|
||||
// Set to <= 0 to ignore and use AdjustToContentsOnFirstShow instead
|
||||
QSize iconSize;
|
||||
|
||||
bool enableEditableContent;
|
||||
int minimumWidth;
|
||||
QString nextButtonText;
|
||||
QString prevButtonText;
|
||||
|
||||
QSize iconSize;
|
||||
};
|
||||
|
||||
|
||||
@@ -107,6 +113,8 @@ private:
|
||||
QPointer<QToolButton> m_nextItemButton;
|
||||
QPointer<QHBoxLayout> m_layout;
|
||||
QPointer<QWidget> m_placeholder;
|
||||
|
||||
PdmUiComboBoxEditorAttribute m_attributes;
|
||||
};
|
||||
|
||||
|
||||
|
@@ -204,6 +204,32 @@ void PdmUiToolBarEditor::configureAndUpdateUi(const QString& uiConfigName)
|
||||
}
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
QWidget* PdmUiToolBarEditor::focusWidget(PdmUiFieldEditorHandle* uiFieldEditorHandle)
|
||||
{
|
||||
// Some editors have a placeholder widget as parent of the main editor widget
|
||||
// This is the case for combo box widget to allow up/down arrow buttons associated with the combo box
|
||||
|
||||
QWidget* editorWidget = nullptr;
|
||||
auto comboEditor = dynamic_cast<caf::PdmUiComboBoxEditor*>(uiFieldEditorHandle);
|
||||
if (comboEditor)
|
||||
{
|
||||
auto topWidget = comboEditor->editorWidget();
|
||||
QComboBox* comboBox = topWidget->findChild<QComboBox*>();
|
||||
|
||||
editorWidget = comboBox;
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
editorWidget = uiFieldEditorHandle->editorWidget();
|
||||
}
|
||||
|
||||
return editorWidget;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
@@ -244,10 +270,11 @@ void PdmUiToolBarEditor::setFocusWidgetFromKeyword(const QString& fieldKeyword)
|
||||
auto fieldView = m_fieldViews.find(fieldKeyword);
|
||||
if (fieldView != m_fieldViews.end() && fieldView->second)
|
||||
{
|
||||
auto editorWidget = fieldView->second->editorWidget();
|
||||
if (editorWidget)
|
||||
QWidget* widget = focusWidget(fieldView->second);
|
||||
|
||||
if (widget)
|
||||
{
|
||||
editorWidget->setFocus(Qt::ActiveWindowFocusReason);
|
||||
widget->setFocus(Qt::ActiveWindowFocusReason);
|
||||
|
||||
PdmUiLineEditorAttribute attributes;
|
||||
|
||||
@@ -265,7 +292,7 @@ void PdmUiToolBarEditor::setFocusWidgetFromKeyword(const QString& fieldKeyword)
|
||||
|
||||
if (attributes.selectAllOnFocusEvent)
|
||||
{
|
||||
auto lineEdit = dynamic_cast<QLineEdit*>(editorWidget);
|
||||
auto lineEdit = dynamic_cast<QLineEdit*>(widget);
|
||||
if (lineEdit )
|
||||
{
|
||||
lineEdit->selectAll();
|
||||
@@ -316,11 +343,11 @@ QString PdmUiToolBarEditor::keywordForFocusWidget()
|
||||
{
|
||||
for (auto fieldViewPair : m_fieldViews)
|
||||
{
|
||||
auto fieldView = fieldViewPair.second;
|
||||
if (fieldView)
|
||||
auto uiFieldEditorHandle = fieldViewPair.second;
|
||||
if (uiFieldEditorHandle)
|
||||
{
|
||||
auto editorWidget = fieldView->editorWidget();
|
||||
if (editorWidget && editorWidget->hasFocus())
|
||||
auto widget = focusWidget(uiFieldEditorHandle);
|
||||
if (widget && widget->hasFocus())
|
||||
{
|
||||
keyword = fieldViewPair.first;
|
||||
}
|
||||
|
@@ -75,6 +75,8 @@ public:
|
||||
|
||||
private:
|
||||
void configureAndUpdateUi(const QString& uiConfigName) override;
|
||||
|
||||
static QWidget* focusWidget(PdmUiFieldEditorHandle* uiFieldEditorHandle);
|
||||
|
||||
private:
|
||||
QPointer<QToolBar> m_toolbar;
|
||||
|
Reference in New Issue
Block a user