diff --git a/cafUserInterface/CMakeLists.txt b/cafUserInterface/CMakeLists.txt index b35796a516..16b28b4603 100644 --- a/cafUserInterface/CMakeLists.txt +++ b/cafUserInterface/CMakeLists.txt @@ -20,6 +20,7 @@ set( QOBJECT_HEADERS cafPdmUiListEditor.h cafPdmUiSliderEditor.h cafPdmUiDoubleSliderEditor.h + cafPdmUiTextEditor.h cafPdmUiColorEditor.h @@ -47,6 +48,7 @@ add_library( ${PROJECT_NAME} cafPdmUiSliderEditor.cpp cafPdmUiDoubleSliderEditor.cpp cafPdmUiColorEditor.cpp + cafPdmUiTextEditor.cpp cafPdmUiPropertyView.cpp ${MOC_FILES_CPP} diff --git a/cafUserInterface/cafPdmUiTextEditor.cpp b/cafUserInterface/cafPdmUiTextEditor.cpp new file mode 100644 index 0000000000..c5758b7723 --- /dev/null +++ b/cafUserInterface/cafPdmUiTextEditor.cpp @@ -0,0 +1,130 @@ +//################################################################################################## +// +// Custom Visualization Core library +// Copyright (C) 2011-2012 Ceetron AS +// +// 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. +// +//################################################################################################## + +#include "cafPdmUiTextEditor.h" + +#include "cafPdmUiDefaultObjectEditor.h" + +#include "cafPdmObject.h" +#include "cafPdmUiFieldEditorHandle.h" +#include "cafPdmUiOrdering.h" + +#include "cafPdmField.h" + +#include +#include +#include + +#include +#include "cafFactory.h" + + + +namespace caf +{ + +CAF_PDM_UI_FIELD_EDITOR_SOURCE_INIT(PdmUiTextEditor); + + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void PdmUiTextEditor::configureAndUpdateUi(const QString& uiConfigName) +{ + assert(!m_textEdit.isNull()); + assert(!m_label.isNull()); + + QIcon ic = field()->uiIcon(uiConfigName); + if (!ic.isNull()) + { + m_label->setPixmap(ic.pixmap(ic.actualSize(QSize(64, 64)))); + } + else + { + m_label->setText(field()->uiName(uiConfigName)); + } + + //m_label->setEnabled(!field()->isUiReadOnly(uiConfigName)); + + m_textEdit->setReadOnly(field()->isUiReadOnly(uiConfigName)); + //m_textEdit->setEnabled(!field()->isUiReadOnly(uiConfigName)); // Neccesary ? + + PdmUiTextEditorAttribute leab; + field()->ownerObject()->editorAttribute(field(), uiConfigName, &leab); + m_textMode = leab.textMode; + + m_textEdit->blockSignals(true); + switch (leab.textMode) + { + case PdmUiTextEditorAttribute::PLAIN: + m_textEdit->setPlainText(field()->uiValue().toString()); + break; + case PdmUiTextEditorAttribute::HTML: + m_textEdit->setHtml(field()->uiValue().toString()); + break; + } + m_textEdit->blockSignals(false); + +} + + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +QWidget* PdmUiTextEditor::createEditorWidget(QWidget * parent) +{ + m_textEdit = new QTextEdit(parent); + connect(m_textEdit, SIGNAL(textChanged()), this, SLOT(slotTextChanged())); + return m_textEdit; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +QWidget* PdmUiTextEditor::createLabelWidget(QWidget * parent) +{ + m_label = new QLabel(parent); + return m_label; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void PdmUiTextEditor::slotTextChanged() +{ + QVariant v; + QString textValue; + + switch (m_textMode) + { + case PdmUiTextEditorAttribute::PLAIN: + textValue = m_textEdit->toPlainText(); + break; + case PdmUiTextEditorAttribute::HTML: + textValue = m_textEdit->toHtml(); + break; + } + + v = textValue; + + this->setValueToField(v); +} + + +} // end namespace caf diff --git a/cafUserInterface/cafPdmUiTextEditor.h b/cafUserInterface/cafPdmUiTextEditor.h new file mode 100644 index 0000000000..f553ed9500 --- /dev/null +++ b/cafUserInterface/cafPdmUiTextEditor.h @@ -0,0 +1,81 @@ +//################################################################################################## +// +// Custom Visualization Core library +// Copyright (C) 2011-2012 Ceetron AS +// +// 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. +// +//################################################################################################## + +#pragma once +#include "cafPdmUiFieldEditorHandle.h" +#include +#include +#include +#include +#include + +class QGridLayout; + +namespace caf +{ + +//================================================================================================== +/// An editor to show (and possibly edit?) formatted larger portions of text +//================================================================================================== + +class PdmUiTextEditorAttribute : public PdmUiEditorAttribute +{ +public: + PdmUiTextEditorAttribute() + { + textMode = PLAIN; + } + + enum TextMode + { + PLAIN, + HTML + }; + +public: + TextMode textMode; +}; + + +class PdmUiTextEditor : public PdmUiFieldEditorHandle +{ + Q_OBJECT + CAF_PDM_UI_FIELD_EDITOR_HEADER_INIT; + +public: + PdmUiTextEditor() { m_textMode = PdmUiTextEditorAttribute::PLAIN; } + virtual ~PdmUiTextEditor() {} + +protected: + virtual QWidget* createEditorWidget(QWidget * parent); + virtual QWidget* createLabelWidget(QWidget * parent); + virtual void configureAndUpdateUi(const QString& uiConfigName); + +protected slots: + void slotTextChanged(); + +private: + QPointer m_textEdit; + QPointer m_label; + + PdmUiTextEditorAttribute::TextMode m_textMode; +}; + + +} // end namespace caf