Eclipse SUMO - Simulation of Urban MObility
Loading...
Searching...
No Matches
MFXTextFieldIcon.cpp
Go to the documentation of this file.
1/****************************************************************************/
2// Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.dev/sumo
3// Copyright (C) 2006-2026 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/****************************************************************************/
18//
19/****************************************************************************/
20
23
24#include <fxkeys.h>
25#ifdef _MSC_VER
26#pragma warning(push)
27#pragma warning(disable: 4266) // mask warning about hidden member function FX::FXTextCodec::utf2mblen
28#endif
29#include <FX88591Codec.h>
30#include <FXUTF16Codec.h>
31#ifdef _MSC_VER
32#pragma warning(pop)
33#endif
34
35#include "MFXStaticToolTip.h"
36#include "MFXTextFieldIcon.h"
37
38// ===========================================================================
39// Macros
40// ===========================================================================
41
42#define JUSTIFY_MASK (JUSTIFY_HZ_APART|JUSTIFY_VT_APART)
43#define TEXTFIELD_MASK (TEXTFIELD_PASSWD|TEXTFIELD_INTEGER|TEXTFIELD_REAL|TEXTFIELD_READONLY|TEXTFIELD_ENTER_ONLY|TEXTFIELD_LIMITED|TEXTFIELD_OVERSTRIKE|TEXTFIELD_AUTOHIDE|TEXTFIELD_AUTOGRAY)
44#define ICON_SPACING 4 // Spacing between myIcon and label (2 + 2)
45#define ICON_SIZE 16
46
47// ===========================================================================
48// FOX callback mapping
49// ===========================================================================
50
51// Map
52FXDEFMAP(MFXTextFieldIcon) MFXTextFieldIconMap[] = {
53 FXMAPFUNC(SEL_CLIPBOARD_GAINED, 0, MFXTextFieldIcon::onClipboardGained),
54 FXMAPFUNC(SEL_CLIPBOARD_LOST, 0, MFXTextFieldIcon::onClipboardLost),
55 FXMAPFUNC(SEL_CLIPBOARD_REQUEST, 0, MFXTextFieldIcon::onClipboardRequest),
56 FXMAPFUNC(SEL_ENTER, 0, MFXTextFieldIcon::onEnter),
57 FXMAPFUNC(SEL_FOCUS_SELF, 0, MFXTextFieldIcon::onFocusSelf),
58 FXMAPFUNC(SEL_FOCUSIN, 0, MFXTextFieldIcon::onFocusIn),
59 FXMAPFUNC(SEL_FOCUSOUT, 0, MFXTextFieldIcon::onFocusOut),
60 FXMAPFUNC(SEL_KEYPRESS, 0, MFXTextFieldIcon::onKeyPress),
61 FXMAPFUNC(SEL_KEYRELEASE, 0, MFXTextFieldIcon::onKeyRelease),
62 FXMAPFUNC(SEL_LEAVE, 0, MFXTextFieldIcon::onLeave),
63 FXMAPFUNC(SEL_LEFTBUTTONPRESS, 0, MFXTextFieldIcon::onLeftBtnPress),
64 FXMAPFUNC(SEL_LEFTBUTTONRELEASE, 0, MFXTextFieldIcon::onLeftBtnRelease),
65 FXMAPFUNC(SEL_MIDDLEBUTTONPRESS, 0, MFXTextFieldIcon::onMiddleBtnPress),
66 FXMAPFUNC(SEL_MIDDLEBUTTONRELEASE, 0, MFXTextFieldIcon::onMiddleBtnRelease),
67 FXMAPFUNC(SEL_MOTION, 0, MFXTextFieldIcon::onMotion),
68 FXMAPFUNC(SEL_PAINT, 0, MFXTextFieldIcon::onPaint),
69 FXMAPFUNC(SEL_QUERY_HELP, 0, MFXTextFieldIcon::onQueryHelp),
70 FXMAPFUNC(SEL_QUERY_TIP, 0, MFXTextFieldIcon::onQueryTip),
71 FXMAPFUNC(SEL_SELECTION_GAINED, 0, MFXTextFieldIcon::onSelectionGained),
72 FXMAPFUNC(SEL_SELECTION_LOST, 0, MFXTextFieldIcon::onSelectionLost),
73 FXMAPFUNC(SEL_SELECTION_REQUEST, 0, MFXTextFieldIcon::onSelectionRequest),
74 FXMAPFUNC(SEL_UPDATE, 0, MFXTextFieldIcon::onUpdate),
75 FXMAPFUNC(SEL_VERIFY, 0, MFXTextFieldIcon::onVerify),
76 FXMAPFUNC(SEL_COMMAND, FXTextField::ID_BACKSPACE, MFXTextFieldIcon::onCmdBackspace),
77 FXMAPFUNC(SEL_COMMAND, FXTextField::ID_COPY_SEL, MFXTextFieldIcon::onCmdCopySel),
78 FXMAPFUNC(SEL_COMMAND, FXTextField::ID_CURSOR_END, MFXTextFieldIcon::onCmdCursorEnd),
79 FXMAPFUNC(SEL_COMMAND, FXTextField::ID_CURSOR_HOME, MFXTextFieldIcon::onCmdCursorHome),
80 FXMAPFUNC(SEL_COMMAND, FXTextField::ID_CURSOR_LEFT, MFXTextFieldIcon::onCmdCursorLeft),
81 FXMAPFUNC(SEL_COMMAND, FXTextField::ID_CURSOR_RIGHT, MFXTextFieldIcon::onCmdCursorRight),
82 FXMAPFUNC(SEL_COMMAND, FXTextField::ID_CURSOR_WORD_END, MFXTextFieldIcon::onCmdCursorWordEnd),
83 FXMAPFUNC(SEL_COMMAND, FXTextField::ID_CURSOR_WORD_LEFT, MFXTextFieldIcon::onCmdCursorWordLeft),
84 FXMAPFUNC(SEL_COMMAND, FXTextField::ID_CURSOR_WORD_RIGHT, MFXTextFieldIcon::onCmdCursorWordRight),
85 FXMAPFUNC(SEL_COMMAND, FXTextField::ID_CURSOR_WORD_START, MFXTextFieldIcon::onCmdCursorWordStart),
86 FXMAPFUNC(SEL_COMMAND, FXTextField::ID_CUT_SEL, MFXTextFieldIcon::onCmdCutSel),
87 FXMAPFUNC(SEL_COMMAND, FXTextField::ID_DELETE, MFXTextFieldIcon::onCmdDelete),
88 FXMAPFUNC(SEL_COMMAND, FXTextField::ID_DELETE_ALL, MFXTextFieldIcon::onCmdDeleteAll),
89 FXMAPFUNC(SEL_COMMAND, FXTextField::ID_DELETE_SEL, MFXTextFieldIcon::onCmdDeleteSel),
90 FXMAPFUNC(SEL_COMMAND, FXTextField::ID_DESELECT_ALL, MFXTextFieldIcon::onCmdDeselectAll),
91 FXMAPFUNC(SEL_COMMAND, FXTextField::ID_EXTEND, MFXTextFieldIcon::onCmdExtend),
92 FXMAPFUNC(SEL_COMMAND, FXTextField::ID_GETHELPSTRING, MFXTextFieldIcon::onCmdGetHelp),
93 FXMAPFUNC(SEL_COMMAND, FXTextField::ID_GETINTVALUE, MFXTextFieldIcon::onCmdGetIntValue),
94 FXMAPFUNC(SEL_COMMAND, FXTextField::ID_GETREALVALUE, MFXTextFieldIcon::onCmdGetRealValue),
95 FXMAPFUNC(SEL_COMMAND, FXTextField::ID_GETSTRINGVALUE, MFXTextFieldIcon::onCmdGetStringValue),
96 FXMAPFUNC(SEL_COMMAND, FXTextField::ID_GETTIPSTRING, MFXTextFieldIcon::onCmdGetTip),
97 FXMAPFUNC(SEL_COMMAND, FXTextField::ID_INSERT_STRING, MFXTextFieldIcon::onCmdInsertString),
98 FXMAPFUNC(SEL_COMMAND, FXTextField::ID_MARK, MFXTextFieldIcon::onCmdMark),
99 FXMAPFUNC(SEL_COMMAND, FXTextField::ID_OVERST_STRING, MFXTextFieldIcon::onCmdOverstString),
100 FXMAPFUNC(SEL_COMMAND, FXTextField::ID_PASTE_MIDDLE, MFXTextFieldIcon::onCmdPasteMiddle),
101 FXMAPFUNC(SEL_COMMAND, FXTextField::ID_PASTE_SEL, MFXTextFieldIcon::onCmdPasteSel),
102 FXMAPFUNC(SEL_COMMAND, FXTextField::ID_SELECT_ALL, MFXTextFieldIcon::onCmdSelectAll),
103 FXMAPFUNC(SEL_COMMAND, FXTextField::ID_SETHELPSTRING, MFXTextFieldIcon::onCmdSetHelp),
104 FXMAPFUNC(SEL_COMMAND, FXTextField::ID_SETINTVALUE, MFXTextFieldIcon::onCmdSetIntValue),
105 FXMAPFUNC(SEL_COMMAND, FXTextField::ID_SETREALVALUE, MFXTextFieldIcon::onCmdSetRealValue),
106 FXMAPFUNC(SEL_COMMAND, FXTextField::ID_SETSTRINGVALUE, MFXTextFieldIcon::onCmdSetStringValue),
107 FXMAPFUNC(SEL_COMMAND, FXTextField::ID_SETTIPSTRING, MFXTextFieldIcon::onCmdSetTip),
108 FXMAPFUNC(SEL_COMMAND, FXTextField::ID_SETVALUE, MFXTextFieldIcon::onCmdSetValue),
109 FXMAPFUNC(SEL_COMMAND, FXTextField::ID_TOGGLE_EDITABLE, MFXTextFieldIcon::onCmdToggleEditable),
110 FXMAPFUNC(SEL_COMMAND, FXTextField::ID_TOGGLE_OVERSTRIKE, MFXTextFieldIcon::onCmdToggleOverstrike),
111 FXMAPFUNC(SEL_TIMEOUT, FXTextField::ID_AUTOSCROLL, MFXTextFieldIcon::onAutoScroll),
112 FXMAPFUNC(SEL_TIMEOUT, FXTextField::ID_BLINK, MFXTextFieldIcon::onBlink),
113 FXMAPFUNC(SEL_UPDATE, FXTextField::ID_COPY_SEL, MFXTextFieldIcon::onUpdHaveSelection),
114 FXMAPFUNC(SEL_UPDATE, FXTextField::ID_CUT_SEL, MFXTextFieldIcon::onUpdHaveSelection),
115 FXMAPFUNC(SEL_UPDATE, FXTextField::ID_DELETE_SEL, MFXTextFieldIcon::onUpdHaveSelection),
116 FXMAPFUNC(SEL_UPDATE, FXTextField::ID_PASTE_SEL, MFXTextFieldIcon::onUpdYes),
117 FXMAPFUNC(SEL_UPDATE, FXTextField::ID_SELECT_ALL, MFXTextFieldIcon::onUpdSelectAll),
118 FXMAPFUNC(SEL_UPDATE, FXTextField::ID_TOGGLE_EDITABLE, MFXTextFieldIcon::onUpdToggleEditable),
119 FXMAPFUNC(SEL_UPDATE, FXTextField::ID_TOGGLE_OVERSTRIKE, MFXTextFieldIcon::onUpdToggleOverstrike),
120};
121
122// Object implementation
123FXIMPLEMENT(MFXTextFieldIcon, FXFrame, MFXTextFieldIconMap, ARRAYNUMBER(MFXTextFieldIconMap))
124
125// ===========================================================================
126// member method definitions
127// ===========================================================================
128
129MFXTextFieldIcon::MFXTextFieldIcon(FXComposite* p, MFXStaticToolTip* staticToolTip, GUIIcon icon, FXObject* tgt, FXSelector sel,
130 FXuint opts, FXint x, FXint y, FXint w, FXint h, FXint pl, FXint pr, FXint pt, FXint pb) :
131 FXFrame(p, opts, x, y, w, h, pl, pr, pt, pb),
132 myStaticToolTip(staticToolTip) {
133 // set icon
134 if (icon != GUIIcon::EMPTY) {
136 }
137 flags |= FLAG_ENABLED;
138 target = tgt;
139 message = sel;
140 if (!(options & JUSTIFY_RIGHT)) {
141 options |= JUSTIFY_LEFT;
142 }
143 defaultCursor = getApp()->getDefaultCursor(DEF_TEXT_CURSOR);
144 dragCursor = getApp()->getDefaultCursor(DEF_TEXT_CURSOR);
145 myFont = getApp()->getNormalFont();
146 backColor = getApp()->getBackColor();
147 myTextColor = getApp()->getForeColor();
148 mySelectedBackgroundColor = getApp()->getSelbackColor();
149 mySelectedTextColor = getApp()->getSelforeColor();
150 myCursorColor = getApp()->getForeColor();
152}
153
154
156 getApp()->removeTimeout(this, FXTextField::ID_BLINK);
157 getApp()->removeTimeout(this, ID_AUTOSCROLL);
158 myFont = (FXFont*) - 1L;
159}
160
161
162void
164 FXFrame::create();
165 if (!textType) {
166 textType = getApp()->registerDragType(textTypeName);
167 }
168 if (!utf8Type) {
169 utf8Type = getApp()->registerDragType(utf8TypeName);
170 }
171 if (!utf16Type) {
172 utf16Type = getApp()->registerDragType(utf16TypeName);
173 }
174 myFont->create();
175}
176
177
178void
180 if (!fnt) {
181 fxerror("%s::setFont: NULL font specified.\n", getClassName());
182 }
183 if (myFont != fnt) {
184 myFont = fnt;
185 recalc();
186 update();
187 }
188}
189
190
191FXFont*
193 return myFont;
194}
195
196
197void
199 if (!(flags & FLAG_ENABLED)) {
200 FXFrame::enable();
201 update();
202 }
203}
204
205
206void
208 if (flags & FLAG_ENABLED) {
209 FXFrame::disable();
210 update();
211 }
212}
213
214
215FXint
217 return padleft + padright + (border << 1) + myVisibleColumns * myFont->getTextWidth("8", 1);
218}
219
220
221
222FXint
224 return padtop + padbottom + (border << 1) + myFont->getFontHeight();
225}
226
227
228long
229MFXTextFieldIcon::onUpdate(FXObject* sender, FXSelector sel, void* ptr) {
230 if (!FXFrame::onUpdate(sender, sel, ptr)) {
231 if (options & TEXTFIELD_AUTOHIDE) {
232 if (shown()) {
233 hide();
234 recalc();
235 }
236 }
237 if (options & TEXTFIELD_AUTOGRAY) {
238 disable();
239 }
240 }
241 return 1;
242}
243
244
245long
246MFXTextFieldIcon::onSelectionGained(FXObject* sender, FXSelector sel, void* ptr) {
247 FXFrame::onSelectionGained(sender, sel, ptr);
248 update();
249 return 1;
250}
251
252
253long
254MFXTextFieldIcon::onSelectionLost(FXObject* sender, FXSelector sel, void* ptr) {
255 FXFrame::onSelectionLost(sender, sel, ptr);
256 update();
257 return 1;
258}
259
260
261long
262MFXTextFieldIcon::onSelectionRequest(FXObject* sender, FXSelector sel, void* ptr) {
263 FXEvent* event = (FXEvent*)ptr;
264 FXString string;
265 FXuint start;
266 FXuint len;
267
268 // Make sure
269 FXASSERT(0 <= myAnchorPosition && myAnchorPosition <= contents.length());
270 FXASSERT(0 <= myCursorPosition && myCursorPosition <= contents.length());
271
272 // Perhaps the target wants to supply its own data for the selection
273