Swiftray  1.0
document.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include <QPoint>
4 #include <QWidget>
5 #include <QElapsedTimer>
6 #include <layer.h>
7 #include <document-settings.h>
8 #include <shape/shape.h>
9 #include <command.h>
10 
11 class Canvas;
12 
13 class DocumentSerializer;
14 
19 class Document : public QObject {
20 Q_OBJECT
21 public:
22 
23  Document() noexcept;
24 
25  // Selecting functions
26 
27  QList<ShapePtr> &selections();
28 
29  void setSelection(nullptr_t);
30 
31  void setSelection(ShapePtr &shape);
32 
33  void setSelections(const QList<ShapePtr> &new_selections);
34 
35  // Test if any shape in the document hit by mouse
36  ShapePtr hitTest(QPointF canvas_coord);
37 
38  // Layer functions:
39 
40  void addLayer(LayerPtr &layer);
41 
42  void removeLayer(LayerPtr &layer);
43 
44  // Paint functions
45 
46  void paint(QPainter *painter);
47 
48  // Dumps layers info
49  void dumpStack(QList<LayerPtr> &stack);
50 
51  void setLayersOrder(const QList<LayerPtr> &new_order);
52 
53  // Group functions
54 
55  void groupSelections();
56 
57  void ungroupSelections();
58 
59  // Coordinate functions:
60  QPointF getCanvasCoord(QPointF window_coord) const;
61 
62  QRectF screenRect() const;
63 
64  // Getters:
65 
66  const QList<LayerPtr> &layers() const;
67 
68  Layer *activeLayer();
69 
70  QPointF scroll() const;
71 
72  qreal scale() const;
73 
74  qreal width() const;
75 
76  qreal height() const;
77 
78  QPointF mousePressedScreenCoord() const;
79 
80  QPointF mousePressedCanvasCoord() const;
81 
82  const QFont &font() const;
83 
84  const Canvas *canvas() const;
85 
87 
88  // Frames rendered after start
89  int framesCount() const;
90 
91  // Setters:
92  bool setActiveLayer(const QString &name);
93 
94  void setActiveLayer(LayerPtr &layer);
95 
96  void setWidth(qreal width);
97 
98  void setHeight(qreal height);
99 
100  void setScroll(QPointF scroll);
101 
102  void setScale(qreal scale);
103 
104  void setCanvas(Canvas *canvas);
105 
106  void setMousePressedScreenCoord(QPointF screen_coord);
107 
108  void setFont(const QFont &font);
109 
110  void setScreenSize(QSize size);
111 
112  const LayerPtr *findLayerByName(const QString &layer_name);
113 
114  /* Undo functions */
115  void undo();
116 
117  void redo();
118 
119  void execute(Commands::BaseCmd *cmd);
120 
121  void execute(const CmdPtr &cmd);
122 
123  void execute(initializer_list<CmdPtr> cmds);
124 
125  template<typename... Args>
126  void execute(const CmdPtr cmd0, Args... args) {
127  execute({cmd0, args...});
128  }
129 
130  friend class DocumentSerializer;
131 
132 signals:
133 
135 
136 private:
137  qreal scroll_x_;
138  qreal scroll_y_;
139  qreal scale_;
140  qreal width_;
141  qreal height_;
142 
143  bool screen_changed_;
144 
145  QList<LayerPtr> layers_;
146  QList<ShapePtr> selections_;
147 
148  QFont font_;
149 
150  int new_layer_id_;
151  Layer *active_layer_;
152 
153  QPointF mouse_pressed_screen_coord_;
154 
155  QList<CmdPtr> undo2_stack_;
156  QList<CmdPtr> redo2_stack_;
157 
158  QSize screen_size_;
159 
160  int frames_count_;
161 
162  Canvas *canvas_;
163 
164  DocumentSettings settings_;
165 };
Definition: canvas.h:27
A class template for undoable commands, along with undo() / redo() implementation.
Definition: command.h:21
Document state store for layers, shapes, document specfic settings and current view state.
Definition: document.h:19
int framesCount() const
Definition: document.cpp:261
void selectionsChanged()
const QList< LayerPtr > & layers() const
Definition: document.cpp:182
void groupSelections()
Definition: document.cpp:212
Document() noexcept
Definition: document.cpp:7
const LayerPtr * findLayerByName(const QString &layer_name)
Definition: document.cpp:270
void undo()
Definition: document.cpp:60
void execute(Commands::BaseCmd *cmd)
Definition: document.cpp:88
QRectF screenRect() const
Definition: document.cpp:265
void execute(const CmdPtr cmd0, Args... args)
Definition: document.h:126
Layer * activeLayer()
Definition: document.cpp:150
QPointF scroll() const
Definition: document.cpp:122
const QFont & font() const
void addLayer(LayerPtr &layer)
Definition: document.cpp:106
void dumpStack(QList< LayerPtr > &stack)
Definition: document.cpp:47
QList< ShapePtr > & selections()
Definition: document.cpp:45
void setWidth(qreal width)
Definition: document.cpp:130
void redo()
Definition: document.cpp:76
QPointF mousePressedScreenCoord() const
Definition: document.cpp:204
qreal height() const
Definition: document.cpp:128
void setScroll(QPointF scroll)
Definition: document.cpp:134
void setLayersOrder(const QList< LayerPtr > &new_order)
Definition: document.cpp:184
void setSelection(nullptr_t)
Definition: document.cpp:23
qreal width() const
Definition: document.cpp:126
void setFont(const QFont &font)
qreal scale() const
Definition: document.cpp:124
void setScreenSize(QSize size)
Definition: document.cpp:140
DocumentSettings & settings()
Definition: document.cpp:285
void setHeight(qreal height)
Definition: document.cpp:132
QPointF mousePressedCanvasCoord() const
Definition: document.cpp:200
void setScale(qreal scale)
Definition: document.cpp:145
void setMousePressedScreenCoord(QPointF screen_coord)
Definition: document.cpp:208
QPointF getCanvasCoord(QPointF window_coord) const
Definition: document.cpp:118
const Canvas * canvas() const
Definition: document.cpp:277
void setSelections(const QList< ShapePtr > &new_selections)
Definition: document.cpp:31
void setCanvas(Canvas *canvas)
Definition: document.cpp:281
void removeLayer(LayerPtr &layer)
Definition: document.cpp:112
void paint(QPainter *painter)
Definition: document.cpp:249
bool setActiveLayer(const QString &name)
Definition: document.cpp:158
ShapePtr hitTest(QPointF canvas_coord)
Definition: document.cpp:189
void ungroupSelections()
Definition: document.cpp:229
Save and load documents as binary format.
Definition: document-serializer.h:18
Definition: document-settings.h:3
Definition: layer.h:10
Commands::CmdPtr CmdPtr
Definition: command.h:273
shared_ptr< Layer > LayerPtr
Definition: layer.h:127
shared_ptr< Shape > ShapePtr
Definition: shape.h:137