OSDN Git Service

Avoid opening files during execution of other Ruby script
[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 #include "wx/process.h"
24
25 #include "../MolLib/MolLib.h"
26
27 #include <stdio.h>   /*  For FILE structure  */
28
29 class wxProcess;  /*  For running QChem  */
30
31 /*  Custom Event for Document handling  */
32 extern const wxEventType MyDocumentEvent;
33 enum {
34         MyDocumentEvent_willNeedCleanUndoStack = 1,
35         MyDocumentEvent_documentModified,
36         MyDocumentEvent_scriptMenuModified,
37         MyDocumentEvent_updateDisplay,
38         MyDocumentEvent_insertFrameFromMD,
39         MyDocumentEvent_threadTerminated,
40         MyDocumentEvent_openFilesByEvent,
41         MyDocumentEvent_documentWillClose,
42         MyDocumentEvent_openAuxiliaryDocuments
43 };
44
45 class MyDocument: public wxDocument
46 {
47 public:
48         Molecule *mol;
49
50         MyDocument();
51         virtual ~MyDocument();
52
53         void SetMolecule(Molecule *mol);
54         Molecule *GetMolecule() { return mol; }
55
56         //  For "register-undo" based undo/redo mechanism
57         bool isUndoEnabled;
58         bool isUndoing;
59         bool isModifyNotificationSent;
60
61         wxCommand *currentCommand;
62         MolAction **undoStack;
63         int countUndoStack;
64
65         int undoGroupLevel;
66         bool isCleanUndoStackRequested;
67
68         bool hasFile;  /*  wxWidgets does not maintain this info for us  */
69
70         int subThreadKind;  /*  0: none, 1: MM/MD (mutex is in Molecule structure), 2: QChem (also mutex is in Molecule structure)  */
71         
72         wxProcess *subProcess;  /*  subprocess object for QChem run  */
73         long    subProcessPID;
74         int             (*endSubProcessCallback)(Molecule *mol, int status);
75         int             (*timerSubProcessCallback)(Molecule *mol, int timerCount);
76         FILE    *subProcessStdout;  /*  Stdout of the subprocess  */
77         FILE    *subProcessStderr;  /*  Stderr of the subprocess  */
78         
79         MainView        *GetMainView() { return (mol != NULL ? mol->mview : NULL); }
80         void    SetIsUndoing(bool flag) { isUndoing = flag; }
81         void    SetCurrentCommand(wxCommand *command) { currentCommand = command; }
82         void    PushUndoAction(MolAction *action);
83         void    CleanUndoStack(bool shouldRegister = true);
84         bool    IsUndoEnabled() { return isUndoEnabled; }
85         void    SetUndoEnabled(bool flag);      
86         void    UpdateModifyFlag();
87         void    BeginUndoGrouping();
88         void    EndUndoGrouping();
89
90         virtual bool Close();
91         
92         void    OnNeedCleanUndoStack(wxCommandEvent& event);
93
94         void    OnDocumentModified(wxCommandEvent& event);
95         void    OnImport(wxCommandEvent& event);
96         void    OnExport(wxCommandEvent& event);
97         void    OnExportGraphic(wxCommandEvent &event);
98
99         void    OnCustomClose(wxCommandEvent &event);
100         
101         void    OnCopy(wxCommandEvent& event);
102         void    OnCut(wxCommandEvent& event);
103         void    OnPaste(wxCommandEvent& event);
104         void    OnDelete(wxCommandEvent& event);
105
106         void    OnCreateNewAtom(wxCommandEvent &event);
107         void    OnCreateNewParameter(wxCommandEvent &event);
108         void    OnCreatePiAnchor(wxCommandEvent &event);
109         
110         void    OnSelectAll(wxCommandEvent& event);
111         void    OnSelectFragment(wxCommandEvent& event);
112         void    OnSelectReverse(wxCommandEvent& event);
113
114         void    OnAddHydrogen(wxCommandEvent& event);
115
116         void    OnFitToScreen(wxCommandEvent& event);
117         void    OnCenterSelection(wxCommandEvent& event);
118 //      void    OnShowMenu(wxCommandEvent& event);
119 //      void    OnToggleLineMode(wxCommandEvent &event);
120 //      void    OnShowGraphite(wxCommandEvent &event);
121
122         void    OnShowAllAtoms(wxCommandEvent &event);
123         void    OnHideSelected(wxCommandEvent &event);
124         void    OnHideUnselected(wxCommandEvent &event);
125         void    OnHideReverse(wxCommandEvent &event);
126         
127         void    DoMDOrMinimize(int minimize);
128         void    OnMolecularDynamics(wxCommandEvent &event);
129         void    OnMinimize(wxCommandEvent &event);
130         void    OnStopMDRun(wxCommandEvent &event);
131         
132         long    RunSubProcess(const char *cmd, int (*callback)(Molecule *, int), int (*timerCallback)(Molecule *, int), FILE *output, FILE *errout);
133         void    OnEndSubProcess(wxProcessEvent &event);
134         void    FlushSubProcessOutput();
135
136 //      void    OnDefinePeriodicBox(wxCommandEvent &event);
137 //      void    OnShowPeriodicImage(wxCommandEvent &event);
138 //      void    OnPressureControl(wxCommandEvent &event);
139 //      void    OnDefineSymmetry(wxCommandEvent &event);
140 //      void    OnExpandBySymmetry(wxCommandEvent &event);
141
142 //      void    OnGuessUFFParameters(wxCommandEvent &event);
143 //      void    OnInvokeResp(wxCommandEvent &event);
144 //      void    OnInvokeAntechamber(wxCommandEvent &event);
145 //      void    OnCreateSanderInput(wxCommandEvent &event);
146 //      void    OnImportAmberFrcmod(wxCommandEvent &event);
147
148 //      void    OnCreateGamessInput(wxCommandEvent &event);
149 //      void    OnCreateMOPACInput(wxCommandEvent &event);
150 //      void    OnCreateMOCube(wxCommandEvent &event);
151         
152         void    OnInsertFrameFromMD(wxCommandEvent &event);
153         void    OnUpdateDisplay(wxCommandEvent &event);
154         void    OnSubThreadTerminated(wxCommandEvent &event);
155         void    OnOpenAuxiliaryDocuments(wxCommandEvent &event);
156         
157         void    OnUpdateUI(wxUpdateUIEvent &event);
158
159         void    TimerCallback(int timerCount);
160
161  protected:
162         virtual bool DoSaveDocument(const wxString& file);
163         virtual bool DoOpenDocument(const wxString& file);
164         virtual bool OnCreate(const wxString& path, long flags);
165         virtual bool Revert();
166
167  private:
168         DECLARE_DYNAMIC_CLASS(MyDocument)
169         DECLARE_EVENT_TABLE()
170 };
171
172 MyDocument *MyDocumentFromMolecule(Molecule *mp);
173
174 #endif