Isis 3 Programmer Reference
CubeDnView.cpp
Go to the documentation of this file.
1 
23 #include "CubeDnView.h"
24 
25 #include <QAction>
26 #include <QDebug>
27 #include <QHBoxLayout>
28 #include <QKeySequence>
29 #include <QMap>
30 #include <QMdiArea>
31 #include <QMdiSubWindow>
32 #include <QMenu>
33 #include <QMenuBar>
34 #include <QModelIndex>
35 #include <QSize>
36 #include <QStatusBar>
37 #include <QToolBar>
38 #include <QToolButton>
39 #include <QVBoxLayout>
40 #include <QWidgetAction>
41 #include <QXmlStreamWriter>
42 
43 #include "AdvancedTrackTool.h"
44 #include "BandTool.h"
45 #include "BlinkTool.h"
46 #include "Cube.h"
47 #include "CubeAttribute.h"
48 #include "Directory.h"
49 #include "EditTool.h"
50 #include "FeatureNomenclatureTool.h"
51 #include "FileName.h"
52 #include "FileTool.h"
53 #include "FindTool.h"
54 #include "HistogramTool.h"
55 #include "Image.h"
56 #include "ImageList.h"
57 #include "ControlNetTool.h"
58 #include "IString.h"
59 #include "MatchTool.h"
60 #include "MdiCubeViewport.h"
61 #include "MeasureTool.h"
62 #include "PanTool.h"
63 #include "Project.h"
64 #include "ProjectItem.h"
65 #include "ProjectItemModel.h"
66 #include "ProjectItemProxyModel.h"
67 #include "RubberBandTool.h"
68 #include "ScatterPlotTool.h"
69 #include "Shape.h"
70 #include "SpatialPlotTool.h"
71 #include "SpecialPixelTool.h"
72 #include "SpectralPlotTool.h"
73 #include "StatisticsTool.h"
74 #include "StereoTool.h"
75 #include "StretchTool.h"
76 #include "SunShadowTool.h"
77 #include "TrackTool.h"
78 #include "ToolList.h"
79 #include "ToolPad.h"
80 
81 #include "ViewportMdiSubWindow.h"
82 #include "Workspace.h"
83 #include "WindowTool.h"
84 #include "XmlStackedHandlerReader.h"
85 #include "ZoomTool.h"
86 
87 #include "ProjectItemViewMenu.h"
88 
89 namespace Isis {
95  CubeDnView::CubeDnView(Directory *directory, QWidget *parent) :
96  AbstractProjectItemView(parent) {
97  connect( internalModel()->selectionModel(),
98  SIGNAL( currentChanged(const QModelIndex &, const QModelIndex &) ),
99  this, SLOT( onCurrentChanged(const QModelIndex &) ) );
100 
101  connect( internalModel(), SIGNAL( itemAdded(ProjectItem *) ),
102  this, SLOT( onItemAdded(ProjectItem *) ) );
103 
105 
106  m_workspace = new Workspace(false, this);
107  m_workspace->mdiArea()->setActivationOrder(QMdiArea::StackingOrder);
108 
109  m_directory = directory;
110 
111  // Since this is a QMainWindow, set the workspace as the central widget.
112  setCentralWidget(m_workspace);
113 
114  createActions(directory);
115 
116  connect(m_workspace, SIGNAL( cubeViewportActivated(MdiCubeViewport *) ),
117  this, SLOT( onCubeViewportActivated(MdiCubeViewport *) ) );
118 
119  connect(m_workspace, SIGNAL( cubeViewportAdded(MdiCubeViewport *) ),
120  this, SLOT( onCubeViewportAdded(MdiCubeViewport *) ) );
121  }
122 
123 
124  void CubeDnView::createActions(Directory *directory) {
125 
126  m_permToolBar = new QToolBar("Standard Tools", this);
127  m_permToolBar->setObjectName("permToolBar");
128  m_permToolBar->setIconSize(QSize(22, 22));
129  addToolBar(m_permToolBar);
130 
131  m_activeToolBar = new QToolBar("Active Tool", this);
132  m_activeToolBar->setObjectName("activeToolBar");
133  m_activeToolBar->setIconSize(QSize(22, 22));
134  addToolBar(m_activeToolBar);
135 
136  m_toolPad = new ToolPad("Tool Pad", this);
137  m_toolPad->setObjectName("toolPad");
138  addToolBar(Qt::RightToolBarArea, m_toolPad);
139 
140  // Create tools
141  ToolList *tools = new ToolList;
142 
143  tools->append(new RubberBandTool(this));
144 
145  // 2018-07-02 Kaitlyn Lee - Commented this out; not sure why it was here
146  //tools->append(NULL);
147 
148  ControlNetTool *controlNetTool = new ControlNetTool(directory, this);
149  tools->append(controlNetTool);
150 
151  if (directory->project()->activeControl()) {
152  controlNetTool->setControlNet(directory->project()->activeControl()->controlNet());
153  }
154  // Pass on Signals emitted from ControlNetTool
155  // TODO 2016-09-09 TLS Design: Use a proxy model instead of signals?
156  connect(controlNetTool, SIGNAL(modifyControlPoint(ControlPoint *, QString)),
157  this, SIGNAL(modifyControlPoint(ControlPoint *, QString)));
158 
159  connect(controlNetTool, SIGNAL(deleteControlPoint(ControlPoint *)),
160  this, SIGNAL(deleteControlPoint(ControlPoint *)));
161 
162  connect(controlNetTool, SIGNAL(createControlPoint(double, double, Cube *, bool)),
163  this, SIGNAL(createControlPoint(double, double, Cube *, bool)));
164 
165  // Pass on signals emitted from Directory (by way of ControlPointEditWidget)
166  // This is done to redraw the control points on the cube viewports
167  connect(this, SIGNAL(controlPointAdded(QString)), controlNetTool, SLOT(paintAllViewports()));
168 
169  // Pass on redrawMeasure signal from Directory, so the control measures are redrawn on all
170  // CubeViewports.
171  connect(this, SIGNAL(redrawMeasures()), controlNetTool, SLOT(paintAllViewports()));
172 
173  tools->append(new BandTool(this));
174  ZoomTool *zoomTool = new ZoomTool(this);
175  tools->append(zoomTool);
176  tools->append(new PanTool(this));
177  tools->append(new StretchTool(this));
178  tools->append(new FindTool(this));
179  tools->append(new BlinkTool(this));
180  tools->append(new AdvancedTrackTool(this));
181  tools->append(new EditTool(this));
182  tools->append(new WindowTool(this));
183  tools->append(new MeasureTool(this));
184  tools->append(new SunShadowTool(this));
185  tools->append(new FeatureNomenclatureTool(this));
186  tools->append(new SpecialPixelTool(this));
187  tools->append(new SpatialPlotTool(this));
188  tools->append(new SpectralPlotTool(this));
189  tools->append(new ScatterPlotTool(this));
190  tools->append(new HistogramTool(this));
191  tools->append(new StatisticsTool(this));
192  tools->append(new StereoTool(this));
193  tools->append(new TrackTool(statusBar()));
194 
195  m_separatorAction = new QAction(this);
196  m_separatorAction->setSeparator(true);
197 
198  m_viewMenu = new ProjectItemViewMenu("&View");
199  connect(m_viewMenu, SIGNAL(menuClosed()), this, SLOT(disableActions()));
200  menuBar()->addMenu(m_viewMenu);
201 
202  m_optionsMenu = new ProjectItemViewMenu("&Options");
203  connect(m_optionsMenu, SIGNAL(menuClosed()), this, SLOT(disableActions()));
204  menuBar()->addMenu(m_optionsMenu);
205 
206  m_windowMenu = new ProjectItemViewMenu("&Window");
207  connect(m_windowMenu, SIGNAL(menuClosed()), this, SLOT(disableActions()));
208  menuBar()->addMenu(m_windowMenu);
209 
210  for (int i = 0; i < tools->count(); i++) {
211  Tool *tool = (*tools)[i];
212 
213  if (tool) {
214  tool->addTo(m_workspace);
217  tool->addTo(m_toolPad);
218 
219  if (!tool->menuName().isEmpty()) {
220  QString menuName = tool->menuName();
221 
222  if (menuName == "&View") {
223  tool->addTo(m_viewMenu);
224  }
225  else if (menuName == "&Options") {
226  tool->addTo(m_optionsMenu);
227  }
228  else if (menuName == "&Window") {
229  tool->addTo(m_windowMenu);
230  }
231  }
232  }
233  else {
234  m_permToolBar->addSeparator();
235  }
236  }
237 
238  // Store the actions and widgets for easy enable/disable.
239  foreach (QAction *action, findChildren<QAction *>()) {
240  // Remove the edit tool's save button shortcut because the ipce main window
241  // already has one and this causes an ambiquous shortcut error.
242  if (action->toolTip() == "Save") {
243  action->setShortcut(QKeySequence());
244  }
245  // The active toolbar's actions are inside of a container that is a QWidgetAction.
246  // We want to skip adding this because we want to disable the active toolbar's
247  // actions separately to skip the combo boxes.
248  if (QString(action->metaObject()->className()) == "QWidgetAction") {
249  continue;
250  }
251  addAction(action);
252  }
253 
254  // There was a problem with disabling/enabling the combo boxes. The only way to
255  // get this to work was to skip disabling the combo boxes. We also skip QWidgets
256  // because the combo boxes are contained inside of a QWidget.
257  foreach (QWidget *child, m_activeToolBar->findChildren<QWidget *>()) {
258  if (QString(child->metaObject()->className()).contains("ComboBox") ||
259  QString(child->metaObject()->className()).contains("Widget")) {
260  continue;
261  }
262  m_childWidgets.append(child);
263  }
264 
265  // On default, actions are disabled until the cursor enters the view.
266  disableActions();
267 
268  zoomTool->activate(true);
269  }
270 
271 
280  void CubeDnView::leaveEvent(QEvent *event) {
281  if (m_optionsMenu->isVisible() || m_viewMenu->isVisible() || m_windowMenu->isVisible()) {
282  return;
283  }
284  // Find the toolpad actions (buttons) with menus and check if they are visible
285  foreach (QToolButton *button, findChildren<QToolButton *>()) {
286  if (button->menu() && button->menu()->isVisible()) {
287  return;
288  }
289  }
290  disableActions();
291  }
292 
293 
298  foreach (QAction *action, actions()) {
299  action->setDisabled(true);
300  }
301  foreach (QWidget *widget, m_childWidgets) {
302  widget->setDisabled(true);
303  }
304  }
305 
306 
312  foreach (QAction *action, actions()) {
313  if (action->objectName() == "ControlNetTool" && !m_directory->project()->activeControl()) {
314  continue;
315  }
316  action->setEnabled(true);
317  }
318  foreach (QWidget *widget, m_childWidgets) {
319  widget->setEnabled(true);
320  }
321  }
322 
323 
332  foreach (QAction *action, m_toolPad->actions()) {
333  if (action->objectName() == "ControlNetTool") {
334  action->setEnabled(value);
335  if (value) {
336  ControlNetTool *cnetTool = static_cast<ControlNetTool *>(action->parent());
337  cnetTool->loadNetwork();
338  }
339  }
340  }
341  }
342 
347  delete m_permToolBar;
348  delete m_activeToolBar;
349  delete m_toolPad;
350  delete m_viewMenu;
351  delete m_optionsMenu;
352  delete m_windowMenu;
353 
354 
355  m_permToolBar = 0;
356  m_activeToolBar = 0;
357  m_toolPad = 0;
358  m_viewMenu = 0;
359  m_optionsMenu = 0;
360  m_windowMenu = 0;
361  }
362 
363 
371  if ( !item->isImageList() && !item->isImage() && !item->isShapeList() && !item->isShape()) {
372  return;
373  }
374 
376  }
377 
378 
379  bool CubeDnView::viewportContainsShape(MdiCubeViewport *viewport) {
380 
381  ProjectItem *item = m_cubeItemMap.value( viewport->cube() );
382 
383  if (!item) {
384  return false;
385  }
386 
387  return item->isShape();
388  }
389 
397  void CubeDnView::onCurrentChanged(const QModelIndex &current) {
398 
399  ProjectItem *item = internalModel()->itemFromIndex(current);
400 
401  if (!item) {
402  return;
403  }
404 
405  if (!item->isImage()) {
406  return;
407  }
408 
409  setWorkspaceActiveCube(item->image());
410  }
411 
412 
421  if ( !isVisible() ) {
422  return;
423  }
424 
425  if (!viewport) {
426  return;
427  }
428 
429  ProjectItem *item = m_cubeItemMap.value( viewport->cube() );
430 
431  if (!item) {
432  return;
433  }
434 
435  internalModel()->selectionModel()->setCurrentIndex(item->index(),
436  QItemSelectionModel::SelectCurrent);
437  }
438 
439 
448  connect(viewport, SIGNAL( destroyed(QObject *) ),
449  this, SLOT( onCubeViewportDeleted(QObject *) ) );
450  }
451 
452 
460  MdiCubeViewport *viewport = qobject_cast<MdiCubeViewport *>(obj);
461 
462  if (!viewport) {
463  return;
464  }
465 
466  if ( ProjectItemProxyModel *proxyModel =
467  qobject_cast<ProjectItemProxyModel *>( internalModel() ) ) {
468  proxyModel->removeItem( m_cubeItemMap.value( viewport->cube() ) );
469  }
470  }
471 
472 
481 
482  if (!item) {
483  return;
484  }
485  Cube *cube;
486  if (item->isImage()) {
487  cube = item->image()->cube();
488  }
489  else if (item->isShape()) {
490  cube = item->shape()->cube();
491  }
492  else {
493  return;
494  }
495  if (m_workspace->cubeToMdiWidget(cube)) {
496  return;
497  }
499  m_cubeItemMap.insert(cube, item);
500  }
501 
502 
510  QMdiArea *mdiArea = m_workspace->mdiArea();
511  ViewportMdiSubWindow *subWindow = qobject_cast<ViewportMdiSubWindow *>( mdiArea->currentSubWindow() );
512  if (!subWindow) {
513  return 0;
514  }
515  MdiCubeViewport *viewport = subWindow->viewport();
516  return viewport->cube();
517  }
518 
519 
524  if (!image) {
525  return;
526  }
527 
528  QWidget *mdiWidget = m_workspace->cubeToMdiWidget(image->cube());
529 
530  if (!mdiWidget) {
531  return;
532  }
533 
534  QMdiSubWindow *subWindow = qobject_cast<QMdiSubWindow *>( mdiWidget->parent() );
535 
536  if (!subWindow) {
537  return;
538  }
539 
540  subWindow->raise();
541 
542  // Activating the subwindow activates the view, which is annoying
543  //m_workspace->mdiArea()->setActiveSubWindow(subWindow);
544  }
545 
546 
547  void CubeDnView::load(XmlStackedHandlerReader *xmlReader, Project *project) {
548  xmlReader->pushContentHandler(new XmlHandler(this, project));
549  }
550 
551 
552  void CubeDnView::save(QXmlStreamWriter &stream, Project *, FileName) const {
553  stream.writeStartElement("cubeDnView");
554  stream.writeAttribute("objectName", objectName());
555 
556  foreach (MdiCubeViewport *cvp, *(m_workspace->cubeViewportList())) {
557  ProjectItem *item = m_cubeItemMap.value(cvp->cube());
558  if (item->isImage()) {
559  stream.writeStartElement("image");
560  stream.writeAttribute("id", item->image()->id());
561  }
562  else if (item->isShape()) {
563  stream.writeStartElement("shape");
564  stream.writeAttribute("id", item->shape()->id());
565  }
566  stream.writeEndElement();
567  }
568  stream.writeEndElement();
569  }
570 
571 
572  CubeDnView::XmlHandler::XmlHandler(CubeDnView *cubeDnView, Project *project) {
573 
574  m_cubeDnView = cubeDnView;
575  m_project = project;
576  }
577 
578 
579  CubeDnView::XmlHandler::~XmlHandler() {
580  }
581 
582 
583  bool CubeDnView::XmlHandler::startElement(const QString &namespaceURI,
584  const QString &localName, const QString &qName, const QXmlAttributes &atts) {
585  bool result = XmlStackedHandler::startElement(namespaceURI, localName, qName, atts);
586 
587  if (result) {
588  ProjectItemProxyModel *proxy = (ProjectItemProxyModel *) m_cubeDnView->internalModel();
589  ProjectItemModel *source = proxy->sourceModel();
590  QString id = atts.value("id");
591 
592  ProjectItem *item = NULL;
593  if (localName == "image") {
594  Image *image = m_project->image(id);
595  if (image) {
596  // Find ProjectItem and append to list
597  item = source->findItemData(qVariantFromValue(image));
598  }
599  }
600  else if (localName == "shape") {
601  Shape *shape = m_project->shape(id);
602  if (shape) {
603  item = source->findItemData(qVariantFromValue(shape));
604  }
605  }
606  if (item) {
607  proxy->addItem(item);
608  }
609  }
610 
611  return result;
612  }
613 
614 
615  bool CubeDnView::XmlHandler::endElement(const QString &namespaceURI,
616  const QString &localName, const QString &qName) {
617  bool result = XmlStackedHandler::endElement(namespaceURI, localName, qName);
618 
619  return result;
620  }
621 }
Cube display widget for certain Isis MDI applications.
void setWorkspaceActiveCube(Image *image)
Raises the subwindow corresponding with an image to the top.
Definition: CubeDnView.cpp:523
CubeDnView * m_cubeDnView
The view we are working with.
Definition: CubeDnView.h:174
bool isImageList() const
Returns true if an ImageList is stored in the data of the item.
$Revision$ $Date$
virtual void addItem(ProjectItem *item)
Adds an item to the view.
$Date$ $Revision$
bool isShapeList() const
Returns true if an ShapeList is stored in the data of the item.
void onItemAdded(ProjectItem *item)
Slot to connect to the itemAdded signal from a ProjectItemModel.
Definition: CubeDnView.cpp:480
Cube * cube() const
Definition: CubeViewport.h:348
The main project for ipce.
Definition: Project.h:289
bool isImage() const
Returns true if an Image is stored in the data of the item.
Workspace * m_workspace
The workspace.
Definition: CubeDnView.h:179
void addToActive(QToolBar *toolbar)
Definition: Tool.cpp:112
ProjectItemViewMenu * m_viewMenu
View menu for storing actions.
Definition: CubeDnView.h:182
File name manipulation and expansion.
Definition: FileName.h:116
ProjectItem * itemFromIndex(const QModelIndex &index)
Returns the ProjectItem corresponding to a given QModelIndex.
void onCubeViewportActivated(MdiCubeViewport *)
Slot to connect to the cubeViewportActivated signal from the Workspace.
Definition: CubeDnView.cpp:420
$Date$ $Revision$
QToolBar * m_activeToolBar
A tool bar for storing actions.
Definition: CubeDnView.h:189
void onCubeViewportDeleted(QObject *obj)
Slot to connect to the destroyed signal from a viewport.
Definition: CubeDnView.cpp:459
Stretch image edit tool.
Definition: StretchTool.h:99
$Date$ $Revision$
virtual void addToPermanent(QToolBar *toolbar)
Definition: Tool.h:111
QAction * m_separatorAction
A separator action that is reused.
Definition: CubeDnView.h:186
QMenu subclass that overrides the closeEvent.
QMap< Cube *, ProjectItem * > m_cubeItemMap
Maps cubes to their items.
Definition: CubeDnView.h:178
QList< QWidget * > m_childWidgets
Child widgets of the active toolbar.
Definition: CubeDnView.h:191
ProjectItemViewMenu * m_optionsMenu
Options menu for storing actions.
Definition: CubeDnView.h:183
QVector< MdiCubeViewport *> * cubeViewportList()
This method returns a Vector of MdiCubeViewports.
Definition: Workspace.cpp:238
This tool is part of the Qisis namespace and displays the statusbar of the window.
Definition: TrackTool.h:42
Control * activeControl()
Return the Active Control (control network)
Definition: Project.cpp:1903
void disableActions()
Disables toolbars and toolpad actions/widgets.
Definition: CubeDnView.cpp:297
Directory * m_directory
The directory.
Definition: CubeDnView.h:180
Cube * workspaceActiveCube()
Returns the cube of the active viewport in the Workspace, or a null pointer if no viewports are activ...
Definition: CubeDnView.cpp:509
Handles zoom operations for Isis qt apps.
Definition: ZoomTool.h:67
AbstractProjectItemView is a base class for views of a ProjectItemModel in Qt&#39;s model-view framework...
Provides access to data stored in a Project through Qt&#39;s model-view framework.
ProjectItem * addItem(ProjectItem *sourceItem)
Adds an item and its children to the proxy model.
ProjectItem * findItemData(const QVariant &data, int role=Qt::UserRole+1)
Returns the first item found that contains the given data in the given role or a null pointer if no i...
ControlNetTool Handles mouse events on CubeDnViews for control point editing for the ipce app...
virtual ProjectItemModel * internalModel()
Returns the internal model of the view.
CubeDnView(Directory *directory, QWidget *parent=0)
Constructs the view, initializing the tools.
Definition: CubeDnView.cpp:95
Interactive image edit tool.
Definition: EditTool.h:84
Allows access to items in a ProjectItemModel through a proxy model.
void enableControlNetTool(bool value)
A slot function that is called when directory emits a signal that an active control network is set...
Definition: CubeDnView.cpp:331
QItemSelectionModel * selectionModel()
Returns the internal selection model.
Cube * cube()
Get the Cube * associated with this display property.
Definition: Shape.cpp:325
Tool for measuring distances.
Definition: MeasureTool.h:58
Project * m_project
The current project.
Definition: CubeDnView.h:173
Plot cube DN statistics against the cube band numbers.
virtual void pushContentHandler(XmlStackedHandler *newHandler)
Push a contentHandler and maybe continue parsing...
A single control point.
Definition: ControlPoint.h:369
This represents a cube in a project-based GUI interface.
Definition: Image.h:107
ToolPad * m_toolPad
A tool bar for storing actions.
Definition: CubeDnView.h:190
void addTo(ViewportMainWindow *mw)
Adds the tool to the application.
Definition: Tool.cpp:78
Image * image() const
Returns the Image stored in the data of the item.
This is an actual viewport window in qview/qnet/etc.
QString id() const
Get a unique, identifying string associated with this shape.
Definition: Shape.cpp:460
void setControlNet(ControlNet *controlNet)
Set the active control net to be used for editing.
ControlNet * controlNet()
Open and return a pointer to the ControlNet for this Control.
Definition: Control.cpp:142
ProjectItemModel * sourceModel()
Returns the source model.
void onCubeViewportAdded(MdiCubeViewport *viewport)
Slot to connect to the viewportAdded signal from a Workspace.
Definition: CubeDnView.cpp:447
~CubeDnView()
Destructor.
Definition: CubeDnView.cpp:346
QWidget * cubeToMdiWidget(Cube *cube)
Converts a cube to an MdiWidget.
Definition: Workspace.cpp:280
MdiCubeViewport * viewport()
Grabs the viewport.
Rubber banding tool.
void addItem(ProjectItem *item)
Adds an item to the view.
Definition: CubeDnView.cpp:370
Unless noted otherwise, the portions of Isis written by the USGS are public domain.
Display nomenclature on MDI Cube Viewports.
This represents a shape in a project-based GUI interface.
Definition: Shape.h:78
void addCubeViewport(QString cubename)
Method adds the name of a cube into Workspace as a CubeViewport.
Definition: Workspace.cpp:339
void leaveEvent(QEvent *event)
Disables actions when the cursor leaves the view.
Definition: CubeDnView.cpp:280
Shape * shape() const
Returns the Shape stored in the data of the item.
View that displays cubes in a QView-like way.
Definition: CubeDnView.h:111
QString id() const
Get a unique, identifying string associated with this image.
Definition: Image.cpp:445
QToolBar * m_permToolBar
A tool bar for storing actions.
Definition: CubeDnView.h:188
Represents an item of a ProjectItemModel in Qt&#39;s model-view framework.
Definition: ProjectItem.h:146
Tool to locate a point on a cube that is projected and/or has a camera model.
Definition: FindTool.h:128
Namespace for ISIS/Bullet specific routines.
Definition: Apollo.h:31
Project * project() const
Gets the Project for this directory.
Definition: Directory.cpp:1325
Base class for the Qisis tools.
Definition: Tool.h:81
Cube * cube()
Get the Cube pointer associated with this display property.
Definition: Image.cpp:287
QMdiArea * mdiArea()
This method returns the QMdiArea.
Definition: Workspace.cpp:295
bool isShape() const
Returns true if an Shape is stored in the data of the item.
Tool for histograms.
Definition: HistogramTool.h:40
Tool for measuring shadow heights.
Definition: SunShadowTool.h:39
void onCurrentChanged(const QModelIndex &current)
Slot to connect to the currentChanged() signal from a selection model.
Definition: CubeDnView.cpp:397
Scatter Plot Tool.
virtual QString menuName() const
Anytime a tool is created, you must give it a name for the menu.
Definition: Tool.h:97
void activate(bool)
Activates the tool.
Definition: Tool.cpp:131
Sets the colors for the special pixel values.
void enableActions()
Enables toolbars and toolpad actions/widgets.
Definition: CubeDnView.cpp:311
Manage a stack of content handlers for reading XML files.
Tool to display info for a point on a cube.
ProjectItemViewMenu * m_windowMenu
Window menu for storing actions.
Definition: CubeDnView.h:184
Tool for computing parallax.
Definition: StereoTool.h:59
Allows tools to share data between each other.
Definition: ToolList.h:46
IO Handler for Isis Cubes.
Definition: Cube.h:170