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_insertFrameFromMD,
34 MyDocumentEvent_threadTerminated
37 class MyDocument: public wxDocument
43 virtual ~MyDocument();
45 void SetMolecule(Molecule *mol);
46 Molecule *GetMolecule() { return mol; }
48 // For "register-undo" based undo/redo mechanism
51 bool isModifyNotificationSent;
53 wxCommand *currentCommand;
54 MolAction **undoStack;
58 bool isCleanUndoStackRequested;
60 bool hasFile; /* wxWidgets does not maintain this info for us */
62 int subThreadKind; /* 0: none, 1: MM/MD (mutex is in Molecule structure) */
64 MainView *GetMainView() { return (mol != NULL ? mol->mview : NULL); }
65 void SetIsUndoing(bool flag) { isUndoing = flag; }
66 void SetCurrentCommand(wxCommand *command) { currentCommand = command; }
67 void PushUndoAction(MolAction *action);
68 void CleanUndoStack(bool shouldRegister = true);
69 bool IsUndoEnabled() { return isUndoEnabled; }
70 void SetUndoEnabled(bool flag);
71 void UpdateModifyFlag();
72 void BeginUndoGrouping();
73 void EndUndoGrouping();
77 void OnNeedCleanUndoStack(wxCommandEvent& event);
79 void OnDocumentModified(wxCommandEvent& event);
80 void OnImport(wxCommandEvent& event);
81 void OnExport(wxCommandEvent& event);
83 void OnCopy(wxCommandEvent& event);
84 void OnCut(wxCommandEvent& event);
85 void OnPaste(wxCommandEvent& event);
86 void OnDelete(wxCommandEvent& event);
88 void OnCreateNewAtom(wxCommandEvent &event);
89 void OnCreateNewParameter(wxCommandEvent &event);
91 void OnSelectAll(wxCommandEvent& event);
92 void OnSelectFragment(wxCommandEvent& event);
93 void OnSelectReverse(wxCommandEvent& event);
95 void OnAddHydrogen(wxCommandEvent& event);
97 void OnFitToScreen(wxCommandEvent& event);
98 void OnCenterSelection(wxCommandEvent& event);
99 void OnShowMenu(wxCommandEvent& event);
100 void OnToggleLineMode(wxCommandEvent &event);
101 void OnShowGraphite(wxCommandEvent &event);
103 void OnShowAllAtoms(wxCommandEvent &event);
104 void OnHideSelected(wxCommandEvent &event);
105 void OnHideUnselected(wxCommandEvent &event);
106 void OnHideReverse(wxCommandEvent &event);
108 void DoMDOrMinimize(int minimize);
109 void OnMolecularDynamics(wxCommandEvent &event);
110 void OnMinimize(wxCommandEvent &event);
111 void OnStopMDRun(wxCommandEvent &event);
112 void OnDefinePeriodicBox(wxCommandEvent &event);
113 void OnShowPeriodicImage(wxCommandEvent &event);
114 void OnPressureControl(wxCommandEvent &event);
115 void OnDefineSymmetry(wxCommandEvent &event);
116 void OnExpandBySymmetry(wxCommandEvent &event);
118 void OnInvokeResp(wxCommandEvent &event);
119 void OnInvokeAntechamber(wxCommandEvent &event);
120 void OnCreateSanderInput(wxCommandEvent &event);
121 void OnImportAmberFrcmod(wxCommandEvent &event);
123 void OnCreateGamessInput(wxCommandEvent &event);
124 void OnCreateMOCube(wxCommandEvent &event);
126 void OnInsertFrameFromMD(wxCommandEvent &event);
127 void OnUpdateDisplay(wxCommandEvent &event);
128 void OnSubThreadTerminated(wxCommandEvent &event);
130 void OnUpdateUI(wxUpdateUIEvent &event);
133 virtual bool DoSaveDocument(const wxString& file);
134 virtual bool DoOpenDocument(const wxString& file);
137 DECLARE_DYNAMIC_CLASS(MyDocument)
138 DECLARE_EVENT_TABLE()
141 MyDocument *MyDocumentFromMolecule(Molecule *mp);