Line data Source code
1 : /****************************************************************************/
2 : // Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.dev/sumo
3 : // Copyright (C) 2001-2024 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 : /****************************************************************************/
14 : /// @file GUIParameterTracker.h
15 : /// @author Daniel Krajzewicz
16 : /// @author Jakob Erdmann
17 : /// @author Michael Behrisch
18 : /// @date Sept 2002
19 : ///
20 : // A window which displays the time line of one (or more) value(s)
21 : /****************************************************************************/
22 : #pragma once
23 : #include <config.h>
24 :
25 : #include <vector>
26 : #include <utils/foxtools/MFXComboBoxIcon.h>
27 : // fx3d includes windows.h so we need to guard against macro pollution
28 : #ifdef WIN32
29 : #define NOMINMAX
30 : #endif
31 : #include <fx3d.h>
32 : #ifdef WIN32
33 : #undef NOMINMAX
34 : #endif
35 : #include <utils/gui/globjects/GUIGlObject.h>
36 : #include <utils/gui/div/GLObjectValuePassConnector.h>
37 : #include "TrackerValueDesc.h"
38 :
39 :
40 : // ===========================================================================
41 : // class definitions
42 : // ===========================================================================
43 : /** @class GUIParameterTracker
44 : * @brief A window which displays the time line of one (or more) value(s)
45 : */
46 : class GUIParameterTracker : public FXMainWindow {
47 0 : FXDECLARE(GUIParameterTracker)
48 : public:
49 : /// @brief callback-enumerations
50 : enum {
51 : /// @brief Change aggregation interval
52 : MID_AGGREGATIONINTERVAL = FXMainWindow::ID_LAST,
53 : /// @brief Save the current values
54 : MID_SAVE,
55 : /// @brief toggle multiplot
56 : MID_MULTIPLOT,
57 : /// @brief end-of-enum
58 : ID_LAST
59 : };
60 :
61 :
62 : /** @brief Constructor (the tracker is empty)
63 : * @param[in] app The main application window
64 : * @param[in] name The title of the tracker
65 : */
66 : GUIParameterTracker(GUIMainWindow& app, const std::string& name);
67 :
68 :
69 : /// @brief Destructor
70 : ~GUIParameterTracker();
71 :
72 :
73 : /// @brief Creates the window
74 : void create();
75 :
76 :
77 : /** @brief Adds a further time line to display
78 : * @param[in] o The object to get values from
79 : * @param[in] src The value source of the object
80 : * @param[in] newTracked The description of the tracked value
81 : */
82 : void addTracked(GUIGlObject& o, ValueSource<double>* src,
83 : TrackerValueDesc* newTracked);
84 :
85 :
86 : /// @name FOX-callbacks
87 : /// @{
88 :
89 : /// @brief Called on window resizing
90 : long onConfigure(FXObject*, FXSelector, void*);
91 :
92 : /// @brief Called if the window shall be repainted
93 : long onPaint(FXObject*, FXSelector, void*);
94 :
95 : /// @brief Called on a simulation step
96 : long onSimStep(FXObject*, FXSelector, void*);
97 :
98 : /// @brief Called on a simulation step
99 : long onMultiPlot(FXObject*, FXSelector, void*);
100 :
101 : /// @brief Called when the aggregation interval (combo) has been changed
102 : long onCmdChangeAggregation(FXObject*, FXSelector, void*);
103 :
104 : /// @brief Called when the data shall be saved
105 : long onCmdSave(FXObject*, FXSelector, void*);
106 : /// @}
107 :
108 :
109 : /// @brief all value source to multiplot trackers
110 : static bool addTrackedMultiplot(GUIGlObject& o, ValueSource<double>* src, TrackerValueDesc* newTracked);
111 :
112 : public:
113 : /**
114 : * @class GUIParameterTrackerPanel
115 : * This panel lies within the GUIParameterTracker being the main widget.
116 : * It is the widget responsible for displaying the information while
117 : * GUIParameterTracker only provides window-facilities.
118 : */
119 : class GUIParameterTrackerPanel : public FXGLCanvas {
120 0 : FXDECLARE(GUIParameterTrackerPanel)
121 : public:
122 : /** @brief Constructor
123 : * @param[in] c The parent composite
124 : * @param[in] app The main window
125 : * @param[in] parent The parent tracker window this view belongs to
126 : */
127 : GUIParameterTrackerPanel(FXComposite* c, GUIMainWindow& app,
128 : GUIParameterTracker& parent);
129 :
130 : /// @brief Destructor
131 : ~GUIParameterTrackerPanel();
132 :
133 : /// @brief needed to update
134 : friend class GUIParameterTracker;
135 :
136 :
137 : /// @name FOX-callbacks
138 : /// @{
139 :
140 : /// Called on window resizing
141 : long onConfigure(FXObject*, FXSelector, void*);
142 :
143 : /// Called if the window shall be repainted
144 : long onPaint(FXObject*, FXSelector, void*);
145 :
146 : /// @brief called on mouse movement (for updating moused value)
147 : long onMouseMove(FXObject*, FXSelector, void*);
148 :
149 : /// @}
150 :
151 :
152 : private:
153 : /** @brief Draws all values
154 : */
155 : void drawValues();
156 :
157 : /** @brief Draws a single value
158 : * @param[in] desc The tracked values to draw
159 : * @param[in] index Mulitplot index
160 : */
161 : void drawValue(TrackerValueDesc& desc, const RGBColor& col, int index);
162 :
163 : private:
164 : /// @brief The parent window
165 : GUIParameterTracker* myParent;
166 :
167 : /// @brief the sizes of the window
168 : int myWidthInPixels, myHeightInPixels;
169 :
170 : /// @brief latest mouse position
171 : double myMouseX;
172 :
173 : protected:
174 0 : FOX_CONSTRUCTOR(GUIParameterTrackerPanel)
175 : };
176 :
177 : public:
178 : /// @brief the panel may change some things
179 : friend class GUIParameterTrackerPanel;
180 :
181 : private:
182 : /// @brief Builds the tool bar
183 : void buildToolBar();
184 :
185 : protected:
186 : /// @brief The main application
187 : GUIMainWindow* myApplication;
188 :
189 : /// @brief The list of tracked values
190 : std::vector<TrackerValueDesc*> myTracked;
191 :
192 : /// @brief The panel to display the values in
193 : GUIParameterTrackerPanel* myPanel;
194 :
195 : /// @brief The value sources
196 : std::vector<GLObjectValuePassConnector<double>*> myValuePassers;
197 :
198 : /// @brief for some menu detaching fun
199 : FXToolBarShell* myToolBarDrag;
200 :
201 : /// @brief A combo box to select an aggregation interval
202 : MFXComboBoxIcon* myAggregationInterval;
203 :
204 : /// @brief The simulation delay
205 : FXdouble myAggregationDelay;
206 :
207 : /// @brief The tracker tool bar
208 : FXToolBar* myToolBar;
209 :
210 : /// @brief Whether phase names shall be printed instead of indices
211 : FXCheckButton* myMultiPlot;
212 :
213 : /// @brief all trackers that are opened for plotting multiple values
214 : static std::set<GUIParameterTracker*> myMultiPlots;
215 : static std::vector<RGBColor> myColors;
216 :
217 : protected:
218 0 : FOX_CONSTRUCTOR(GUIParameterTracker)
219 :
220 : };
|