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.
74 /// Perform completion by prefix
75 /// \param theCompletionPrefix a prefix for looking for completion
76 void performCompletion(const QString& theCompletionPrefix);
78 /// Redefinition of virtual method
79 /// \param theEvent a key press event
80 virtual void keyPressEvent(QKeyEvent* theEvent);
82 /// Key events processing
83 /// theEvent a key event
84 bool handledCompletedAndSelected(QKeyEvent* theEvent);
86 /// Redefinition of virtual method
87 virtual void paintEvent( QPaintEvent* );
89 /// The parent method that processes the "Tab"/"SHIF + Tab" keyboard events
90 /// Emits a signal about focus change
91 /// If theIsNext is true, this function searches forward, if next is false, it searches backward.
92 virtual bool focusNextPrevChild(bool theIsNext);
95 QStringListModel* myCompleterModel;
96 QCompleter* myCompleter;
97 bool myCompletedAndSelected;
98 QString myPlaceHolderText;
100 /// Boolean value whether the spin box content is modified
106 * A Widget which provides an input of an expression
108 class MODULEBASE_EXPORT ModuleBase_WidgetExprEditor : public ModuleBase_ModelWidget
113 /// \param theParent the parent object
114 /// \param theData the widget configuration.
115 /// \param theParentId is Id of a parent of the current attribute
116 /// \param thePlaceHolder a placeholder string
117 ModuleBase_WidgetExprEditor( QWidget* theParent,
118 const Config_WidgetAPI* theData,
119 const std::string& theParentId,
120 const std::string& thePlaceHolder );
121 virtual ~ModuleBase_WidgetExprEditor();
123 /// Redefinition of virtual method
124 virtual QList<QWidget*> getControls() const;
126 /// Returns true if the event is processed.
127 virtual bool processEnter();
130 /// A slot for processing text changed event
131 void onTextChanged();
134 /// Saves the internal parameters to the given feature
135 /// \return True in success
136 virtual bool storeValueCustom() const;
138 /// Redefinition of virtual method
139 virtual bool restoreValueCustom();
142 /// A line edit control
143 QLabel* myResultLabel;
144 ExpressionEditor* myEditor;
147 #endif /* MODULEBASE_WIDGETEXPREDITOR_H_ */