Pencil2D  ff90c0872e88be3bf81c548cd60f01983012ec49
Pencil2D is an animation software for both bitmap and vector graphics. It is free, multi-platform, and open source.
 All Classes Functions
editor.h
1 /*
2 
3 Pencil - Traditional Animation Software
4 Copyright (C) 2005-2007 Patrick Corrieri & Pascal Naidon
5 Copyright (C) 2012-2017 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 <QList>
23 #include "backupelement.h"
24 #include "pencilerror.h"
25 
26 
27 class QDragEnterEvent;
28 class QDropEvent;
29 class Object;
30 class MainWindow2;
31 class BaseManager;
32 class ColorManager;
33 class ToolManager;
34 class LayerManager;
35 class PlaybackManager;
36 class ViewManager;
37 class PreferenceManager;
38 class SoundManager;
39 class ScribbleArea;
40 class TimeLine;
41 
42 enum class SETTING;
43 
44 
45 class Editor : public QObject
46 {
47  Q_OBJECT
48 
49  Q_PROPERTY( ColorManager* color READ color )
50  Q_PROPERTY( ToolManager* tools READ tools )
51  Q_PROPERTY( LayerManager* layers READ layers )
52  Q_PROPERTY( PlaybackManager* playback READ playback )
53  Q_PROPERTY( ViewManager* view READ view )
54  Q_PROPERTY( PreferenceManager* preference READ preference )
55  Q_PROPERTY( SoundManager* sound READ sound )
56 
57 public:
58  explicit Editor( QObject* parent = nullptr );
59  virtual ~Editor();
60 
61  bool init();
62 
63  /************************************************************************/
64  /* Managers */
65  /************************************************************************/
66  ColorManager* color() const { return mColorManager; }
67  ToolManager* tools() const { return mToolManager; }
68  LayerManager* layers() const { return mLayerManager; }
69  PlaybackManager* playback() const { return mPlaybackManager; }
70  ViewManager* view() const { return mViewManager; }
71  PreferenceManager* preference() const { return mPreferenceManager; }
72  SoundManager* sound() const { return mSoundManager; }
73 
74  Object* object() const { return mObject.get(); }
75  Status setObject( Object* object );
76  void updateObject();
77  void prepareSave();
78 
79  void setScribbleArea( ScribbleArea* pScirbbleArea ) { mScribbleArea = pScirbbleArea; }
80  ScribbleArea* getScribbleArea() { return mScribbleArea; }
81 
82  int currentFrame();
83  int fps();
84 
85  void scrubTo( int frameNumber );
86 
87  int allLayers();
88  bool exportSeqCLI( QString filePath, QString format = "PNG", int width = -1, int height = -1, bool transparency = false, bool antialias = true );
89 
90  QString workingDir() const;
91 
92  void importMovie( QString filePath, int fps );
93 
94  // backup
95  int mBackupIndex;
96  BackupElement* currentBackup();
97  QList<BackupElement*> mBackupList;
98 
99 Q_SIGNALS:
100  void updateTimeLine();
101  void updateLayerCount();
102  void updateBackup();
103 
104  void objectLoaded();
105 
106  void selectAll();
107  void changeThinLinesButton( bool );
108  void currentFrameChanged( int n );
109 
110  void needSave();
111 
112 public: //slots
113  void clearCurrentFrame();
114 
115  void cut();
116 
117  void deselectAll();
118 
119  bool importImage( QString filePath );
120  void updateFrame( int frameNumber );
121  void updateFrameAndVector( int frameNumber );
122  void updateCurrentFrame();
123 
124  void scrubNextKeyFrame();
125  void scrubPreviousKeyFrame();
126  void scrubForward();
127  void scrubBackward();
128 
129  KeyFrame* addNewKey();
130  void duplicateKey();
131  void removeKey();
132 
133  void moveFrameForward();
134  void moveFrameBackward();
135 
136  void setCurrentLayer( int layerNumber );
137  void switchVisibilityOfLayer( int layerNumber );
138  void moveLayer( int i, int j );
139 
140  void backup( QString undoText );
141  void backup( int layerNumber, int frameNumber, QString undoText );
142  void undo();
143  void redo();
144  void copy();
145 
146  void paste();
147  void clipboardChanged();
148 
149  void toggleMirror();
150  void toggleMirrorV();
151  void toggleShowAllLayers();
152  void flipSelection(bool flipVertical);
153 
154  void toogleOnionSkinType();
155 
156  void settingUpdated(SETTING);
157 
158 protected:
159  // Need to move to somewhere...
160  void dragEnterEvent( QDragEnterEvent* event );
161  void dropEvent( QDropEvent* event );
162 
163 private:
164  bool importBitmapImage( QString );
165  bool importVectorImage( QString );
166 
167  // the object to be edited by the editor
168  std::shared_ptr<Object> mObject = nullptr;
169 
170  int mFrame = 1; // current frame number.
171 
172  ScribbleArea* mScribbleArea = nullptr;
173 
174  ColorManager* mColorManager = nullptr;
175  ToolManager* mToolManager = nullptr;
176  LayerManager* mLayerManager = nullptr;
177  PlaybackManager* mPlaybackManager = nullptr;
178  ViewManager* mViewManager = nullptr;
179  PreferenceManager* mPreferenceManager = nullptr;
180  SoundManager* mSoundManager = nullptr;
181 
182  std::vector< BaseManager* > mAllManagers;
183 
184  bool m_isAltPressed = false;
185  int numberOfModifications = 0;
186 
187  bool mIsAutosave = true;
188  int autosaveNumber = 12;
189 
190  void makeConnections();
191  KeyFrame* addKeyFame( int layerNumber, int frameNumber );
192 
193  // backup
194  void clearUndoStack();
195  int lastModifiedFrame;
196  int lastModifiedLayer;
197 
198  // clipboard
199  bool clipboardBitmapOk, clipboardVectorOk;
200 };
201 
202 #endif
Definition: object.h:71
Definition: editor.h:45