Eclipse SUMO - Simulation of Urban MObility
FXBaseObject.cpp
Go to the documentation of this file.
1 /****************************************************************************/
2 // Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.org/sumo
3 // Copyright (C) 2003-2019 German Aerospace Center (DLR) and others.
4 // This program and the accompanying materials
5 // are made available under the terms of the Eclipse Public License v2.0
6 // which accompanies this distribution, and is available at
7 // http://www.eclipse.org/legal/epl-v20.html
8 // SPDX-License-Identifier: EPL-2.0
9 /****************************************************************************/
16 //
17 /****************************************************************************/
18 
19 
20 /* =========================================================================
21  * included modules
22  * ======================================================================= */
23 #include <config.h>
24 
25 #include <fxver.h>
26 #define NOMINMAX
27 #include <xincs.h>
28 #undef NOMINMAX
29 #include <fxdefs.h>
30 #include <fx.h>
31 /*
32 #include <FXString.h>
33 #include <FXHash.h>
34 #include <FXStream.h>
35 #include <FXSize.h>
36 #include <FXPoint.h>
37 #include <FXRectangle.h>
38 #include <FXRegistry.h>
39 #include <FXMutex.h>
40 #include <FXApp.h>
41 #include <FXWindow.h>
42 */
43 using namespace FX;
44 #include "FXBaseObject.h"
45 
46 using namespace FXEX;
47 namespace FXEX {
48 
49 FXDEFMAP(FXBaseObject) FXBaseObjectMap[] = {
50  FXMAPFUNC(SEL_COMMAND, FXWindow::ID_ENABLE, FXBaseObject::onCmdEnable),
51  FXMAPFUNC(SEL_COMMAND, FXWindow::ID_DISABLE, FXBaseObject::onCmdDisable),
52  FXMAPFUNC(SEL_UPDATE, FXWindow::ID_DISABLE, FXBaseObject::onUpdate),
53 };
54 FXIMPLEMENT(FXBaseObject, FXObject, FXBaseObjectMap, ARRAYNUMBER(FXBaseObjectMap))
55 
56 // ctor
57 FXBaseObject::FXBaseObject(FXObject* tgt, FXSelector sel) : FXObject() {
58  data = nullptr;
59  target = tgt;
60  message = sel;
61  flags = 0;
62  app = FXApp::instance();
63  if (app == nullptr) {
64  fxerror("%s: Cannot create object without FXApp object\n", getClassName());
65  }
66 }
67 
68 // ctor
69 FXBaseObject::FXBaseObject(FXApp* a, FXObject* tgt, FXSelector sel) : FXObject() {
70  data = nullptr;
71  target = tgt;
72  message = sel;
73  flags = 0;
74  app = a;
75  if (app == nullptr) {
76  app = FXApp::instance();
77  }
78  if (app == nullptr) {
79  fxerror("%s: Cannot create object without FXApp object\n", getClassName());
80  }
81 }
82 
83 // free up all resources
85  if (data != nullptr && data != (void*) - 1) {
86  fxerror("%s::~%s - user data is not NULL prior to destruction\n", getClassName(), getClassName());
87  }
88  app = (FXApp*) - 1;
89  target = (FXObject*) - 1;
90 }
91 
92 // save object to stream
93 void FXBaseObject::save(FXStream& store) const {
94  FXObject::save(store);
95  store << app;
96  store << target;
97  store << message;
98  store << flags;
99  store << options;
100  store << datalen;
101  store.save((FXuchar*)data, (unsigned long)datalen);
102 }
103 
104 // load object from stream
105 void FXBaseObject::load(FXStream& store) {
106  FXObject::load(store);
107  store >> app;
108  store >> target;
109  store >> message;
110  store >> flags;
111  store >> options;
112  store >> datalen;
113  store.load((FXuchar*)data, (unsigned long)datalen);
114 }
115 
116 // this allows FXBaseObject derived classes to be singletons
118  if (app) {
119  return app;
120  }
121  return FXApp::instance();
122 }
123 
124 // set the readonly flag
125 void FXBaseObject::setReadonly(FXbool mode) {
126  if (mode) {
127  flags |= FLAG_READONLY;
128  } else {
129  flags &= ~FLAG_READONLY;
130  }
131 }
132 
133 // handle enable event
134 long FXBaseObject::onCmdEnable(FXObject*, FXSelector, void*) {
135  enable();
136  return 1;
137 }
138 
139 // handle disable event
140 long FXBaseObject::onCmdDisable(FXObject*, FXSelector, void*) {
141  disable();
142  return 1;
143 }
144 
145 // handle update event
146 long FXBaseObject::onUpdate(FXObject* sender, FXSelector, void*) {
147  if (flags & FLAG_ENABLED) {
148  sender->handle(this, FXSEL(SEL_UPDATE, FXWindow::ID_ENABLE), nullptr);
149  } else {
150  sender->handle(this, FXSEL(SEL_UPDATE, FXWindow::ID_DISABLE), nullptr);
151  }
152  return 1;
153 }
154 
155 }
156 
FXEX::FXBaseObject::options
FXuint options
Definition: FXBaseObject.h:82
FXEX::FXBaseObject::save
virtual void save(FXStream &store) const
save object to stream
Definition: FXBaseObject.cpp:93
FXEX::FXBaseObject::onUpdate
long onUpdate(FXObject *, FXSelector, void *)
Definition: FXBaseObject.cpp:146
FXEX::FXBaseObject::setReadonly
virtual void setReadonly(FXbool mode=TRUE)
set modifiable mode
Definition: FXBaseObject.cpp:125
FXEX::FXBaseObject
Definition: FXBaseObject.h:54
FXEX::FXBaseObject::message
FXSelector message
Definition: FXBaseObject.h:78
FXEX::FXBaseObject::onCmdDisable
long onCmdDisable(FXObject *, FXSelector, void *)
Definition: FXBaseObject.cpp:140
FXEX::FXBaseObject::flags
FXuint flags
Definition: FXBaseObject.h:81
FXEX::FXBaseObject::load
virtual void load(FXStream &store)
load object from stream
Definition: FXBaseObject.cpp:105
FXEX::FXBaseObject::target
FXObject * target
Definition: FXBaseObject.h:77
FXEX::FXBaseObject::FLAG_ENABLED
@ FLAG_ENABLED
Definition: FXBaseObject.h:61
FXEX
Definition: FXBaseObject.cpp:47
FXEX::FXBaseObject::data
void * data
Definition: FXBaseObject.h:79
FXEX::FXBaseObject::onCmdEnable
long onCmdEnable(FXObject *, FXSelector, void *)
Definition: FXBaseObject.cpp:134
FXEX::FXDEFMAP
FXDEFMAP(FXBaseObject) FXBaseObjectMap[]
FXEX::FXBaseObject::datalen
FXuint datalen
Definition: FXBaseObject.h:80
FXEX::FXBaseObject::disable
virtual void disable()
disable us
Definition: FXBaseObject.h:174
FXEX::FXBaseObject::~FXBaseObject
virtual ~FXBaseObject()
dtor
Definition: FXBaseObject.cpp:84
FXBaseObject.h
FXEX::FXBaseObject::enable
virtual void enable()
enable us
Definition: FXBaseObject.h:169
config.h
FXEX::FXBaseObject::FLAG_READONLY
@ FLAG_READONLY
Definition: FXBaseObject.h:70
FXEX::FXBaseObject::app
FXApp * app
Definition: FXBaseObject.h:74
FXEX::FXBaseObject::getApp
FXApp * getApp()
application pointer
Definition: FXBaseObject.cpp:117