wxMaxima
Loading...
Searching...
No Matches
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>
47
48#include "wizards/ScrollingGenWizPanel.h"
49#include "Worksheet.h"
52#include "RecentDocuments.h"
53#include "Version.h"
54#include "MainMenuBar.h"
55#include "sidebars/History.h"
57#include "StatusBar.h"
59#include <list>
60
61
64class wxMaximaFrame : public wxFrame
65{
66public:
67 wxMaximaFrame(wxWindow *parent, int id, const wxString &title,
68 const wxPoint &pos = wxDefaultPosition,
69 const wxSize &size = wxDefaultSize,
70 long style = wxDEFAULT_FRAME_STYLE | wxSYSTEM_MENU | wxCAPTION);
71
74 virtual ~wxMaximaFrame();
75
81 void ShowToolBar(bool show);
82 static std::size_t CountWindows();
83
90
92 void PopulateRecentDocumentsMenu(wxMenu *menu, int firstEntry, const std::list<wxString> &items);
94 void PopulateRecentPackagesMenu(wxMenu *menu, int firstEntry, const std::list<wxString> &items);
95
101 bool IsPaneDisplayed(int id);
102
110 void ShowPane(int id, bool show = true);
112 bool IsXMLInspectorShown(){return m_manager.GetPane(wxS("XmlInspector")).IsShown();}
115 {
116 m_manager.GetPane(wxS("XmlInspector")).Show(!IsXMLInspectorShown());
118 }
121 {
122 m_manager.GetPane(wxS("log"))
123 .Show(!m_manager.GetPane(wxS("log")).IsShown());
125 }
127 void ShowWizardPane(wxString title)
128 {
129 m_manager.GetPane("wizard").Show(true).Caption(title);
131 }
132 void HideWizardPane()
133 {
134 m_manager.GetPane("wizard").Show(false);
136 }
138 void TogglePaneVisibility(int id);
139
141 void AddToHistory(const wxString &cmd)
142 { m_history->AddToHistory(cmd); }
143
147 void EvaluationQueueLength(int length, int numberOfCommands = -1);
148
150 void AuiManagerUpdate();
151
158 void StatusMaximaBusy(StatusBar::MaximaStatus status){m_StatusMaximaBusy_next = status;}
159 void UpdateStatusMaximaBusy();
160
161 StatusBar::MaximaStatus m_StatusMaximaBusy = StatusBar::wait_for_start;
162 StatusBar::MaximaStatus m_StatusMaximaBusy_next = StatusBar::wait_for_start;
163
165 void StatusSaveStart();
166
168 void StatusSaveFinished();
169
171 void StatusSaveFailed();
172
174 void StatusExportStart();
175
178
180 void StatusExportFailed();
181
182 Configuration &GetConfiguration() {return m_configuration;}
183protected:
188 Configuration m_configuration;
190 std::size_t m_bytesFromMaxima = 0;
192 long m_pid = -1;
194 long m_maximaPid = -1;
198 void OnNotificationClose(wxCommandEvent WXUNUSED(&event));
204 wxMenu *m_demo_sub = NULL;
206 std::vector<wxMenu *> m_demoSubs;
208 wxMenu *m_viewMenu = NULL;
210 wxMenu *m_gentranMenu = NULL;
212 wxMenu *m_subst_Sub = NULL;
214 wxMenu * m_logexpand_Sub = NULL;
216 wxMenu *m_FileMenu = NULL;
218 wxMenu *m_EditMenu = NULL;
220 wxMenu *m_CellMenu = NULL;
222 wxMenu *m_Edit_Zoom_Sub = NULL;
224 wxMenu *m_Maxima_Panes_Sub = NULL;
226 wxMenu *m_EquationsMenu = NULL;
228 wxMenu *m_MaximaMenu = NULL;
230 wxMenu *m_matrix_menu = NULL;
232 wxMenu *m_SimplifyMenu = NULL;
234 wxMenu *m_Simplify_Gamma_Sub = NULL;
236 wxMenu *m_debugTypeMenu = NULL;
238 wxMenu *m_Simplify_Trig_Sub = NULL;
242 wxMenu *m_CalculusMenu = NULL;
243
245 wxMenu *m_PlotMenu = NULL;
247 wxMenu *m_listMenu = NULL;
249 wxMenu *m_NumericMenu = NULL;
251 wxMenu *m_HelpMenu = NULL;
255 void ReReadConfig();
257 void ReadConfig();
265 void DockAllSidebars(wxCommandEvent &ev);
266 void HideAllSidebars(wxCommandEvent &ev);
267
268 wxString wxMaximaManualLocation();
269public:
271 const std::unordered_map<int, wxString> &GetSidebarNames() const {return m_sidebarNames;}
272protected:
273 Worksheet *GetWorksheet() const {return m_worksheet;}
274private:
276 std::unordered_map<int, wxString> m_sidebarNames;
278 std::unordered_map<int, wxString> m_sidebarCaption;
280 std::size_t m_bytesFromMaxima_last = 0;
281 wxTimer m_bytesReadDisplayTimer;
283 bool m_StatusSaving = false;
284
285 void SetupToolBar();
286
290 void SetupMenu();
291 void SetupFileMenu();
292 void SetupEditMenu();
293 void SetupViewMenu();
294 void SetupCellMenu();
295 void SetupMaximaMenu();
296 void SetupEquationsMenu();
297 void SetupMatrixMenu();
298 void SetupCalculusMenu();
299 void SetupSimplifyMenu();
300 void SetupListMenu();
301 void SetupPlotMenu();
302 void SetupNumericMenu();
303 void SetupHelpMenu();
304
305public:
306 void StatusText(const wxString &text, bool saveInLog = true);
307protected:
308 ScrollingGenWizPanel *m_wizard = NULL;
318 virtual wxSize DoGetBestClientSize() const;
321#ifdef USE_WEBVIEW
322 HelpBrowser *m_helpPane = NULL;
323#endif
324
326 wxString GetDemoFile(wxWindowID id) const;
327protected:
328 std::array<wxString, 10> m_statusTextHistory;
329 void OnMenuStatusText(wxMenuEvent &event);
330 std::unordered_map<wxWindowID, wxString> m_demoFilesIDs;
331
332 SymbolsSidebar *m_symbolsSidebar = NULL;
339
341 bool m_first = true;
342
343 bool ToolbarIsShown();
344protected:
346 wxAuiManager m_manager;
348 Worksheet * const m_worksheet = NULL;
350 History * const m_history = NULL;
357 RecentDocuments m_recentPackages;
358 wxMenu *m_recentDocumentsMenu = NULL;
359 wxMenu *m_unsavedDocumentsMenu = NULL;
360 wxMenu *m_recentPackagesMenu = NULL;
361 wxMenu *m_autoSubscriptMenu = NULL;
362 wxMenu *m_equationTypeMenuMenu = NULL;
363 wxMenu *m_roundedMatrixParensMenu = NULL;
364};
365
366#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:86
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:262
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:109
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:65
wxMenu * m_FileMenu
The file menu.
Definition: wxMaximaFrame.h:216
void UpdateRecentDocuments()
Update the recent documents list.
Definition: wxMaximaFrame.cpp:2077
void StatusSaveFailed()
Set the status to "Saving has failed".
Definition: wxMaximaFrame.cpp:567
void RegisterAutoSaveFile()
Remember a temporary autosave file name.
Definition: wxMaximaFrame.cpp:2132
const std::unordered_map< int, wxString > & GetSidebarNames() const
Get the list of human-readable sidebarnames and IDs.
Definition: wxMaximaFrame.h:271
bool m_first
Do we expect the 1st prompt from maxima to appear?
Definition: wxMaximaFrame.h:341
virtual ~wxMaximaFrame()
The destructor.
Definition: wxMaximaFrame.cpp:579
wxMenu * m_EditMenu
The edit menu.
Definition: wxMaximaFrame.h:218
TableOfContents * m_tableOfContents
The table of contents pane.
Definition: wxMaximaFrame.h:187
void StatusSaveFinished()
Set the status to "Maxima has finished saving".
Definition: wxMaximaFrame.cpp:551
int m_commandsLeftInCurrentCell
The number of commands left in the current of the evaluation queue item.
Definition: wxMaximaFrame.h:338
void TogglePaneVisibility(int id)
Hides or unhides the pane with the given ID.
Definition: wxMaximaFrame.cpp:2216
void ReReadConfig()
Re-read the configuration.
Definition: wxMaximaFrame.cpp:2102
wxMenu * m_Simplify_Complex_Sub
The complex submenu.
Definition: wxMaximaFrame.h:240
wxString m_leftStatusText
The text for the Left half of the Status Bar.
Definition: wxMaximaFrame.h:316
bool IsXMLInspectorShown()
Is the XML inspector shown?
Definition: wxMaximaFrame.h:112
void StatusExportStart()
Set the status to "Maxima is exporting".
Definition: wxMaximaFrame.cpp:555
virtual wxSize DoGetBestClientSize() const
The default size for the window.
Definition: wxMaximaFrame.cpp:463
wxMenu * m_PlotMenu
The plot menu.
Definition: wxMaximaFrame.h:245
wxMenu * m_Maxima_Panes_Sub
The panes submenu.
Definition: wxMaximaFrame.h:224
wxMenu * m_EquationsMenu
The equations menu.
Definition: wxMaximaFrame.h:226
bool m_updateEvaluationQueueLengthDisplay
Do we need to update the display showing the evaluation queue length?
Definition: wxMaximaFrame.h:336
wxMenu * m_gentranMenu
The gentran menu.
Definition: wxMaximaFrame.h:210
void ToggleXMLInspector()
Hide or unhide the XML inspector.
Definition: wxMaximaFrame.h:114
long m_drawDimensions_last
Are we inside a 2d or 3d draw command?
Definition: wxMaximaFrame.h:310
wxString m_tempfileName
The last name GetTempAutosavefileName() has returned.
Definition: wxMaximaFrame.h:196
wxString m_rightStatusText
The text for the Right half of the Status Bar.
Definition: wxMaximaFrame.h:314
wxMenu * m_Simplify_Trig_Sub
The trigonometric submenu.
Definition: wxMaximaFrame.h:238
void PopulateRecentPackagesMenu(wxMenu *menu, int firstEntry, const std::list< wxString > &items)
Used by UpdateRecentPackages for populating a menu.
Definition: wxMaximaFrame.cpp:2061
void ShowPane(int id, bool show=true)
Show or hide a sidebar.
Definition: wxMaximaFrame.cpp:2225
StatusBar * m_statusBar
The status bar.
Definition: wxMaximaFrame.h:200
XmlInspector * m_xmlInspector
A XmlInspector-like xml monitor.
Definition: wxMaximaFrame.h:352
void EvaluationQueueLength(int length, int numberOfCommands=-1)
Inform the user about the length of the evaluation queue.
Definition: wxMaximaFrame.cpp:473
bool m_forceStatusbarUpdate
true=force an update of the status bar at the next call of StatusMaximaBusy()
Definition: wxMaximaFrame.h:354
wxMenu * m_demo_sub
The "demo" sub-menu.
Definition: wxMaximaFrame.h:204
wxMenu * m_listMenu
The list menu.
Definition: wxMaximaFrame.h:247
wxMenu * m_debugTypeMenu
Contains the menu for the debugger trigger settingxc.
Definition: wxMaximaFrame.h:236
void PopulateRecentDocumentsMenu(wxMenu *menu, int firstEntry, const std::list< wxString > &items)
Used by UpdateRecentDocuments for populating a menu.
Definition: wxMaximaFrame.cpp:2038
MainMenuBar * m_MenuBar
The menu bar.
Definition: wxMaximaFrame.h:202
void OnNotificationClose(wxCommandEvent WXUNUSED(&event))
Issued if a notification is closed.
History *const m_history
The history pane.
Definition: wxMaximaFrame.h:350
wxMenu * m_Simplify_Gamma_Sub
The factorials and gamma submenu.
Definition: wxMaximaFrame.h:234
int m_EvaluationQueueLength
The current length of the evaluation queue of commands we still need to send to maxima.
Definition: wxMaximaFrame.h:334
void AuiManagerUpdate()
Updates the AUI manager and re-asserts the menu bar on GTK to prevent it from disappearing.
Definition: wxMaximaFrame.cpp:2195
void RemoveTempAutosavefile()
Remove an eventual temporary autosave file.
Definition: wxMaximaFrame.cpp:2142
wxMenu * m_CalculusMenu
The calculus menu.
Definition: wxMaximaFrame.h:242
void DockAllSidebars(wxCommandEvent &ev)
An instant single-window mode.
Definition: wxMaximaFrame.cpp:2174
void StatusSaveStart()
Set the status to "Maxima is saving".
Definition: wxMaximaFrame.cpp:546
wxMenu * m_viewMenu
The "view" menu.
Definition: wxMaximaFrame.h:208
void ReadConfig()
Read the configuration from the OS's configuration storage.
Definition: wxMaximaFrame.cpp:2097
wxMenu * m_SimplifyMenu
The simplify menu.
Definition: wxMaximaFrame.h:232
void ShowWizardPane(wxString title)
Show the pane the wizards are in.
Definition: wxMaximaFrame.h:127
long m_pid
The process id of maxima. Is determined by ReadFirstPrompt.
Definition: wxMaximaFrame.h:192
void StatusExportFailed()
Set the status to "Exporting has failed".
Definition: wxMaximaFrame.cpp:573
std::size_t m_bytesFromMaxima
How many bytes did maxima send us until now?
Definition: wxMaximaFrame.h:190
wxMenu * m_matrix_menu
The matrix menu.
Definition: wxMaximaFrame.h:230
wxMenu * m_MaximaMenu
The maxima menu.
Definition: wxMaximaFrame.h:228
wxMenu * m_subst_Sub
The subst submenu.
Definition: wxMaximaFrame.h:212
void ShowToolBar(bool show)
Shows or hides the toolbar.
Definition: wxMaximaFrame.cpp:2249
void StatusMaximaBusy(StatusBar::MaximaStatus status)
Set the status according to if maxima is calculating.
Definition: wxMaximaFrame.h:158
bool IsPaneDisplayed(int id)
true, if a Pane is currently enabled
Definition: wxMaximaFrame.cpp:2154
wxMenu * m_HelpMenu
The help menu.
Definition: wxMaximaFrame.h:251
void ToggleLogPane()
Toggle the visibility of the log pane.
Definition: wxMaximaFrame.h:120
wxAuiManager m_manager
The manager for dynamic screen layouts.
Definition: wxMaximaFrame.h:346
DrawSidebar * m_drawPane
The sidebar with the draw commands.
Definition: wxMaximaFrame.h:320
void StatusExportFinished()
Set the status to "Maxima has finished exporting".
Definition: wxMaximaFrame.cpp:561
wxMenu * m_Edit_Zoom_Sub
The zoom submenu.
Definition: wxMaximaFrame.h:222
wxMenu * m_NumericMenu
The numeric menu.
Definition: wxMaximaFrame.h:249
wxMenu * m_CellMenu
The cell menu.
Definition: wxMaximaFrame.h:220
Variablespane * m_variablesPane
The panel the user can display variable contents in.
Definition: wxMaximaFrame.h:185
bool m_newStatusText
Do we have new text to output in the Status Bar?
Definition: wxMaximaFrame.h:312
std::vector< wxMenu * > m_demoSubs
The submenus for the various "demo" sub-submenus.
Definition: wxMaximaFrame.h:206
long m_maximaPid
The real process id of maxima (might be a child of m_pid).
Definition: wxMaximaFrame.h:194
Worksheet *const m_worksheet
The worksheet itself.
Definition: wxMaximaFrame.h:348
RecentDocuments m_recentDocuments
The panel the log and debug messages will appear on.
Definition: wxMaximaFrame.h:356
wxMenu * m_logexpand_Sub
The logexpand submenu.
Definition: wxMaximaFrame.h:214
wxString GetDemoFile(wxWindowID id) const
Looks up which demo file belongs to a wxWindowID.
Definition: wxMaximaFrame.cpp:1997
void AddToHistory(const wxString &cmd)
Adds a command to the list of recently used maxima commands.
Definition: wxMaximaFrame.h:141