5 * Created by Toshi Nagata on 08/10/24.
6 * Copyright 2008 Toshi Nagata. All rights reserved.
8 This program is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation version 2 of the License.
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.
18 #ifndef __MyDocument_h__
19 #define __MyDocument_h__
21 #include "wx/docview.h"
22 #include "wx/cmdproc.h"
24 #include "../MolLib/MolLib.h"
26 /* Custom Event for Document handling */
27 extern const wxEventType MyDocumentEvent;
29 MyDocumentEvent_willNeedCleanUndoStack = 1,
30 MyDocumentEvent_documentModified,
31 MyDocumentEvent_scriptMenuModified,
32 MyDocumentEvent_updateDisplay,
33 MyDocumentEvent_threadTerminated
36 class MyDocument: public wxDocument
42 virtual ~MyDocument();
44 void SetMolecule(Molecule *mol);
45 Molecule *GetMolecule() { return mol; }
47 // For "register-undo" based undo/redo mechanism
50 bool isModifyNotificationSent;
52 wxCommand *currentCommand;
53 MolAction **undoStack;
57 bool isCleanUndoStackRequested;
59 bool hasFile; /* wxWidgets does not maintain this info for us */
61 int subThreadKind; /* 0: none, 1: MM/MD (mutex is in Molecule structure) */
63 MainView *GetMainView() { return (mol != NULL ? mol->mview : NULL); }
64 void SetIsUndoing(bool flag) { isUndoing = flag; }
65 void SetCurrentCommand(wxCommand *command) { currentCommand = command; }
66 void PushUndoAction(MolAction *action);
67 void CleanUndoStack(bool shouldRegister = true);
68 bool IsUndoEnabled() { return isUndoEnabled; }
69 void SetUndoEnabled(bool flag);
70 void UpdateModifyFlag();
71 void BeginUndoGrouping();
72 void EndUndoGrouping();
74 void OnNeedCleanUndoStack(wxCommandEvent& event);
76 void OnDocumentModified(wxCommandEvent& event);
77 void OnImport(wxCommandEvent& event);
78 void OnExport(wxCommandEvent& event);
80 void OnCopy(wxCommandEvent& event);
81 void OnCut(wxCommandEvent& event);
82 void OnPaste(wxCommandEvent& event);
83 void OnDelete(wxCommandEvent& event);
85 void OnSelectAll(wxCommandEvent& event);
86 void OnSelectFragment(wxCommandEvent& event);
87 void OnSelectReverse(wxCommandEvent& event);
89 void OnAddHydrogen(wxCommandEvent& event);
91 void OnFitToScreen(wxCommandEvent& event);
92 void OnCenterSelection(wxCommandEvent& event);
93 void OnShowMenu(wxCommandEvent& event);
94 void OnToggleLineMode(wxCommandEvent &event);
95 void OnShowGraphite(wxCommandEvent &event);
97 void OnShowAllAtoms(wxCommandEvent &event);
98 void OnHideSelected(wxCommandEvent &event);
99 void OnHideUnselected(wxCommandEvent &event);
100 void OnHideReverse(wxCommandEvent &event);
102 void DoMDOrMinimize(int minimize);
103 void OnMolecularDynamics(wxCommandEvent &event);
104 void OnMinimize(wxCommandEvent &event);
105 void OnStopMDRun(wxCommandEvent &event);
106 void OnDefinePeriodicBox(wxCommandEvent &event);
107 void OnShowPeriodicImage(wxCommandEvent &event);
108 void OnPressureControl(wxCommandEvent &event);
109 void OnDefineSymmetry(wxCommandEvent &event);
110 void OnExpandBySymmetry(wxCommandEvent &event);
112 void OnInvokeResp(wxCommandEvent &event);
113 void OnInvokeAntechamber(wxCommandEvent &event);
115 void OnCreateGamessInput(wxCommandEvent &event);
116 void OnCreateMOCube(wxCommandEvent &event);
118 void OnUpdateDisplay(wxCommandEvent &event);
119 void OnSubThreadTerminated(wxCommandEvent &event);
121 void OnUpdateUI(wxUpdateUIEvent &event);
124 virtual bool DoSaveDocument(const wxString& file);
125 virtual bool DoOpenDocument(const wxString& file);
128 DECLARE_DYNAMIC_CLASS(MyDocument)
129 DECLARE_EVENT_TABLE()
132 MyDocument *MyDocumentFromMolecule(Molecule *mp);