wxMathPlot - Plot Library for wxWidgets Applications
MathPlotConfig.h
1/***************************************************************
2 * Name: MathPlotConfig.h (included from mathplot.h when MP_ENABLE_CONFIG defined)
3 * Purpose: Defines Application Frame
4 * Author: Lionel ()
5 * Created: 2021-01-24
6 * Last edit: 2026-07-01
7 * Copyright: Lionel ()
8 * License:
9 **************************************************************/
10
11#ifndef MATHPLOTCONFIG_H_INCLUDED
12#define MATHPLOTCONFIG_H_INCLUDED
13
14//(*Headers(MathPlotConfigDialog)
15#include <wx/button.h>
16#include <wx/checkbox.h>
17#include <wx/choice.h>
18#include <wx/dialog.h>
19#include <wx/notebook.h>
20#include <wx/panel.h>
21#include <wx/radiobut.h>
22#include <wx/sizer.h>
23#include <wx/spinctrl.h>
24#include <wx/statbox.h>
25#include <wx/stattext.h>
26#include <wx/textctrl.h>
27//*)
28
29#include <wx/colordlg.h>
30#include <wx/fontdlg.h>
31#include <wx/valnum.h>
32#include <wx/fileconf.h>
33
34#if defined(MP_ENABLE_NAMESPACE) || defined(ENABLE_MP_NAMESPACE)
35 namespace MathPlot {
36#endif // MP_ENABLE_NAMESPACE
37
46
50class MathPlotConfigSettings : public wxFileConfig
51{
52 public:
57 MathPlotConfigSettings(const wxString& localFilename) :
58 wxFileConfig(wxEmptyString, wxEmptyString, localFilename) {}
59 virtual ~MathPlotConfigSettings() {}
60
65 void SetSettings(wxWindow* win);
66
71 void GetSettings(wxWindow* win);
72
73 protected:
79 void DoPosition(bool set, wxWindow *win);
80
88 void DoRecursiveSearch(bool set, wxWindow *win, const wxString &path = wxEmptyString, int level = 0);
89};
90
95class wxMultiTextCtrlDialog: public wxDialog
96{
97 public:
108 wxMultiTextCtrlDialog(wxWindow* parent, const wxString& title,
109 const wxString& message, long size, const wxString prompt[], double *values,
110 const wxPoint& pos = wxDefaultPosition)
111 {
112 Create(parent, title, message, size, prompt, values, pos);
113 }
114
119 bool Create(wxWindow* parent, const wxString& title,
120 const wxString& message, long size, const wxString prompt[], double *values,
121 const wxPoint& pos = wxDefaultPosition);
122
123 protected:
124 void OnOK(wxCommandEvent& event);
125 void OnCancel(wxCommandEvent& event);
126
127 private:
128 std::vector<wxTextCtrl *> m_ctrls;
129 wxDECLARE_EVENT_TABLE();
130};
131
132
136typedef enum __ConfigPageIndex
137{
138 mpcpiNone = -1,
139 mpcpiGeneral = 0,
140 mpcpiLegend,
141 mpcpiAxis,
142 mpcpiSeries,
143 mpcpiLines
144} mpConfigPageId;
145
155class MathPlotConfigDialog: public wxDialog
156{
157 public:
158
164 MathPlotConfigDialog(wxWindow *parent, wxWindowID id = -1);
165 virtual ~MathPlotConfigDialog();
166
171 void Initialize(mpConfigPageId id = mpcpiNone);
172
177 void SelectChoiceSerie(unsigned int serie);
178
185 void CreateSettingsFile(const wxString& filename, const wxString& path = wxEmptyString, bool apply = false);
186
190 void ApplySettings(void);
191
196 {
197 return m_settings;
198 }
199
200 private:
201
202 mpWindow* m_plot;
203 MathPlotConfigSettings* m_settings;
204 wxButton* colourButton;
205 mpText* CurrentTitle;
206 mpInfoLegend* CurrentLegend;
207 mpInfoCoords* CurrentCoords;
208 mpScale* CurrentScale;
209 mpFunction* CurrentSerie;
210 mpLine* CurrentLine;
211 wxChoice* CurrentChoice;
212 bool fontTitleChanged;
213 bool fontLegendChanged;
214 bool fontAxisChanged;
215 // Margin validator
216 unsigned int int_top, int_bottom, int_left, int_right, int_extra;
217 int scale_offset;
218 // Scale validator
219 double scale_min, scale_max;
220 // Line position validator
221 double line_value;
222 bool CheckBar;
223 bool SerieVisibleChange;
224
225 //(*Handlers(MathPlotConfigDialog)
226 void OnQuit(wxCommandEvent& event);
227 void OnnbConfigPageChanged(wxNotebookEvent& event);
228 void OnbColorClick(wxCommandEvent& event);
229 void OnChoiceSeries(wxCommandEvent& event);
230 void OnAxisSelect(wxCommandEvent& event);
231 void OncbFormatSelect(wxCommandEvent& event);
232 void OncbAutoScaleClick(wxCommandEvent& event);
233 void OnbApplyClick(wxCommandEvent& event);
234 void OnbFontClick(wxCommandEvent& event);
235 void OnbDelSeriesClick(wxCommandEvent& event);
236 void OnbAddAxisClick(wxCommandEvent& event);
237 void OnChoiceLinesSelect(wxCommandEvent& event);
238 void OnbAddLinesClick(wxCommandEvent& event);
239 void OnbDelLinesClick(wxCommandEvent& event);
240 void OnbDelAxisClick(wxCommandEvent& event);
241 void OncbSeriesShowNameClick(wxCommandEvent& event);
242 void OnbApplyAndFitClick(wxCommandEvent& event);
243 void OncbAutoStepClick(wxCommandEvent& event);
244 //*)
245
246 //(*Identifiers(MathPlotConfigDialog)
247 //*)
248
249 //(*Declarations(MathPlotConfigDialog)
250 wxBoxSizer* sizerAxis;
251 wxBoxSizer* sizerLines;
252 wxBoxSizer* sizerMain;
253 wxButton* bAddLines;
254 wxButton* bAddXAxis;
255 wxButton* bAddYAxis;
256 wxButton* bApply;
257 wxButton* bApplyAndFit;
258 wxButton* bAxisPenColor;
259 wxButton* bBGColor;
260 wxButton* bClose;
261 wxButton* bCoordBrushColor;
262 wxButton* bDelAxis;
263 wxButton* bDelLines;
264 wxButton* bDelSeries;
265 wxButton* bFontAxis;
266 wxButton* bFontLegend;
267 wxButton* bFontTitle;
268 wxButton* bGridPenColor;
269 wxButton* bLegendBrushColor;
270 wxButton* bLinesPenColor;
271 wxButton* bSeriesBrushColor;
272 wxButton* bSeriesPenColor;
273 wxCheckBox* cbAutoScale;
274 wxCheckBox* cbAutoStep;
275 wxCheckBox* cbAxisOutside;
276 wxCheckBox* cbAxisVisible;
277 wxCheckBox* cbBar;
278 wxCheckBox* cbCoordDefaultVisibility;
279 wxCheckBox* cbCoordOutside;
280 wxCheckBox* cbCoordVisible;
281 wxCheckBox* cbCoordinates;
282 wxCheckBox* cbDrawBox;
283 wxCheckBox* cbGridVisible;
284 wxCheckBox* cbLegendDefaultVisibility;
285 wxCheckBox* cbLegendVisible;
286 wxCheckBox* cbLinesOutside;
287 wxCheckBox* cbLinesShowName;
288 wxCheckBox* cbLinesVisible;
289 wxCheckBox* cbLogAxis;
290 wxCheckBox* cbMagnetize;
291 wxCheckBox* cbMouseCoordVisible;
292 wxCheckBox* cbSeriesContinuity;
293 wxCheckBox* cbSeriesLegend;
294 wxCheckBox* cbSeriesOutside;
295 wxCheckBox* cbSeriesShowName;
296 wxCheckBox* cbSeriesVisible;
297 wxCheckBox* cbShowSeriesValues;
298 wxCheckBox* cbTitleVisible;
299 wxCheckBox* cbTractable;
300 wxChoice* ChoiceAxis;
301 wxChoice* ChoiceLeftMouseAction;
302 wxChoice* ChoiceLines;
303 wxChoice* ChoiceLinesYAxis;
304 wxChoice* ChoiceSeries;
305 wxChoice* ChoiceSeriesYAxis;
306 wxChoice* cbAxisPenStyle;
307 wxChoice* cbAxisPenWidth;
308 wxChoice* cbAxisPosition;
309 wxChoice* cbCoord;
310 wxChoice* cbCoordBrushStyle;
311 wxChoice* cbFormat;
312 wxChoice* cbGridPenStyle;
313 wxChoice* cbGridPenWidth;
314 wxChoice* cbLegendBrushStyle;
315 wxChoice* cbLegendDirection;
316 wxChoice* cbLegendPosition;
317 wxChoice* cbLegendStyle;
318 wxChoice* cbLinesPenStyle;
319 wxChoice* cbLinesPenWidth;
320 wxChoice* cbSeriesBrushStyle;
321 wxChoice* cbSeriesNamePosition;
322 wxChoice* cbSeriesPenStyle;
323 wxChoice* cbSeriesPenWidth;
324 wxChoice* cbSeriesSymbolType;
325 wxFlexGridSizer* sizerSeriesStep;
326 wxNotebook* nbConfig;
327 wxNotebook* nbPenAxisGrid;
328 wxPanel* Panel1;
329 wxPanel* Panel2;
330 wxPanel* Panel3;
331 wxPanel* Panel4;
332 wxPanel* Panel5;
333 wxPanel* Panel6;
334 wxPanel* Panel7;
335 wxPanel* pLines;
336 wxRadioButton* rbLinesDirection;
337 wxSpinCtrl* cbSeriesSymbolSize;
338 wxSpinCtrl* spinSeriesStep;
339 wxStaticText* StaticText10;
340 wxStaticText* StaticText11;
341 wxStaticText* StaticText12;
342 wxStaticText* StaticText13;
343 wxStaticText* StaticText14;
344 wxStaticText* StaticText15;
345 wxStaticText* StaticText16;
346 wxStaticText* StaticText17;
347 wxStaticText* StaticText18;
348 wxStaticText* StaticText1;
349 wxStaticText* StaticText20;
350 wxStaticText* StaticText21;
351 wxStaticText* StaticText22;
352 wxStaticText* StaticText23;
353 wxStaticText* StaticText24;
354 wxStaticText* StaticText25;
355 wxStaticText* StaticText26;
356 wxStaticText* StaticText27;
357 wxStaticText* StaticText28;
358 wxStaticText* StaticText29;
359 wxStaticText* StaticText2;
360 wxStaticText* StaticText30;
361 wxStaticText* StaticText31;
362 wxStaticText* StaticText32;
363 wxStaticText* StaticText33;
364 wxStaticText* StaticText34;
365 wxStaticText* StaticText35;
366 wxStaticText* StaticText36;
367 wxStaticText* StaticText37;
368 wxStaticText* StaticText38;
369 wxStaticText* StaticText39;
370 wxStaticText* StaticText3;
371 wxStaticText* StaticText40;
372 wxStaticText* StaticText41;
373 wxStaticText* StaticText42;
374 wxStaticText* StaticText43;
375 wxStaticText* StaticText44;
376 wxStaticText* StaticText4;
377 wxStaticText* StaticText5;
378 wxStaticText* StaticText6;
379 wxStaticText* StaticText7;
380 wxStaticText* StaticText8;
381 wxStaticText* StaticText9;
382 wxStaticText* stLinesYIndexLabel;
383 wxStaticText* stStepChoice;
384 wxTextCtrl* edAxisName;
385 wxTextCtrl* edExtraMargin;
386 wxTextCtrl* edFormat;
387 wxTextCtrl* edLinesName;
388 wxTextCtrl* edLinesValue;
389 wxTextCtrl* edMarginBottom;
390 wxTextCtrl* edMarginLeft;
391 wxTextCtrl* edMarginRight;
392 wxTextCtrl* edMarginTop;
393 wxTextCtrl* edScaleMax;
394 wxTextCtrl* edScaleMin;
395 wxTextCtrl* edSeriesName;
396 wxTextCtrl* edTitle;
397 //*)
398
399 void Apply(int pageIndex, bool updateFont = false);
400 void UpdateSelectedSerie(void);
401 void UpdateSelectedLine(void);
402 void UpdateAxis(void);
403 void FillYAxisList(wxChoice* yChoice, bool clearChoice = true);
404 void UpdateSeriesStep(void);
405
406 void DoButtonColour(wxButton* button, const wxColour& colour);
407 void DoApplyColour(const wxColour& colour);
408 void UpdateFont(mpLayer* layer, wxButton* button, bool get_set);
409 void SetFontChildren(wxButton* p, const wxFontData& fontdata);
410
411 wxBrushStyle IdToBrushStyle(int id);
412 int BrushStyleToId(wxBrushStyle style);
413
414 DECLARE_EVENT_TABLE()
415};
416
417#if defined(MP_ENABLE_NAMESPACE) || defined(ENABLE_MP_NAMESPACE)
418 } // namespace MathPlot
419#endif // MP_ENABLE_NAMESPACE
420
421#endif // MATHPLOTCONFIG_H_INCLUDED
Dialog box for configuring the plot's layer objects In this dialog, you can configure:
Definition MathPlotConfig.h:156
MathPlotConfigDialog(wxWindow *parent, wxWindowID id=-1)
Create a dialog window to configure the plot's layer objects.
void Initialize(mpConfigPageId id=mpcpiNone)
Initialize the dialog box by retrieving the layer properties.
void ApplySettings(void)
Apply the settings loaded in the configuration file.
void CreateSettingsFile(const wxString &filename, const wxString &path=wxEmptyString, bool apply=false)
Create a file to store the properties of mpTitle, mpInfoCoords and mpInfoLegend layers.
MathPlotConfigSettings * GetSettingsHandle(void)
Give access to m_settings if we want to save some others parameters.
Definition MathPlotConfig.h:195
void SelectChoiceSerie(unsigned int serie)
Select the series by number.
Helper class to save/restore configuration.
Definition MathPlotConfig.h:51
void DoRecursiveSearch(bool set, wxWindow *win, const wxString &path=wxEmptyString, int level=0)
Search recursively all the widgets then get/set parameters.
MathPlotConfigSettings(const wxString &localFilename)
Manages the backup of configuration window data.
Definition MathPlotConfig.h:57
void GetSettings(wxWindow *win)
Get the settings from the plot window.
void DoPosition(bool set, wxWindow *win)
Get/set the position of the config window in the screen.
void SetSettings(wxWindow *win)
Set the settings to the plot window.
Plot layer implementing an abstract function plot class.
Definition mathplot.h:1683
Implements an overlay box which shows the mouse coordinates in plot units.
Definition mathplot.h:1340
Implement the legend to be added to the plot This layer allows you to add a legend to describe the pl...
Definition mathplot.h:1462
Plot layer, abstract base class.
Definition mathplot.h:837
Abstract class providing a line.
Definition mathplot.h:1840
Plot layer implementing an abstract scale ruler.
Definition mathplot.h:2781
Plot layer implementing a text string.
Definition mathplot.h:4785
Canvas for plotting mpLayer implementations.
Definition mathplot.h:3406
wxMultiTextCtrlDialog class A simple text control dialog window that support several text control
Definition MathPlotConfig.h:96
void OnCancel(wxCommandEvent &event)
Cancel handler.
void OnOK(wxCommandEvent &event)
Ok handler. Data are transfered to values array.
wxMultiTextCtrlDialog(wxWindow *parent, const wxString &title, const wxString &message, long size, const wxString prompt[], double *values, const wxPoint &pos=wxDefaultPosition)
Constructor.
Definition MathPlotConfig.h:108
bool Create(wxWindow *parent, const wxString &title, const wxString &message, long size, const wxString prompt[], double *values, const wxPoint &pos=wxDefaultPosition)
Create the dialog window.
#define WXDLLIMPEXP_MATHPLOT
Definition uses windows dll to export function.
Definition mathplot.h:90