1 // Copyright (C) 2014-20xx CEA/DEN, EDF R&D
4 * ModuleBase_WidgetExprEditor.h
6 * Created on: Oct 8, 2014
10 #ifndef MODULEBASE_WIDGETEXPREDITOR_H_
11 #define MODULEBASE_WIDGETEXPREDITOR_H_
13 #include <ModuleBase.h>
14 #include <ModuleBase_ModelWidget.h>
19 #include <QStringList>
20 #include <QPlainTextEdit>
23 class QStringListModel;
28 * A multi-line text editor which lets to input formula and provides a list of completion strings
30 class ExpressionEditor: public QPlainTextEdit
35 /// \param theParent a parent widget
36 explicit ExpressionEditor(QWidget* theParent = 0);
37 virtual ~ExpressionEditor();
39 /// Set list of completion strings
40 void setCompletionList(QStringList&);
42 /// Set a text which will be shown when the listr is empty
43 void setPlaceHolderText( const QString& );
45 /// Returns placeholder list
46 QString placeHolderText() const;
48 // Returns true if the current value is modified by has not been applyed yet
49 bool isModified() const;
51 // Clears modified state
55 /// Insert additional string for completion
56 /// \param theCompletion a string to insert
57 /// \param isSingleWord a flag shows that inserted string is single word or not
58 void insertCompletion(const QString& theCompletion, bool isSingleWord = false);
60 /// Perform completion
61 void performCompletion();
63 /// A slot for processing text changed event
67 void editingFinished();
69 /// A signal that is emitted by the "Tab" key event. It is emitted before the key is processed.
73 /// The signal about key release on the control, that corresponds to the attribute
74 /// \param theEvent key release event
75 void keyReleased(QKeyEvent* theEvent);
78 /// Perform completion by prefix
79 /// \param theCompletionPrefix a prefix for looking for completion
80 void performCompletion(const QString& theCompletionPrefix);
82 /// Redefinition of virtual method
83 /// \param theEvent a key press event
84 virtual void keyPressEvent(QKeyEvent* theEvent);
86 /// Key events processing
87 /// theEvent a key event
88 bool handledCompletedAndSelected(QKeyEvent* theEvent);
90 /// Redefinition of virtual method
91 virtual void paintEvent( QPaintEvent* );
93 /// The parent method that processes the "Tab"/"SHIF + Tab" keyboard events
94 /// Emits a signal about focus change
95 /// If theIsNext is true, this function searches forward, if next is false, it searches backward.
96 virtual bool focusNextPrevChild(bool theIsNext);
99 QStringListModel* myCompleterModel;
100 QCompleter* myCompleter;
101 bool myCompletedAndSelected;
102 QString myPlaceHolderText;
104 /// Boolean value whether the spin box content is modified
110 * A Widget which provides an input of an expression
112 class MODULEBASE_EXPORT ModuleBase_WidgetExprEditor : public ModuleBase_ModelWidget
117 /// \param theParent the parent object
118 /// \param theData the widget configuration.
119 /// \param theParentId is Id of a parent of the current attribute
120 /// \param thePlaceHolder a placeholder string
121 ModuleBase_WidgetExprEditor( QWidget* theParent,
122 const Config_WidgetAPI* theData,
123 const std::string& theParentId,
124 const std::string& thePlaceHolder );
125 virtual ~ModuleBase_WidgetExprEditor();
127 /// Redefinition of virtual method
128 virtual QList<QWidget*> getControls() const;
130 /// Returns true if the event is processed.
131 virtual bool processEnter();
134 /// A slot for processing text changed event
135 void onTextChanged();
138 /// Do not initialize value on the widget activation
139 virtual void initializeValueByActivate();
141 /// Saves the internal parameters to the given feature
142 /// \return True in success
143 virtual bool storeValueCustom() const;
145 /// Redefinition of virtual method
146 virtual bool restoreValueCustom();
149 /// A line edit control
150 QLabel* myResultLabel;
151 ExpressionEditor* myEditor;
154 #endif /* MODULEBASE_WIDGETEXPREDITOR_H_ */