USGS

Isis 3.0 Object Programmers' Reference

Home

AbstractPlotTool.cpp
1 #include "IsisDebug.h"
2 
3 #include "AbstractPlotTool.h"
4 
5 #include "Cube.h"
6 #include "CubePlotCurve.h"
7 #include "MdiCubeViewport.h"
8 #include "PlotWindow.h"
9 
10 #include <QComboBox>
11 #include <QPen>
12 
13 namespace Isis {
14 
24  m_selectWindowCombo->setSizeAdjustPolicy(QComboBox::AdjustToContents);
25  m_selectWindowCombo->setToolTip("Select which plot window to place plot "
26  "curves.");
27  QString selectWindowWhatsThis =
28  "<b>Function:</b> This will allow the selection of a window to place new "
29  "plot curves into. Current curves in this window will be replaced by "
30  "new plot curves. You cannot paste plot curves into this window.";
31  m_selectWindowCombo->setWhatsThis(selectWindowWhatsThis);
32  m_selectWindowCombo->addItem("New Window...");
33  m_selectWindowCombo->setCurrentIndex(-1);
34  connect(m_selectWindowCombo, SIGNAL(currentIndexChanged(int)),
35  this, SLOT(selectedWindowChanged()));
36  }
37 
38 
43  if (m_selectWindowCombo) {
44  // currentIndexChanged wants to call a pure virtual method, which crashes.
45  disconnect(m_selectWindowCombo, SIGNAL(currentIndexChanged(int)),
46  this, SLOT(selectedWindowChanged()));
47 
48  for (int i = m_selectWindowCombo->count(); i >= 0; i--) {
49  QVariant windowVariant = m_selectWindowCombo->itemData(i);
50 
51  if (!windowVariant.isNull() && windowVariant.canConvert<PlotWindow *>()) {
52  PlotWindow *window = windowVariant.value<PlotWindow *>();
53  delete window;
54  window = NULL;
55  }
56  }
57  }
58  }
59 
60 
69  void AbstractPlotTool::paintViewport(MdiCubeViewport *vp, QPainter *painter) {
70  for (int i = 0; i < m_selectWindowCombo->count(); i++) {
71  QVariant windowVariant = m_selectWindowCombo->itemData(i);
72 
73  if (!windowVariant.isNull() && windowVariant.canConvert<PlotWindow *>()) {
74  PlotWindow *window = windowVariant.value<PlotWindow *>();
75  window->paint(vp, painter);
76  }
77  }
78  }
79 
80 
92  QWidget *toolBarWidget = new QWidget(parent);
93  QHBoxLayout *layout = new QHBoxLayout;
94  layout->addWidget(new QLabel("Plot Into:"));
95  layout->addWidget(m_selectWindowCombo);
96  layout->addStretch(1);
97  toolBarWidget->setLayout(layout);
98 
99  return toolBarWidget;
100  }
101 
102 
107  foreach (PlotWindow *window, plotWindows()) {
108  window->update(cubeViewport());
109  }
110  }
111 
112 
122  QList<MdiCubeViewport *> viewports;
123  MdiCubeViewport *activeViewport = cubeViewport();
124 
125  for (int i = 0; i < cubeViewportList()->size(); i++) {
126  MdiCubeViewport *viewport = (*(cubeViewportList()))[i];
127 
128  if (viewport == activeViewport ||
129  (activeViewport->isLinked() && viewport->isLinked())) {
130  viewports.append(viewport);
131  }
132  }
133 
134  return viewports;
135  }
136 
137 
144  QList<PlotWindow *> windows;
145 
146  for (int i = 0; i < m_selectWindowCombo->count(); i++) {
147  QVariant windowVariant = m_selectWindowCombo->itemData(i);
148 
149  if (!windowVariant.isNull() && windowVariant.canConvert<PlotWindow *>()) {
150  PlotWindow *window = windowVariant.value<PlotWindow *>();
151  windows.append(window);
152  }
153  }
154 
155  return windows;
156  }
157 
158 
167  int currentIndex = m_selectWindowCombo->currentIndex();
168  if (currentIndex != -1) {
169  // Selected an item in the list that isn't a window
170  if (m_selectWindowCombo->itemData(currentIndex).isNull()) {
171  addWindow();
172  ASSERT(m_selectWindowCombo->itemData(
173  m_selectWindowCombo->currentIndex()).canConvert<PlotWindow *>());
174  }
175  else if (selectedWindow(false)) {
176  selectedWindow(false)->showWindow();
177  }
178  }
179 
180  detachCurves();
181  }
182 
183 
192  // See if we need to unselect it before removing it
193  int currentWindowIndex = m_selectWindowCombo->currentIndex();
194  QVariant windowVariant = QVariant::fromValue((PlotWindow *) window);
195 
196  if (currentWindowIndex != -1) {
197  if (m_selectWindowCombo->itemData(currentWindowIndex) == windowVariant) {
198  m_selectWindowCombo->setCurrentIndex(-1);
199  }
200  }
201 
202  m_selectWindowCombo->removeItem(
203  m_selectWindowCombo->findData(windowVariant));
204 
206  }
207 
208 
222  PlotCurve::Units xUnits, PlotCurve::Units yUnits) {
223  CubePlotCurve * newCurve = new CubePlotCurve(xUnits, yUnits);
224 
225  newCurve->setTitle(name);
226  newCurve->setPen(pen);
227  newCurve->setColor(pen.color());
228 
229  return newCurve;
230  }
231 
232 
245  PlotWindow *window = NULL;
246  int curIndex = m_selectWindowCombo->currentIndex();
247 
248  if (curIndex != -1) {
249  QVariant windowVariant = m_selectWindowCombo->itemData(
250  m_selectWindowCombo->currentIndex());
251 
252  if (!windowVariant.isNull() && windowVariant.canConvert<PlotWindow *>()) {
253  window = windowVariant.value<PlotWindow *>();
254  }
255  }
256 
257  if (!window && createIfNeeded) {
258  window = addWindow();
259  }
260 
261  return window;
262  }
263 
264 
273  QVector<MdiCubeViewport *> allViewports = *cubeViewportList();
274 
275  foreach (MdiCubeViewport * viewport, allViewports) {
276  if (pc->sourceCube().contains(viewport->cube()->fileName())) {
277  viewport->repaint();
278  }
279  }
280  }
281 
282 
292  PlotWindow *newPlotWindow = createWindow();
293 
294  connect(newPlotWindow, SIGNAL(closed()),
295  newPlotWindow, SLOT(deleteLater()));
296 
297  QString originalTitle = newPlotWindow->windowTitle();
298  QString titleToTry = originalTitle;
299  bool titleUsed = false;
300  int titleNumber = 0;
301 
302  do {
303  titleNumber++;
304  if (titleNumber > 1) {
305  titleToTry = originalTitle + " " + QString::number(titleNumber);
306  }
307 
308  titleUsed = false;
309 
310  for (int i = 0; i < m_selectWindowCombo->count() && !titleUsed; i++) {
311  titleUsed = titleUsed ||
312  (m_selectWindowCombo->itemText(i) == titleToTry);
313  }
314  } while (titleUsed);
315 
316  newPlotWindow->setWindowTitle(titleToTry);
317 
318  int newItemIndex = m_selectWindowCombo->count() - 1;
319 
320  m_selectWindowCombo->setCurrentIndex(-1);
321  m_selectWindowCombo->insertItem(newItemIndex,
322  newPlotWindow->windowTitle(), QVariant::fromValue(newPlotWindow));
323  m_selectWindowCombo->setCurrentIndex(newItemIndex);
324 
325  connect(newPlotWindow, SIGNAL(destroyed(QObject *)),
326  this, SLOT(removeWindow(QObject *)));
327  connect(newPlotWindow, SIGNAL(plotChanged()),
328  this, SLOT(repaintViewports()));
329 
330  return newPlotWindow;
331  }
332 
333 
339  if (selectedWindow()) {
341  }
342  }
343 
344 
351  QVector<MdiCubeViewport *> allViewports = *cubeViewportList();
352 
353  foreach (MdiCubeViewport * viewport, allViewports) {
354  viewport->viewport()->repaint();
355  }
356  }
357 }
358