All Classes Namespaces Functions Variables Enumerations Properties Pages
editor.h
1 /*
2 
3 Pencil2D - Traditional Animation Software
4 Copyright (C) 2005-2007 Patrick Corrieri & Pascal Naidon
5 Copyright (C) 2012-2020 Matthew Chiawen Chang
6 
7 This program is free software; you can redistribute it and/or
8 modify it under the terms of the GNU General Public License
9 as published by the Free Software Foundation; version 2 of the License.
10 
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
15 
16 */
17 
18 #ifndef EDITOR_H
19 #define EDITOR_H
20 
21 #include <memory>
22 #include <QObject>
23 #include "pencilerror.h"
24 #include "pencildef.h"
25 
26 
27 class QDragEnterEvent;
28 class QDropEvent;
29 class QTemporaryDir;
30 class Object;
31 class KeyFrame;
32 class LayerCamera;
33 class MainWindow2;
34 class BaseManager;
35 class ColorManager;
36 class ToolManager;
37 class LayerManager;
38 class PlaybackManager;
39 class ViewManager;
40 class PreferenceManager;
41 class SelectionManager;
42 class SoundManager;
43 class ScribbleArea;
44 class TimeLine;
45 class BackupElement;
46 class ActiveFramePool;
47 
48 enum class SETTING;
49 
50 
51 class Editor : public QObject
52 {
53  Q_OBJECT
54 
55  Q_PROPERTY(ColorManager* color READ color)
56  Q_PROPERTY(ToolManager* tools READ tools)
57  Q_PROPERTY(LayerManager* layers READ layers)
58  Q_PROPERTY(PlaybackManager* playback READ playback)
59  Q_PROPERTY(ViewManager* view READ view)
60  Q_PROPERTY(PreferenceManager* preference READ preference)
61  Q_PROPERTY(SoundManager* sound READ sound)
62  Q_PROPERTY(SelectionManager* select READ select)
63 
64 public:
65  explicit Editor(QObject* parent = nullptr);
66  ~Editor() override;
67 
68  bool init();
69 
70  /************************************************************************/
71  /* Managers */
72  /************************************************************************/
73  ColorManager* color() const { return mColorManager; }
74  ToolManager* tools() const { return mToolManager; }
75  LayerManager* layers() const { return mLayerManager; }
76  PlaybackManager* playback() const { return mPlaybackManager; }
77  ViewManager* view() const { return mViewManager; }
78  PreferenceManager* preference() const { return mPreferenceManager; }
79  SoundManager* sound() const { return mSoundManager; }
80  SelectionManager* select() const { return mSelectionManager; }
81 
82  Object* object() const { return mObject.get(); }
83  Status setObject(Object* object);
84  void updateObject();
85  void prepareSave();
86 
87  void setScribbleArea(ScribbleArea* pScirbbleArea) { mScribbleArea = pScirbbleArea; }
88  ScribbleArea* getScribbleArea() { return mScribbleArea; }
89 
90  int currentFrame();
91  int fps();
92  void setFps(int fps);
93 
94  int currentLayerIndex() const { return mCurrentLayerIndex; }
95  void setCurrentLayerIndex(int i);
96 
97  void scrubTo(int frameNumber);
98 
99 
103  void setLayerVisibility(LayerVisibility visibility);
104  LayerVisibility layerVisibility();
105 
106  qreal viewScaleInversed();
107  void deselectAll();
108  void selectAll();
109 
110  // backup
111  int mBackupIndex;
112  BackupElement* currentBackup();
113  QList<BackupElement*> mBackupList;
114 
115 signals:
116  void updateTimeLine();
117  void updateLayerCount();
118  void updateBackup();
119 
120  void objectLoaded();
121 
122  void changeThinLinesButton(bool);
123  void currentFrameChanged(int n);
124  void fpsChanged(int fps);
125 
126  void needSave();
127  void needDisplayInfo(const QString& title, const QString& body);
128  void needDisplayInfoNoTitle(const QString& body);
129 
130 public: //slots
131  void clearCurrentFrame();
132 
133  void cut();
134 
135  bool importImage(QString filePath);
136  bool importGIF(QString filePath, int numOfImages = 0);
137  void updateFrame(int frameNumber);
138  void restoreKey();
139 
140  void updateFrameAndVector(int frameNumber);
141  void updateCurrentFrame();
142 
143  void scrubNextKeyFrame();
144  void scrubPreviousKeyFrame();
145  void scrubForward();
146  void scrubBackward();
147 
148  KeyFrame* addNewKey();
149  void removeKey();
150 
151  void notifyAnimationLengthChanged();
152  void switchVisibilityOfLayer(int layerNumber);
153  void swapLayers(int i, int j);
154  Status pegBarAlignment(QStringList layers);
155 
156  void backup(QString undoText);
157  void backup(int layerNumber, int frameNumber, QString undoText);
168  void sanitizeBackupElementsAfterLayerDeletion(int layerIndex);
169  void undo();
170  void redo();
171  void copy();
172 
173  void paste();
174  void clipboardChanged();
175  void increaseLayerVisibilityIndex();
176  void decreaseLayerVisibilityIndex();
177  void flipSelection(bool flipVertical);
178 
179  void toggleOnionSkinType();
180 
181  void clearTemporary();
182  void addTemporaryDir(QTemporaryDir* dir);
183 
184  void settingUpdated(SETTING);
185 
186  void dontAskAutoSave(bool b) { mAutosaveNeverAskAgain = b; }
187  bool autoSaveNeverAskAgain() const { return mAutosaveNeverAskAgain; }
188  void resetAutoSaveCounter();
189 
190  void createNewBitmapLayer(const QString& name);
191  void createNewVectorLayer(const QString& name);
192  void createNewSoundLayer(const QString& name);
193  void createNewCameraLayer(const QString& name);
194 
195 protected:
196  // Need to move to somewhere...
197  void dragEnterEvent(QDragEnterEvent*);
198  void dropEvent(QDropEvent*);
199 
200 private:
201  bool importBitmapImage(QString, int space = 0);
202  bool importVectorImage(QString);
203 
204  // the object to be edited by the editor
205  std::shared_ptr<Object> mObject = nullptr;
206 
207  int mFrame = 1; // current frame number.
208  int mCurrentLayerIndex = 0; // the current layer to be edited/displayed
209 
210  ScribbleArea* mScribbleArea = nullptr;
211 
212  ColorManager* mColorManager = nullptr;
213  ToolManager* mToolManager = nullptr;
214  LayerManager* mLayerManager = nullptr;
215  PlaybackManager* mPlaybackManager = nullptr;
216  ViewManager* mViewManager = nullptr;
217  PreferenceManager* mPreferenceManager = nullptr;
218  SoundManager* mSoundManager = nullptr;
219  SelectionManager* mSelectionManager = nullptr;
220 
221  std::vector< BaseManager* > mAllManagers;
222 
223  bool mIsAutosave = true;
224  int mAutosaveNumber = 12;
225  int mAutosaveCounter = 0;
226  bool mAutosaveNeverAskAgain = false;
227 
228  void makeConnections();
229  KeyFrame* addKeyFrame(int layerNumber, int frameNumber);
230 
231  QList<QTemporaryDir*> mTemporaryDirs;
232 
233  // backup
234  void clearUndoStack();
235  void updateAutoSaveCounter();
236  int mLastModifiedFrame = -1;
237  int mLastModifiedLayer = -1;
238 
239  // clipboard
240  bool clipboardBitmapOk = true;
241  bool clipboardVectorOk = true;
242  bool clipboardSoundClipOk = true;
243 };
244 
245 #endif
void setLayerVisibility(LayerVisibility visibility)
The visiblity value should match any of the VISIBILITY enum values.
Definition: editor.cpp:615
Q_OBJECTQ_OBJECT
Q_PROPERTY(...)
Definition: object.h:54
ActiveFramePool implemented a LRU cache to keep tracking the most recent accessed key frames A key fr...
Definition: editor.h:51
QObject * parent() const const
void sanitizeBackupElementsAfterLayerDeletion(int layerIndex)
Restores integrity of the backup elements after a layer has been deleted.
Definition: editor.cpp:317