OpenMS
GUIHelpers.h
Go to the documentation of this file.
1 // Copyright (c) 2002-2023, The OpenMS Team -- EKU Tuebingen, ETH Zurich, and FU Berlin
2 // SPDX-License-Identifier: BSD-3-Clause
3 //
4 // --------------------------------------------------------------------------
5 // $Maintainer: Chris Bielow $
6 // $Authors: Chris Bielow $
7 // --------------------------------------------------------------------------
8 
9 #pragma once
10 
11 #include <OpenMS/VISUAL/OpenMS_GUIConfig.h>
14 
15 // declare Qt classes OUTSIDE of namespace OpenMS!
16 class QPainter;
17 class QPoint;
18 class QRectF;
19 class QString;
20 class QStringList;
21 class QWidget;
22 
23 #include <QColor>
24 #include <QFont>
25 
26 #include <array>
27 
28 namespace OpenMS
29 {
30 
31  class FileTypeList;
32 
36  namespace GUIHelpers
37  {
40  OPENMS_GUI_DLLAPI void openFolder(const QString& folder);
41 
43 
44  OPENMS_GUI_DLLAPI QString getSaveFilename(QWidget* parent,
45  const QString& caption,
46  const QString& dir,
47  const FileTypeList& supported_file_types,
48  bool add_all_filter,
49  const FileTypes::Type fallback_extension);
50 
51 
53  OPENMS_GUI_DLLAPI void startTOPPView(const QStringList& args);
54 
57  OPENMS_GUI_DLLAPI void openURL(const QString& target);
58 
71  OPENMS_GUI_DLLAPI void drawText(QPainter& painter, const QStringList& text, const QPoint& where, const QColor& col_fg = QColor("invalid"), const QColor& col_bg = QColor("invalid"),
72  const QFont& font = QFont("Courier"));
73 
74 
79  OPENMS_GUI_DLLAPI QRectF getTextDimension(const QStringList& text, const QFont& font, int& line_spacing);
80 
81 
83  OPENMS_GUI_DLLAPI QPointF nearestPoint(const QPointF& origin, const QList<QPointF>& list);
84 
91  OPENMS_GUI_DLLAPI QPointF intersectionPoint(const QRectF& rect, const QPointF& p);
92 
93 
104  class OPENMS_GUI_DLLAPI OverlapDetector
105  {
106  public:
109  explicit OverlapDetector(int levels);
110 
113  size_t placeItem(double x_start, double x_end);
114 
115  private:
116  std::vector<double> rows_;
117  };
118 
122  class OPENMS_GUI_DLLAPI GUILock
123  {
124  public:
128 
130  GUILock(const GUILock& rhs) = delete;
131  GUILock(GUILock&& rhs) = delete;
132  GUILock& operator=(const GUILock& rhs) = delete;
133 
136 
138  void lock();
140  void unlock();
141 
142  private:
143  QWidget* locked_widget_{ nullptr };
144  bool currently_locked_{ false };
145  bool was_enabled_{ true };
146  };
147 
151  {
152  public:
153  struct Distinct
154  {
155  enum NAMES
156  {
172  };
173 
174  const std::array<QColor, NAMES::SIZE_OF_NAMES> values = { { Qt::red,
175  Qt::blue,
176  Qt::green,
177  QColor(129, 74, 25) /*brown*/,
178  QColor(129, 38, 192) /*purple*/,
179  Qt::lightGray,
180  QColor(129,197,122) /*lightGreen*/,
181  QColor(157,175,255) /*lightBlue*/,
182  Qt::cyan,
183  QColor(255,146,51) /*orange*/,
184  Qt::yellow,
185  QColor(233,222,187) /*tan*/,
186  QColor(255,205,243) /*pink*/,
187  Qt::darkGray } };
188  };
189 
191  template<class COLOR_CLASS>
192  static QColor getColor(uint32_t index)
193  {
194  // cycle if necessary
195  if (index >= COLOR_CLASS::NAMES::SIZE_OF_NAMES) index = index % COLOR_CLASS::NAMES::SIZE_OF_NAMES;
196  return COLOR_CLASS().values[index];
197  }
198  }; // ColorBrewer
199 
200  OPENMS_GUI_DLLAPI StringList convert(const QStringList& in);
201  OPENMS_GUI_DLLAPI QStringList convert(const StringList& in);
202 
203  }; // GUIHelpers
204 }
holds a vector of known file types, e.g. as a way to specify supported input formats
Definition: FileTypes.h:124
Definition: GUIHelpers.h:151
static QColor getColor(uint32_t index)
get a certain color. If index is larger than the maximum color, modulo operator will applied (cycling...
Definition: GUIHelpers.h:192
RAII class to disable the GUI and set a busy cursor and go back to the original state when this class...
Definition: GUIHelpers.h:123
GUILock & operator=(const GUILock &rhs)=delete
GUILock(const GUILock &rhs)=delete
no copy/assignment allowed
~GUILock()
D'tor: unlocks the GUI (does nothing if already unlocked)
void unlock()
manually unlock the GUI (does nothing if already unlocked)
void lock()
manually lock the GUI (does nothing if already locked)
GUILock(GUILock &&rhs)=delete
A heuristic: Given a set of levels (rows), try to add items at to topmost row which does not overlap ...
Definition: GUIHelpers.h:105
std::vector< double > rows_
store the largest x_end for each row
Definition: GUIHelpers.h:116
size_t placeItem(double x_start, double x_end)
std::vector< String > StringList
Vector of String.
Definition: ListUtils.h:44
void drawText(QPainter &painter, const QStringList &text, const QPoint &where, const QColor &col_fg=QColor("invalid"), const QColor &col_bg=QColor("invalid"), const QFont &font=QFont("Courier"))
draw a multi-line text at coordinates XY using a specific font and color
QString getSaveFilename(QWidget *parent, const QString &caption, const QString &dir, const FileTypeList &supported_file_types, bool add_all_filter, const FileTypes::Type fallback_extension)
Open a dialog to select a filename to save data to.
StringList convert(const QStringList &in)
QRectF getTextDimension(const QStringList &text, const QFont &font, int &line_spacing)
Obtains the bounding rectangle of a text (useful to determine overlaps etc)
void startTOPPView(const QStringList &args)
Open TOPPView (e.g. from within TOPPAS)
QPointF nearestPoint(const QPointF &origin, const QList< QPointF > &list)
Returns the point in the list that is nearest to origin.
void openURL(const QString &target)
void openFolder(const QString &folder)
QPointF intersectionPoint(const QRectF &rect, const QPointF &p)
Find the point on a rectangle where a ray/line from a point p to its center would intersect at.
Main OpenMS namespace.
Definition: FeatureDeconvolution.h:22
Colorizer blue
Colorizer green
Colorizer yellow
Colorizer cyan
Colorizer red
Type
Actual file types enum.
Definition: FileTypes.h:31
Definition: GUIHelpers.h:154
const std::array< QColor, NAMES::SIZE_OF_NAMES > values
Definition: GUIHelpers.h:174
NAMES
Definition: GUIHelpers.h:156
@ Purple
Definition: GUIHelpers.h:161
@ DarkGrey
Definition: GUIHelpers.h:170
@ LightBlue
Definition: GUIHelpers.h:164
@ Pink
Definition: GUIHelpers.h:169
@ LightGreen
Definition: GUIHelpers.h:163
@ LightGrey
Definition: GUIHelpers.h:162
@ Orange
Definition: GUIHelpers.h:166
@ Brown
Definition: GUIHelpers.h:160
@ Cyan
Definition: GUIHelpers.h:165
@ Tan
Definition: GUIHelpers.h:168
@ Yellow
Definition: GUIHelpers.h:167
@ Green
Definition: GUIHelpers.h:159
@ Red
Definition: GUIHelpers.h:157
@ SIZE_OF_NAMES
Definition: GUIHelpers.h:171
@ Blue
Definition: GUIHelpers.h:158