wxMaxima
wxMaximaFrame.h
Go to the documentation of this file.
1 // -*- mode: c++; c-file-style: "linux"; c-basic-offset: 2; indent-tabs-mode: nil -*-
2 //
3 // Copyright (C) 2004-2015 Andrej Vodopivec <andrej.vodopivec@gmail.com>
4 // (C) 2012 Doug Ilijev <doug.ilijev@gmail.com>
5 // (C) 2014-2015 Gunter Königsmann <wxMaxima@physikbuch.de>
6 //
7 // This program is free software; you can redistribute it and/or modify
8 // it under the terms of the GNU General Public License as published by
9 // the Free Software Foundation; either version 2 of the License, or
10 // (at your option) any later version.
11 //
12 // This program is distributed in the hope that it will be useful,
13 // but WITHOUT ANY WARRANTY; without even the implied warranty of
14 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 // GNU General Public License for more details.
16 //
17 //
18 // You should have received a copy of the GNU General Public License
19 // along with this program; if not, write to the Free Software
20 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
21 //
22 // SPDX-License-Identifier: GPL-2.0+
23 
30 #ifndef WXMAXIMAFRAME_H
31 #define WXMAXIMAFRAME_H
32 
33 #include "precomp.h"
34 #include <array>
35 #include <wx/wx.h>
36 #include "EventIDs.h"
37 #include <wx/dirctrl.h>
38 #include <wx/filehistory.h>
39 #include <wx/listbox.h>
40 #include <wx/bmpbuttn.h>
41 #include <wx/arrstr.h>
42 #include <wx/aui/aui.h>
43 #include <wx/notifmsg.h>
44 #include <wx/wrapsizer.h>
46 #include "sidebars/DrawSidebar.h"
47 
48 #include "wizards/ScrollingGenWizPanel.h"
49 #include "Worksheet.h"
51 #include "sidebars/HelpBrowser.h"
52 #include "RecentDocuments.h"
53 #include "Version.h"
54 #include "MainMenuBar.h"
55 #include "sidebars/History.h"
56 #include "sidebars/XmlInspector.h"
57 #include "StatusBar.h"
58 #include "sidebars/LogPane.h"
60 #include <list>
61 
62 
65 class wxMaximaFrame : public wxFrame
66 {
67 public:
68  wxMaximaFrame(wxWindow *parent, int id, const wxString &title,
69  const wxPoint &pos = wxDefaultPosition,
70  const wxSize &size = wxDefaultSize,
71  long style = wxDEFAULT_FRAME_STYLE | wxSYSTEM_MENU | wxCAPTION);
72 
75  virtual ~wxMaximaFrame();
76 
82  void ShowToolBar(bool show);
83  static std::size_t CountWindows();
84 
90  void UpdateRecentDocuments();
91 
93  void PopulateRecentDocumentsMenu(wxMenu *menu, int firstEntry, const std::list<wxString> &items);
95  void PopulateRecentPackagesMenu(wxMenu *menu, int firstEntry, const std::list<wxString> &items);
96 
102  bool IsPaneDisplayed(int id);
103 
111  void ShowPane(int id, bool show = true);
112  void TogglePaneVisibility(int id);
113 
115  void AddToHistory(const wxString &cmd)
116  { m_history->AddToHistory(cmd); }
117 
121  void EvaluationQueueLength(int length, int numberOfCommands = -1);
122 
129  void StatusMaximaBusy(StatusBar::MaximaStatus status){m_StatusMaximaBusy_next = status;}
130  void UpdateStatusMaximaBusy();
131 
132  StatusBar::MaximaStatus m_StatusMaximaBusy = StatusBar::wait_for_start;
133  StatusBar::MaximaStatus m_StatusMaximaBusy_next = StatusBar::wait_for_start;
134 
136  void StatusSaveStart();
137 
139  void StatusSaveFinished();
140 
142  void StatusSaveFailed();
143 
145  void StatusExportStart();
146 
148  void StatusExportFinished();
149 
151  void StatusExportFailed();
152 
153 protected:
158  Configuration m_configuration;
160  std::size_t m_bytesFromMaxima = 0;
162  long m_pid = -1;
164  wxString m_tempfileName;
166  void OnNotificationClose(wxCommandEvent WXUNUSED(&event));
172  wxMenu *m_demo_sub = NULL;
174  std::vector<wxMenu *> m_demoSubs;
176  wxMenu *m_viewMenu = NULL;
178  wxMenu *m_gentranMenu = NULL;
180  wxMenu *m_subst_Sub = NULL;
182  wxMenu * m_logexpand_Sub = NULL;
184  wxMenu *m_FileMenu = NULL;
186  wxMenu *m_EditMenu = NULL;
188  wxMenu *m_CellMenu = NULL;
190  wxMenu *m_Edit_Zoom_Sub = NULL;
192  wxMenu *m_Maxima_Panes_Sub = NULL;
194  wxMenu *m_EquationsMenu = NULL;
196  wxMenu *m_MaximaMenu = NULL;
198  wxMenu *m_matrix_menu = NULL;
200  wxMenu *m_SimplifyMenu = NULL;
202  wxMenu *m_Simplify_Gamma_Sub = NULL;
204  wxMenu *m_debugTypeMenu = NULL;
206  wxMenu *m_Simplify_Trig_Sub = NULL;
208  wxMenu *m_Simplify_Complex_Sub = NULL;
210  wxMenu *m_CalculusMenu = NULL;
211 
213  wxMenu *m_PlotMenu = NULL;
215  wxMenu *m_listMenu = NULL;
217  wxMenu *m_NumericMenu = NULL;
219  wxMenu *m_HelpMenu = NULL;
221  void RemoveTempAutosavefile();
223  void ReReadConfig();
225  void ReadConfig();
227  void RegisterAutoSaveFile();
233  void DockAllSidebars(wxCommandEvent &ev);
234 
235  wxString wxMaximaManualLocation();
236 public:
237 
242  void BecomeLogTarget();
243 
245  const std::unordered_map<int, wxString> &GetSidebarNames() const {return m_sidebarNames;}
246 protected:
247  Worksheet *GetWorksheet() const {return m_worksheet;}
248 private:
250  std::unordered_map<int, wxString> m_sidebarNames;
252  std::unordered_map<int, wxString> m_sidebarCaption;
254  std::size_t m_bytesFromMaxima_last = 0;
255  wxTimer m_bytesReadDisplayTimer;
257  bool m_StatusSaving = false;
258 
259  void SetupToolBar();
260 
264  void SetupMenu();
265  void SetupFileMenu();
266  void SetupEditMenu();
267  void SetupViewMenu();
268  void SetupCellMenu();
269  void SetupMaximaMenu();
270  void SetupEquationsMenu();
271  void SetupMatrixMenu();
272  void SetupCalculusMenu();
273  void SetupSimplifyMenu();
274  void SetupListMenu();
275  void SetupPlotMenu();
276  void SetupNumericMenu();
277  void SetupHelpMenu();
278 
279 public:
280  void StatusText(const wxString &text, bool saveInLog = true);
281 protected:
282  ScrollingGenWizPanel *m_wizard = NULL;
292  virtual wxSize DoGetBestClientSize() const;
295 #ifdef USE_WEBVIEW
296  HelpBrowser *m_helpPane = NULL;
297 #endif
298 
300  wxString GetDemoFile(wxWindowID id) const;
301 protected:
302  std::array<wxString,10> m_statusTextHistory;
303  void OnMenuStatusText(wxMenuEvent &event);
304  std::unordered_map<wxWindowID, wxString> m_demoFilesIDs;
305 
306  SymbolsSidebar *m_symbolsSidebar = NULL;
313 
315  bool m_first = true;
316 
317  bool ToolbarIsShown();
319  std::unique_ptr<wxAuiManager> m_manager;
320 private:
322 protected:
324  Worksheet * const m_worksheet = NULL;
326  History * const m_history = NULL;
333  RecentDocuments m_recentDocuments;
334  RecentDocuments m_recentPackages;
335  wxMenu *m_recentDocumentsMenu = NULL;
336  wxMenu *m_unsavedDocumentsMenu = NULL;
337  wxMenu *m_recentPackagesMenu = NULL;
338  wxMenu *m_autoSubscriptMenu = NULL;
339  wxMenu *m_equationTypeMenuMenu = NULL;
340  wxMenu *m_roundedMatrixParensMenu = NULL;
341 };
342 
343 #endif // WXMAXIMAFRAME_H
This file contains the definition of the class Buttonwrapsizer that allows to select arbitrary unicod...
This file declares the class StatSidebar, that provides some statistics buttons.
This file declares the class EventIDs that contains unique IDs for many events wxMaxima needs.
This file declares the class HelpBrowser.
This file contains the definition of the class History that handles the recently issued commands for ...
This file declares a (hopefully) flicker-free main menu bar.
The definition of the class RecentDocuments that provides a recent files mechanism that is extensible...
This file contains the definition of the class History that handles the recently issued commands for ...
This file declares the class wxMaximaFrame.
This file contains the definition of the class TableOfContents that handles the table of contents pan...
This file defines the class Worksheet.
This file contains the definition of the class XmlInspector that handles the table of contents pane.
The configuration storage for the current worksheet.
Definition: Configuration.h:95
The class for the sidebar with the draw commands.
Definition: DrawSidebar.h:39
Definition: HelpBrowser.h:48
This class generates a pane containing the last commands that were issued.
Definition: History.h:56
void AddToHistory(const wxString &cmd)
Add a file to the recently opened files list.
Definition: History.cpp:264
A "debug messages" sidepane.
Definition: LogPane.h:36
A menu bar that flickers less on MS windows.
Definition: MainMenuBar.h:37
A class that maintains a list of recent documents.
Definition: RecentDocuments.h:42
Definition: ScrollingGenWizPanel.h:32
The class that draws the status bar.
Definition: StatusBar.h:47
Definition: SymbolsSidebar.h:46
This class generates a pane containing the table of contents.
Definition: TableOfContents.h:52
A "variables" sidepane.
Definition: VariablesPane.h:44
The canvas that contains the spreadsheet the whole program is about.
Definition: Worksheet.h:95
This class generates a pane displaying the communication between maxima and wxMaxima.
Definition: XmlInspector.h:40
The frame containing the menu and the sidebars.
Definition: wxMaximaFrame.h:66
wxMenu * m_FileMenu
The file menu.
Definition: wxMaximaFrame.h:184
void UpdateRecentDocuments()
Update the recent documents list.
Definition: wxMaximaFrame.cpp:2102
void StatusSaveFailed()
Set the status to "Saving has failed".
Definition: wxMaximaFrame.cpp:582
void BecomeLogTarget()
Makes this window the debug log target of all windows from this maxima process.
Definition: wxMaximaFrame.cpp:2257
void RegisterAutoSaveFile()
Remember a temporary autosave file name.
Definition: wxMaximaFrame.cpp:2157
bool m_first
Do we expect the 1st prompt from maxima to appear?
Definition: wxMaximaFrame.h:315
virtual ~wxMaximaFrame()
The destructor.
Definition: wxMaximaFrame.cpp:594
wxMenu * m_EditMenu
The edit menu.
Definition: wxMaximaFrame.h:186
TableOfContents * m_tableOfContents
The table of contents pane.
Definition: wxMaximaFrame.h:157
void StatusSaveFinished()
Set the status to "Maxima has finished saving".
Definition: wxMaximaFrame.cpp:566
int m_commandsLeftInCurrentCell
The number of commands left in the current of the evaluation queue item.
Definition: wxMaximaFrame.h:312
void ReReadConfig()
Re-read the configuration.
Definition: wxMaximaFrame.cpp:2127
wxMenu * m_Simplify_Complex_Sub
The complex submenu.
Definition: wxMaximaFrame.h:208
wxString m_leftStatusText
The text for the Left half of the Status Bar.
Definition: wxMaximaFrame.h:290
void StatusExportStart()
Set the status to "Maxima is exporting".
Definition: wxMaximaFrame.cpp:570
virtual wxSize DoGetBestClientSize() const
The default size for the window.
Definition: wxMaximaFrame.cpp:469
wxMenu * m_PlotMenu
The plot menu.
Definition: wxMaximaFrame.h:213
wxMenu * m_Maxima_Panes_Sub
The panes submenu.
Definition: wxMaximaFrame.h:192
wxMenu * m_EquationsMenu
The equations menu.
Definition: wxMaximaFrame.h:194
bool m_updateEvaluationQueueLengthDisplay
Do we need to update the display showing the evaluation queue length?
Definition: wxMaximaFrame.h:310
wxMenu * m_gentranMenu
The gentran menu.
Definition: wxMaximaFrame.h:178
long m_drawDimensions_last
Are we inside a 2d or 3d draw command?
Definition: wxMaximaFrame.h:284
wxString m_tempfileName
The last name GetTempAutosavefileName() has returned.
Definition: wxMaximaFrame.h:164
wxString m_rightStatusText
The text for the Right half of the Status Bar.
Definition: wxMaximaFrame.h:288
wxMenu * m_Simplify_Trig_Sub
The trigonometric submenu.
Definition: wxMaximaFrame.h:206
void PopulateRecentPackagesMenu(wxMenu *menu, int firstEntry, const std::list< wxString > &items)
Used by UpdateRecentPackages for populating a menu.
Definition: wxMaximaFrame.cpp:2086
void ShowPane(int id, bool show=true)
Show or hide a sidebar.
Definition: wxMaximaFrame.cpp:2228
StatusBar * m_statusBar
The status bar.
Definition: wxMaximaFrame.h:168
XmlInspector * m_xmlInspector
A XmlInspector-like xml monitor.
Definition: wxMaximaFrame.h:328
void EvaluationQueueLength(int length, int numberOfCommands=-1)
Inform the user about the length of the evaluation queue.
Definition: wxMaximaFrame.cpp:479
bool m_forceStatusbarUpdate
true=force an update of the status bar at the next call of StatusMaximaBusy()
Definition: wxMaximaFrame.h:330
wxMenu * m_demo_sub
The "demo" sub-menu.
Definition: wxMaximaFrame.h:172
wxMenu * m_listMenu
The list menu.
Definition: wxMaximaFrame.h:215
wxMenu * m_debugTypeMenu
Contains the menu for the debugger trigger settingxc.
Definition: wxMaximaFrame.h:204
void PopulateRecentDocumentsMenu(wxMenu *menu, int firstEntry, const std::list< wxString > &items)
Used by UpdateRecentDocuments for populating a menu.
Definition: wxMaximaFrame.cpp:2063
MainMenuBar * m_MenuBar
The menu bar.
Definition: wxMaximaFrame.h:170
void OnNotificationClose(wxCommandEvent WXUNUSED(&event))
Issued if a notification is closed.
History *const m_history
The history pane.
Definition: wxMaximaFrame.h:326
wxMenu * m_Simplify_Gamma_Sub
The factorials and gamma submenu.
Definition: wxMaximaFrame.h:202
int m_EvaluationQueueLength
The current length of the evaluation queue of commands we still need to send to maxima.
Definition: wxMaximaFrame.h:308
void RemoveTempAutosavefile()
Remove an eventual temporary autosave file.
Definition: wxMaximaFrame.cpp:2167
wxMenu * m_CalculusMenu
The calculus menu.
Definition: wxMaximaFrame.h:210
void DockAllSidebars(wxCommandEvent &ev)
An instant single-window mode.
Definition: wxMaximaFrame.cpp:2200
void StatusSaveStart()
Set the status to "Maxima is saving".
Definition: wxMaximaFrame.cpp:561
wxMenu * m_viewMenu
The "view" menu.
Definition: wxMaximaFrame.h:176
void ReadConfig()
Read the configuration from the OS's configuration storage.
Definition: wxMaximaFrame.cpp:2122
wxMenu * m_SimplifyMenu
The simplify menu.
Definition: wxMaximaFrame.h:200
long m_pid
The process id of maxima. Is determined by ReadFirstPrompt.
Definition: wxMaximaFrame.h:162
void StatusExportFailed()
Set the status to "Exporting has failed".
Definition: wxMaximaFrame.cpp:588
std::size_t m_bytesFromMaxima
How many bytes did maxima send us until now?
Definition: wxMaximaFrame.h:160
wxMenu * m_matrix_menu
The matrix menu.
Definition: wxMaximaFrame.h:198
wxMenu * m_MaximaMenu
The maxima menu.
Definition: wxMaximaFrame.h:196
wxMenu * m_subst_Sub
The subst submenu.
Definition: wxMaximaFrame.h:180
void ShowToolBar(bool show)
Shows or hides the toolbar.
Definition: wxMaximaFrame.cpp:2252
void StatusMaximaBusy(StatusBar::MaximaStatus status)
Set the status according to if maxima is calculating.
Definition: wxMaximaFrame.h:129
bool IsPaneDisplayed(int id)
true, if a Pane is currently enabled
Definition: wxMaximaFrame.cpp:2180
const std::unordered_map< int, wxString > & GetSidebarNames() const
Get the list of human-readable sidebarnames and IDs.
Definition: wxMaximaFrame.h:245
wxMenu * m_HelpMenu
The help menu.
Definition: wxMaximaFrame.h:219
DrawSidebar * m_drawPane
The sidebar with the draw commands.
Definition: wxMaximaFrame.h:294
void StatusExportFinished()
Set the status to "Maxima has finished exporting".
Definition: wxMaximaFrame.cpp:576
wxMenu * m_Edit_Zoom_Sub
The zoom submenu.
Definition: wxMaximaFrame.h:190
LogPane * m_logPane
The panel the log and debug messages will appear on.
Definition: wxMaximaFrame.h:332
wxMenu * m_NumericMenu
The numeric menu.
Definition: wxMaximaFrame.h:217
wxMenu * m_CellMenu
The cell menu.
Definition: wxMaximaFrame.h:188
Variablespane * m_variablesPane
The panel the user can display variable contents in.
Definition: wxMaximaFrame.h:155
std::unique_ptr< wxAuiManager > m_manager
The manager for dynamic screen layouts.
Definition: wxMaximaFrame.h:319
bool m_newStatusText
Do we have new text to output in the Status Bar?
Definition: wxMaximaFrame.h:286
std::vector< wxMenu * > m_demoSubs
The submenus for the various "demo" sub-submenus.
Definition: wxMaximaFrame.h:174
Worksheet *const m_worksheet
The worksheet itself.
Definition: wxMaximaFrame.h:324
wxMenu * m_logexpand_Sub
The logexpand submenu.
Definition: wxMaximaFrame.h:182
wxString GetDemoFile(wxWindowID id) const
Looks up which demo file belongs to a wxWindowID.
Definition: wxMaximaFrame.cpp:2022
void AddToHistory(const wxString &cmd)
Adds a command to the list of recently used maxima commands.
Definition: wxMaximaFrame.h:115