model.h 9.0 KB

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