Line data Source code
1 : /// Include Qt Headers
2 : #include <QValidator>
3 : #include <QApplication>
4 : #include <QMenu>
5 : #include <QContextMenuEvent>
6 : /// Include DBE
7 : #include "dbe/CustomLineEdit.hpp"
8 : #include "dbe/StyleUtility.hpp"
9 :
10 0 : dbe::CustomLineEdit::CustomLineEdit ( QWidget * parent, bool IsNull, bool IsMulti )
11 : : QLineEdit ( parent ),
12 0 : Valid ( false ),
13 0 : NullCheck ( IsNull ),
14 0 : CheckDefault ( true ),
15 0 : PopupMenu ( false ),
16 0 : IsMultiValue ( IsMulti ),
17 0 : ContextMenu ( nullptr ),
18 0 : Dec ( nullptr ),
19 0 : Oct ( nullptr ),
20 0 : Hex ( nullptr ),
21 0 : Validator ( nullptr )
22 : {
23 0 : connect ( this, SIGNAL ( textChanged ( QString ) ), this,
24 : SLOT ( TryValidate ( QString ) ) );
25 0 : this->setFixedHeight ( 30 );
26 : //this->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
27 0 : }
28 :
29 0 : dbe::CustomLineEdit::~CustomLineEdit()
30 : {
31 0 : if ( Validator != nullptr )
32 : {
33 0 : delete Validator;
34 : }
35 0 : }
36 :
37 0 : void dbe::CustomLineEdit::SetNullCheck ( bool IsNull )
38 : {
39 0 : NullCheck = IsNull;
40 :
41 0 : if ( NullCheck == false )
42 : {
43 0 : setPalette ( QApplication::palette ( this ) );
44 : }
45 0 : }
46 :
47 0 : void dbe::CustomLineEdit::SetMultiCheck ( bool IsMulti )
48 : {
49 0 : IsMultiValue = IsMulti;
50 0 : }
51 :
52 0 : bool dbe::CustomLineEdit::IsNullCheck()
53 : {
54 0 : return NullCheck;
55 : }
56 :
57 0 : bool dbe::CustomLineEdit::IsValid()
58 : {
59 0 : return Valid;
60 : }
61 :
62 0 : void dbe::CustomLineEdit::SetCheckDefault ( bool Default )
63 : {
64 0 : CheckDefault = Default;
65 0 : }
66 :
67 0 : void dbe::CustomLineEdit::SetDefaultValue ( QString ValueDefault )
68 : {
69 0 : DefaultValue = ValueDefault;
70 0 : }
71 :
72 0 : void dbe::CustomLineEdit::ValidateText()
73 : {
74 0 : QString Dummy ( "Dummy" );
75 0 : TryValidate ( Dummy );
76 0 : }
77 :
78 0 : void dbe::CustomLineEdit::SetLoadedDefaultFlag ( bool Loaded )
79 : {
80 0 : setProperty ( "loadedDefaults", Loaded );
81 0 : }
82 :
83 0 : void dbe::CustomLineEdit::SetValidator ( QValidator * ValidatorSet )
84 : {
85 0 : Validator = ValidatorSet;
86 0 : }
87 :
88 0 : void dbe::CustomLineEdit::SetPopupMenu()
89 : {
90 0 : PopupMenu = true;
91 0 : }
92 :
93 0 : void dbe::CustomLineEdit::CreateActions()
94 : {
95 0 : Dec = new QAction ( tr ( "Dec" ), this );
96 0 : Dec->setShortcutContext ( Qt::WidgetShortcut );
97 0 : connect ( Dec, SIGNAL ( triggered() ), this, SLOT ( EmitDecSlot() ) );
98 0 : Dec->setCheckable ( true );
99 0 : Dec->setChecked ( false );
100 0 : ContextMenu->addAction ( Dec );
101 :
102 0 : Oct = new QAction ( tr ( "Oct" ), this );
103 0 : Oct->setShortcutContext ( Qt::WidgetShortcut );
104 0 : connect ( Oct, SIGNAL ( triggered() ), this, SLOT ( EmitOctSlot() ) );
105 0 : Oct->setCheckable ( true );
106 0 : Oct->setChecked ( false );
107 0 : ContextMenu->addAction ( Oct );
108 :
109 0 : Hex = new QAction ( tr ( "Hex" ), this );
110 0 : Hex->setShortcutContext ( Qt::WidgetShortcut );
111 0 : Hex->setCheckable ( true );
112 0 : Hex->setChecked ( false );
113 0 : connect ( Hex, SIGNAL ( triggered() ), this, SLOT ( EmitHexSlot() ) );
114 0 : ContextMenu->addAction ( Hex );
115 0 : }
116 :
117 0 : void dbe::CustomLineEdit::TryValidate ( QString Dummy )
118 : {
119 0 : Q_UNUSED ( Dummy )
120 :
121 0 : QString tmp_st = this->text();
122 0 : int i = 0;
123 :
124 0 : if ( tmp_st.isEmpty() && NullCheck )
125 : {
126 0 : Valid = false;
127 :
128 0 : if ( !IsMultiValue )
129 : {
130 0 : this->setPalette ( StyleUtility::WarningStatusBarPallete );
131 0 : setToolTip ( QString ( "Field cannot be empty!" ) );
132 : }
133 :
134 0 : emit StringValidated(); // it is caught by EditStringAttrWidget
135 : }
136 0 : else if ( Validator != 0 )
137 : {
138 0 : if ( ( Validator->validate ( tmp_st, i ) ) == QValidator::Acceptable )
139 : {
140 0 : Valid = true;
141 0 : this->setPalette ( QApplication::palette ( this ) );
142 0 : setToolTip ( QString ( "This new object ID is unique" ) );
143 : }
144 0 : else if ( ( Validator->validate ( tmp_st, i ) ) == QValidator::Intermediate )
145 : {
146 0 : Valid = false;
147 0 : this->setPalette ( StyleUtility::AlertStatusBarPallete );
148 0 : setToolTip ( QString ( "This UID is already used" ) );
149 : }
150 : }
151 0 : else if ( Validator == 0 )
152 : {
153 0 : Valid = true;
154 0 : setPalette ( QApplication::palette ( this ) );
155 :
156 0 : if ( tmp_st == DefaultValue && CheckDefault )
157 : {
158 0 : this->setPalette ( StyleUtility::LoadedDefault );
159 : }
160 : else
161 : {
162 0 : this->setPalette ( QApplication::palette ( this ) );
163 : }
164 :
165 0 : emit StringValidated();
166 : }
167 0 : }
168 :
169 0 : void dbe::CustomLineEdit::EmitDecSlot()
170 : {
171 0 : Dec->setChecked ( true );
172 0 : Oct->setChecked ( false );
173 0 : Hex->setChecked ( false );
174 0 : emit DecChange();
175 0 : }
176 :
177 0 : void dbe::CustomLineEdit::EmitOctSlot()
178 : {
179 0 : Dec->setChecked ( false );
180 0 : Oct->setChecked ( true );
181 0 : Hex->setChecked ( false );
182 0 : emit OctChange();
183 0 : }
184 :
185 0 : void dbe::CustomLineEdit::EmitHexSlot()
186 : {
187 0 : Dec->setChecked ( false );
188 0 : Oct->setChecked ( false );
189 0 : Hex->setChecked ( true );
190 0 : emit HexChange();
191 0 : }
192 :
193 0 : void dbe::CustomLineEdit::contextMenuEvent ( QContextMenuEvent * Event )
194 : {
195 0 : if ( !PopupMenu )
196 : {
197 : return;
198 : }
199 :
200 0 : if ( ContextMenu == nullptr )
201 : {
202 0 : ContextMenu = new QMenu ( this );
203 0 : CreateActions();
204 : }
205 :
206 0 : ContextMenu->exec ( Event->globalPos() );
207 : }
|