Eclipse SUMO - Simulation of Urban MObility
MFXGroupBoxModule.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>
33
34#include "MFXGroupBoxModule.h"
35
36
37// ===========================================================================
38// FOX callback mapping
39// ===========================================================================
40
41FXDEFMAP(MFXGroupBoxModule) MFXGroupBoxModuleMap[] = {
42 FXMAPFUNC(SEL_PAINT, 0, MFXGroupBoxModule::onPaint),
49};
50
51// Object implementation
52FXIMPLEMENT(MFXGroupBoxModule, FXVerticalFrame, MFXGroupBoxModuleMap, ARRAYNUMBER(MFXGroupBoxModuleMap))
53
54// ===========================================================================
55// method definitions
56// ===========================================================================
57
58MFXGroupBoxModule::MFXGroupBoxModule(GNEFrame* frame, const std::string& text, const int options) :
59 FXVerticalFrame(frame->getContentFrame(), GUIDesignGroupBoxModule),
60 myOptions(options),
61 myFrameParent(frame),
62 myCollapsed(false) {
63 // build button and labels
64 FXHorizontalFrame* headerFrame = new FXHorizontalFrame(this, GUIDesignAuxiliarHorizontalFrame);
65 if (myOptions & Options::COLLAPSIBLE) {
66 myCollapseButton = new FXButton(headerFrame, "", GUIIconSubSys::getIcon(GUIIcon::COLLAPSE), this, MID_GROUPBOXMODULE_COLLAPSE, GUIDesignButtonMFXGroupBoxModule);
67 }
68 if (myOptions & Options::EXTENSIBLE) {
69 myExtendButton = new FXButton(headerFrame, "", GUIIconSubSys::getIcon(GUIIcon::EXTEND), this, MID_GROUPBOXMODULE_EXTEND, GUIDesignButtonMFXGroupBoxModule);
70 myResetWidthButton = new FXButton(headerFrame, "", GUIIconSubSys::getIcon(GUIIcon::RESET), this, MID_GROUPBOXMODULE_RESETWIDTH, GUIDesignButtonMFXGroupBoxModule);
71 }
72 if (myOptions & Options::SAVE) {
73 mySaveButton = new FXButton(headerFrame, "", GUIIconSubSys::getIcon(GUIIcon::SAVE), this, MID_GROUPBOXMODULE_SAVE, GUIDesignButtonMFXGroupBoxModule);
74 }
75 if (myOptions & Options::LOAD) {
76 myLoadButton = new FXButton(headerFrame, "", GUIIconSubSys::getIcon(GUIIcon::OPEN_NET), this, MID_GROUPBOXMODULE_LOAD, GUIDesignButtonMFXGroupBoxModule);
77 }
78 myLabel = new FXLabel(headerFrame, text.c_str(), nullptr, GUIDesignLabelMFXGroupBoxModule);
79 // build collapsable frame
80 myCollapsableFrame = new FXVerticalFrame(this, GUIDesignCollapsableFrame);
81}
82
83
84MFXGroupBoxModule::MFXGroupBoxModule(FXVerticalFrame* contentFrame, const std::string& text, const int options) :
85 FXVerticalFrame(contentFrame, GUIDesignGroupBoxModuleExtendY),
86 myOptions(options),
87 myCollapsed(false) {
88 // build button and labels
89 FXHorizontalFrame* headerFrame = new FXHorizontalFrame(this, GUIDesignAuxiliarHorizontalFrame);
90 if (myOptions & Options::COLLAPSIBLE) {
92 }
93 if (myOptions & Options::EXTENSIBLE) {
94 throw ProcessError("This MFXGroupBoxModule doesn't support Extensible flag");
95 }
96 if (myOptions & Options::SAVE) {
98 }
99 if (myOptions & Options::LOAD) {
101 }
102 myLabel = new FXLabel(headerFrame, text.c_str(), nullptr, GUIDesignLabelMFXGroupBoxModule);
103 // build collapsable frame
104 myCollapsableFrame = new FXVerticalFrame(this, GUIDesignCollapsableFrame);
105}
106
107
109
110
111void
112MFXGroupBoxModule::setText(const std::string& text) {
113 myLabel->setText(text.c_str());
114}
115
116
117FXVerticalFrame*
119 return myCollapsableFrame;
120}
121
122
123long
124MFXGroupBoxModule::onPaint(FXObject*, FXSelector, void* ptr) {
125 FXEvent* event = (FXEvent*)ptr;
126 FXDCWindow dc(this, event);
127 // Paint background
128 dc.setForeground(backColor);
129 dc.fillRectangle(event->rect.x, event->rect.y, event->rect.w, event->rect.h);
130 // draw groove rectangle
131 drawGrooveRectangle(dc, 0, 15, width, height - 15);
132 return 1;
133}
134
135
136long
137MFXGroupBoxModule::onCmdCollapseButton(FXObject*, FXSelector, void*) {
138 if (myCollapsed) {
139 myCollapsed = false;
141 myCollapsableFrame->show();
142 } else {
143 myCollapsed = true;
145 myCollapsableFrame->hide();
146 }
147 recalc();
148 return 1;
149}
150
151
152long
153MFXGroupBoxModule::onCmdExtendButton(FXObject*, FXSelector, void*) {
154 if (myFrameParent) {
155 int maximumWidth = -1;
156 // iterate over all collapsableFrame childrens
157 for (auto child = myCollapsableFrame->getFirst(); child != nullptr; child = child->getNext()) {
158 // currently only for GNETLSTables
159 const auto TLSTable = dynamic_cast<GNETLSTable*>(child);
160 if (TLSTable) {
161 // get scrollbar width
162 const int scrollBarWidth = TLSTable->getTLSPhasesParent()->getTLSEditorParent()->getScrollBarWidth();
163 if ((TLSTable->getWidth() + scrollBarWidth) > maximumWidth) {
164 maximumWidth = (TLSTable->getWidth() + scrollBarWidth);
165 }
166 }
167 }
168 // set frame ara width
169 if (maximumWidth != -1) {
170 // add extra padding (30, constant, 15 left, 15 right)
172 }
173 }
174 return 1;
175}
176
177
178long
179MFXGroupBoxModule::onCmdResetButton(FXObject*, FXSelector, void*) {
180 if (myFrameParent) {
182 }
183 return 1;
184}
185
186
187long
188MFXGroupBoxModule::onUpdResetButton(FXObject* sender, FXSelector, void*) {
189 if (myFrameParent) {
191 sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
192 } else {
193 sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
194 }
195 }
196 return 1;
197}
198
199
200long
201MFXGroupBoxModule::onCmdSaveButton(FXObject*, FXSelector, void*) {
202 return saveContents();
203}
204
205
206long
207MFXGroupBoxModule::onCmdLoadButton(FXObject*, FXSelector, void*) {
208 return loadContents();
209}
210
211
213 myOptions(Options::NOTHING),
214 myCollapsed(false) {
215}
216
217
218bool
220 // nothing to do
221 return false;
222}
223
224
225bool
227 // nothing to do
228 return false;
229}
230
231
232void
234 if (mySaveButton) {
235 if (value) {
236 mySaveButton->enable();
237 } else {
238 mySaveButton->disable();
239 }
240 }
241}
@ MID_GROUPBOXMODULE_LOAD
load contents
Definition: GUIAppEnum.h:674
@ MID_GROUPBOXMODULE_SAVE
save contents
Definition: GUIAppEnum.h:672
@ MID_GROUPBOXMODULE_RESETWIDTH
reset widh groupBoxModule
Definition: GUIAppEnum.h:670
@ MID_GROUPBOXMODULE_COLLAPSE
Definition: GUIAppEnum.h:666
@ MID_GROUPBOXMODULE_EXTEND
extends groupBoxModule
Definition: GUIAppEnum.h:668
#define GUIDesignLabelMFXGroupBoxModule
label used in MFXGroupBoxModule
Definition: GUIDesigns.h:289
#define GUIDesignAuxiliarHorizontalFrame
design for auxiliar (Without borders) horizontal frame used to pack another frames
Definition: GUIDesigns.h:397
#define GUIDesignButtonMFXGroupBoxModule
button used in GroupBoxModule
Definition: GUIDesigns.h:98
#define GUIDesignGroupBoxModuleExtendY
Horizontal frame extended over XY-frame parent used in MFXGroupBoxModule.
Definition: GUIDesigns.h:332
#define GUIDesignCollapsableFrame
design for CollapsableFrame (Used in MFXGroupBoxModule)
Definition: GUIDesigns.h:409
#define GUIDesignGroupBoxModule
Definition: GUIDesigns.h:329
FXDEFMAP(MFXGroupBoxModule) MFXGroupBoxModuleMap[]
int getScrollBarWidth() const
get scrollBar width (zero if is hidden)
Definition: GNEFrame.cpp:174
GNEViewNet * getViewNet() const
get view net
Definition: GNEFrame.cpp:150
GNETLSEditorFrame * getTLSEditorParent() const
get TLSEditor Parent
GNETLSEditorFrame::TLSPhases * getTLSPhasesParent() const
@frame get pointer to TLSEditorFrame phases parent
GNEViewParent * getViewParent() const
get the net object
void setFrameAreaWidth(const int frameAreaWith)
set frame area width
int getFrameAreaWidth() const
get frame area width
static FXIcon * getIcon(const GUIIcon which)
returns a icon previously defined in the enum GUIIcon
MFXGroupBoxModule (based on FXGroupBox)
long onCmdSaveButton(FXObject *, FXSelector, void *)
save contents
FXVerticalFrame * getCollapsableFrame()
get collapsable frame (used by all elements that will be collapsed if button is toggled)
long onCmdExtendButton(FXObject *, FXSelector, void *)
extends GroupBoxModule
MFXGroupBoxModule()
FOX need this.
long onCmdLoadButton(FXObject *, FXSelector, void *)
load contents
void setText(const std::string &text)
set text
long onPaint(FXObject *, FXSelector, void *)
draw MFXGroupBoxModule
FXButton * mySaveButton
button for save elements
long onCmdResetButton(FXObject *, FXSelector, void *)
reset GroupBoxModule
Options
GroupBoxModule options.
bool myCollapsed
flag to check if this groupbox is collapsed
long onCmdCollapseButton(FXObject *, FXSelector, void *)
collapse GroupBoxModule
long onUpdResetButton(FXObject *, FXSelector, void *)
update reset GroupBoxModule
FXLabel * myLabel
label used in non collapsable MFXGroupBoxModule
FXButton * myLoadButton
button for load elements
void toggleSaveButton(const bool value)
enable or disable save buttons
virtual bool loadContents() const
load contents (can be reimplemented in children)
~MFXGroupBoxModule()
destructor
GNEFrame * myFrameParent
GNEFrame in which this GroupBox is placed.
FXVerticalFrame * myCollapsableFrame
vertical collapsable frame
FXButton * myCollapseButton
button for collapse elements
const int myOptions
GroupBoxModule options.
virtual bool saveContents() const
save contents (can be reimplemented in children)
Definition: json.hpp:4471