OSDN Git Service

[denncoCreator] Implement plugin cell edit feature. The work is in progress.
[dennco/denncoCreator.git] / Source / dccreator.h
1 //  Copyright (c) 2012 Dennco Project
2 //
3 // This program is free software: you can redistribute it and/or modify
4 // it under the terms of the GNU General Public License as published by
5 // the Free Software Foundation, either version 3 of the License, or
6 // (at your option) any later version.
7 //
8 // This program is distributed in the hope that it will be useful,
9 // but WITHOUT ANY WARRANTY; without even the implied warranty of
10 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11 // GNU General Public License for more details.
12 //
13 // You should have received a copy of the GNU General Public License
14 // along with this program.  If not, see <http://www.gnu.org/licenses/>.
15
16 //
17 //  Created by tkawata on Sep-30, 2012.
18 //
19 #ifndef DCCREATOR_H
20 #define DCCREATOR_H
21
22 class DCContent;
23 class DCVCPage;
24 class DCCell;
25 class DCCellCode;
26 class DCAxon;
27 class DCReceptor;
28 class DCAxonTerminal;
29 class DCScene;
30 class DCVComponent;
31 class DCContainer;
32 class DCCommand;
33 class DCConsole;
34
35 #include <QtGui>
36
37 class DCCreator : public QObject
38 {
39     Q_OBJECT
40
41 public:
42     enum DCPersMode { DC_PERSMODE_NAVIGATION, DC_PERSMODE_PAGEEDIT };
43
44 private:
45     QMainWindow         *d_mainWindow;
46     DCContent           *d_vcontent;
47     DCScene             *d_scene;
48     DCPersMode          d_persMode;
49     QString             d_contentRootPath;
50
51     QUndoStack          *d_undoStack;
52     DCConsole           *d_console;
53
54 public:
55     DCCreator(QMainWindow *mainwindow);
56     virtual ~DCCreator();
57
58     DCContent*      getCurrentContent() const { return d_vcontent; }
59     DCContainer*    getCurrentContainer() const;
60     QMainWindow*    getMainWindow() const { return d_mainWindow; }
61     DCScene*        getScene() const { return d_scene; }
62     DCPersMode      getPersMode() const { return d_persMode; }
63
64     virtual bool event(QEvent *event);
65
66     void resetVisualizer();
67     void initMode();
68
69     bool loadContent(const QString &contentRoot);
70     bool savePage(DCVCPage *page, bool showResultInMessageBox = false);
71     bool savePage(const QSet<DCVCPage*>& pages, bool showResultInMessageBox = false);
72     bool saveAll(bool showResultInMessageBox = false);
73
74     void selectPage(const void *requester, DCVCPage *page, bool multipleSelection);
75     void unselectPage(const void *requester, DCVCPage *page);
76     bool selectPage(const void *requester, const QString &locationPath, bool multipleSelection);
77     bool unselectPage(const void *requester, const QString &locationPath);
78     void unselectPageAll(const void *requester);
79
80     void selectCellObject(const void *requester, DCVComponent *object, bool multipleSelection = false);
81     void unselectCellObject(const void *requester, DCVComponent *object);
82     void unselectCellObjectAll(const void *requester);
83
84     void changeSceneScale(const void *requester, float scale);
85     void rotateScene(const void *requester, float xangle_delta, float yangle_delta);
86     void translateBrowsModeScene(const void *requester, float dx, float dy);
87     void translateEditModeScene(const void *requester, float dx, float dy);
88     void resetSceneTranslation();
89
90     bool changePersMode(const void *requester, DCPersMode mode);
91
92
93     void doUndo(const void *requester);
94     void doUndoImmidiate();
95
96     //Editing actions
97     void doCommandStartAddAxonTerminalFromAxon(const void *requester, DCCell *axnoCell);
98     void doCommandStartAddAxonTerminalFromReceptor(const void *requester, DCCell *receptorCell);
99     void doCommandCommitAddAxonTerminal(const void *requester, DCAxon *axon, DCCell *receptorCell);
100     void doCommandCommitAddAxonTerminal(const void *requester, DCCell *axonCell, DCReceptor *receptor);
101     void doCommandCancelAddAxonTerminal(const void *requester);
102     void doCommandRemoveAxonTerminal(const void *requester, DCCell *axonCell, DCAxonTerminal *axonTerminal);
103     void doCommandRemoveAxonTerminal(const void *requester, DCCell *receptorCell, const QString& receptorName);
104     void doCommandAssignCellCodeClassToCell(const void *requester, DCCell *cell, DCCellCode *cellCode);
105     void doCommandUnassignCellCodeClassFromCell(const void *requester, DCCell *cell);
106
107     void doCommandAddCellCodeClass(const void *requester, DCContainer *container, const QString& name, const QString& type);
108     void doCommandChangeCellCodeClassType(const void *requester, DCCellCode *cellCode, const QString& newType);
109     void doCommandAddCell(const void *requester, DCContainer *container, const QString& containerBasedPath, const QString& name, const QString& type, float pageX, float pageY);
110     void doCommandRenameCell(const void *requester, DCCell *cell, const QString& newContainerBasedPath, const QString& newName);
111     void doCommandChangeCellType(const void *requester, DCCell *cell, const QString& newType);
112     void doCommandRemoveCell(const void *requester, DCContainer *container, DCCell* cell);
113     void doCommandRemoveCellCode(const void *requester, DCContainer *container, DCCellCode* cellCode);
114     void doCommandAddPage(const void *requester, const QString& containerBasedPath);
115     void doCommandMovePage(const void *requester, const QString &oldContainerBasedPath, const QString &newContainerBasedPath);
116     void doCommandRemovePage(const void *requester, DCVCPage *page);
117
118     void doCommandAddDirectory(const void *requester, const QString& sysFilePath);
119     void doCommandRenameDirectory(const void *requester, const QString& oldSysFilePath, const QString& newSysFilePath);
120     void doCommandRemoveDirectory(const void *requester, const QString& sysFilePath);
121
122     bool doCommandRenameReceptorName(const void *requester, DCCell *cell, const QString& oldName, const QString& newName, bool doImmediate = false);
123
124 private slots:
125     void slotSceneSelectedPageChanged(const void *requester);
126     void slotSceneSelectedCellObjectChanged(const void *requester);
127     void slotSceneViewScaleChanged(const void *requester);
128     void slotSceneViewAngleChanged(const void *requester);
129     void slotSceneViewCenterChanged(const void *requester);
130     void slotSceneViewSettingChanged(const void *requester);
131     void slotSceneViewEditModeChanged(const void *requester);
132
133 signals:
134     void contentRootPathChanged(const void *requester, QString rootPath);
135     void sceneChanged(const void *requester, DCScene *scene);
136     void sceneSelectedPageChanged(const void *requester, const DCScene *scene);
137     void sceneSelectedCellChanged(const void *requester, const DCScene *scene);
138     void sceneViewScaleChanged(const void *requester, const DCScene *scene);
139     void sceneViewAngleChanged(const void *requester, const DCScene *scene);
140     void sceneViewCenterChanged(const void *requester, const DCScene *scene);
141     void sceneViewTranslationChanged(const void *requester, const DCScene *scene);
142     void sceneViewSettingChanged(const void *requester, const DCScene *scene);
143     void sceneViewEditModeChanged(const void *requester, const DCScene *scene);
144
145     void commandExecuted(const QUndoCommand *executedCommand);
146 };
147
148 #endif // DCCREATOR_H