diff --git a/Fwk/AppFwk/cafUserInterface/CMakeLists.txt b/Fwk/AppFwk/cafUserInterface/CMakeLists.txt index 53bde66148..29eeeb0a82 100644 --- a/Fwk/AppFwk/cafUserInterface/CMakeLists.txt +++ b/Fwk/AppFwk/cafUserInterface/CMakeLists.txt @@ -48,6 +48,7 @@ set( QOBJECT_HEADERS cafPdmUiTreeSelectionEditor.h cafPdmUiTreeSelectionQModel.h cafPdmUiWidgetBasedObjectEditor.h + cafPdmUiDoubleValueEditor.h ) if ( (${CMAKE_VERSION} VERSION_LESS 2.8.6) OR (NOT CMAKE_AUTOMOC) ) @@ -129,6 +130,8 @@ set( PROJECT_FILES cafPdmUiPropertyViewDialog.h cafPdmUiWidgetBasedObjectEditor.cpp cafPdmUiWidgetBasedObjectEditor.h + cafPdmUiDoubleValueEditor.cpp + cafPdmUiDoubleValueEditor.h # div diff --git a/Fwk/AppFwk/cafUserInterface/cafPdmUiDoubleValueEditor.cpp b/Fwk/AppFwk/cafUserInterface/cafPdmUiDoubleValueEditor.cpp new file mode 100644 index 0000000000..1fe5b23933 --- /dev/null +++ b/Fwk/AppFwk/cafUserInterface/cafPdmUiDoubleValueEditor.cpp @@ -0,0 +1,138 @@ +//################################################################################################## +// +// Custom Visualization Core library +// Copyright (C) 2011-2013 Ceetron AS +// +// This library may be used under the terms of either the GNU General Public License or +// the GNU Lesser General Public License as follows: +// +// GNU General Public License Usage +// This library 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. +// +// This library 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. +// +// GNU Lesser General Public License Usage +// This library is free software; you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation; either version 2.1 of the License, or +// (at your option) any later version. +// +// This library 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 Lesser General Public License at <> +// for more details. +// +//################################################################################################## + + +#include "cafPdmUiDoubleValueEditor.h" + +#include "cafPdmUiDefaultObjectEditor.h" +#include "cafPdmObject.h" +#include "cafPdmUiFieldEditorHandle.h" +#include "cafPdmField.h" + +#include "cafFactory.h" + +#include +#include +#include +#include + +#include + +namespace caf +{ + +CAF_PDM_UI_FIELD_EDITOR_SOURCE_INIT(PdmUiDoubleValueEditor); + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void PdmUiDoubleValueEditor::configureAndUpdateUi(const QString& uiConfigName) +{ + CAF_ASSERT(!m_lineEdit.isNull()); + + PdmUiFieldEditorHandle::updateLabelFromField(m_label, uiConfigName); + + m_lineEdit->setEnabled(!field()->isUiReadOnly(uiConfigName)); + + caf::PdmUiObjectHandle* uiObject = uiObj(field()->fieldHandle()->ownerObject()); + if (uiObject) + { + uiObject->editorAttribute(field()->fieldHandle(), uiConfigName, &m_attributes); + } + + bool valueOk = false; + double value = field()->uiValue().toDouble(&valueOk); + QString textValue; + if (valueOk) + { + textValue = QString::number(value, 'f', m_attributes.m_decimals); + } + else + { + textValue = field()->uiValue().toString(); + } + m_lineEdit->setText(textValue); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +QWidget* PdmUiDoubleValueEditor::createEditorWidget(QWidget * parent) +{ + QWidget* containerWidget = new QWidget(parent); + + QHBoxLayout* layout = new QHBoxLayout(); + layout->setMargin(0); + containerWidget->setLayout(layout); + + m_lineEdit = new QLineEdit(containerWidget); + connect(m_lineEdit, SIGNAL(editingFinished()), this, SLOT(slotEditingFinished())); + + layout->addWidget(m_lineEdit); + + return containerWidget; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +QWidget* PdmUiDoubleValueEditor::createLabelWidget(QWidget * parent) +{ + m_label = new QLabel(parent); + return m_label; +} + + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void PdmUiDoubleValueEditor::slotEditingFinished() +{ + writeValueToField(); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void PdmUiDoubleValueEditor::writeValueToField() +{ + QString textValue = m_lineEdit->text(); + QVariant v; + v = textValue; + this->setValueToField(v); +} + +} // end namespace caf diff --git a/Fwk/AppFwk/cafUserInterface/cafPdmUiDoubleValueEditor.h b/Fwk/AppFwk/cafUserInterface/cafPdmUiDoubleValueEditor.h new file mode 100644 index 0000000000..780a7971ab --- /dev/null +++ b/Fwk/AppFwk/cafUserInterface/cafPdmUiDoubleValueEditor.h @@ -0,0 +1,97 @@ +//################################################################################################## +// +// Custom Visualization Core library +// Copyright (C) 2011-2013 Ceetron AS +// +// This library may be used under the terms of either the GNU General Public License or +// the GNU Lesser General Public License as follows: +// +// GNU General Public License Usage +// This library 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. +// +// This library 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. +// +// GNU Lesser General Public License Usage +// This library is free software; you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation; either version 2.1 of the License, or +// (at your option) any later version. +// +// This library 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 Lesser General Public License at <> +// for more details. +// +//################################################################################################## + + +#pragma once +#include "cafPdmUiFieldEditorHandle.h" + +#include +#include +#include +#include +#include +#include + + +namespace caf +{ + +//================================================================================================== +/// +//================================================================================================== + +class PdmUiDoubleValueEditorAttribute : public PdmUiEditorAttribute +{ +public: + PdmUiDoubleValueEditorAttribute() + { + m_decimals = 6; + } + +public: + int m_decimals; +}; + + +class PdmUiDoubleValueEditor : public PdmUiFieldEditorHandle +{ + Q_OBJECT + CAF_PDM_UI_FIELD_EDITOR_HEADER_INIT; + +public: + PdmUiDoubleValueEditor() {} + virtual ~PdmUiDoubleValueEditor() {} + +protected: + virtual void configureAndUpdateUi(const QString& uiConfigName); + virtual QWidget* createEditorWidget(QWidget * parent); + virtual QWidget* createLabelWidget(QWidget * parent); + +protected slots: + void slotEditingFinished(); + +private: + void writeValueToField(); + +private: + QPointer m_lineEdit; + QPointer m_label; + + PdmUiDoubleValueEditorAttribute m_attributes; +}; + + +} // end namespace caf