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