Eclipse SUMO - Simulation of Urban MObility
Loading...
Searching...
No Matches
MFXBaseObject.cpp
Go to the documentation of this file.
1/****************************************************************************/
2// Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.dev/sumo
3// Copyright (C) 2003-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/****************************************************************************/
20//
21/****************************************************************************/
22
23
24/* =========================================================================
25 * included modules
26 * ======================================================================= */
27#include <config.h>
28
29#include "fxheader.h"
30using namespace FX;
31#include "MFXBaseObject.h"
32
33using namespace FXEX;
34namespace FXEX {
35
36FXDEFMAP(MFXBaseObject) MFXBaseObjectMap[] = {
37 FXMAPFUNC(SEL_COMMAND, FXWindow::ID_ENABLE, MFXBaseObject::onCmdEnable),
38 FXMAPFUNC(SEL_COMMAND, FXWindow::ID_DISABLE, MFXBaseObject::onCmdDisable),
39 FXMAPFUNC(SEL_UPDATE, FXWindow::ID_DISABLE, MFXBaseObject::onUpdate),
40};
41FXIMPLEMENT(MFXBaseObject, FXObject, MFXBaseObjectMap, ARRAYNUMBER(MFXBaseObjectMap))
42
43// ctor
44MFXBaseObject::MFXBaseObject(FXObject* tgt, FXSelector sel) : FXObject() {
45 data = nullptr;
46 target = tgt;
47 message = sel;
48 flags = 0;
49 app = FXApp::instance();
50 if (app == nullptr) {
51 fxerror("%s: Cannot create object without FXApp object\n", getClassName());
52 }
53}
54
55// ctor
56MFXBaseObject::MFXBaseObject(FXApp* a, FXObject* tgt, FXSelector sel) : FXObject() {
57 data = nullptr;
58 target = tgt;
59 message = sel;
60 flags = 0;
61 app = a;
62 if (app == nullptr) {
63 app = FXApp::instance();
64 }
65 if (app == nullptr) {
66 fxerror("%s: Cannot create object without FXApp object\n", getClassName());
67 }
68}
69
70// free up all resources
72 if (data != nullptr && data != (void*) - 1) {
73 fxerror("%s::~%s - user data is not NULL prior to destruction\n", getClassName(), getClassName());
74 }
75 app = (FXApp*) - 1;
76 target = (FXObject*) - 1;
77}
78
79// save object to stream
80void MFXBaseObject::save(FXStream& store) const {
81 FXObject::save(store);
82 store << app;
83 store << target;
84 store << message;
85 store << flags;
86 store << options;
87 store << datalen;
88 store.save((FXuchar*)data, (unsigned long)datalen);
89}
90
91// load object from stream
92void MFXBaseObject::load(FXStream& store) {
93 FXObject::load(store);
94 store >> app;
95 store >> target;
96 store >> message;
97 store >> flags;
98 store >> options;
99 store >> datalen;
100 store.load((FXuchar*)data, (unsigned long)datalen);
101}
102
103// this allows MFXBaseObject derived classes to be singletons
105 if (app) {
106 return app;
107 }
108 return FXApp::instance();
109}
110
111// set the readonly flag
112void MFXBaseObject::setReadonly(FXbool mode) {
113 if (mode) {
115 } else {
116 flags &= ~FLAG_READONLY;
117 }
118}
119
120// handle enable event
121long MFXBaseObject::onCmdEnable(FXObject*, FXSelector, void*) {
122 enable();
123 return 1;
124}
125
126// handle disable event
127long MFXBaseObject::onCmdDisable(FXObject*, FXSelector, void*) {
128 disable();
129 return 1;
130}
131
132// handle update event
133long MFXBaseObject::onUpdate(FXObject* sender, FXSelector, void*) {
134 if (flags & FLAG_ENABLED) {
135 sender->handle(this, FXSEL(SEL_UPDATE, FXWindow::ID_ENABLE), nullptr);
136 } else {
137 sender->handle(this, FXSEL(SEL_UPDATE, FXWindow::ID_DISABLE), nullptr);
138 }
139 return 1;
140}
141
142}
virtual ~MFXBaseObject()
dtor
virtual void save(FXStream &store) const
save object to stream
virtual void enable()
enable us
MFXBaseObject(FXObject *tgt=NULL, FXSelector sel=0)
Just supply the target and selector (de-serialisation too)
virtual void setReadonly(FXbool mode=TRUE)
set modifiable mode
long onCmdEnable(FXObject *, FXSelector, void *)
virtual void disable()
disable us
FXApp * getApp()
application pointer
long onUpdate(FXObject *, FXSelector, void *)
long onCmdDisable(FXObject *, FXSelector, void *)
virtual void load(FXStream &store)
load object from stream
FXDEFMAP(MFXBaseObject) MFXBaseObjectMap[]
Definition GUI.h:31