OSDN Git Service

initial import
[molby/Molby.git] / wxSources / MyDocument.h
1 /*
2  *  MyDocument.h
3  *  Molby
4  *
5  *  Created by Toshi Nagata on 08/10/24.
6  *  Copyright 2008 Toshi Nagata. All rights reserved.
7  *
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.
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 #ifndef __MyDocument_h__
19 #define __MyDocument_h__
20
21 #include "wx/docview.h"
22 #include "wx/cmdproc.h"
23
24 #include "../MolLib/MolLib.h"
25
26 /*  Custom Event for Document handling  */
27 extern const wxEventType MyDocumentEvent;
28 enum {
29         MyDocumentEvent_willNeedCleanUndoStack = 1,
30         MyDocumentEvent_documentModified,
31         MyDocumentEvent_scriptMenuModified,
32         MyDocumentEvent_updateDisplay,
33         MyDocumentEvent_threadTerminated
34 };
35
36 class MyDocument: public wxDocument
37 {
38 public:
39         Molecule *mol;
40
41         MyDocument();
42         virtual ~MyDocument();
43
44         void SetMolecule(Molecule *mol);
45         Molecule *GetMolecule() { return mol; }
46
47         //  For "register-undo" based undo/redo mechanism
48         bool isUndoEnabled;
49         bool isUndoing;
50         bool isModifyNotificationSent;
51
52         wxCommand *currentCommand;
53         MolAction **undoStack;
54         int countUndoStack;
55
56         int undoGroupLevel;
57         bool isCleanUndoStackRequested;
58
59         bool hasFile;  /*  wxWidgets does not maintain this info for us  */
60
61         int subThreadKind;  /*  0: none, 1: MM/MD (mutex is in Molecule structure)  */
62         
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();
73         
74         void    OnNeedCleanUndoStack(wxCommandEvent& event);
75
76         void    OnDocumentModified(wxCommandEvent& event);
77         void    OnImport(wxCommandEvent& event);
78         void    OnExport(wxCommandEvent& event);
79
80         void    OnCopy(wxCommandEvent& event);
81         void    OnCut(wxCommandEvent& event);
82         void    OnPaste(wxCommandEvent& event);
83         void    OnDelete(wxCommandEvent& event);
84
85         void    OnSelectAll(wxCommandEvent& event);
86         void    OnSelectFragment(wxCommandEvent& event);
87         void    OnSelectReverse(wxCommandEvent& event);
88
89         void    OnAddHydrogen(wxCommandEvent& event);
90
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);
96
97         void    OnShowAllAtoms(wxCommandEvent &event);
98         void    OnHideSelected(wxCommandEvent &event);
99         void    OnHideUnselected(wxCommandEvent &event);
100         void    OnHideReverse(wxCommandEvent &event);
101         
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);
111
112         void    OnInvokeResp(wxCommandEvent &event);
113         void    OnInvokeAntechamber(wxCommandEvent &event);
114         
115         void    OnCreateGamessInput(wxCommandEvent &event);
116         void    OnCreateMOCube(wxCommandEvent &event);
117         
118         void    OnUpdateDisplay(wxCommandEvent &event);
119         void    OnSubThreadTerminated(wxCommandEvent &event);
120         
121         void    OnUpdateUI(wxUpdateUIEvent &event);
122
123  protected:
124         virtual bool DoSaveDocument(const wxString& file);
125         virtual bool DoOpenDocument(const wxString& file);
126
127  private:
128         DECLARE_DYNAMIC_CLASS(MyDocument)
129         DECLARE_EVENT_TABLE()
130 };
131
132 MyDocument *MyDocumentFromMolecule(Molecule *mp);
133
134 #endif