QXRD  0.11.16
qcepdataobjectgraphwindow.cpp
Go to the documentation of this file.
2 #include "qcepproperty.h"
3 #include "qcepexperiment.h"
4 #include "qcepdataobject.h"
5 #include "qcepsettingssaver.h"
6 
7 #include <QCloseEvent>
8 #include <QMessageBox>
9 
10 #include "qcepimagedata.h"
11 #include "qcepimagedata-ptr.h"
12 
13 #include "qcepintegrateddata-ptr.h"
14 #include "qcepintegrateddata.h"
15 
16 #include "qcepdataarray.h"
17 #include "qcepdataarray-ptr.h"
18 
19 #include "qcepdatacolumn.h"
20 #include "qcepdatacolumn-ptr.h"
21 
22 #include "qcepdatacolumnscan.h"
23 #include "qcepdatacolumnscan-ptr.h"
24 
25 #include "qcepdatagroup.h"
26 #include "qcepdatagroup-ptr.h"
27 
28 #include "qcepplotsettings.h"
29 
34 
36  QcepDataObjectWindow(parent),
37  m_Experiment(expt),
38  m_Object(obj),
39  m_PlottingMode(NoPlot),
40  m_SettingsSaver(new QcepSettingsSaver(this)),
41 // m_PlotSettings(new QcepPlotSettings("plotSettings", m_SettingsSaver, NULL)),
42  m_ColorMap (m_SettingsSaver, this, "colorMap", 0, "Image Color Map Index"),
43  m_ScalingMode (m_SettingsSaver, this, "scalingMode", 0, "Image Scaling Mode"),
44  m_MinimumPct (m_SettingsSaver, this, "minimumPct", 0, "Image Display Minimum %"),
45  m_MaximumPct (m_SettingsSaver, this, "maximumPct", 100, "Image Display Maximum %"),
46  m_MinimumPctle (m_SettingsSaver, this, "minimumPctle", 0, "Image Display Minimum Percentile"),
47  m_MaximumPctle (m_SettingsSaver, this, "maximumPctle", 99, "Image Display Maximum Percentile"),
48  m_MinimumVal (m_SettingsSaver, this, "minimumVal", 0, "Image Display Minimum Value"),
49  m_MaximumVal (m_SettingsSaver, this, "maximumVal", 10000, "Image Display Maximum Value"),
50  m_HistFullVis (m_SettingsSaver, this, "histFullVis", true, "Full Image Histogram Visible?"),
51  m_HistAVis (m_SettingsSaver, this, "histAVis", false, "Histogram A Visible?"),
52  m_HistBVis (m_SettingsSaver, this, "histBVis", false, "Histogram B Visible?"),
53  m_HistCVis (m_SettingsSaver, this, "histCVis", false, "Histogram C Visible"),
54  m_HistALeft (m_SettingsSaver, this, "histALeft", 10, "Histogram A Left"),
55  m_HistATop (m_SettingsSaver, this, "histATop", 10, "Histogram A Top"),
56  m_HistARight (m_SettingsSaver, this, "histARight", 20, "Histogram A Right"),
57  m_HistABottom (m_SettingsSaver, this, "histABottom", 20, "Histogram A Bottom"),
58  m_HistBLeft (m_SettingsSaver, this, "histBLeft", 30, "Histogram B Left"),
59  m_HistBTop (m_SettingsSaver, this, "histBTop", 30, "Histogram B Top"),
60  m_HistBRight (m_SettingsSaver, this, "histBRight", 40, "Histogram B Right"),
61  m_HistBBottom (m_SettingsSaver, this, "histBBottom", 40, "Histogram B Bottom"),
62  m_HistCLeft (m_SettingsSaver, this, "histCLeft", 50, "Histogram B Left"),
63  m_HistCTop (m_SettingsSaver, this, "histCTop", 50, "Histogram B Top"),
64  m_HistCRight (m_SettingsSaver, this, "histCRight", 60, "Histogram B Right"),
65  m_HistCBottom (m_SettingsSaver, this, "histCBottom", 60, "Histogram B Bottom"),
66  m_SliceHStart (m_SettingsSaver, this, "sliceHStart", 0, "Horizontal Slice Start"),
67  m_SliceHSummed (m_SettingsSaver, this, "sliceHSummed", 1, "Horizontal Slice Summed"),
68  m_SliceHSkipped(m_SettingsSaver, this, "sliceHSkipped", 0, "Horizontal Slice Skipped"),
69  m_SliceHRepeats(m_SettingsSaver, this, "sliceHRepeats", 100, "Horizontal Slice Repeats"),
70  m_SliceVStart (m_SettingsSaver, this, "sliceVStart", 0, "Vertical Slice Start"),
71  m_SliceVSummed (m_SettingsSaver, this, "sliceVSummed", 1, "Vertical Slice Summed"),
72  m_SliceVSkipped(m_SettingsSaver, this, "sliceVSkipped", 0, "Vertical Slice Skipped"),
73  m_SliceVRepeats(m_SettingsSaver, this, "sliceVRepeats", 100, "Vertical Slice Repeats")
74 {
75  setupUi(this);
76 
79 
80  if (objp && expt) {
81  setWindowTitle(tr("%1 Graph from %2")
82  .arg(objp->pathName())
83  .arg(e->get_ExperimentName()));
84  } else if (objp) {
85  setWindowTitle(tr("%1 Graph")
86  .arg(objp->pathName()));
87  } else {
88  setWindowTitle("Unknown Graph");
89  }
90 
91  QcepPlotSettingsPtr settings(new QcepPlotSettings("plotSettings", m_SettingsSaver, NULL));
92  m_ImagePlot->init(settings);
93 
94  m_PlotModeSelector->clear();
95 
97 
98  connect(m_PlotModeSelector, SIGNAL(currentIndexChanged(int)),
99  this, SLOT(changeGraphMode(int)));
100 
101  connect(m_ImageZoomInButton, SIGNAL(clicked(bool)), m_ImagePlot, SLOT(enableZooming()));
102  connect(m_ImageZoomOutButton, SIGNAL(clicked(bool)), m_ImagePlot, SLOT(zoomOut()));
103  connect(m_ImageZoomAllButton, SIGNAL(clicked(bool)), m_ImagePlot, SLOT(autoScale()));
104  connect(m_ImageMeasureButton, SIGNAL(clicked(bool)), m_ImagePlot, SLOT(enableMeasuring()));
105 
106  m_ImagePlot->enableZooming();
107 
108  setAttribute(Qt::WA_DeleteOnClose, true);
109 
110  if (objp) {
111  connect(objp.data(), SIGNAL(dataObjectChanged()), this, SLOT(updateDisplay()));
112 
113  updateDisplay();
114  }
115 }
116 
118 {
119 #ifndef QT_NO_DEBUG
120  printf("Deleting Graph Window\n");
121 #endif
122 }
123 
125 {
126  return m_Experiment;
127 }
128 
130 {
131  if (mode != m_PlottingMode) {
132  QSharedPointer<QcepImageDataBase> image = qSharedPointerDynamicCast<QcepImageDataBase>(m_Object);
133  QcepIntegratedDataPtr integ = qSharedPointerDynamicCast<QcepIntegratedData>(m_Object);
134  QcepDataArrayPtr array = qSharedPointerDynamicCast<QcepDataArray>(m_Object);
135  QcepDataColumnPtr col = qSharedPointerDynamicCast<QcepDataColumn>(m_Object);
136  QcepDataColumnScanPtr scan = qSharedPointerDynamicCast<QcepDataColumnScan>(m_Object);
137  QcepDataGroupPtr group = qSharedPointerDynamicCast<QcepDataGroup>(m_Object);
138 
139  if (image || array) {
144 
145  if (mode == DefaultPlot || mode == ImagePlot) {
146  m_Controller = QSharedPointer<QcepImageDataGraphController>(
147  new QcepImageDataGraphController(this, mode, m_Object));
148 
149  m_Controller->activate();
150 
152  } else if (mode == HistogramPlot) {
153  m_Controller = QSharedPointer<QcepImageHistogramGraphController>(
155 
156  m_Controller->activate();
157 
159  } else if (mode == HorizontalSlice || mode == VerticalSlice) {
160  m_Controller = QSharedPointer<QcepImageSliceGraphController>(
161  new QcepImageSliceGraphController(this, mode, m_Object));
162 
163  m_Controller->activate();
164 
165  m_PlottingMode = mode;
166  }
167  } else if (integ || col || scan || group) {
169 
170  if (mode == DefaultPlot || mode == ScatterPlot) {
171  m_Controller = QSharedPointer<QcepScatterPlotGraphController> (
172  new QcepScatterPlotGraphController(this, mode, m_Object));
173 
174  m_Controller->activate();
175 
177  }
178  }
179 
180  int idx = m_PlotModeSelector->findData(mode);
181 
182  if (idx >= 0) {
183  m_PlotModeSelector->setCurrentIndex(idx);
184  }
185  }
186 }
187 
189 {
190  switch (mode) {
191  case ImagePlot:
192  m_PlotModeSelector->addItem("2-D Image Plot", ImagePlot);
193  break;
194 
195  case ScatterPlot:
196  m_PlotModeSelector->addItem("Scatter Plot", ScatterPlot);
197  break;
198 
199  case HistogramPlot:
200  m_PlotModeSelector->addItem("Histogram of Image", HistogramPlot);
201  break;
202 
203  case HorizontalSlice:
204  m_PlotModeSelector->addItem("Horizontal Slices", HorizontalSlice);
205  break;
206 
207  case VerticalSlice:
208  m_PlotModeSelector->addItem("Vertical Slices", VerticalSlice);
209  break;
210  }
211 }
212 
214 {
215  QString newName = m_PlotModeSelector->itemText(idx);
216  int newMode = m_PlotModeSelector->itemData(idx).toInt();
217 
218  bool b = m_PlotModeSelector->blockSignals(true);
219 
220  if (QMessageBox::question(this,
221  tr("Change Plotting Mode?"),
222  tr("Do you want to change the plotting mode to %1").arg(newName),
223  QMessageBox::Ok, QMessageBox::Cancel) == QMessageBox::Ok) {
224 
225  m_PlotModeSelector->clear();
226 
227  setGraphMode(newMode);
228 
229  updateDisplay();
230  } else {
231  int oldIdx = m_PlotModeSelector->findData(m_PlottingMode);
232 
233  if (oldIdx >= 0) {
234  m_PlotModeSelector->setCurrentIndex(oldIdx);
235  }
236  }
237 
238  m_PlotModeSelector->blockSignals(b);
239 }
240 
242 {
243  return m_PlottingMode;
244 }
245 
246 void QcepDataObjectGraphWindow::closeEvent ( QCloseEvent * event )
247 {
248  if (wantToClose()) {
249  event -> accept();
250  } else {
251  event -> ignore();
252  }
253 }
254 
256 {
257  return QMessageBox::question(this, tr("Really Close?"),
258  tr("Do you really want to close the window %1 ?")
259  .arg(windowTitle()),
260  QMessageBox::Ok | QMessageBox::Cancel) == QMessageBox::Ok;
261 }
262 
264 {
265  return 1;
266 }
267 
269 {
270  return 2;
271 }
272 
274 {
275  if (m_Controller) {
276  m_Controller->updateDisplay();
277  }
278 }
279 
281 {
282  m_ImagePlot->detachItems(QwtPlotItem::Rtti_PlotCurve);
283 }
284 
285 void QcepDataObjectGraphWindow::appendCurve(QwtPlotCurve *curve)
286 {
287  if (curve) {
288  curve->attach(m_ImagePlot);
289  }
290 }
QSharedPointer< QcepDataArray > QcepDataArrayPtr
QSharedPointer< QcepDataGroup > QcepDataGroupPtr
QSharedPointer< QcepDataColumnScan > QcepDataColumnScanPtr
QSharedPointer< QcepDataColumn > QcepDataColumnPtr
void closeEvent(QCloseEvent *event)
void appendCurve(QwtPlotCurve *curve)
QSharedPointer< QcepIntegratedData > QcepIntegratedDataPtr
QcepSettingsSaverPtr m_SettingsSaver
QWeakPointer< QcepExperiment > QcepExperimentWPtr
QcepDataObjectGraphWindow(QcepExperimentWPtr expt, QcepDataObjectWPtr obj, QWidget *parent=0)
QWeakPointer< QcepDataObject > QcepDataObjectWPtr
QSharedPointer< QcepPlotSettings > QcepPlotSettingsPtr
QcepDataObjectGraphControllerPtr m_Controller
QSharedPointer< QcepDataObject > QcepDataObjectPtr
QSharedPointer< QcepExperiment > QcepExperimentPtr