OpenMW
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
worldspacewidget.hpp
Go to the documentation of this file.
1 #ifndef OPENCS_VIEW_WORLDSPACEWIDGET_H
2 #define OPENCS_VIEW_WORLDSPACEWIDGET_H
3 
4 #include <QTimer>
5 #include <osg/Vec3>
6 
7 #include "../../model/doc/document.hpp"
8 #include "../../model/world/tablemimedata.hpp"
9 
10 #include "scenewidget.hpp"
11 #include "mask.hpp"
12 
13 namespace CSMPrefs
14 {
15  class Setting;
16 }
17 
18 namespace CSMWorld
19 {
20  class UniversalId;
21 }
22 
23 namespace CSVWidget
24 {
25  class SceneToolMode;
26  class SceneToolToggle2;
27  class SceneToolbar;
28  class SceneToolRun;
29 }
30 
31 namespace CSVRender
32 {
33  class TagBase;
34  class Cell;
35  class CellArrow;
36  class EditMode;
37 
39  {
40  bool hit;
41  osg::ref_ptr<TagBase> tag;
42  unsigned int index0, index1, index2; // indices of mesh vertices
43  osg::Vec3d worldPos;
44  };
45 
47  {
48  Q_OBJECT
49 
53  unsigned int mInteractionMask;
55  bool mLocked;
56  int mDragMode;
57  bool mDragging;
58  int mDragX;
59  int mDragY;
60  bool mSpeedMode;
61  double mDragFactor;
65  QPoint mToolTipPos;
69 
70  public:
71 
72  enum DropType
73  {
78  };
79 
81  {
85  ignored //either mixed cells, or not cells
86  };
87 
89  {
95  };
96 
97  WorldspaceWidget (CSMDoc::Document& document, QWidget *parent = 0);
99 
103 
107  CSVWidget::SceneToolbar *parent);
108 
112 
116 
118 
120 
121  static DropType getDropType(const std::vector<CSMWorld::UniversalId>& data);
122 
123  virtual dropRequirments getDropRequirements(DropType type) const;
124 
125  virtual void useViewHint (const std::string& hint);
127 
129  virtual bool handleDrop (const std::vector<CSMWorld::UniversalId>& data,
130  DropType type);
131 
132  virtual unsigned int getVisibilityMask() const;
133 
136  virtual void setInteractionMask (unsigned int mask);
137 
140  unsigned int getInteractionMask() const;
141 
142  virtual void setEditLock (bool locked);
143 
145 
147  virtual void clearSelection (int elementMask) = 0;
148 
150  virtual void invertSelection (int elementMask) = 0;
151 
153  virtual void selectAll (int elementMask) = 0;
154 
155  // Select everything that references the same ID as at least one of the elements
156  // already selected
157  //
159  virtual void selectAllWithSameParentId (int elementMask) = 0;
160 
165  WorldspaceHitResult mousePick (const QPoint& localPos, unsigned int interactionMask) const;
166 
167  virtual std::string getCellId (const osg::Vec3f& point) const = 0;
168 
170  virtual Cell* getCell(const osg::Vec3d& point) const = 0;
171 
172  virtual std::vector<osg::ref_ptr<TagBase> > getSelection (unsigned int elementMask)
173  const = 0;
174 
175  virtual std::vector<osg::ref_ptr<TagBase> > getEdited (unsigned int elementMask)
176  const = 0;
177 
178  virtual void setSubMode (int subMode, unsigned int elementMask) = 0;
179 
181  virtual void reset (unsigned int elementMask) = 0;
182 
183  protected:
184 
187  enum ButtonId
188  {
192  Button_Fog = 0x8,
194  };
195 
197 
199 
200  virtual void updateOverlay();
201 
202  virtual void mouseMoveEvent (QMouseEvent *event);
203  virtual void wheelEvent (QWheelEvent *event);
204 
205  virtual void handleInteractionPress (const WorldspaceHitResult& hit, InteractionType type);
206 
207  virtual void settingChanged (const CSMPrefs::Setting *setting);
208 
210 
211  bool getSpeedMode();
212 
213  private:
214 
215  void dragEnterEvent(QDragEnterEvent *event);
216 
217  void dropEvent(QDropEvent* event);
218 
219  void dragMoveEvent(QDragMoveEvent *event);
220 
221  virtual std::string getStartupInstruction() = 0;
222 
223  void handleInteraction(InteractionType type, bool activate);
224 
225  public slots:
226 
231  void abortDrag();
232 
233  private slots:
234 
235  virtual void referenceableDataChanged (const QModelIndex& topLeft,
236  const QModelIndex& bottomRight) = 0;
237 
238  virtual void referenceableAboutToBeRemoved (const QModelIndex& parent, int start, int end) = 0;
239 
240  virtual void referenceableAdded (const QModelIndex& index, int start, int end) = 0;
241 
242  virtual void referenceDataChanged (const QModelIndex& topLeft, const QModelIndex& bottomRight) = 0;
243 
244  virtual void referenceAboutToBeRemoved (const QModelIndex& parent, int start, int end) = 0;
245 
246  virtual void referenceAdded (const QModelIndex& index, int start, int end) = 0;
247 
248  virtual void pathgridDataChanged (const QModelIndex& topLeft, const QModelIndex& bottomRight) = 0;
249 
250  virtual void pathgridAboutToBeRemoved (const QModelIndex& parent, int start, int end) = 0;
251 
252  virtual void pathgridAdded (const QModelIndex& parent, int start, int end) = 0;
253 
254 
255  virtual void runRequest (const std::string& profile);
256 
257  void debugProfileDataChanged (const QModelIndex& topLeft,
258  const QModelIndex& bottomRight);
259 
260  void debugProfileAboutToBeRemoved (const QModelIndex& parent, int start, int end);
261 
262  void editModeChanged (const std::string& id);
263 
264  void showToolTip();
265 
266  void primaryEdit(bool activate);
267 
268  void secondaryEdit(bool activate);
269 
270  void primarySelect(bool activate);
271 
272  void secondarySelect(bool activate);
273 
274  void speedMode(bool activate);
275 
276  protected slots:
277 
279 
280  signals:
281 
282  void closeRequest();
283 
284  void dataDropped(const std::vector<CSMWorld::UniversalId>& data);
285 
286  friend class MouseState;
287  };
288 }
289 
290 #endif
unsigned int getInteractionMask() const
Definition: worldspacewidget.cpp:348
osg::ref_ptr< TagBase > tag
Definition: worldspacewidget.hpp:41
virtual std::vector< osg::ref_ptr< TagBase > > getSelection(unsigned int elementMask) const =0
Extension of RenderWidget to support lighting mode selection & toolbar.
Definition: scenewidget.hpp:77
int mDragY
Definition: worldspacewidget.hpp:59
Definition: worldspacewidget.hpp:46
virtual void clearSelection(int elementMask)=0
ButtonId
Definition: worldspacewidget.hpp:187
virtual void pathgridAboutToBeRemoved(const QModelIndex &parent, int start, int end)=0
InteractionType
Definition: worldspacewidget.hpp:88
CSVWidget::SceneToolRun * makeRunTool(CSVWidget::SceneToolbar *parent)
Definition: worldspacewidget.cpp:233
virtual std::string getCellId(const osg::Vec3f &point) const =0
virtual void useViewHint(const std::string &hint)
Default-implementation: ignored.
Definition: worldspacewidget.cpp:154
unsigned int index0
Definition: worldspacewidget.hpp:42
CSMDoc::Document & mDocument
Definition: worldspacewidget.hpp:52
osg::Vec3d worldPos
Definition: worldspacewidget.hpp:43
virtual unsigned int getVisibilityMask() const
Definition: worldspacewidget.cpp:338
CSVWidget::SceneToolToggle2 * makeSceneVisibilitySelector(CSVWidget::SceneToolbar *parent)
Definition: worldspacewidget.cpp:218
virtual dropRequirments getDropRequirements(DropType type) const
Definition: worldspacewidget.cpp:312
virtual void referenceAboutToBeRemoved(const QModelIndex &parent, int start, int end)=0
virtual void setInteractionMask(unsigned int mask)
Definition: worldspacewidget.cpp:343
Mode selector tool.
Definition: scenetoolmode.hpp:18
virtual void referenceDataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight)=0
virtual void referenceableAboutToBeRemoved(const QModelIndex &parent, int start, int end)=0
static const struct @8 signals[]
bool hit
Definition: worldspacewidget.hpp:40
Definition: worldspacewidget.hpp:190
virtual void selectAllWithSameParentId(int elementMask)=0
virtual std::string getStartupInstruction()=0
virtual void referenceAdded(const QModelIndex &index, int start, int end)=0
void dragEnterEvent(QDragEnterEvent *event)
Definition: worldspacewidget.cpp:466
virtual void setSubMode(int subMode, unsigned int elementMask)=0
Definition: worldspacewidget.hpp:83
int mDragX
Definition: worldspacewidget.hpp:58
CSVWidget::SceneToolRun * mRun
Definition: worldspacewidget.hpp:51
CSVWidget::SceneToolMode * mEditMode
Definition: worldspacewidget.hpp:54
Definition: worldspacewidget.hpp:84
void selectDefaultNavigationMode()
Definition: worldspacewidget.cpp:156
bool mInConstructor
Definition: worldspacewidget.hpp:68
virtual bool handleDrop(const std::vector< CSMWorld::UniversalId > &data, DropType type)
Definition: worldspacewidget.cpp:320
Definition: worldspacewidget.hpp:75
friend class MouseState
Definition: worldspacewidget.hpp:286
bool mShowToolTips
Definition: worldspacewidget.hpp:66
static DropType getDropType(const std::vector< CSMWorld::UniversalId > &data)
Definition: worldspacewidget.cpp:284
unsigned int index1
Definition: worldspacewidget.hpp:42
virtual void setEditLock(bool locked)
Definition: worldspacewidget.cpp:353
virtual void handleInteractionPress(const WorldspaceHitResult &hit, InteractionType type)
Definition: worldspacewidget.cpp:692
virtual void referenceableDataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight)=0
CSVWidget::SceneToolMode * makeNavigationSelector(CSVWidget::SceneToolbar *parent)
Definition: worldspacewidget.cpp:174
void elementSelectionChanged()
Definition: worldspacewidget.cpp:599
Definition: worldspacewidget.hpp:38
Definition: worldspacewidget.hpp:192
void dragMoveEvent(QDragMoveEvent *event)
Definition: worldspacewidget.cpp:486
Definition: worldspacewidget.hpp:77
virtual void pathgridDataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight)=0
virtual void pathgridAdded(const QModelIndex &parent, int start, int end)=0
double mDragShiftFactor
Definition: worldspacewidget.hpp:63
WorldspaceHitResult mousePick(const QPoint &localPos, unsigned int interactionMask) const
Definition: worldspacewidget.cpp:378
virtual void addEditModeSelectorButtons(CSVWidget::SceneToolMode *tool)
Definition: worldspacewidget.cpp:366
virtual void referenceableAdded(const QModelIndex &index, int start, int end)=0
void editModeChanged(const std::string &id)
Definition: worldspacewidget.cpp:577
~WorldspaceWidget()
Definition: worldspacewidget.cpp:122
Definition: worldspacewidget.hpp:82
virtual void invertSelection(int elementMask)=0
void dropEvent(QDropEvent *event)
Definition: worldspacewidget.cpp:506
virtual Cell * getCell(const osg::Vec3d &point) const =0
void showToolTip()
Definition: worldspacewidget.cpp:584
Definition: worldspacewidget.hpp:85
QTimer mToolTipDelayTimer
Definition: worldspacewidget.hpp:64
virtual std::vector< osg::ref_ptr< TagBase > > getEdited(unsigned int elementMask) const =0
Definition: setting.hpp:22
CSVWidget::SceneToolToggle2 * mSceneElements
Definition: worldspacewidget.hpp:50
bool mDragging
Definition: worldspacewidget.hpp:57
virtual void runRequest(const std::string &profile)
Definition: worldspacewidget.cpp:525
unsigned int mInteractionMask
Definition: worldspacewidget.hpp:53
Definition: worldspacewidget.hpp:193
int mToolTipDelay
Definition: worldspacewidget.hpp:67
Definition: document.hpp:57
Definition: worldspacewidget.hpp:76
Multi-Toggle tool.
Definition: scenetooltoggle2.hpp:19
void centerOrbitCameraOnSelection()
Definition: worldspacewidget.cpp:161
virtual void selectAll(int elementMask)=0
EditMode * getEditMode()
Definition: worldspacewidget.cpp:706
Definition: worldspacewidget.hpp:191
Definition: scenetoolrun.hpp:15
Definition: worldspacewidget.hpp:189
bool mLocked
Definition: worldspacewidget.hpp:55
DropType
Definition: worldspacewidget.hpp:72
Definition: cell.hpp:44
Definition: worldspacewidget.hpp:74
unsigned int index2
Definition: worldspacewidget.hpp:42
dropRequirments
Definition: worldspacewidget.hpp:80
void secondarySelect(bool activate)
Definition: worldspacewidget.cpp:726
void dataDropped(const std::vector< CSMWorld::UniversalId > &data)
void debugProfileDataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight)
Definition: worldspacewidget.cpp:530
void handleInteraction(InteractionType type, bool activate)
Definition: worldspacewidget.cpp:736
Definition: worldspacewidget.hpp:94
Definition: scenetoolbar.hpp:12
void primaryEdit(bool activate)
Definition: worldspacewidget.cpp:711
int mDragMode
Definition: worldspacewidget.hpp:56
void secondaryEdit(bool activate)
Definition: worldspacewidget.cpp:716
double mDragFactor
Definition: worldspacewidget.hpp:61
CSMDoc::Document & getDocument()
Definition: worldspacewidget.cpp:373
void primarySelect(bool activate)
Definition: worldspacewidget.cpp:721
void speedMode(bool activate)
Definition: worldspacewidget.cpp:731
QPoint mToolTipPos
Definition: worldspacewidget.hpp:65
void abortDrag()
Definition: worldspacewidget.cpp:454
bool mSpeedMode
Definition: worldspacewidget.hpp:60
void debugProfileAboutToBeRemoved(const QModelIndex &parent, int start, int end)
Definition: worldspacewidget.cpp:556
virtual void addVisibilitySelectorButtons(CSVWidget::SceneToolToggle2 *tool)
Definition: worldspacewidget.cpp:358
virtual void updateOverlay()
Definition: worldspacewidget.cpp:606
Definition: editmode.hpp:19
WorldspaceWidget(CSMDoc::Document &document, QWidget *parent=0)
Definition: worldspacewidget.cpp:35
virtual void mouseMoveEvent(QMouseEvent *event)
Definition: worldspacewidget.cpp:610
virtual void wheelEvent(QWheelEvent *event)
Definition: worldspacewidget.cpp:675
double mDragWheelFactor
Definition: worldspacewidget.hpp:62
virtual void settingChanged(const CSMPrefs::Setting *setting)
Definition: worldspacewidget.cpp:126
CSVWidget::SceneToolMode * makeEditModeSelector(CSVWidget::SceneToolbar *parent)
Definition: worldspacewidget.cpp:271
virtual void reset(unsigned int elementMask)=0
Erase all overrides and restore the visual representation to its true state.