OpenMS  3.0.0
TOPPViewBase.h
Go to the documentation of this file.
1 // --------------------------------------------------------------------------
2 // OpenMS -- Open-Source Mass Spectrometry
3 // --------------------------------------------------------------------------
4 // Copyright The OpenMS Team -- Eberhard Karls University Tuebingen,
5 // ETH Zurich, and Freie Universitaet Berlin 2002-2022.
6 //
7 // This software is released under a three-clause BSD license:
8 // * Redistributions of source code must retain the above copyright
9 // notice, this list of conditions and the following disclaimer.
10 // * Redistributions in binary form must reproduce the above copyright
11 // notice, this list of conditions and the following disclaimer in the
12 // documentation and/or other materials provided with the distribution.
13 // * Neither the name of any author or any participating institution
14 // may be used to endorse or promote products derived from this software
15 // without specific prior written permission.
16 // For a full list of authors, refer to the file AUTHORS.
17 // --------------------------------------------------------------------------
18 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
19 // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21 // ARE DISCLAIMED. IN NO EVENT SHALL ANY OF THE AUTHORS OR THE CONTRIBUTING
22 // INSTITUTIONS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
23 // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
24 // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
25 // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
26 // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
27 // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
28 // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 //
30 // --------------------------------------------------------------------------
31 // $Maintainer: Timo Sachsenberg$
32 // $Authors: Marc Sturm, Timo Sachsenberg $
33 // --------------------------------------------------------------------------
34 
35 #pragma once
36 
37 // OpenMS_GUI config
38 #include <OpenMS/VISUAL/OpenMS_GUIConfig.h>
39 
40 //OpenMS
53 
54 //STL
55 #include <map>
56 
57 //QT
58 #include <QtWidgets/QMainWindow>
59 #include <QtWidgets/QButtonGroup>
60 #include <QtWidgets/QActionGroup>
61 #include <QtCore/QStringList>
62 #include <QtCore/QProcess>
63 #include <QElapsedTimer>
64 
65 class QAction;
66 class QComboBox;
67 class QLabel;
68 class QLineEdit;
69 class QListWidget;
70 class QListWidgetItem;
71 class QTreeWidget;
72 class QTreeWidgetItem;
73 class QDockWidget;
74 class QToolButton;
75 class QCloseEvent;
76 class QCheckBox;
77 class QSplashScreen;
78 class QToolButton;
79 
80 namespace OpenMS
81 {
82  class DataSelectionTabs;
83  class FileWatcher;
84  class LogWindow;
85  class LayerListView;
86  class MultiGradientSelector;
87  class Plot1DWidget;
88  class Plot2DWidget;
89  class Plot3DWidget;
90  class ToolsDialog;
91 
126  class OPENMS_GUI_DLLAPI TOPPViewBase :
127  public QMainWindow,
128  public DefaultParamHandler
129  {
130  Q_OBJECT
131 
132  friend class TestTOPPView;
133 
134 public:
136 
137  //Feature map type
139  //Feature map managed type
141 
142  //Consensus feature map type
144  //Consensus map managed type
146 
147  //Peak map type
149  //Main managed data type (experiment)
151  //Main on-disc managed data type (experiment)
156 
158  enum class TOOL_SCAN
159  {
164  SKIP_SCAN,
166  SCAN_IF_NEWER_VERSION,
168  FORCE_SCAN
169  };
170 
172  explicit TOPPViewBase(TOOL_SCAN scan_mode = TOOL_SCAN::SCAN_IF_NEWER_VERSION, QWidget* parent = nullptr);
174  ~TOPPViewBase() override;
175 
176  enum class LOAD_RESULT
177  {
178  OK,
179  FILE_NOT_FOUND,
180  FILETYPE_UNKNOWN,
181  FILETYPE_UNSUPPORTED,
182  LOAD_ERROR
183  };
184 
197  LOAD_RESULT addDataFile(const String& filename, bool show_options, bool add_to_recent, String caption = "", UInt window_id = 0, Size spectrum_id = 0);
198 
215  void addData(FeatureMapSharedPtrType feature_map,
216  ConsensusMapSharedPtrType consensus_map,
217  std::vector<PeptideIdentification>& peptides,
218  ExperimentSharedPtrType peak_map,
219  ODExperimentSharedPtrType on_disc_peak_map,
220  LayerDataBase::DataType data_type,
221  bool show_as_1d,
222  bool show_options,
223  bool as_new_window = true,
224  const String& filename = "",
225  const String& caption = "",
226  UInt window_id = 0,
227  Size spectrum_id = 0);
228 
230  void loadFiles(const StringList& list, QSplashScreen* splash_screen);
231 
237  void loadPreferences(String filename = "");
238 
240  void savePreferences();
241 
243  Param getCanvasParameters(UInt dim) const;
244 
246  const LayerDataBase* getCurrentLayer() const;
247 
249  LayerDataBase* getCurrentLayer();
250 
251  //@name Accessors for the main gui components.
252  //@brief The top level enhanced workspace and the EnhancedTabWidgets resing in the EnhancedTabBar.
254  EnhancedWorkspace* getWorkspace();
256 
258  PlotWidget* getActivePlotWidget() const;
259 
261  Plot1DWidget* getActive1DWidget() const;
262 
264  Plot2DWidget* getActive2DWidget() const;
265 
267  Plot3DWidget* getActive3DWidget() const;
269 
271  PlotCanvas* getActiveCanvas() const;
272 
274  void showPlotWidgetInWindow(PlotWidget* sw, const String& caption);
275 
276 public slots:
278  void updateCurrentPath();
280  void openFilesByDialog(const String& initial_directory = "");
282  void showGoToDialog() const;
284  void preferencesDialog();
286  void layerStatistics() const;
288  void editMetadata();
290  void layerActivated();
292  void layerZoomChanged() const;
294  void linkZoom();
296  void layerDeactivated();
298  void closeTab();
299 
301  void rerunTOPPTool();
302 
304  void updateBarsAndMenus();
306  void updateToolBar();
308  void updateLayerBar();
310  void updateViewBar();
312  void updateMenu();
314  void updateFilterBar();
321  void showStatusMessage(std::string msg, OpenMS::UInt time);
323  void showCursorStatus(double mz, double rt);
325  void showCursorStatusInvert(double mz, double rt);
327  void showTOPPDialog();
329  void annotateWithAMS();
331  void annotateWithID();
333  void annotateWithOSW();
335  void showSpectrumGenerationDialog();
337  void showSpectrumAlignmentDialog();
339  void showCurrentPeaksAs2D();
341  void showCurrentPeaksAs3D();
343  void showCurrentPeaksAsIonMobility();
345  void showCurrentPeaksAsDIA();
347  void saveLayerAll() const;
349  void saveLayerVisible() const;
351  void toggleGridLines() const;
353  void toggleAxisLegends() const;
355  void toggleInterestingMZs() const;
357  void showPreferences() const;
359  void metadataFileDialog();
360 
364  void setDrawMode1D(int) const;
365  void setIntensityMode(int);
366  void changeLayerFlag(bool);
367  void changeLabel(QAction*);
368  void changeUnassigned(QAction*);
369  void resetZoom() const;
370  void toggleProjections();
372 
375  void openFile(const String& filename);
376 
378  void layerFilterVisibilityChange(bool) const;
379 
381  void showSpectrumMetaData(int spectrum_index) const;
382 
383 protected slots:
385  void finishTOPPToolExecution(int exitCode, QProcess::ExitStatus exitStatus);
387  void abortTOPPTool();
389  void showSpectrumBrowser();
390 
394  void closeByTab(int id);
397  void showWindow(int id);
399  void copyLayer(const QMimeData* data, QWidget* source, int id = -1);
401 
403  void updateProcessLog();
404 
406  void fileChanged_(const String&);
407 protected:
409  void initializeDefaultParameters_();
410 
414  QStringList chooseFilesDialog_(const String& path_overwrite = "");
415 
417 
418  QDockWidget* layer_dock_widget_;
419  QDockWidget* views_dockwidget_;
420  QDockWidget* filter_dock_widget_;
422 
425 
427 
429 
432 
434  FileWatcher* watcher_ = nullptr;
435 
437  bool watcher_msgbox_ = false;
438 
440  bool zoom_together_ = false;
441 
444 
449 
453  QToolBar* tool_bar_;
454 
455  // common intensity modes
456  QButtonGroup* intensity_button_group_;
457 
458  // 1D specific stuff
459  QToolBar* tool_bar_1d_;
460  QButtonGroup* draw_group_1d_;
461 
462  // 2D specific stuff
463  QToolBar* tool_bar_2d_peak_;
464  QToolBar* tool_bar_2d_feat_;
465  QToolBar* tool_bar_2d_cons_;
468  QAction* dm_hull_2d_;
469  QAction* dm_hulls_2d_;
470  QToolButton* dm_label_2d_;
471  QActionGroup* group_label_2d_;
472  QToolButton* dm_unassigned_2d_;
473  QActionGroup* group_unassigned_2d_;
474  QAction* dm_elements_2d_;
475  QAction* projections_2d_;
476  QAction* dm_ident_2d_;
478 
480  EnhancedWorkspace ws_; // not a pointer, but an actual object, so it gets destroyed before the DefaultParamhandler (on which it depends)
484  QMdiSubWindow* lastActiveSubwindow_ = nullptr; // due to Qt bugs or confusing features we need to save the current Window id in the children of the workspace;
488  RecentFilesMenu recent_files_; // needs to be declared before 'menu_', because its needed there
491 
495  QLabel* message_label_;
498  QLabel* mz_label_;
500  QLabel* rt_label_;
502 
504 
505  void addRecentFile_(const String& filename);
507 
509 
510 
512 
513  void runTOPPTool_();
516  struct
517  {
518  Param param;
519  String tool;
520  String in;
521  String out;
522  String file_name;
523  String layer_name;
524  UInt window_id;
525  Size spectrum_id;
526  QProcess* process = nullptr;
527  QElapsedTimer timer;
528  bool visible_area_only;
529  } topp_;
531 
533  void checkPreferences_();
535 
536  void closeEvent(QCloseEvent* event) override;
538 
541 
543  void showTOPPDialog_(bool visible);
544 
548 
549 private:
552 
555  }; //class
556 
557 } //namespace
558 
QLabel * rt_label_
RT label for messages in the status bar.
Definition: TOPPViewBase.h:500
A log window (QTextEdit) with convenience functions.
Definition: LogWindow.h:53
LogWindow * log_
Log output window.
Definition: TOPPViewBase.h:443
QDockWidget * filter_dock_widget_
Definition: TOPPViewBase.h:420
QButtonGroup * draw_group_1d_
Definition: TOPPViewBase.h:460
QToolBar * tool_bar_1d_
Definition: TOPPViewBase.h:459
TOOL_SCAN scan_mode_
Determines TVToolDiscovery scans for tool/utils and generates new params.
Definition: TOPPViewBase.h:446
A more convenient string class.
Definition: String.h:58
QAction * dm_hulls_2d_
Definition: TOPPViewBase.h:469
QToolBar * tool_bar_2d_ident_
Definition: TOPPViewBase.h:466
LOAD_RESULT
Definition: TOPPViewBase.h:176
RecentFilesMenu recent_files_
manages recent list of filenames and the menu that goes with it
Definition: TOPPViewBase.h:488
LayerDataBase::FeatureMapSharedPtrType FeatureMapSharedPtrType
Definition: TOPPViewBase.h:140
Widget for visualization of several spectra.
Definition: Plot1DWidget.h:65
Main window of TOPPView tool.
Definition: TOPPViewBase.h:126
QToolBar * tool_bar_2d_feat_
Definition: TOPPViewBase.h:464
Manages recent files opened by the user and provides a QMenu to go with it.
Definition: RecentFilesMenu.h:59
A container for features.
Definition: FeatureMap.h:98
unsigned int UInt
Unsigned integer type.
Definition: Types.h:94
QToolBar * tool_bar_2d_cons_
Definition: TOPPViewBase.h:465
Widget for 3D-visualization of map data.
Definition: Plot3DWidget.h:53
A container for consensus elements.
Definition: ConsensusMap.h:82
QToolBar * tool_bar_2d_peak_
Definition: TOPPViewBase.h:463
TVToolDiscovery tool_scanner_
Scans for tools/utils and generates a param for each.
Definition: TOPPViewBase.h:448
QAction * dm_elements_2d_
Definition: TOPPViewBase.h:474
LayerDataBase::ExperimentType ExperimentType
Definition: TOPPViewBase.h:148
QAction * dm_hull_2d_
Definition: TOPPViewBase.h:468
Main OpenMS namespace.
Definition: FeatureDeconvolution.h:47
A widget which shows a list of DataFilter items.
Definition: FilterList.h:60
QDockWidget * layer_dock_widget_
Definition: TOPPViewBase.h:418
LayerDataBase::ConsensusMapSharedPtrType ConsensusMapSharedPtrType
Definition: TOPPViewBase.h:145
QAction * dm_ident_2d_
Definition: TOPPViewBase.h:476
LayerDataBase::ConsensusMapType ConsensusMapType
Definition: TOPPViewBase.h:143
The file menu items for TOPPView.
Definition: TOPPViewMenu.h:82
EnhancedTabBar tab_bar_
Tab bar. The address of the corresponding window to a tab is stored as an int in tabData() ...
Definition: TOPPViewBase.h:486
LayerDataBase::FeatureMapType FeatureMapType
Definition: TOPPViewBase.h:138
LayerDataBase::ODExperimentSharedPtrType ODExperimentSharedPtrType
Definition: TOPPViewBase.h:152
Pimped QListView for Layers of a Canvas.
Definition: LayerListView.h:52
The representation of a 1D spectrum.
Definition: MSSpectrum.h:66
LayerDataBase::ExperimentSharedPtrType ExperimentSharedPtrType
Definition: TOPPViewBase.h:150
QLabel * mz_label_
m/z label for messages in the status bar
Definition: TOPPViewBase.h:498
DataType
Definition: LayerDataBase.h:104
A tabbed view, to browse lists of spectra or identifications.
Definition: DataSelectionTabs.h:75
boost::shared_ptr< ConsensusMap > ConsensusMapSharedPtrType
SharedPtr on consensus features.
Definition: LayerDataBase.h:155
QActionGroup * group_label_2d_
Definition: TOPPViewBase.h:471
Base class for spectrum widgets.
Definition: PlotWidget.h:80
static const String CAPTION_3D_SUFFIX_
Suffix appended to caption of tabs when layer is shown in 3D.
Definition: TOPPViewBase.h:551
TOOL_SCAN
Used for deciding whether new tool/util params should be generated or reused from TOPPView&#39;s ini file...
Definition: TOPPViewBase.h:158
boost::shared_ptr< ExperimentType > ExperimentSharedPtrType
SharedPtr on MSExperiment.
Definition: LayerDataBase.h:161
std::vector< String > StringList
Vector of String.
Definition: ListUtils.h:70
LayerListView * layers_view_
Layer management widget.
Definition: TOPPViewBase.h:424
DataSelectionTabs * selection_view_
Definition: TOPPViewBase.h:426
Management and storage of parameters / INI files.
Definition: Param.h:69
In-Memory representation of a mass spectrometry run.
Definition: MSExperiment.h:70
Scans for tools/utils and generates a param for each asynchronously.
Definition: TVToolDiscovery.h:62
QButtonGroup * intensity_button_group_
Definition: TOPPViewBase.h:456
Widget for 2D-visualization of peak map and feature map data.
Definition: Plot2DWidget.h:63
QToolButton * dm_unassigned_2d_
Definition: TOPPViewBase.h:472
QToolBar * tool_bar_
Definition: TOPPViewBase.h:453
TheoreticalSpectrumGenerationDialog spec_gen_dialog_
This dialog is a member so that its settings can be perserved upon closing.
Definition: TOPPViewBase.h:554
size_t Size
Size type e.g. used as variable which can hold result of size()
Definition: Types.h:127
Definition: EnhancedWorkspace.h:51
FilterList * filter_list_
Definition: TOPPViewBase.h:430
TOPPViewMenu menu_
manages the menu items (active/inactive) and recent files etc
Definition: TOPPViewBase.h:490
QDockWidget * views_dockwidget_
Definition: TOPPViewBase.h:419
Dialog which allows to enter an AA or NA sequence and generates a theoretical spectrum for it...
Definition: TheoreticalSpectrumGenerationDialog.h:73
EnhancedWorkspace ws_
Main workspace.
Definition: TOPPViewBase.h:480
QActionGroup * group_unassigned_2d_
Definition: TOPPViewBase.h:473
A base class for all classes handling default parameters.
Definition: DefaultParamHandler.h:92
Base class for visualization canvas classes.
Definition: PlotCanvas.h:135
String current_path_
Definition: TOPPViewBase.h:547
Watcher that monitors file changes.
Definition: FileWatcher.h:65
boost::shared_ptr< FeatureMap > FeatureMapSharedPtrType
SharedPtr on feature map.
Definition: LayerDataBase.h:149
QMenu * add_2d_context_
Additional context menu for 2D layers.
Definition: TOPPViewBase.h:540
Class that stores the data for one layer.
Definition: LayerDataBase.h:97
QToolButton * dm_label_2d_
Definition: TOPPViewBase.h:470
QAction * dm_precursors_2d_
Definition: TOPPViewBase.h:467
Convenience tab bar implementation.
Definition: EnhancedTabBar.h:60
boost::shared_ptr< OnDiscMSExperiment > ODExperimentSharedPtrType
SharedPtr on On-Disc MSExperiment.
Definition: LayerDataBase.h:166
QAction * projections_2d_
Definition: TOPPViewBase.h:475
ExperimentType::SpectrumType SpectrumType
Peak spectrum type.
Definition: TOPPViewBase.h:154