QXRD  0.11.16
qxrdexperimentpreferencesdialog.cpp
Go to the documentation of this file.
1 #include "qxrddebug.h"
3 #include "qxrdacquisition.h"
5 #include "qxrddataprocessor.h"
6 #include "qxrdapplication.h"
7 #include "qcepallocator.h"
8 #include "qxrdexperiment.h"
9 #include "qxrdserver.h"
10 #include "qxrdsimpleserver.h"
11 #include <QMessageBox>
12 #include <QFileDialog>
13 #include <QGridLayout>
14 #include "qcepdebug.h"
15 #include "qxrddetectorproxy.h"
18 
19 #include <QMenu>
20 
22  QDialog(parent),
23  m_Experiment(exptw)
24 {
26  printf("QxrdExperimentPreferencesDialog::QxrdExperimentPreferencesDialog(%p)\n", this);
27  }
28 
29  setupUi(this);
30 
31  if (initialPage >= 0) {
32  m_PreferencesPanes->setCurrentIndex(initialPage);
33  }
34 
36 
37  if (expt) {
38  setWindowTitle(expt->experimentFilePath() + " Preferences");
39 
40  QxrdAcquisitionPtr acq = expt -> acquisition();
41  QxrdDataProcessorPtr proc = expt->dataProcessor();
42  // QcepAllocator *alloc = g_Application->allocator();
43 
44  int runSpecServer = 0;
45  int specServerPort = 0;
46 
47  QxrdServerPtr srv(expt -> specServer());
48 
49  if (srv) {
50  runSpecServer = srv -> get_RunSpecServer();
51  specServerPort = srv -> get_SpecServerPort();
52  }
53 
54  int runSimpleServer = 0;
55  int simpleServerPort = 0;
56 
57  QxrdSimpleServerPtr ssrv(expt -> simpleServer());
58 
59  if (ssrv) {
60  runSimpleServer = ssrv -> get_RunSimpleServer();
61  simpleServerPort = ssrv -> get_SimpleServerPort();
62  }
63 
66 
67  if (acq) {
68  for (int i=0; i<acq->get_DetectorCount(); i++) {
69  QxrdDetectorProxyPtr proxy =
71  acq->detectorThread(i),
72  acq->detector(i), acq));
73 
74  appendDetectorProxy(proxy);
75  }
76  }
77 
78  m_DetectorsList->header()->setSectionResizeMode(QHeaderView::ResizeToContents);
79  m_DetectorsList->setModel(m_DetectorProxyModel.data());
80 
81  connect(m_AddDetector, &QAbstractButton::clicked, this, &QxrdExperimentPreferencesDialog::addDetector);
82  connect(m_RemoveDetector, &QAbstractButton::clicked, this, &QxrdExperimentPreferencesDialog::removeDetector);
83  connect(m_MoveDetectorDown, &QAbstractButton::clicked, this, &QxrdExperimentPreferencesDialog::moveDetectorDown);
84  connect(m_MoveDetectorUp, &QAbstractButton::clicked, this, &QxrdExperimentPreferencesDialog::moveDetectorUp);
85  connect(m_ConfigureDetector,&QAbstractButton::clicked, this, &QxrdExperimentPreferencesDialog::configureDetector);
86  connect(m_DetectorsList, &QTreeView::doubleClicked, this, &QxrdExperimentPreferencesDialog::detectorDoubleClicked);
87 
88  m_ExperimentDirectory -> setText(expt->get_ExperimentDirectory());
89 
90  connect(m_CurrentLogFileBrowse, &QAbstractButton::clicked, this, &QxrdExperimentPreferencesDialog::currentLogFileBrowse);
91  m_CurrentLogFile -> setText(expt->get_LogFileName());
92 
93  connect(m_DataDirectoryBrowse, &QAbstractButton::clicked, this, &QxrdExperimentPreferencesDialog::dataDirectoryBrowse);
94  m_DataDirectory -> setText(expt->get_DataDirectory());
95 
96  connect(m_IntegratedScansFileBrowse, &QAbstractButton::clicked, this, &QxrdExperimentPreferencesDialog::integratedScansFileBrowse);
97  m_IntegratedScansFile -> setText(expt->get_ScanFileName());
98 
99  m_ScanFileExtension -> setText(expt->get_ScanFileExtension());
100 
101  m_ScanDataNegative -> setCurrentIndex(expt->get_ScanDataNegative());
102 
103  if (proc) {
104  connect(m_SaveRawBrowse, &QAbstractButton::clicked, this, &QxrdExperimentPreferencesDialog::saveRawBrowse);
105  m_SaveRawInSubdir -> setChecked(proc->get_SaveRawInSubdirectory());
106  m_SaveRawSubdir -> setText (proc->get_SaveRawSubdirectory());
107 
108  connect(m_SaveDarkBrowse, &QAbstractButton::clicked, this, &QxrdExperimentPreferencesDialog::saveDarkBrowse);
109  m_SaveDarkInSubdir -> setChecked(proc->get_SaveDarkInSubdirectory());
110  m_SaveDarkSubdir -> setText (proc->get_SaveDarkSubdirectory());
111 
112  connect(m_SaveSubtractedBrowse, &QAbstractButton::clicked, this, &QxrdExperimentPreferencesDialog::saveSubtractedBrowse);
113  m_SaveSubtractedInSubdir -> setChecked(proc->get_SaveSubtractedInSubdirectory());
114  m_SaveSubtractedSubdir -> setText (proc->get_SaveSubtractedSubdirectory());
115 
116  connect(m_SaveIntegratedBrowse, &QAbstractButton::clicked, this, &QxrdExperimentPreferencesDialog::saveIntegratedBrowse);
117  m_SaveIntegratedInLogFile -> setChecked(proc->get_SaveIntegratedData());
118  m_SaveIntegratedInSeparateFiles -> setChecked(proc->get_SaveIntegratedInSeparateFiles());
119  m_SaveIntegratedInSubdir -> setChecked(proc->get_SaveIntegratedInSubdirectory());
120  m_SaveIntegratedSubdir -> setText (proc->get_SaveIntegratedSubdirectory());
121 
122  m_AccumulateIntegrated2D -> setChecked(proc->get_AccumulateIntegrated2D());
123  m_AccumulateIntegratedName ->setText(proc->get_AccumulateIntegratedName());
124 
125  m_SaveOverflowFiles -> setChecked(proc->get_SaveOverflowFiles());
126  }
127 
128  if (srv) {
129  m_RunSpecServer -> setChecked(runSpecServer);
130  m_SpecServerPort -> setRange(-1,65535);
131  m_SpecServerPort -> setSpecialValueText(tr("Automatic"));
132  m_SpecServerPort -> setValue(specServerPort);
133  }
134 
135  if (ssrv) {
136  m_RunSimpleServer -> setChecked(runSimpleServer);
137  m_SimpleServerPort -> setRange(0,65535);
138  m_SimpleServerPort -> setValue(simpleServerPort);
139  }
140 
141  if (acq) {
142  m_FileIndexWidth -> setValue(acq->get_FileIndexWidth());
143  m_FilePhaseWidth -> setValue(acq->get_FilePhaseWidth());
144  m_FileOverflowWidth -> setValue(acq->get_FileOverflowWidth());
145  m_DetectorNumberWidth -> setValue(acq->get_DetectorNumberWidth());
146  }
147 
148  m_FontSize -> setValue(expt->get_FontSize());
149  m_Spacing -> setValue(expt->get_Spacing());
150  }
151 }
152 
154 {
156  printf("QxrdExperimentPreferencesDialog::~QxrdExperimentPreferencesDialog(%p)\n", this);
157  }
158 }
159 
161 {
162  return m_ExperimentDirectory->text();
163 }
164 
166 {
167  return QDir(experimentDirectory()).filePath(m_DataDirectory->text());
168 }
169 
171 {
172  QString initial = QDir(dataDirectory()).filePath(edit->text());
173 
174  QString dir = QFileDialog::getExistingDirectory(this, "", initial, QFileDialog::ShowDirsOnly);
175 
176  if (dir != "") {
177  QString result = QDir(dataDirectory()).relativeFilePath(dir);
178 
179  edit -> setText(result);
180 
181 // printf("Initial: %s\nDir: %s\nResult: %s\n", qPrintable(initial), qPrintable(dir), qPrintable(result));
182  }
183 }
184 
186 {
187  getRelativeDirectoryPath(m_SaveRawSubdir);
188 }
189 
191 {
192  getRelativeDirectoryPath(m_SaveDarkSubdir);
193 }
194 
196 {
197  getRelativeDirectoryPath(m_SaveSubtractedSubdir);
198 }
199 
201 {
202  getRelativeDirectoryPath(m_SaveIntegratedSubdir);
203 }
204 
206 {
207  QString initial = QDir(experimentDirectory()).filePath(m_DataDirectory->text());
208 
209  QString dir = QFileDialog::getExistingDirectory(this, "Output Directory", initial, QFileDialog::ShowDirsOnly);
210 
211  if (dir != "") {
212  m_DataDirectory->setText(QDir(experimentDirectory()).relativeFilePath(dir));
213  }
214 }
215 
217 {
218  QString initial = QDir(experimentDirectory()).filePath(m_ExperimentDirectory->text());
219 
220  QString file = QFileDialog::getSaveFileName(this, "Log File", initial);
221 
222  if (file != "") {
223  m_CurrentLogFile->setText(QDir(experimentDirectory()).relativeFilePath(file));
224  }
225 }
226 
228 {
229  QString initial = QDir(dataDirectory()).filePath(m_IntegratedScansFile->text());
230 
231  QString file = QFileDialog::getSaveFileName(this, "Scans File", initial);
232 
233  if (file != "") {
234  m_IntegratedScansFile->setText(QDir(dataDirectory()).relativeFilePath(file));
235  }
236 }
237 
239 {
240  QDialog::changeEvent(e);
241  switch (e->type()) {
242  case QEvent::LanguageChange:
243  retranslateUi(this);
244  break;
245  default:
246  break;
247  }
248 }
249 
251 {
252  int runSpecServer = m_RunSpecServer -> isChecked();
253  int runSimpleServer = m_RunSimpleServer -> isChecked();
254  int specServerPort = m_SpecServerPort -> value();
255  int simpleServerPort = m_SimpleServerPort -> value();
256 
258 
259  if (expt) {
260  QxrdAcquisitionPtr acq = expt -> acquisition();
261  QxrdDataProcessorPtr proc = expt->dataProcessor();
262  QxrdServerPtr srv(expt -> specServer());
263  QxrdSimpleServerPtr ssrv(expt -> simpleServer());
264 
265 // expt->set_DetectorType(m_DetectorType->currentIndex());
266 // expt->set_DetectorSubType(m_DetectorSubType->currentIndex());
267 // expt->set_DetectorNumber(m_DetectorNumber->value());
268 // expt->set_DetectorAddress(m_DetectorAddress->text());
269 
270  if (srv) {
271  srv -> set_RunSpecServer(runSpecServer);
272  srv -> set_SpecServerPort(specServerPort);
273  }
274 
275  if (ssrv) {
276  ssrv -> set_RunSimpleServer(runSimpleServer);
277  ssrv -> set_SimpleServerPort(simpleServerPort);
278  }
279 
280  if (proc) {
281  proc -> set_SaveRawInSubdirectory(m_SaveRawInSubdir -> isChecked());
282  proc -> set_SaveRawSubdirectory (m_SaveRawSubdir -> text());
283 
284  proc -> set_SaveDarkInSubdirectory(m_SaveDarkInSubdir -> isChecked());
285  proc -> set_SaveDarkSubdirectory (m_SaveDarkSubdir -> text());
286 
287  proc -> set_SaveSubtractedInSubdirectory(m_SaveSubtractedInSubdir -> isChecked());
288  proc -> set_SaveSubtractedSubdirectory (m_SaveSubtractedSubdir -> text());
289 
290  proc -> set_SaveIntegratedData(m_SaveIntegratedInLogFile -> isChecked());
291  proc -> set_SaveIntegratedInSeparateFiles(m_SaveIntegratedInSeparateFiles -> isChecked());
292  proc -> set_SaveIntegratedInSubdirectory (m_SaveIntegratedInSubdir -> isChecked());
293  proc -> set_SaveIntegratedSubdirectory (m_SaveIntegratedSubdir -> text());
294 
295  proc -> set_AccumulateIntegrated2D(m_AccumulateIntegrated2D -> isChecked());
296  proc -> set_AccumulateIntegratedName(m_AccumulateIntegratedName -> text());
297 
298  proc -> set_SaveOverflowFiles(m_SaveOverflowFiles -> isChecked());
299  }
300 
301  expt -> set_DataDirectory(m_DataDirectory -> text());
302  expt -> set_LogFileName (m_CurrentLogFile -> text());
303  expt -> set_ScanFileName (m_IntegratedScansFile -> text());
304  expt -> set_ScanFileExtension(m_ScanFileExtension->text());
305  expt -> set_ScanDataNegative(m_ScanDataNegative->currentIndex());
306 
307  if (acq) {
308  acq -> set_FileIndexWidth(m_FileIndexWidth -> value());
309  acq -> set_FilePhaseWidth(m_FilePhaseWidth -> value());
310  acq -> set_FileOverflowWidth(m_FileOverflowWidth -> value());
311  acq -> set_DetectorNumberWidth(m_DetectorNumberWidth -> value());
312 
313  int nDets = m_DetectorProxyModel->rowCount(QModelIndex());
314 
315  acq->clearDetectors();
316 
317  for (int i = 0; i<nDets; i++) {
318  acq->appendDetectorProxy(m_DetectorProxyModel->detectorProxy(i));
319  }
320  }
321 
322  expt -> set_FontSize(m_FontSize -> value());
323  expt -> set_Spacing(m_Spacing -> value());
324  }
325 
326  QDialog::accept();
327 }
328 
330 {
332 
333  if (expt) {
334  QxrdAcquisitionPtr acq = expt -> acquisition();
335 
336  if (acq) {
337  QMenu menu;
338 
339  for (int i=0; i<QxrdDetectorThread::detectorTypeCount(); i++) {
340  QAction *a = new QAction(QxrdDetectorThread::detectorTypeName(i), &menu);
341  a->setData(i);
342 
343  menu.addAction(a);
344  }
345 
346  QAction *choice = menu.exec(QCursor::pos());
347 
348  if (choice) {
349  int type = choice->data().toInt();
350 
351  QxrdDetectorProxyPtr proxy =
352  QxrdDetectorProxyPtr(new QxrdDetectorProxy(type, acq));
353 
354  appendDetectorProxy(proxy);
355  }
356  }
357  }
358 }
359 
361 {
362  int detCount = m_DetectorProxyModel->rowCount(QModelIndex());
363 
364  QItemSelectionModel *selected = m_DetectorsList->selectionModel();
365  QVector<int> selectedRows;
366 
367  for (int i=0; i<detCount; i++) {
368  if (selected->rowIntersectsSelection(i, QModelIndex())) {
369  selectedRows.append(i);
370  }
371  }
372 
373  int res = QMessageBox::Cancel;
374 
375  if (selectedRows.count() == 0) {
376  QMessageBox::information(this, "No Detectors Selected", "Select detectors to delete", QMessageBox::Ok);
377  } else if (selectedRows.count() == 1) {
378  res = QMessageBox::information(this, "Delete Detector?",
379  tr("Do you really want to delete detector %1").arg(selectedRows.value(0)),
380  QMessageBox::Ok, QMessageBox::Cancel);
381  } else {
382  QString dets;
383  foreach (int i, selectedRows) {
384  if (dets=="") {
385  dets = tr("%1").arg(i);
386  } else {
387  dets += tr(", %1").arg(i);
388  }
389  }
390 
391  res = QMessageBox::information(this, "Delete Detectors?,",
392  tr("Do you really want to delete detectors %1").arg(dets),
393  QMessageBox::Ok, QMessageBox::Cancel);
394  }
395 
396  if (res == QMessageBox::Ok) {
397  for (int i=selectedRows.count()-1; i>=0; i--) {
398 // printf("Want to remove row %d\n", selectedRows.value(i));
399  m_DetectorProxyModel->removeDetector(selectedRows.value(i));
400  }
401  }
402 }
403 
405 {
406  int detCount = m_DetectorProxyModel->rowCount(QModelIndex());
407 
408  QItemSelectionModel *selected = m_DetectorsList->selectionModel();
409  QVector<int> selectedRows;
410 
411  for (int i=0; i<detCount; i++) {
412  if (selected->rowIntersectsSelection(i, QModelIndex())) {
413  selectedRows.append(i);
414  }
415  }
416 
417  if (selectedRows.count() != 1) {
418  QMessageBox::information(this, "Only move one", "Must have a single detector selected before moving it", QMessageBox::Ok);
419  } else {
420  m_DetectorProxyModel->moveDetectorDown(selectedRows.first());
421  }
422 }
423 
425 {
426  int detCount = m_DetectorProxyModel->rowCount(QModelIndex());
427 
428  QItemSelectionModel *selected = m_DetectorsList->selectionModel();
429  QVector<int> selectedRows;
430 
431  for (int i=0; i<detCount; i++) {
432  if (selected->rowIntersectsSelection(i, QModelIndex())) {
433  selectedRows.append(i);
434  }
435  }
436 
437  if (selectedRows.count() != 1) {
438  QMessageBox::information(this, "Only move one", "Must have a single detector selected before moving it", QMessageBox::Ok);
439  } else {
440  m_DetectorProxyModel->moveDetectorUp(selectedRows.first());
441  }
442 }
443 
445 {
446  int detCount = m_DetectorProxyModel->rowCount(QModelIndex());
447 
448  QItemSelectionModel *selected = m_DetectorsList->selectionModel();
449  QVector<int> selectedRows;
450 
451  for (int i=0; i<detCount; i++) {
452  if (selected->rowIntersectsSelection(i, QModelIndex())) {
453  selectedRows.append(i);
454  }
455  }
456 
457  if (selectedRows.count() != 1) {
458  QMessageBox::information(this, "Only configure one", "Must have a single detector selected before configuring it", QMessageBox::Ok);
459  } else {
460  QxrdDetectorProxyPtr proxy = m_DetectorProxyModel->detectorProxy(selectedRows.first());
461 
462  if (proxy) {
463  proxy->configureDetector();
464  }
465  }
466 }
467 
469 {
470  if (proxy) {
471  proxy->initialize();
472 
473  m_DetectorProxyModel->append(proxy);
474  }
475 }
476 
478 {
479  int row = item.row();
480  int col = item.column();
481 
482  if (col == 0 || col == 2) {
483  QxrdDetectorProxyPtr proxy = m_DetectorProxyModel->detectorProxy(item.row());
484 
485  if (proxy) {
486  proxy->configureDetector();
487  }
488  }
489 }
QSharedPointer< QxrdExperiment > QxrdExperimentPtr
QSharedPointer< QxrdDetectorProxy > QxrdDetectorProxyPtr
QSharedPointer< QxrdServer > QxrdServerPtr
Definition: qxrdserver-ptr.h:6
qint64 qcepDebug(int cond)
Definition: qcepdebug.cpp:26
QSharedPointer< QxrdAcquisition > QxrdAcquisitionPtr
QSharedPointer< QxrdDataProcessor > QxrdDataProcessorPtr
QxrdExperimentPreferencesDialog(QxrdExperimentWPtr exptw, QWidget *parent=0, int initialPage=-1)
QSharedPointer< QxrdSimpleServer > QxrdSimpleServerPtr
QWeakPointer< QxrdExperiment > QxrdExperimentWPtr
QSharedPointer< QxrdDetectorProxyListModel > QxrdDetectorProxyListModelPtr
void detectorDoubleClicked(const QModelIndex &item)
static int detectorTypeCount()
static QString detectorTypeName(int detectorType)
void appendDetectorProxy(QxrdDetectorProxyPtr proxy)
QxrdDetectorProxyListModelPtr m_DetectorProxyModel