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