Line data Source code
1 : /****************************************************************************/
2 : // Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.dev/sumo
3 : // Copyright (C) 2006-2025 German Aerospace Center (DLR) and others.
4 : // This program and the accompanying materials are made available under the
5 : // terms of the Eclipse Public License 2.0 which is available at
6 : // https://www.eclipse.org/legal/epl-2.0/
7 : // This Source Code may also be made available under the following Secondary
8 : // Licenses when the conditions for such availability set forth in the Eclipse
9 : // Public License 2.0 are satisfied: GNU General Public License, version 2
10 : // or later which is available at
11 : // https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html
12 : // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-or-later
13 : /****************************************************************************/
14 : /// @file MFXTextFieldIcon.h
15 : /// @author Pablo Alvarez Lopez
16 : /// @date Aug 2023
17 : ///
18 : //
19 : /****************************************************************************/
20 : #pragma once
21 : #include <config.h>
22 :
23 : #include "fxheader.h"
24 :
25 : #include <utils/gui/images/GUIIconSubSys.h>
26 :
27 : // ===========================================================================
28 : // class declaration
29 : // ===========================================================================
30 :
31 : class MFXStaticToolTip;
32 :
33 : // ===========================================================================
34 : // class definitions
35 : // ===========================================================================
36 :
37 : class MFXTextFieldIcon : public FXFrame {
38 : /// @brief FOX declaration
39 0 : FXDECLARE(MFXTextFieldIcon)
40 :
41 : public:
42 : /// @brief Construct text field wide enough to display ncols columns
43 : MFXTextFieldIcon(FXComposite* p, MFXStaticToolTip* staticToolTip, GUIIcon icon, FXObject* tgt,
44 : FXSelector sel, FXuint opts, FXint x = 0, FXint y = 0, FXint w = 0, FXint h = 0,
45 : FXint pl = DEFAULT_PAD, FXint pr = DEFAULT_PAD, FXint pt = DEFAULT_PAD, FXint pb = DEFAULT_PAD);
46 :
47 : /// @brief Destructor
48 : virtual ~MFXTextFieldIcon();
49 :
50 : /// @brief Create server-side resources
51 : virtual void create();
52 :
53 : /// @brief Perform layout
54 : virtual void layout();
55 :
56 : /// @brief Enable text field
57 : virtual void enable();
58 :
59 : /// @brief Disable text field
60 : virtual void disable();
61 :
62 : /// @brief Return default width
63 : virtual FXint getDefaultWidth();
64 :
65 : /// @brief Return default height
66 : virtual FXint getDefaultHeight();
67 :
68 : /// @brief Yes, text field may receive focus
69 : virtual bool canFocus() const;
70 :
71 : /// @brief Move the focus to this window
72 : virtual void setFocus();
73 :
74 : /// @brief Remove the focus from this window
75 : virtual void killFocus();
76 :
77 : /// @brief Set editable mode
78 : void setEditable(FXbool edit = TRUE);
79 :
80 : /// @brief Return TRUE if text field may be edited
81 : FXbool isEditable() const;
82 :
83 : /// @brief Set overstrike mode
84 : void setOverstrike(FXbool over = TRUE);
85 :
86 : /// @brief Return TRUE if overstrike mode in effect
87 : FXbool isOverstrike() const;
88 :
89 : /// @brief Set cursor position
90 : void setCursorPos(FXint pos);
91 :
92 : /// @brief Return cursor position
93 : FXint getCursorPos() const;
94 :
95 : /// @brief Change anchor position
96 : void setAnchorPos(FXint pos);
97 :
98 : /// @brief Return anchor position
99 : FXint getAnchorPos() const;
100 :
101 : /// @brief Change the text and move cursor to end
102 : void setText(const FXString& text, FXbool notify = FALSE);
103 :
104 : /// @brief Change the icon
105 : void setIcon(FXIcon* ic);
106 :
107 : /// @brief Get the text for this label
108 : FXString getText() const;
109 :
110 : /// @brief Set the text font
111 : void setFont(FXFont* fnt);
112 :
113 : /// @brief Get the text font
114 : FXFont* getFont() const;
115 :
116 : /// @brief Change text color
117 : void setTextColor(FXColor clr);
118 :
119 : /// @brief Return text color
120 : FXColor getTextColor() const;
121 :
122 : /// @brief Change selected background color
123 : void setSelBackColor(FXColor clr);
124 :
125 : /// @brief Return selected background color
126 : FXColor getSelBackColor() const {
127 : return mySelectedBackgroundColor;
128 : }
129 :
130 : /// @brief Change selected text color
131 : void setSelTextColor(FXColor clr);
132 :
133 : /// @brief Return selected text color
134 : FXColor getSelTextColor() const;
135 :
136 : /// @brief Changes the cursor color
137 : void setCursorColor(FXColor clr);
138 :
139 : /// @brief Return the cursor color
140 : FXColor getCursorColor() const;
141 :
142 : /// @brief Change the default width of the text field
143 : void setNumColumns(FXint cols);
144 :
145 : /// @brief Return number of columns
146 : FXint getNumColumns() const;
147 :
148 : /// @brief Change text justification mode
149 : void setJustify(FXuint mode);
150 :
151 : /// @brief Return text justification mode
152 : FXuint getJustify() const;
153 :
154 : /// @brief Change word delimiters
155 : void setDelimiters(const FXchar* delims = FXTextField::textDelimiters);
156 :
157 : /// @brief Return word delimiters
158 : const FXchar* getDelimiters() const;
159 :
160 : /// @brief Set the status line help text for this label
161 : void setHelpText(const FXString& text);
162 :
163 : /// @brief Get the status line help text for this label
164 : const FXString& getHelpText() const;
165 :
166 : /// @brief Set the tool tip message for this text field
167 : void setTipText(const FXString& text);
168 :
169 : /// @brief Get the tool tip message for this text field
170 : const FXString& getTipText() const;
171 :
172 : /// @brief Change text style
173 : void setTextStyle(FXuint style);
174 :
175 : /// @brief Return text style
176 : FXuint getTextStyle() const;
177 :
178 : /// @brief Select all text
179 : FXbool selectAll();
180 :
181 : /// @brief Select len characters starting at given position pos
182 : FXbool setSelection(FXint pos, FXint len);
183 :
184 : /// @brief Extend the selection from the anchor to the given position
185 : FXbool extendSelection(FXint pos);
186 :
187 : /// @brief Unselect the text
188 : FXbool killSelection();
189 :
190 : /// @brief Return TRUE if position pos is selected
191 : FXbool isPosSelected(FXint pos) const;
192 :
193 : /// @brief Return TRUE if position is fully visible
194 : FXbool isPosVisible(FXint pos) const;
195 :
196 : /// @brief Scroll text to make the given position visible
197 : void makePositionVisible(FXint pos);
198 :
199 : /// @brief set toolTip
200 : void setToolTipText(const FXString& toolTip);
201 :
202 : /// @brief fox callbacks
203 : /// @{
204 :
205 : long onEnter(FXObject*, FXSelector, void*);
206 : long onLeave(FXObject*, FXSelector, void*);
207 : long onPaint(FXObject*, FXSelector, void*);
208 : long onUpdate(FXObject*, FXSelector, void*);
209 : long onKeyPress(FXObject*, FXSelector, void*);
210 : long onKeyRelease(FXObject*, FXSelector, void*);
211 : long onLeftBtnPress(FXObject*, FXSelector, void*);
212 : long onLeftBtnRelease(FXObject*, FXSelector, void*);
213 : long onMiddleBtnPress(FXObject*, FXSelector, void*);
214 : long onMiddleBtnRelease(FXObject*, FXSelector, void*);
215 : long onVerify(FXObject*, FXSelector, void*);
216 : long onMotion(FXObject*, FXSelector, void*);
217 : long onSelectionLost(FXObject*, FXSelector, void*);
218 : long onSelectionGained(FXObject*, FXSelector, void*);
219 : long onSelectionRequest(FXObject*, FXSelector, void* ptr);
220 : long onClipboardLost(FXObject*, FXSelector, void*);
221 : long onClipboardGained(FXObject*, FXSelector, void*);
222 : long onClipboardRequest(FXObject*, FXSelector, void*);
223 : long onFocusSelf(FXObject*, FXSelector, void*);
224 : long onFocusIn(FXObject*, FXSelector, void*);
225 : long onFocusOut(FXObject*, FXSelector, void*);
226 : long onBlink(FXObject*, FXSelector, void*);
227 : long onAutoScroll(FXObject*, FXSelector, void*);
228 : long onCmdSetValue(FXObject*, FXSelector, void*);
229 : long onCmdSetIntValue(FXObject*, FXSelector, void*);
230 : long onCmdSetRealValue(FXObject*, FXSelector, void*);
231 : long onCmdSetStringValue(FXObject*, FXSelector, void*);
232 : long onCmdGetIntValue(FXObject*, FXSelector, void*);
233 : long onCmdGetRealValue(FXObject*, FXSelector, void*);
234 : long onCmdGetStringValue(FXObject*, FXSelector, void*);
235 : long onCmdCursorHome(FXObject*, FXSelector, void*);
236 : long onCmdCursorEnd(FXObject*, FXSelector, void*);
237 : long onCmdCursorRight(FXObject*, FXSelector, void*);
238 : long onCmdCursorLeft(FXObject*, FXSelector, void*);
239 : long onCmdCursorWordLeft(FXObject*, FXSelector, void*);
240 : long onCmdCursorWordRight(FXObject*, FXSelector, void*);
241 : long onCmdCursorWordStart(FXObject*, FXSelector, void*);
242 : long onCmdCursorWordEnd(FXObject*, FXSelector, void*);
243 : long onCmdMark(FXObject*, FXSelector, void*);
244 : long onCmdExtend(FXObject*, FXSelector, void*);
245 : long onCmdSelectAll(FXObject*, FXSelector, void*);
246 : long onCmdDeselectAll(FXObject*, FXSelector, void*);
247 : long onCmdCutSel(FXObject*, FXSelector, void*);
248 : long onCmdCopySel(FXObject*, FXSelector, void*);
249 : long onCmdPasteSel(FXObject*, FXSelector, void*);
250 : long onCmdPasteMiddle(FXObject*, FXSelector, void*);
251 : long onCmdDeleteSel(FXObject*, FXSelector, void*);
252 : long onCmdDeleteAll(FXObject*, FXSelector, void*);
253 : long onCmdOverstString(FXObject*, FXSelector, void*);
254 : long onCmdInsertString(FXObject*, FXSelector, void*);
255 : long onCmdBackspace(FXObject*, FXSelector, void*);
256 : long onCmdDelete(FXObject*, FXSelector, void*);
257 : long onCmdToggleEditable(FXObject*, FXSelector, void*);
258 : long onUpdToggleEditable(FXObject*, FXSelector, void*);
259 : long onCmdToggleOverstrike(FXObject*, FXSelector, void*);
260 : long onUpdToggleOverstrike(FXObject*, FXSelector, void*);
261 : long onUpdHaveSelection(FXObject*, FXSelector, void*);
262 : long onUpdSelectAll(FXObject*, FXSelector, void*);
263 : long onCmdSetHelp(FXObject*, FXSelector, void*);
264 : long onCmdGetHelp(FXObject*, FXSelector, void*);
265 : long onCmdSetTip(FXObject*, FXSelector, void*);
266 : long onCmdGetTip(FXObject*, FXSelector, void*);
267 : long onQueryHelp(FXObject*, FXSelector, void*);
268 : long onQueryTip(FXObject*, FXSelector, void*);
269 :
270 : /// @}
271 :
272 : protected:
273 : /// @brief Edited text
274 : FXString contents;
275 :
276 : /// @brief Set of text delimiter
277 : const FXchar* myTextDelimiter = FXTextField::textDelimiters;
278 :
279 : /// @brief Text font
280 : FXFont* myFont;
281 :
282 : /// @brief Text color
283 : FXColor myTextColor = 0;
284 :
285 : /// @brief Selected background color
286 : FXColor mySelectedBackgroundColor = 0;
287 :
288 : /// @brief Selected text color
289 : FXColor mySelectedTextColor = 0;
290 :
291 : /// @brief Color of the Cursor
292 : FXColor myCursorColor = 0;
293 :
294 : /// @brief Cursor position
295 : FXint myCursorPosition = 0;
296 :
297 : /// @brief Anchor position
298 : FXint myAnchorPosition = 0;
299 :
300 : /// @brief Number of myVisibleColumns visible
301 : FXint myVisibleColumns = 0;
302 :
303 : /// @brief Shift amount
304 : FXint myShiftAmount = 0;
305 :
306 : /// @brief Clipped text
307 : FXString myClippedText;
308 :
309 : /// @brief Help string
310 : FXString myHelpText;
311 :
312 : /// @brief Tooltip
313 : FXString myTooltipText;
314 :
315 : /// @brief myIcon
316 : FXIcon* myIcon = nullptr;
317 :
318 : /// @brief static tooltip
319 : MFXStaticToolTip* myStaticToolTip = nullptr;
320 :
321 : /// @brief toolTip text (if set, tooltip will be always show)
322 : FXString myToolTipText;
323 :
324 : /// @brief FOX need this
325 : MFXTextFieldIcon();
326 :
327 : /// @brief index
328 : FXint index(FXint x) const;
329 :
330 : /// @brief coordinates
331 : FXint coord(FXint i) const;
332 :
333 : /// @brief draw myCursorPosition
334 : void drawCursor(FXuint state);
335 :
336 : /// @brief draw text range
337 : void drawTextRange(FXDCWindow& dc, FXint fm, FXint to);
338 :
339 : /// @brief draw text fragment
340 : void drawTextFragment(FXDCWindow& dc, FXint x, FXint y, FXint fm, FXint to);
341 :
342 : /// @brief draw password text fragment
343 : void drawPWDTextFragment(FXDCWindow& dc, FXint x, FXint y, FXint fm, FXint to);
344 :
345 : /// @brief right word
346 : FXint rightWord(FXint pos) const;
347 :
348 : /// @brief left word
349 : FXint leftWord(FXint pos) const;
350 :
351 : /// @brief word start
352 : FXint wordStart(FXint pos) const;
353 :
354 : /// @brief word end
355 : FXint wordEnd(FXint pos) const;
356 :
357 : private:
358 : /// @brief invalidate copy constructor
359 : MFXTextFieldIcon(const MFXTextFieldIcon&) = delete;
360 :
361 : /// @brief invalidate assigment constructor
362 : MFXTextFieldIcon& operator=(const MFXTextFieldIcon&) = delete;
363 : };
|