Eclipse SUMO - Simulation of Urban MObility
FXGroupBoxModule.cpp
Go to the documentation of this file.
1 /****************************************************************************/
2 // Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.org/sumo
3 // Copyright (C) 2006-2022 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 
21 /* =========================================================================
22  * included modules
23  * ======================================================================= */
24 #include <config.h>
25 
30 #include <netedit/GNEViewNet.h>
31 #include <netedit/GNEViewParent.h>
32 
33 #include "FXGroupBoxModule.h"
34 
35 
36 // ===========================================================================
37 // FOX callback mapping
38 // ===========================================================================
39 
40 FXDEFMAP(FXGroupBoxModule) FXGroupBoxModuleMap[] = {
41  FXMAPFUNC(SEL_PAINT, 0, FXGroupBoxModule::onPaint),
48 };
49 
50 // Object implementation
51 FXIMPLEMENT(FXGroupBoxModule, FXVerticalFrame, FXGroupBoxModuleMap, ARRAYNUMBER(FXGroupBoxModuleMap))
52 
53 // ===========================================================================
54 // method definitions
55 // ===========================================================================
56 
57 FXGroupBoxModule::FXGroupBoxModule(GNEFrame* frame, const std::string& text, const int options) :
58  FXVerticalFrame(frame->getContentFrame(), GUIDesignGroupBoxModule),
59  myOptions(options),
60  myFrameParent(frame),
61  myCollapsed(false) {
62  // build button and labels
63  FXHorizontalFrame* headerFrame = new FXHorizontalFrame(this, GUIDesignAuxiliarHorizontalFrame);
64  if (myOptions & Options::COLLAPSIBLE) {
65  myCollapseButton = new FXButton(headerFrame, "", GUIIconSubSys::getIcon(GUIIcon::COLLAPSE), this, MID_GROUPBOXMODULE_COLLAPSE, GUIDesignButtonFXGroupBoxModule);
66  }
67  if (myOptions & Options::EXTENSIBLE) {
68  myExtendButton = new FXButton(headerFrame, "", GUIIconSubSys::getIcon(GUIIcon::EXTEND), this, MID_GROUPBOXMODULE_EXTEND, GUIDesignButtonFXGroupBoxModule);
69  myResetWidthButton = new FXButton(headerFrame, "", GUIIconSubSys::getIcon(GUIIcon::RESET), this, MID_GROUPBOXMODULE_RESETWIDTH, GUIDesignButtonFXGroupBoxModule);
70  }
71  if (myOptions & Options::SAVE) {
72  mySaveButton = new FXButton(headerFrame, "", GUIIconSubSys::getIcon(GUIIcon::SAVE), this, MID_GROUPBOXMODULE_SAVE, GUIDesignButtonFXGroupBoxModule);
73  }
74  if (myOptions & Options::LOAD) {
75  myLoadButton = new FXButton(headerFrame, "", GUIIconSubSys::getIcon(GUIIcon::OPEN_NET), this, MID_GROUPBOXMODULE_LOAD, GUIDesignButtonFXGroupBoxModule);
76  }
77  myLabel = new FXLabel(headerFrame, text.c_str(), nullptr, GUIDesignLabelFXGroupBoxModule);
78  // build collapsable frame
79  myCollapsableFrame = new FXVerticalFrame(this, GUIDesignCollapsableFrame);
80 }
81 
82 
83 FXGroupBoxModule::FXGroupBoxModule(FXVerticalFrame* contentFrame, const std::string& text, const int options) :
84  FXVerticalFrame(contentFrame, GUIDesignGroupBoxModuleExtendY),
85  myOptions(options),
86  myCollapsed(false) {
87  // build button and labels
88  FXHorizontalFrame* headerFrame = new FXHorizontalFrame(this, GUIDesignAuxiliarHorizontalFrame);
89  if (myOptions & Options::COLLAPSIBLE) {
91  }
92  if (myOptions & Options::EXTENSIBLE) {
93  throw ProcessError("This FXGroupBoxModule doesn't support Extensible flag");
94  }
95  if (myOptions & Options::SAVE) {
97  }
98  if (myOptions & Options::LOAD) {
100  }
101  myLabel = new FXLabel(headerFrame, text.c_str(), nullptr, GUIDesignLabelFXGroupBoxModule);
102  // build collapsable frame
103  myCollapsableFrame = new FXVerticalFrame(this, GUIDesignCollapsableFrame);
104 }
105 
106 
108 
109 
110 void
111 FXGroupBoxModule::setText(const std::string& text) {
112  myLabel->setText(text.c_str());
113 }
114 
115 
116 FXVerticalFrame*
118  return myCollapsableFrame;
119 }
120 
121 
122 long
123 FXGroupBoxModule::onPaint(FXObject*, FXSelector, void* ptr) {
124  FXEvent* event = (FXEvent*)ptr;
125  FXDCWindow dc(this, event);
126  // Paint background
127  dc.setForeground(backColor);
128  dc.fillRectangle(event->rect.x, event->rect.y, event->rect.w, event->rect.h);
129  // draw groove rectangle
130  drawGrooveRectangle(dc, 0, 15, width, height - 15);
131  return 1;
132 }
133 
134 
135 long
136 FXGroupBoxModule::onCmdCollapseButton(FXObject*, FXSelector, void*) {
137  if (myCollapsed) {
138  myCollapsed = false;
140  myCollapsableFrame->show();
141  } else {
142  myCollapsed = true;
144  myCollapsableFrame->hide();
145  }
146  recalc();
147  return 1;
148 }
149 
150 
151 long
152 FXGroupBoxModule::onCmdExtendButton(FXObject*, FXSelector, void*) {
153  if (myFrameParent) {
154  int maximumWidth = -1;
155  // search in every child
156  for (auto child = getFirst(); child != nullptr; child = child->getNext()) {
157  // check if child is an scrollWindow
158  auto scrollWindow = dynamic_cast<FXScrollWindow*>(child->getFirst());
159  if (scrollWindow && (scrollWindow->getContentWidth() > maximumWidth)) {
160  maximumWidth = scrollWindow->getContentWidth();
161  }
162  }
163  // now set parent parent width
164  if (maximumWidth != -1) {
166  }
167  }
168  return 1;
169 }
170 
171 
172 long
173 FXGroupBoxModule::onCmdResetButton(FXObject*, FXSelector, void*) {
174  if (myFrameParent) {
176  }
177  return 1;
178 }
179 
180 
181 long
182 FXGroupBoxModule::onUpdResetButton(FXObject* sender, FXSelector, void*) {
183  if (myFrameParent) {
185  sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
186  } else {
187  sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
188  }
189  }
190  return 1;
191 }
192 
193 
194 long
195 FXGroupBoxModule::onCmdSaveButton(FXObject*, FXSelector, void*) {
196  return saveContents();
197 }
198 
199 
200 long
201 FXGroupBoxModule::onCmdLoadButton(FXObject*, FXSelector, void*) {
202  return loadContents();
203 }
204 
205 
207  myOptions(Options::NOTHING),
208  myCollapsed(false) {
209 }
210 
211 
212 bool
214  // nothing to do
215  return false;
216 }
217 
218 
219 bool
221  // nothing to do
222  return false;
223 }
224 
225 
226 void
228  if (mySaveButton) {
229  if (value) {
230  mySaveButton->enable();
231  } else {
232  mySaveButton->disable();
233  }
234  }
235 }
GNEViewParent::getFrameAreaWith
int getFrameAreaWith() const
get frame area width
Definition: GNEViewParent.cpp:415
GUIDesignAuxiliarHorizontalFrame
#define GUIDesignAuxiliarHorizontalFrame
design for auxiliar (Without borders) horizontal frame used to pack another frames
Definition: GUIDesigns.h:358
MID_GROUPBOXMODULE_COLLAPSE
@ MID_GROUPBOXMODULE_COLLAPSE
Definition: GUIAppEnum.h:633
FXGroupBoxModule::toggleSaveButton
void toggleSaveButton(const bool value)
enable or disable save buttons
Definition: FXGroupBoxModule.cpp:227
GUIIconSubSys::getIcon
static FXIcon * getIcon(const GUIIcon which)
returns a icon previously defined in the enum GUIIcon
Definition: GUIIconSubSys.cpp:873
FXGroupBoxModule::onCmdExtendButton
long onCmdExtendButton(FXObject *, FXSelector, void *)
extends GroupBoxModule
Definition: FXGroupBoxModule.cpp:152
GUIIcon::COLLAPSE
@ COLLAPSE
GUIIcon::RESET
@ RESET
GNEFrame::getViewNet
GNEViewNet * getViewNet() const
get view net
Definition: GNEFrame.cpp:133
GUIDesignGroupBoxModule
#define GUIDesignGroupBoxModule
Definition: GUIDesigns.h:302
GNEFrame
Definition: GNEFrame.h:33
GUIDesignGroupBoxModuleExtendY
#define GUIDesignGroupBoxModuleExtendY
Horizontal frame extended over XY-frame parent used in FXGroupBoxModule.
Definition: GUIDesigns.h:305
GUIDesigns.h
FXGroupBoxModule::saveContents
virtual bool saveContents() const
save contents (can be reimplemented in children)
Definition: FXGroupBoxModule.cpp:213
FXGroupBoxModule::onCmdResetButton
long onCmdResetButton(FXObject *, FXSelector, void *)
reset GroupBoxModule
Definition: FXGroupBoxModule.cpp:173
GUIAppEnum.h
GUIIcon::EXTEND
@ EXTEND
MID_GROUPBOXMODULE_RESETWIDTH
@ MID_GROUPBOXMODULE_RESETWIDTH
reset widh groupBoxModule
Definition: GUIAppEnum.h:637
FXGroupBoxModule.h
FXGroupBoxModule::myOptions
const int myOptions
GroupBoxModule options.
Definition: FXGroupBoxModule.h:94
FXGroupBoxModule::myLabel
FXLabel * myLabel
label used in non collapsable FXGroupBoxModule
Definition: FXGroupBoxModule.h:103
GNEViewNet.h
FXGroupBoxModule::myFrameParent
GNEFrame * myFrameParent
GNEFrame in which this GroupBox is placed.
Definition: FXGroupBoxModule.h:97
FXGroupBoxModule::mySaveButton
FXButton * mySaveButton
button for save elements
Definition: FXGroupBoxModule.h:115
ProcessError
Definition: UtilExceptions.h:37
FXGroupBoxModule::myCollapseButton
FXButton * myCollapseButton
button for collapse elements
Definition: FXGroupBoxModule.h:106
FXGroupBoxModule::onCmdCollapseButton
long onCmdCollapseButton(FXObject *, FXSelector, void *)
collapse GroupBoxModule
Definition: FXGroupBoxModule.cpp:136
FXGroupBoxModule::onUpdResetButton
long onUpdResetButton(FXObject *, FXSelector, void *)
update reset GroupBoxModule
Definition: FXGroupBoxModule.cpp:182
FXGroupBoxModule::FXGroupBoxModule
FXGroupBoxModule()
FOX need this.
Definition: FXGroupBoxModule.cpp:206
FXDEFMAP
FXDEFMAP(FXGroupBoxModule) FXGroupBoxModuleMap[]
FXGroupBoxModule::onPaint
long onPaint(FXObject *, FXSelector, void *)
draw FXGroupBoxModule
Definition: FXGroupBoxModule.cpp:123
FXGroupBoxModule::onCmdSaveButton
long onCmdSaveButton(FXObject *, FXSelector, void *)
save contents
Definition: FXGroupBoxModule.cpp:195
FXGroupBoxModule::myCollapsableFrame
FXVerticalFrame * myCollapsableFrame
vertical collapsable frame
Definition: FXGroupBoxModule.h:100
GUIIcon::SAVE
@ SAVE
GUIIconSubSys.h
GNEViewParent.h
MID_GROUPBOXMODULE_SAVE
@ MID_GROUPBOXMODULE_SAVE
save contents
Definition: GUIAppEnum.h:639
GUIIcon::UNCOLLAPSE
@ UNCOLLAPSE
FXGroupBoxModule::Options
Options
GroupBoxModule options.
Definition: FXGroupBoxModule.h:35
FXGroupBoxModule::onCmdLoadButton
long onCmdLoadButton(FXObject *, FXSelector, void *)
load contents
Definition: FXGroupBoxModule.cpp:201
GUIDesignLabelFXGroupBoxModule
#define GUIDesignLabelFXGroupBoxModule
label used in GroupBoxModule
Definition: GUIDesigns.h:271
FXGroupBoxModule::myCollapsed
bool myCollapsed
flag to check if this groupbox is collapsed
Definition: FXGroupBoxModule.h:121
GNEViewParent::setFrameAreaWith
void setFrameAreaWith(const int frameAreaWith)
set frame area width
Definition: GNEViewParent.cpp:421
std
Definition: json.hpp:4470
FXGroupBoxModule
FXGroupBoxModule (based on FXGroupBox)
Definition: FXGroupBoxModule.h:30
GUIIcon::OPEN_NET
@ OPEN_NET
FXGroupBoxModule::getCollapsableFrame
FXVerticalFrame * getCollapsableFrame()
get collapsable frame (used by all elements that will be collapsed if button is toggled)
Definition: FXGroupBoxModule.cpp:117
config.h
FXGroupBoxModule::myLoadButton
FXButton * myLoadButton
button for load elements
Definition: FXGroupBoxModule.h:118
FXGroupBoxModule::loadContents
virtual bool loadContents() const
load contents (can be reimplemented in children)
Definition: FXGroupBoxModule.cpp:220
GUIDesignCollapsableFrame
#define GUIDesignCollapsableFrame
design for CollapsableFrame (Used in FXGroupBoxModule)
Definition: GUIDesigns.h:373
FXGroupBoxModule::setText
void setText(const std::string &text)
set text
Definition: FXGroupBoxModule.cpp:111
GNEFrame.h
FXGroupBoxModule::~FXGroupBoxModule
~FXGroupBoxModule()
destructor
Definition: FXGroupBoxModule.cpp:107
GNEViewNet::getViewParent
GNEViewParent * getViewParent() const
get the net object
Definition: GNEViewNet.cpp:1406
MID_GROUPBOXMODULE_EXTEND
@ MID_GROUPBOXMODULE_EXTEND
extends groupBoxModule
Definition: GUIAppEnum.h:635
GUIDesignButtonFXGroupBoxModule
#define GUIDesignButtonFXGroupBoxModule
button used in GroupBoxModule
Definition: GUIDesigns.h:89
MID_GROUPBOXMODULE_LOAD
@ MID_GROUPBOXMODULE_LOAD
load contents
Definition: GUIAppEnum.h:641