Isis 3.0
Home
MosaicSceneWidget.h
Go to the documentation of this file.
1 #ifndef MosaicSceneWidget_H
2 #define MosaicSceneWidget_H
3 
4 #include <QWidget>
5 
6 #include "ImageList.h"
7 #include "Pvl.h"
8 
9 template <typename A> class QList;
10 
11 class QGraphicsPolygonItem;
12 class QGraphicsRectItem;
13 class QGraphicsScene;
14 class QGraphicsSceneContextMenuEvent;
15 class QMenu;
16 class QProgressBar;
17 class QRubberBand;
18 class QStatusBar;
19 class QToolBar;
20 class QToolButton;
21 
22 namespace Isis {
23  class ControlPoint;
24  class Directory;
25  class Image;
26  class MosaicGraphicsView;
27  class MosaicSceneItem;
28  class MosaicTool;
29  class ProgressBar;
30  class Projection;
31  class PvlGroup;
32  class PvlObject;
33  class ToolPad;
34 
141  class MosaicSceneWidget : public QWidget {
142  Q_OBJECT
143 
144  public:
145  MosaicSceneWidget(QStatusBar *status,
146  bool showTools, bool internalizeToolBarsAndProgress,
147  Directory *directory, QWidget *parent = 0);
148  virtual ~MosaicSceneWidget();
149 
151  return m_graphicsView;
152  }
153 
155  return m_graphicsScene;
156  }
157 
159  return m_projection;
160  }
161 
163  return *m_mosaicSceneItems;
164  }
165 
166  void addTo(QMenu *menu);
167  void addTo(ToolPad *toolPad);
168  void addToPermanent(QToolBar *toolBar);
169  void addTo(QToolBar *toolBar);
170 
171  using QWidget::contextMenuEvent;
172  bool contextMenuEvent(QGraphicsSceneContextMenuEvent *event);
173 
175 
176  bool cubesSelectable() const {
177  return m_cubesSelectable;
178  }
179 
180  void enableRubberBand(bool);
181  bool blockSelectionChange(bool);
182 
183  bool userHasTools() const {
184  return m_userToolControl;
185  }
186 
188  PvlObject toPvl() const;
189  void fromPvl(const PvlObject &);
190  void load(XmlStackedHandlerReader *xmlReader);
191  void save(QXmlStreamWriter &stream, Project *project, FileName newProjectRoot) const;
192 
193 // QPointF currentLatLonPosition();
194  QRectF cubesBoundingRect() const;
196  Directory *directory() const;
197 
198  ImageList images();
200 
204 
205  double moveDownOne(MosaicSceneItem *);
206  double moveDownOne(Image *);
207  QList<double> moveDownOne(ImageList *);
208 
209  double moveToBottom(MosaicSceneItem *);
210  double moveToBottom(Image *);
211  QList<double> moveToBottom(ImageList *);
212 
213  double moveUpOne(MosaicSceneItem *);
214  double moveUpOne(Image *);
215  QList<double> moveUpOne(ImageList *);
216 
217  double moveToTop(MosaicSceneItem *);
218  double moveToTop(Image *);
219  QList<double> moveToTop(ImageList *);
220 
221  double moveZ(MosaicSceneItem *sceneItem, double newZ, bool newZValueMightExist = true);
222  double moveZ(Image *image, double newZ, bool newZValueMightExist = true);
223 
227  template <typename DataType>
229  return QList<QAction *>();
230  }
231 
232  bool isControlNetToolActive();
233 
234  static QWidget *getControlNetHelp(QWidget *cnetToolContainer = NULL);
235  static QWidget *getGridHelp(QWidget *gridToolContainer = NULL);
236  static QWidget *getLongHelp(QWidget *mosaicSceneContainer = NULL);
237  static QWidget *getMapHelp(QWidget *mapContainer = NULL);
238  static QWidget *getPreviewHelp(QWidget *worldViewContainer = NULL);
239 
240  signals:
241  void mouseEnter();
242  void mouseMove(QPointF);
243  void mouseLeave();
244  void mouseDoubleClick(QPointF);
245  void mouseButtonPress(QPointF, Qt::MouseButton s);
246  void mouseButtonRelease(QPointF, Qt::MouseButton s);
247  void mouseWheel(QPointF, int delta);
249  void rubberBandComplete(QRectF r, Qt::MouseButton s);
250  void visibleRectChanged(QRectF);
251 
252  void cubesChanged();
253 
254  void queueSelectionChanged();
255 
256  void modifyControlPoint(ControlPoint *controlPoint);
257  void deleteControlPoint(ControlPoint *controlPoint);
258  void createControlPoint(double latitude, double longitude);
259 
261 
262  void controlPointChanged(QString pointId);
263  void controlPointAdded(QString pointId);
264 
265  void deleteControlPoint(QString pointId);
266  void controlPointDeleted();
267 
268  public slots:
269  void addImages(ImageList);
270  void removeImages(ImageList);
271  void refit();
272  void setCubesSelectable(bool);
273  void setProjection(Projection *);
274  void setOutlineRect(QRectF);
275 
276  private slots:
277  void exportView();
278  void saveList();
279 
280  void removeMosItem(QObject *);
281 
282  void moveDownOne();
283  void moveToBottom();
284  void moveUpOne();
285  void moveToTop();
286  void fitInView();
287 
288  void onSelectionChanged();
289  void onQueuedSelectionChanged();
290 
291  void configProjectionParameters();
292  void quickConfigProjectionParameters();
293  void sendVisibleRectChanged();
294 
295  protected:
296  virtual bool eventFilter(QObject *obj, QEvent *ev);
297 
298  private:
299  void setProjection(const PvlGroup &mappingGroup, Pvl label=Pvl());
300  MosaicSceneItem *addImage(Image *image);
301  void reprojectItems();
302  double maximumZ();
303  double minimumZ();
304  void recalcSceneRect();
305 
306  MosaicSceneItem *getNextItem(MosaicSceneItem *item, bool up);
307 
308  PvlGroup createInitialProjection(Image *cube);
309 
311 
312  static bool zOrderGreaterThan(MosaicSceneItem *first,
313  MosaicSceneItem *second);
314 
315  private:
321  class XmlHandler : public XmlStackedHandler {
322  public:
323  XmlHandler(MosaicSceneWidget *scene);
324  ~XmlHandler();
325 
326  virtual bool startElement(const QString &namespaceURI, const QString &localName,
327  const QString &qName, const QXmlAttributes &atts);
328  virtual bool characters(const QString &ch);
329  virtual bool endElement(const QString &namespaceURI, const QString &localName,
330  const QString &qName);
331 
332  private:
333  Q_DISABLE_COPY(XmlHandler);
334 
335  QString m_characterData;
336  MosaicSceneWidget *m_scene;
337 
338  int m_scrollBarXValue;
339  int m_scrollBarYValue;
340 
341  ImageList *m_imagesToAdd;
342  QList<double> m_imageZValues;
343  };
344 
345  private:
346  Directory *m_directory;
347 
348  bool m_cubesSelectable;
349  bool m_customRubberBandEnabled;
350  QRubberBand *m_customRubberBand;
351  QPoint *m_rubberBandOrigin;
352  QGraphicsScene *m_graphicsScene;
353  MosaicGraphicsView *m_graphicsView;
354  Projection *m_projection;
355  QList<MosaicSceneItem *> *m_mosaicSceneItems;
356  QMap<DisplayProperties *, MosaicSceneItem *> m_displayPropsToMosaicSceneItemMap;
357  QGraphicsRectItem *m_outlineRect;
358 
359  QToolButton *m_mapButton;
360  QAction *m_quickMapAction;
361 
362  QList<MosaicTool *> *m_tools;
363 
364  ToolPad *m_toolpad;
365 
366  QToolBar *m_permToolbar;
367  QToolBar *m_activeToolbar;
368 
369  ProgressBar *m_progress;
370 
371  QHash<QString, double> *m_projectImageZOrders;
372 
373  bool m_blockingSelectionChanged;
374  bool m_userToolControl;
375  bool m_ownProjection;
376  bool m_queuedSelectionChanged;
377  bool m_shouldRequeueSelectionChanged;
378 
379  double m_currentMinimumFootprintZ;
380  double m_currentMaximumFootprintZ;
381 
382  PvlObject *m_projectViewTransform;
383  };
384 }
385 
386 #endif
387 
bool cubesSelectable() const
Definition: MosaicSceneWidget.h:176
QRectF cubesBoundingRect() const
Definition: MosaicSceneWidget.cpp:701
bool blockSelectionChange(bool)
Definition: MosaicSceneWidget.cpp:528
Internalizes a list of images and allows for operations on the entire list.
Definition: ImageList.h:44
void load(XmlStackedHandlerReader *xmlReader)
Definition: MosaicSceneWidget.cpp:642
The main project for cnetsuite.
Definition: Project.h:105
void setCubesSelectable(bool)
Definition: MosaicSceneWidget.cpp:1531
A graphics view that resizes in a more friendly way.
Definition: MosaicGraphicsView.h:14
void createControlPoint(double latitude, double longitude)
Definition: moc_MosaicSceneWidget.cpp:535
void setProjection(Projection *)
This method takes ownership of proj.
Definition: MosaicSceneWidget.cpp:305
File name manipulation and expansion.
Definition: FileName.h:111
void controlPointChanged(QString pointId)
Definition: moc_MosaicSceneWidget.cpp:549
QList< MosaicSceneItem * > allMosaicSceneItems()
Definition: MosaicSceneWidget.h:162
static QWidget * getMapHelp(QWidget *mapContainer=NULL)
Definition: MosaicSceneWidget.cpp:1108
This widget encompasses the entire mosaic scene.
Definition: MosaicSceneWidget.h:141
MosaicSceneWidget(QStatusBar *status, bool showTools, bool internalizeToolBarsAndProgress, Directory *directory, QWidget *parent=0)
Create a scene widget.
Definition: MosaicSceneWidget.cpp:65
void save(QXmlStreamWriter &stream, Project *project, FileName newProjectRoot) const
Definition: MosaicSceneWidget.cpp:648
void mouseDoubleClick(QPointF)
Definition: moc_MosaicSceneWidget.cpp:460
void addImages(ImageList)
Definition: MosaicSceneWidget.cpp:1386
void mouseWheel(QPointF, int delta)
Definition: moc_MosaicSceneWidget.cpp:481
QGraphicsScene * getScene() const
Definition: MosaicSceneWidget.h:154
void deleteControlPoint(ControlPoint *controlPoint)
Definition: moc_MosaicSceneWidget.cpp:528
MosaicGraphicsView * getView() const
Definition: MosaicSceneWidget.h:150
void enableRubberBand(bool)
Definition: MosaicSceneWidget.cpp:512
bool contextMenuEvent(QGraphicsSceneContextMenuEvent *event)
This is called by MosaicGraphicsScene::contextMenuEvent.
Definition: MosaicSceneWidget.cpp:457
void refit()
This method refits t:he items in the graphics view.
Definition: MosaicSceneWidget.cpp:1517
virtual bool eventFilter(QObject *obj, QEvent *ev)
Definition: MosaicSceneWidget.cpp:1571
double moveZ(MosaicSceneItem *sceneItem, double newZ, bool newZValueMightExist=true)
This method moves the given scene item to the given Z value.
Definition: MosaicSceneWidget.cpp:1999
PvlObject toPvl() const
Definition: MosaicSceneWidget.cpp:542
void mouseLeave()
Definition: moc_MosaicSceneWidget.cpp:454
void cubesChanged()
Definition: moc_MosaicSceneWidget.cpp:509
static QWidget * getGridHelp(QWidget *gridToolContainer=NULL)
Definition: MosaicSceneWidget.cpp:966
static QWidget * getLongHelp(QWidget *mosaicSceneContainer=NULL)
Definition: MosaicSceneWidget.cpp:1058
QList< QAction * > getExportActions()
Definition: MosaicSceneWidget.cpp:806
QList< QAction * > supportedActions(ImageList *)
Get a list of actions this scene can perform given &quot;images&quot;.
Definition: MosaicSceneWidget.cpp:839
void queueSelectionChanged()
Definition: moc_MosaicSceneWidget.cpp:515
void mouseButtonRelease(QPointF, Qt::MouseButton s)
Definition: moc_MosaicSceneWidget.cpp:474
static QWidget * getPreviewHelp(QWidget *worldViewContainer=NULL)
Definition: MosaicSceneWidget.cpp:1266
Base class for Map Projections.
Definition: Projection.h:169
bool isControlNetToolActive()
Definition: MosaicSceneWidget.cpp:880
void controlPointDeleted()
Definition: moc_MosaicSceneWidget.cpp:570
static QWidget * getControlNetHelp(QWidget *cnetToolContainer=NULL)
Definition: MosaicSceneWidget.cpp:892
void addTo(QMenu *menu)
Definition: MosaicSceneWidget.cpp:436
Contains multiple PvlContainers.
Definition: PvlGroup.h:57
Definition: DisplayProperties.h:26
ImageList selectedImages()
Returns a list of all the cubes selected in the scene.
Definition: MosaicSceneWidget.cpp:766
MosaicSceneItem * cubeToMosaic(Image *)
Definition: MosaicSceneWidget.cpp:517
XML Handler that parses XMLs in a stack-oriented way.
Definition: XmlStackedHandler.h:47
void mouseButtonPress(QPointF, Qt::MouseButton s)
Definition: moc_MosaicSceneWidget.cpp:467
void controlPointSelected(ControlPoint *)
Definition: moc_MosaicSceneWidget.cpp:542
void mouseEnter()
Definition: moc_MosaicSceneWidget.cpp:441
A single control point.
Definition: ControlPoint.h:339
This represents a cube in a project-based GUI interface.
Definition: Image.h:91
ImageList images()
Definition: MosaicSceneWidget.cpp:748
Projection * getProjection() const
Definition: MosaicSceneWidget.h:158
void setOutlineRect(QRectF)
Definition: MosaicSceneWidget.cpp:330
void fromPvl(const PvlObject &)
Call this method after loading any cubes when loading a project.
Definition: MosaicSceneWidget.cpp:599
Container for cube-like labels.
Definition: Pvl.h:135
void mouseMove(QPointF)
Definition: moc_MosaicSceneWidget.cpp:447
void addToPermanent(QToolBar *toolBar)
Definition: MosaicSceneWidget.cpp:394
void rubberBandComplete(QRectF r, Qt::MouseButton s)
Definition: moc_MosaicSceneWidget.cpp:495
QStringList cubeFileNames()
Definition: MosaicSceneWidget.cpp:730
void controlPointAdded(QString pointId)
Definition: moc_MosaicSceneWidget.cpp:556
void projectionChanged(Projection *)
Definition: moc_MosaicSceneWidget.cpp:488
void removeImages(ImageList)
Definition: MosaicSceneWidget.cpp:1439
Definition: BoxcarCachingAlgorithm.h:29
bool userHasTools() const
Definition: MosaicSceneWidget.h:183
virtual ~MosaicSceneWidget()
Definition: MosaicSceneWidget.cpp:261
QList< QAction * > supportedActions(DataType)
Return an empty list of actions for unknown data types.
Definition: MosaicSceneWidget.h:228
void visibleRectChanged(QRectF)
Definition: moc_MosaicSceneWidget.cpp:502
Contains Pvl Groups and Pvl Objects.
Definition: PvlObject.h:74
QList< QAction * > getViewActions()
Definition: MosaicSceneWidget.cpp:824
A single cube in the mosaic scene.
Definition: MosaicSceneItem.h:45
Definition: Directory.h:106
his enables stack-based XML parsing of XML files.
Definition: XmlStackedHandlerReader.h:26
Definition: CubeIoHandler.h:38
void modifyControlPoint(ControlPoint *controlPoint)
Definition: moc_MosaicSceneWidget.cpp:521
Directory * directory() const
Definition: MosaicSceneWidget.cpp:743
Definition: ToolPad.h:14
QProgressBar * getProgress()
Definition: MosaicSceneWidget.cpp:537