model.h 9.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219
  1. #ifndef MODEL_H
  2. #define MODEL_H
  3. #include <QList>
  4. #include <QWidget>
  5. #include "sequenz.h"
  6. #include "usermode.h"
  7. /*
  8. * Eine Abstrakte Model Klasse
  9. */
  10. class Model
  11. {
  12. private:
  13. QList< QWidget* > views; // Liste mit Views, welche aktualisiert werden sollen, falls sich das Model ändert
  14. public:
  15. Model();
  16. // Fügt eine View hinzu
  17. void addView( QWidget *v );
  18. // Aktualisiert die Views
  19. void notifyViews();
  20. // Entfernt alle Views
  21. void removeViews();
  22. };
  23. class MainWindow; // aus mainwindow.h
  24. /*
  25. * Enthält alle Daten, die für die Arbeitsfläche relevant sind
  26. */
  27. class ArbeitsModel : public Model
  28. {
  29. private:
  30. Frame *f; // Einen Zeiger auf das ausgewählte Bild aus der Bildsequenz
  31. QPixmap m; // Das Maskenbild
  32. QImage image; // Das ausgewählte Bild
  33. bool showIds; // 1, falls Objekt IDs angezeigt werden sollen
  34. bool showMask; // 1, falls das Maskenbild angezeigt werden soll
  35. bool showColors; // 1, falls die Objkte eingefärbt werden sollen
  36. MainWindow *window; // Einen Zeiger auf das Hauptfenster
  37. // delete
  38. QRect *deleteField; // Das gebiet, welches zum löschen ausgewählt wird
  39. // new
  40. QPolygon *newPolygon; // Das neue Polygon, welches mit dem Werkzeug New erstellt wird
  41. // copy
  42. ObjectPolygon copyedObject; // Das copierte Polygon, welches mit dem Kopieren und Einfügen Werkzeug kopiert wurde
  43. float rotation; // Die Rotation des kopierten Objektes
  44. QPoint pSCenter; // Der Mittelpunkt des kopierten Objektes
  45. // Cut
  46. ObjectPolygon cutObject; // Das Objekt, welches zerteilt werden soll
  47. int cutPolygon; // Der Index des Polygons, welches zerteilt werden soll
  48. int cutIndex; // Der Index des Eckpunktes, an dem das Objekt zerteilt werden soll
  49. // Move
  50. ObjectPolygon moveObject; // Das Objekt, wessen Eckpunkt gerade verschoben wird
  51. int movePolygon; // Der Index des Polygones, dessen Eckpunkt verschoben wird
  52. QPoint newVertex; // Der Punkt, an dem ein neuer Vertex eingefügt werden würde
  53. int insertIndex; // Der Index in dem Polygon, an dem der Eckpunkt eingefügt wird
  54. int moveIndex; // Der Index des Eckpunktes, der verschoben werden soll
  55. // viewport Information
  56. QPoint viewPos; // Die Position der View auf dem Bildschirm
  57. QSize viewSize; // Die Größe der View auf dem Bildschirm
  58. float xScaleFactor; // Der x Skallierungsfaktor, mit dem die ansicht vergrößert wird
  59. float yScaleFactor; // Der y Skallierungsfaktor, mit dem die ansicht vergrößert wird
  60. int xOffset; // Die x Position im Bild, welche links oben an der View gezeichnet wird
  61. int yOffset; // Die y Position im Bild, welche links oben an der View gezeichnet wird
  62. // controller Information
  63. bool mousePressed; // 1, falls eine Maustaste gedrückt wird
  64. Qt::MouseButton mouseButton; // Der gedrpckte Mausbutton
  65. UserMode mode; // Der Modus, in dem sich der Nutzer momentan befindet
  66. QPoint mouseStart; // Die Startposition der Maus beim Klicken
  67. QPoint mousePos; // Die momentane Mausposition
  68. public:
  69. ArbeitsModel(MainWindow *w);
  70. ~ArbeitsModel();
  71. // Transformiert einen Punkt von Bildkoordinaten nach Bildschirmkoordinaten
  72. QPoint translate(QPoint p);
  73. // Transformiert ein Polygon von Bildkoordinaten nach Bildschirmkoordinaten
  74. QPolygon translatePolygon(QPolygon p);
  75. // Transformiert einen Punkt von Bildschirmkoordinaten nach Bildkoordinaten
  76. QPoint inverseTranslate(QPoint p);
  77. // Setzt das ausgewählte Frame
  78. void setFrame(Frame *f);
  79. // Setzt den ausgewählten Modus
  80. void setMode(UserMode mode);
  81. // Gibt den ausgewählten Modus zurück
  82. UserMode getMode() const;
  83. // Legt fest, ob die Objekt IDs angezeigt werden sollen
  84. void setShowId(bool sid);
  85. // Gibt 1 zurück, falls die ObjektIDs angezeigt werden sollen
  86. bool areIdsShown() const;
  87. // Legt fest, ob die Maske angezeigt werden soll
  88. void setShowMask(bool sm);
  89. // Gibt 1 zurück, wenn die Maske angezeigt werden soll
  90. bool isMaskShown() const;
  91. // Legt fest, ob die Objekte eingefärbt werden sollen
  92. void setShowColors(bool sc);
  93. // Gibt 1 zurück, falls die Objekte eingefärbt werden sollen
  94. bool areColoresShown() const;
  95. // Setzt das Maskenbild
  96. void setMask(QPixmap m);
  97. // Gibt das Maskenbild zurück
  98. QPixmap getMask() const;
  99. // Gibt das ausgewählte Bild zurück
  100. Frame* getFrame() const;
  101. // Gibt das Hauptfenster zurück
  102. MainWindow* getWindow() const;
  103. // Gibt das angezeigte Bild zurück
  104. QImage getImage() const;
  105. // Legt fest, ob die Maus gedrück wird
  106. void setMousePressed(bool pressed);
  107. // Legt die Maustaste fest
  108. void setMouseButtonPressed(Qt::MouseButton btn,
  109. QPoint pos);
  110. // Setzt die Position der Maus fest
  111. void setMousePoint(QPoint mp);
  112. // Gibt 1 zurück, falls die MAus gedrückt wird
  113. bool isMousePressed() const;
  114. // Gibt 1 zurück, falls der angegebene Maus Knopf gedrückt wird
  115. bool isMouseButtonPressed(Qt::MouseButton btn) const;
  116. // Gibt die Position der Maus zurück, als diese gedrückt wurde
  117. QPoint getMousePressPoint() const;
  118. // Gibt die aktuelle Position der Maus zurück
  119. QPoint getMousePoint() const;
  120. // Setzt die Position im Bild, die links oben an der View erscheinen soll
  121. void setOffset(int xo,
  122. int yo);
  123. // Setzt den Skallierungsfaktor, mit dem das Bild vergrößert werden soll
  124. void setScaleFactor(float xs,
  125. float ys);
  126. // Setzt die Position und die Größe der View auf dem Bildschirm
  127. void setView(QPoint pos,
  128. QSize size);
  129. // Gibt die Größe der View zurück
  130. QSize getViewSize() const;
  131. // Gibt die x Position im Bild zurück, die links an der View erscheinen soll
  132. int getXOffset() const;
  133. // Gibt die y Position im Bild zurück, die oben an der View erscheinen soll
  134. int getYOffset() const;
  135. // Gibt den Skallierungsfaktor in x Richtung zurück
  136. float getXScaleFactor() const;
  137. // Gibt den Skallierungsfaktor in y Richtung zurück
  138. float getYScaleFactor() const;
  139. // Gibt die Position der View zurück
  140. QPoint getViewPos() const;
  141. // Setzt die Skallierung zurück, so dass wieder alles sichtbar ist
  142. void resetZoom();
  143. // Legt fest, welches Polygon verschoben werden soll
  144. void setMoveObject(ObjectPolygon mo,
  145. int pIndex);
  146. // Legt fest, welcher Eckpunkt verschoben werden soll
  147. void setMoveIndex(int index);
  148. // Legt fest, an welcher Stelle eine Eckpunkt eingefügt werden soll
  149. void setInsertIndex(int index);
  150. // Legt die Position des neuen Eckpunktes fest
  151. void setNewVertex(QPoint vertex);
  152. // Gibt das Objekt zurück, welches verschoben wird
  153. ObjectPolygon getMoveObject() const;
  154. // Gibt den Index des Eckpunktes zurück, der verschoben wird
  155. int getMoveIndex() const;
  156. // Gibt den Index des neuen Eckpunktes zurück
  157. int getInsertIndex() const;
  158. // Gibt die Position des neuen Eckpunktes zurück
  159. QPoint getNewVertex() const;
  160. // Gibt den Index des Polygons zurück, welches verschoben wird
  161. int getMovePolygon() const;
  162. // Gibt das Objekt zurück, welches zerteilt werden soll
  163. ObjectPolygon getCutObject() const;
  164. // Gibt den Index des Eckpunktes zurück, an dem das Objekt zerteilt werden soll
  165. int getCutIndex() const;
  166. // Gibt den Index des Polygons zurück, das zerteilt werden soll
  167. int getCutPolygon() const;
  168. // Setzt das Polygon, welches zerteilt werden soll
  169. void setCutObject(ObjectPolygon o,
  170. int pIndex);
  171. // Setzt den Index des Eckpunktes, an dem das Polygon zerteilt werden soll
  172. void setCutIndex(int index);
  173. // Gibt das kopierte Objekt zurück
  174. ObjectPolygon getCopyedObject() const;
  175. // Gibt die Rotierung des kopierten Objektes zurück
  176. float getCopyedRotation() const;
  177. // Gibt den Mittelpunkt des Kopierten Objektes zurück
  178. QPoint getCopyedCenter() const;
  179. // Setzt das Kopierte Objekt
  180. void setCopyedObject(ObjectPolygon o,
  181. QPoint c);
  182. // Setzt die Rotierung des kopierten Objektes
  183. void setCopyedRotation(float r);
  184. // Gibt das neue Polygon zurück, welches mit dem NEW Werkzeug erstellt wird
  185. QPolygon* getNewPolygon() const;
  186. // Setzt das neue Polygon
  187. void setNewPolygon(QPolygon *p);
  188. // Gibt das Feld zurück, in dem ale Eckpunkte gelöscht werden sollen
  189. QRect* getDeleteField() const;
  190. // Setzt das Feld, in dem alle Echpunkte gelöscht werden sollen
  191. void setDeleteField(QRect *f);
  192. };
  193. #endif // MODEL_H