Eclipse SUMO - Simulation of Urban MObility
GUIApplicationWindow.h
Go to the documentation of this file.
1/****************************************************************************/
2// Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.dev/sumo
3// Copyright (C) 2001-2023 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/****************************************************************************/
21// The main window of the SUMO-gui.
22/****************************************************************************/
23#pragma once
24#include <config.h>
25
29
30#include "GUISUMOViewParent.h"
31
32
33// ===========================================================================
34// class declarations
35// ===========================================================================
36
37class Command;
38class GUILoadThread;
39class GUIRunThread;
41class GUIEvent;
45class MFXLCDLabel;
46
47
48// ===========================================================================
49// class definition
50// ===========================================================================
60 // FOX-declarations
61 FXDECLARE(GUIApplicationWindow)
62
63public:
68 GUIApplicationWindow(FXApp* a, const std::string& configPattern);
69
71 virtual ~GUIApplicationWindow();
72
75
77 virtual void create();
78
80 virtual void detach();
81
83
85 void loadOnStartup(const bool wait = false);
86
89
91 void dependentBuild(const bool isLibsumo);
92
94 void setStatusBarText(const std::string& text);
95
97 void addRecentNetwork(const FX::FXString& f);
98
100 void addRecentConfig(const FX::FXString& f);
101
103 FXGLCanvas* getBuildGLCanvas() const;
104
107
109 double getTrackerInterval() const;
110
112 FXCursor* getDefaultCursor();
113
116
118 virtual void eventOccurred();
119
122
125
128
131
133
136
138 long onCmdNewWindow(FXObject*, FXSelector, void*);
139
141 long onCmdOpenConfiguration(FXObject*, FXSelector, void*);
142
144 long onCmdOpenNetwork(FXObject*, FXSelector, void*);
145
147 long onCmdOpenShapes(FXObject*, FXSelector, void*);
148
150 long onCmdOpenEdgeData(FXObject*, FXSelector, void*);
151
153 long onCmdReload(FXObject*, FXSelector, void*);
154
156 long onCmdQuickReload(FXObject*, FXSelector, void*);
157
159 long onCmdOpenRecent(FXObject*, FXSelector, void*);
160
162 long onCmdSaveConfig(FXObject*, FXSelector, void*);
163
165 long onCmdClose(FXObject*, FXSelector, void*);
166
168 long onCmdQuit(FXObject*, FXSelector, void*);
169
171 long onCmdEditChosen(FXObject*, FXSelector, void*);
172
174 long onCmdEditBreakpoints(FXObject*, FXSelector, void*);
175
177 long onCmdEditViewScheme(FXObject*, FXSelector, void*);
178
180 long onCmdEditViewport(FXObject*, FXSelector, void*);
181
183 long onCmdHelp(FXObject* sender, FXSelector sel, void* ptr);
184
186 long onCmdChangelog(FXObject* sender, FXSelector sel, void* ptr);
187
189 long onCmdHotkeys(FXObject* sender, FXSelector sel, void* ptr);
190
192 long onCmdTutorial(FXObject* sender, FXSelector sel, void* ptr);
193
195 long onCmdNeteditNetwork(FXObject*, FXSelector, void*);
196
198 long onCmdNeteditSUMOConfig(FXObject*, FXSelector, void*);
199
201 long onUpdNeteditSUMOConfig(FXObject*, FXSelector, void*);
202
204 long onCmdAppSettings(FXObject*, FXSelector, void*);
205
207 long onCmdGaming(FXObject*, FXSelector, void*);
208
210 long onCmdToggleDrawJunctionShape(FXObject*, FXSelector, void*);
211
213 long onCmdToggleSecondaryShape(FXObject*, FXSelector, void*);
214
216 long onCmdFullScreen(FXObject*, FXSelector, void*);
217
219 long onCmdListInternal(FXObject*, FXSelector, void*);
220
222 long onCmdListParking(FXObject*, FXSelector, void*);
223
225 long onCmdListTeleporting(FXObject*, FXSelector, void*);
226
228 long onCmdFeedback(FXObject*, FXSelector, void*);
229
231 long onCmdAbout(FXObject*, FXSelector, void*);
232
234 long onCmdHallOfFame(FXObject*, FXSelector, void*);
235
237 long onCmdStart(FXObject*, FXSelector, void*);
238
240 long onCmdStop(FXObject*, FXSelector, void*);
241
243 long onCmdStep(FXObject*, FXSelector, void*);
244
246 long onCmdSaveState(FXObject*, FXSelector, void*);
247
249 long onCmdLoadState(FXObject*, FXSelector, void*);
250
252 long onCmdTimeToggle(FXObject*, FXSelector, void*);
253
255 long onCmdDelayInc(FXObject*, FXSelector, void*);
256
258 long onCmdDelayDec(FXObject*, FXSelector, void*);
259
261 long onCmdDelayToggle(FXObject*, FXSelector, void*);
262
264 long onCmdDemandScale(FXObject*, FXSelector, void*);
265
267 long onCmdNewView(FXObject*, FXSelector, void*);
268
269#ifdef HAVE_OSG
271 long onCmdNewOSG(FXObject*, FXSelector, void*);
272#endif
273
275 long onUpdOpen(FXObject*, FXSelector, void*);
276
278 long onUpdReload(FXObject*, FXSelector, void*);
279
281 long onUpdOpenRecent(FXObject*, FXSelector, void*);
282
284 long onUpdAddView(FXObject*, FXSelector, void*);
285
287 long onUpdStart(FXObject* sender, FXSelector, void* ptr);
288
290 long onUpdStop(FXObject*, FXSelector, void*);
291
293 long onUpdStep(FXObject*, FXSelector, void*);
294
296 long onUpdNeedsSimulation(FXObject*, FXSelector, void*);
297
299 long onUpdTraCIStatus(FXObject*, FXSelector, void*);
300
302 long onCmdClearMsgWindow(FXObject*, FXSelector, void*);
303
305 long onCmdLocate(FXObject*, FXSelector, void*);
306
308 long onCmdShowStats(FXObject*, FXSelector, void*);
309
311 long onLoadThreadEvent(FXObject*, FXSelector, void*);
312
314 long onRunThreadEvent(FXObject*, FXSelector, void*);
315
317 long onClipboardRequest(FXObject* sender, FXSelector sel, void* ptr);
318
320 long onKeyPress(FXObject* o, FXSelector sel, void* data);
321
323 long onKeyRelease(FXObject* o, FXSelector sel, void* data);
324
326
328 virtual double getDelay() const;
329
331 virtual void setDelay(double delay);
332
334 virtual void setBreakpoints(const std::vector<SUMOTime>& breakpoints);
335
337 virtual void sendBlockingEvent(GUIEvent* event);
338
340 const std::vector<SUMOTime> retrieveBreakpoints() const;
341
344
346 void addHotkey(int key, Command* press, Command* release);
347
348protected:
350 FOX_CONSTRUCTOR(GUIApplicationWindow)
351
352
353 virtual void addToWindowsMenu(FXMenuPane* menuPane);
354
356 virtual void fillMenuBar();
357
359 virtual void buildToolBars();
360
362 void buildRecentNetworks(FXMenuPane* fileMenu, FXMenuPane* fileMenuRecentNetworks);
363
365 void buildRecentConfigs(FXMenuPane* fileMenu, FXMenuPane* fileMenuRecentConfigs);
366
368 std::string myName;
369
372
375
377 bool myWasStarted = false;
378
381
383 bool myAmLoading = false;
384
386 bool myIsReload = false;
387
390
392 FXMenuPane* myFileMenu = nullptr,
393 *myEditMenu = nullptr,
395 *mySettingsMenu = nullptr,
396 *myLocatorMenu = nullptr,
397 *myControlMenu = nullptr,
398 *myWindowMenu = nullptr,
399 *myHelpMenu = nullptr;
400
402 FXMenuPane* myFileMenuRecentNetworks = nullptr;
403
405 FXMenuPane* myFileMenuRecentConfigs = nullptr;
406
408 FXMenuCascade* mySelectLanesMenuCascade = nullptr;
409
411 std::vector<FXButton*> myStatButtons;
412
415
417 FXSplitter* myMainSplitter = nullptr;
418
420 FXToolBarShell* myToolBarDrag1 = nullptr,
421 *myToolBarDrag2 = nullptr,
422 *myToolBarDrag3 = nullptr,
423 *myToolBarDrag4 = nullptr,
424 *myToolBarDrag5 = nullptr,
425 *myMenuBarDrag = nullptr,
426 *myToolBarDrag8 = nullptr;
427
429 double mySimDelay = 0.;
430
432 FXDataTarget* mySimDelayTarget = nullptr;
433
435 FXRealSpinner* mySimDelaySpinner = nullptr;
436
438 FXSlider* mySimDelaySlider = nullptr;
439
441 FXRealSpinner* myDemandScaleSpinner = nullptr;
442
445
448
450 FXMDIMenu* myMDIMenu = nullptr;
451
453 FXMenuBar* myMenuBar = nullptr;
454
456 FXToolBar* myToolBar1 = nullptr,
457 *myToolBar2 = nullptr,
458 *myToolBar3 = nullptr,
459 *myToolBar4 = nullptr,
460 *myToolBar5 = nullptr,
461 *myToolBar8 = nullptr;
462
465
468
471
474
477
479 std::string myConfigPattern;
480
482 bool hadDependentBuild = false;
483
485 bool myShowTimeAsHMS = false;
486
489
492
494 FXCondition myEventCondition;
495
498
501
504
507
509 double myJamSoundTime = 60;
510
512 static std::mt19937 myGamingRNG;
513
516
518 bool myTLSGame = false;
519
522
525
528
531
534
536 double myTotalDistance = 0;
537
540
543
545 FXToolBar* myToolBar6 = nullptr,
546 *myToolBar7 = nullptr,
547 *myToolBar9 = nullptr,
548 *myToolBar10 = nullptr;
549
551 FXToolBarShell* myToolBarDrag6 = nullptr,
552 *myToolBarDrag7 = nullptr,
553 *myToolBarDrag9 = nullptr,
554 *myToolBarDrag10 = nullptr;
556
559
561 std::map<int, Command*> myHotkeyPress;
562
564 std::map<int, Command*> myHotkeyRelease;
565
568
569private:
571 void loadConfigOrNet(const std::string& file);
572
574 void closeAllWindows();
575
577 void updateTimeLCD(SUMOTime time);
578
581
584
586 void checkGamingEvents();
587
590
593
596};
long long int SUMOTime
Definition: GUI.h:36
Base (microsim) event class.
Definition: Command.h:50
The main window of the SUMO-gui.
long onCmdDelayInc(FXObject *, FXSelector, void *)
Called on "delay inc".
long onUpdReload(FXObject *, FXSelector, void *)
Determines whether reloading is enabled.
long onCmdShowStats(FXObject *, FXSelector, void *)
Called on commands from the statistic buttons.
FXToolBarShell * myToolBarDrag2
long onCmdTimeToggle(FXObject *, FXSelector, void *)
Called on "time toggle".
virtual void sendBlockingEvent(GUIEvent *event)
Sends an event from the application thread to the GUI and waits until it is handled.
GUIDialog_Breakpoints * myBreakpointDialog
breakpoint dialog
FXEX::MFXThreadEvent myLoadThreadEvent
io-event with the load-thread
void handleEvent_Message(GUIEvent *e)
called when event "message" ocurred
GUILoadThread * myLoadThread
the thread that loads simulations
void handleEvent_SimulationEnded(GUIEvent *e)
called when event "simulation ended" ocurred
GUIApplicationWindow & operator=(const GUIApplicationWindow &s)=delete
invalidate assignment operator
FXMenuCheck * myGamingModeCheckbox
menu checkbox to activate game mode
int myViewNumber
The current view number.
FXToolBarShell * myToolBarDrag4
long onCmdAbout(FXObject *, FXSelector, void *)
Shows the about dialog.
SUMOTime myWaitingTime
waiting time
long onCmdFeedback(FXObject *, FXSelector, void *)
Shows the feedback dialog.
long onClipboardRequest(FXObject *sender, FXSelector sel, void *ptr)
Somebody wants our clipped text.
long onUpdTraCIStatus(FXObject *, FXSelector, void *)
Determines whether traci is active.
long onUpdStep(FXObject *, FXSelector, void *)
Determines whether "step" is enabled.
bool myAmLoading
information whether the gui is currently loading and the load-options shall be greyed out
long onCmdAppSettings(FXObject *, FXSelector, void *)
Opens the application settings menu (Settings->Application Settings...)
long onKeyPress(FXObject *o, FXSelector sel, void *data)
called when a key is pressed
void handleEvent_SimulationLoaded(GUIEvent *e)
called when event "simulation loaded" ocurred
FXToolBarShell * myToolBarDrag9
FXRealSpinner * mySimDelaySpinner
Simulation delay spinner.
long onCmdChangelog(FXObject *sender, FXSelector sel, void *ptr)
called if the user selects help->Changelog
void handleEvent_SimulationStep(GUIEvent *e)
called when event "simulation step" ocurred
bool myHaveNotifiedAboutSimEnd
whether the simulation end was already announced
void setStatusBarText(const std::string &text)
set status bar text
FXToolBarShell * myToolBarDrag10
FXMenuPane * myFileMenuRecentConfigs
FXMenu pane for recent configs.
long onCmdStop(FXObject *, FXSelector, void *)
Called on "stop".
MFXRecentNetworks myRecentNetworks
List of recent networks.
MFXLCDLabel * myTimeLossLabel
time loss label
double myJamSoundTime
waiting time after which vehicles trigger jam sounds
FXRealSpinner * myDemandScaleSpinner
the demand scale
long onCmdTutorial(FXObject *sender, FXSelector sel, void *ptr)
called if the user selects help->Tutorial
virtual void setDelay(double delay)
Sets the delay of the parent application in milliseconds.
MFXLCDLabel * myEmergencyVehicleLabel
emergency vehicle label
FXToolBarShell * myToolBarDrag7
double mySimDelay
the simulation delay in milliseconds
void addRecentConfig(const FX::FXString &f)
add recent config to recent file list
SUMOTime getCurrentSimTime() const
get current simulation time
long onUpdAddView(FXObject *, FXSelector, void *)
Determines whether adding a view is enabled.
FXToolBarShell * myToolBarDrag1
for some menu detaching fun
long onCmdEditViewScheme(FXObject *, FXSelector, void *)
Called on menu Edit->Visualization.
long onRunThreadEvent(FXObject *, FXSelector, void *)
Called on an event from the simulation thread.
MFXLCDLabel * myTotalDistanceLabel
total distance label
bool hadDependentBuild
flag to mark if GUIApplicationWIndow has depend build
SUMOTime myEmergencyVehicleCount
emergency vehicle count
FXMenuPane * myFileMenuRecentNetworks
FXMenu pane for recent networks.
FXCursor * getDefaultCursor()
get default cursor
SUMOTime myTimeLoss
time loss
void checkGamingEventsDRT()
handles additional game-related events (DRT)
FXMDIMenu * myMDIMenu
The menu used for the MDI-windows.
void updateTimeLCDTooltip()
update LCD timer tooltip
long onCmdListTeleporting(FXObject *, FXSelector, void *)
Toggle listing of teleporting vehicles.
long onCmdNewWindow(FXObject *, FXSelector, void *)
Called on menu File->New Window.
long onCmdStep(FXObject *, FXSelector, void *)
Called on "step".
FXMutex myEventMutex
the mutex for the waiting semaphore
FXMenuPane * mySelectByPermissions
double getTrackerInterval() const
get tracker interval
long onCmdClose(FXObject *, FXSelector, void *)
Called on menu File->Close.
virtual void buildToolBars()
Builds the tool bar.
long onUpdNeteditSUMOConfig(FXObject *, FXSelector, void *)
Enable or disable open SUMOConfig in netedit.
long onCmdDelayToggle(FXObject *, FXSelector, void *)
Called on "delay toggle".
GUIApplicationWindow(const GUIApplicationWindow &s)=delete
invalidate copy constructor
void buildRecentNetworks(FXMenuPane *fileMenu, FXMenuPane *fileMenuRecentNetworks)
build recent networks
FXMenuPane * myFileMenu
the submenus
long onCmdToggleSecondaryShape(FXObject *, FXSelector, void *)
Toggle draw junction shape.
virtual double getDelay() const
Returns the simulation delay in miliseconds.
long onCmdStart(FXObject *, FXSelector, void *)
Called on "play".
GUIMessageWindow * myMessageWindow
A window to display messages, warnings and error in.
GUIRunThread * getRunner()
get run thread
void loadConfigOrNet(const std::string &file)
starts to load a simulation
FXToolBar * myToolBar1
The application tool bar.
bool myWasStarted
the information whether the simulation was started before
std::string myName
the name of the simulation
long onCmdNeteditSUMOConfig(FXObject *, FXSelector, void *)
Called on menu Edit->Netedit (SUMOCfg)
FXSplitter * myMainSplitter
The splitter that divides the main window into views and the log window.
long onCmdListParking(FXObject *, FXSelector, void *)
Toggle listing of parking vehicles.
void loadOnStartup(const bool wait=false)
config or net on startup
long onCmdListInternal(FXObject *, FXSelector, void *)
Toggle listing of internal structures.
bool myTLSGame
flag for enable TLS gameMode
FXEX::MFXThreadEvent myRunThreadEvent
io-event with the run-thread
void dependentBuild(const bool isLibsumo)
build dependt
long onCmdFullScreen(FXObject *, FXSelector, void *)
Toggle full screen mode.
GUIApplicationWindow(FXApp *a, const std::string &configPattern)
Constructor.
long onCmdEditBreakpoints(FXObject *, FXSelector, void *)
Called on menu Edit->Edit Breakpoints.
long onCmdOpenShapes(FXObject *, FXSelector, void *)
Called on menu File->Load Shapes.
FXToolBarShell * myMenuBarDrag
const std::vector< SUMOTime > retrieveBreakpoints() const
retrieve list of breakpoints
long onCmdQuit(FXObject *, FXSelector, void *)
Called by FOX if the application shall be closed (Called either by FileMenu->Quit,...
FXToolBarShell * myToolBarDrag8
long onUpdStart(FXObject *sender, FXSelector, void *ptr)
Determines whether "play" is enabled.
GUISUMOAbstractView * openNewView(GUISUMOViewParent::ViewType vt=GUISUMOViewParent::VIEW_2D_OPENGL, std::string caption="")
opens a new simulation display
FXGLCanvas * getBuildGLCanvas() const
get build GLCanvas
RandomDistributor< std::string > myJamSounds
random list of jam sounds
long onCmdNewView(FXObject *, FXSelector, void *)
Called if a new view shall be opened (2D view)
GUIRunThread * myRunThread
the thread that runs simulations
long onCmdClearMsgWindow(FXObject *, FXSelector, void *)
Called if the message window shall be cleared.
long onCmdToggleDrawJunctionShape(FXObject *, FXSelector, void *)
Toggle draw junction shape.
virtual void create()
Creates the main window (required by FOX)
std::map< int, Command * > myHotkeyPress
custom hotkeys pressed
FXToolBarShell * myToolBarDrag5
MFXLCDLabel * myWaitingTimeLabel
waiting time label
long onCmdDemandScale(FXObject *, FXSelector, void *)
Called on "demand scale".
long onKeyRelease(FXObject *o, FXSelector sel, void *data)
called when a key is released
RandomDistributor< std::string > myCollisionSounds
random list of collision sounds
FXMenuCascade * mySelectLanesMenuCascade
the menu cascades
long onCmdOpenNetwork(FXObject *, FXSelector, void *)
Called on menu File->Open Network.
std::string myConfigPattern
Input file pattern.
virtual void setBreakpoints(const std::vector< SUMOTime > &breakpoints)
Sets the breakpoints of the parent application.
long onCmdLoadState(FXObject *, FXSelector, void *)
Called on "save state".
void eraseBreakpointDialog()
erase current breakpoint dialog
int myPreviousCollisionNumber
previous collision number
long onCmdEditChosen(FXObject *, FXSelector, void *)
Called on menu Edit->Edit Chosen.
virtual void detach()
Detaches the tool/menu bar.
long onCmdDelayDec(FXObject *, FXSelector, void *)
Called on "delay dec".
long onCmdOpenRecent(FXObject *, FXSelector, void *)
Called on opening a recent file.
MFXRecentNetworks myRecentConfigs
List of recent configs.
long onUpdOpenRecent(FXObject *, FXSelector, void *)
Determines whether opening a recent file is enabled.
MFXSynchQue< GUIEvent * > myEvents
List of got requests.
bool myShowTimeAsHMS
whether to show time as hour:minute:second
double myAlternateSimDelay
The alternate simulation delay in milliseconds for toggling.
long onCmdNeteditNetwork(FXObject *, FXSelector, void *)
Called on menu Edit->Netedit (network)
long onUpdStop(FXObject *, FXSelector, void *)
Determines whether "stop" is enabled.
FXDataTarget * mySimDelayTarget
Simulation delay target.
long onCmdSaveConfig(FXObject *, FXSelector, void *)
Called on menu File->Close.
void closeAllWindows()
this method closes all windows and deletes the current simulation
void updateTimeLCD(SUMOTime time)
updates the simulation time display
long onCmdSaveState(FXObject *, FXSelector, void *)
Called on "save state".
std::map< int, Command * > myHotkeyRelease
custom hotkeys released
FXToolBarShell * myToolBarDrag3
long onLoadThreadEvent(FXObject *, FXSelector, void *)
Called on an event from the loading thread.
long onCmdReload(FXObject *, FXSelector, void *)
Called on reload.
void addRecentNetwork(const FX::FXString &f)
add recent network to recent file list
void buildRecentConfigs(FXMenuPane *fileMenu, FXMenuPane *fileMenuRecentConfigs)
build recent configs
long onUpdNeedsSimulation(FXObject *, FXSelector, void *)
Determines whether some buttons which require an active simulation may be shown.
long onUpdOpen(FXObject *, FXSelector, void *)
Determines whether opening is enabled.
long onCmdHallOfFame(FXObject *, FXSelector, void *)
Shows the Hall of Fame dialog.
double myTotalDistance
total distance
long onCmdLocate(FXObject *, FXSelector, void *)
Called on menu commands from the Locator menu.
FXToolBar * myToolBar6
toolbars used in game
FXToolBarShell * myToolBarDrag6
toolbars shell used in game
long long myGuiSettingsFileMTime
last modification time of the gui setting file
FXSlider * mySimDelaySlider
Simulation delay slider.
long onCmdOpenConfiguration(FXObject *, FXSelector, void *)
Called on menu File->Open Configuration.
long onCmdOpenEdgeData(FXObject *, FXSelector, void *)
Called on menu File->Load EdgeData.
virtual void addToWindowsMenu(FXMenuPane *menuPane)
FOX need this.
FXCondition myEventCondition
the semaphore when waiting for event completion
long onCmdEditViewport(FXObject *, FXSelector, void *)
Called on menu Edit->Viewport.
MFXLCDLabel * myLCDLabel
the simulation step display
FXMenuBar * myMenuBar
The application menu bar.
static std::mt19937 myGamingRNG
A random number generator used to choose a gaming sound.
long onCmdHotkeys(FXObject *sender, FXSelector sel, void *ptr)
called if the user selects help->Hotkeys
long myLastStepEventMillis
last time the simulation view was redrawn due to a simStep
virtual ~GUIApplicationWindow()
Destructor.
long onCmdHelp(FXObject *sender, FXSelector sel, void *ptr)
called if the user selects help->Documentation
void addHotkey(int key, Command *press, Command *release)
register custom hotkey action
virtual void fillMenuBar()
Builds the menu bar.
bool myIsReload
whether we are reloading the simulation
std::vector< FXButton * > myStatButtons
Buttons showing and running values and triggering statistic windows.
virtual void eventOccurred()
a certaint event ocurred
void checkGamingEvents()
handles additional game-related events
long onCmdQuickReload(FXObject *, FXSelector, void *)
Called on quick-reload.
long onCmdGaming(FXObject *, FXSelector, void *)
Toggle gaming mode.
Editor for simulation breakpoints.
A logging window for the gui.
A window containing a gl-object's parameter.
A window which displays the time line of one (or more) value(s)
ViewType
Available view types.
@ VIEW_2D_OPENGL
plain 2D openGL view (
A widget which has the seven-segment display used as the drawing object for each letter in the label....
Definition: MFXLCDLabel.h:34
MFXRecentNetworks.