Read@CVL
PageDock.h
Go to the documentation of this file.
1 /*******************************************************************************************************
2  ReadFramework is the basis for modules developed at CVL/TU Wien for the EU project READ.
3 
4  Copyright (C) 2016 Markus Diem <diem@caa.tuwien.ac.at>
5  Copyright (C) 2016 Stefan Fiel <fiel@caa.tuwien.ac.at>
6  Copyright (C) 2016 Florian Kleber <kleber@caa.tuwien.ac.at>
7 
8  This file is part of ReadFramework.
9 
10  ReadFramework is free software: you can redistribute it and/or modify
11  it under the terms of the GNU General Public License as published by
12  the Free Software Foundation, either version 3 of the License, or
13  (at your option) any later version.
14 
15  ReadFramework is distributed in the hope that it will be useful,
16  but WITHOUT ANY WARRANTY; without even the implied warranty of
17  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18  GNU General Public License for more details.
19 
20  You should have received a copy of the GNU General Public License
21  along with this program. If not, see <http://www.gnu.org/licenses/>.
22 
23  The READ project has received funding from the European Union’s Horizon 2020
24  research and innovation programme under grant agreement No 674943
25 
26  related links:
27  [1] http://www.caa.tuwien.ac.at/cvl/
28  [2] https://transkribus.eu/Transkribus/
29  [3] https://github.com/TUWien/
30  [4] http://nomacs.org
31  *******************************************************************************************************/
32 
33 #pragma once
34 
35 // nomacs
36 #include "DkBaseWidgets.h"
37 #include "DkWidgets.h"
38 
39 // framework
40 #include "Elements.h"
41 
42 
43 #pragma warning(push, 0) // no warnings from includes
44 #include <QPushButton>
45 #include <QLineEdit>
46 #pragma warning(pop)
47 
48 // Qt defines
49 class QPaintEvent;
50 class QSettings;
51 class QCheckBox;
52 class QSpinBox;
53 class QMimeData;
54 
55 namespace rdf {
56  class RegionTypeConfig;
57 }
58 
59 namespace rdm {
60 
61 // read defines
62 class PageData;
63 
64 class ColorButton : public QWidget {
65  Q_OBJECT
66 
67 public:
68  ColorButton(const QString& text = QString(), QWidget* parent = 0);
69 
70  void setColor(const QColor& col);
71 
72 public slots:
73  void on_colorButton_clicked();
74 
75 signals:
76  void newColor(const QColor& col) const;
77 
78 private:
79  void createLayout(const QString& title);
80 
81  QColor mColor;
82 };
83 
84 
85 class ConfigWidget : public QWidget {
86  Q_OBJECT
87 
88 public:
89  ConfigWidget(QWidget* parent = 0);
90 
91  void setRegionConfig(QSharedPointer<rdf::RegionTypeConfig> config);
92 
93 public slots:
94  void on_outlineButton_newColor(const QColor& col);
95  void on_brushButton_newColor(const QColor& col);
96  void on_strokeBox_valueChanged(int val);
97  void on_draw_clicked(bool toggled);
98  void on_drawText_clicked(bool toggled);
99  void on_drawPolygon_clicked(bool toggled);
100  void on_drawBaseline_clicked(bool toggled);
101 
102  void loadConfig(const QString& name);
103  void saveConfig(const QString& name);
104 
105 signals:
106  void updated() const;
107 
108 private:
109  void createLayout();
110  void paintEvent(QPaintEvent* event) override;
111  void updateElements();
112 
113  QSharedPointer<rdf::RegionTypeConfig> mConfig;
114 
115  ColorButton* mOutlineButton = 0;
116  ColorButton* mBrushButton = 0;
117  QSpinBox* mStrokeBox = 0;
118 
119  QCheckBox* mCbDraw = 0;
120  QCheckBox* mCbDrawPoly = 0;
121  QCheckBox* mCbDrawText = 0;
122  QCheckBox* mCbDrawBaseline = 0;
123 };
124 
125 class DirLabel : public QLineEdit {
126  Q_OBJECT
127 
128 public:
129  DirLabel(QWidget* parent = 0);
130 
131 signals:
132  void xmlPathChanged(const QString& path) const;
133 
134 private:
135  void dragEnterEvent(QDragEnterEvent* event) override;
136  void dropEvent(QDropEvent* event) override;
137 
138  QString dirPathFromMime(const QMimeData& mime) const;
139  void createLayout();
140 };
141 
142 class XmlLabel : public QLineEdit {
143  Q_OBJECT
144 
145 public:
146  XmlLabel(QWidget* parent = 0);
147 
148 public slots:
149  void setPage(QSharedPointer<rdf::PageElement> page);
150  void pathUpdated(const QString& path) const;
151 
152 
153 signals:
154  void loadXml(const QString& path) const;
155 
156 private:
157  void dragEnterEvent(QDragEnterEvent* event) override;
158  void dropEvent(QDropEvent* event) override;
159  void paintEvent(QPaintEvent* event) override;
160 
161  QString xmlPathFromMime(const QMimeData& mime) const;
162  void createLayout();
163 };
164 
165 class PageProfileWidget : public nmc::DkGenericProfileWidget {
166  Q_OBJECT
167 
168 public:
169  PageProfileWidget(QWidget* parent);
170 
171 public slots:
172  void saveSettings(const QString& name) const override;
173  void loadSettings(const QString& name) override;
174 
175 signals:
176  void savePageConfigSignal(const QString& name) const;
177  void loadPageConfigSignal(const QString& name) const;
178 
179 };
180 
181 class TitledLabel : public QWidget {
182  Q_OBJECT
183 
184 public:
185  TitledLabel(const QString& title = QString(), QWidget* parent = 0);
186 
187  QString text() const;
188 
189 public slots:
190  void setText(const QString& text);
191 
192 protected:
193  void createLayout(const QString& title);
194 
195  QLabel* mInfoLabel = 0;
196 };
197 
198 class PolygonWidget : public QLabel {
199  Q_OBJECT
200 
201 public:
202  PolygonWidget(QWidget* parent = 0);
203 
204  void setPolygon(const QPolygon & poly);
205  void setConfig(const QSharedPointer<rdf::RegionTypeConfig>& config);
206 
207 protected:
208  void paintEvent(QPaintEvent* ev) override;
209 
210  QPolygonF mPoly;
211  QSharedPointer<rdf::RegionTypeConfig> mConfig;
212 };
213 
214 class PolygonInfoWidget : public QWidget {
215  Q_OBJECT
216 
217 public:
218  PolygonInfoWidget(QWidget* parent = 0);
219 
220  void setConfig(const QSharedPointer<rdf::RegionTypeConfig>& config);
221 
222  void setPolygon(const QPolygon& poly);
223  QPolygon polygon() const;
224 
225 protected:
226  void createLayout();
227 
228  QPolygon mPoly;
229 
230  PolygonWidget* mPolyWidget = 0;
231  QLabel* mPolyText = 0;
232 };
233 
234 class RegionWidget : public QWidget {
235  Q_OBJECT
236 
237 public:
238  RegionWidget(QWidget* parent = 0);
239 
240  QSharedPointer<rdf::Region> currentRegion() const;
241 
242 public slots:
243  void setRegions(const QVector<QSharedPointer<rdf::Region> >& regions, int idx = -1);
244  void setRegionTypes(const QVector<QSharedPointer<rdf::RegionTypeConfig> >& configs);
245  void on_regionCombo_currentIndexChanged(int idx);
246  void on_childCombo_currentIndexChanged(int idx);
247 
248 signals:
249  void updateSignal() const;
250 
251 protected:
252  void createLayout();
253  void updateWidgets(QSharedPointer<rdf::Region> region);
254  void clear();
255  void showInfo(bool show = true);
256  void paintEvent(QPaintEvent* event) override;
257 
258  QVector<QSharedPointer<rdf::Region> > mRegions;
259  QVector<QSharedPointer<rdf::RegionTypeConfig> > mRegionTypes;
260  QComboBox* mRegionCombo;
261  QComboBox* mChildCombo;
262  QLabel* mId;
265  QLabel* mTextTitle;
268 };
269 
270 class PageDock : public nmc::DkDockWidget {
271  Q_OBJECT
272 
273 public:
274  PageDock(PageData* pageData, const QString& title, QWidget* parent = 0);
275  ~PageDock();
276 
277  bool drawRegions() const;
278  RegionWidget* regionWidget();
279 
280  // I don't really like this definition - but: it's hard to read an external stylesheet for these few widgets
281  static QString widgetStyle;
282  static QString largeComboStyle;
283  static QString smallComboStyle;
284 
285 public slots:
286  void on_drawCheckbox_toggled(bool toggled) const;
287  void on_configCombo_currentIndexChanged(int index);
288  void on_infoWidget_updated();
289  void on_infoWidget_updateSignal();
290  void updateConfig();
291 
292 signals:
293  void updateSignal() const;
294  void closeSignal() const;
295 
296 private:
297  void createLayout();
298  void setConfigWidget(QSharedPointer<rdf::RegionTypeConfig> config);
299  void closeEvent(QCloseEvent* ev) override;
300 
301  QCheckBox* mCbDraw = 0;
302  ConfigWidget* mConfigWidget = 0;
303  RegionWidget* mRegionWidget = 0;
304 
306 
307  PageData* mPageData = 0;
308 };
309 
310 };
QLabel * mTextTitle
Definition: PageDock.h:265
Definition: PageData.h:46
static QString largeComboStyle
Definition: PageDock.h:282
QVector< QSharedPointer< rdf::Region > > mRegions
Definition: PageDock.h:258
Definition: PageDock.h:142
Definition: PageDock.h:270
Definition: PageDock.h:214
static QString smallComboStyle
Definition: PageDock.h:283
Type
Definition: Elements.h:68
QSharedPointer< rdf::RegionTypeConfig > mConfig
Definition: PageDock.h:211
QComboBox * mChildCombo
Definition: PageDock.h:261
QPolygon mPoly
Definition: PageDock.h:228
QVector< QSharedPointer< rdf::RegionTypeConfig > > mRegionTypes
Definition: PageDock.h:259
Definition: PageDock.h:181
config
Definition: DependencyCollector.py:271
PolygonInfoWidget * mBaselineWidget
Definition: PageDock.h:264
Definition: PageDock.h:64
Definition: PageDock.h:234
Definition: PageDock.h:85
Definition: PageDock.h:125
TitledLabel * mCustom
Definition: PageDock.h:267
QComboBox * mRegionCombo
Definition: PageDock.h:260
Definition: PageDock.h:198
Definition: Elements.h:73
TitledLabel * mText
Definition: PageDock.h:266
Definition: Algorithms.cpp:45
Definition: PageDock.h:165
static QString widgetStyle
Definition: PageDock.h:281
QPolygonF mPoly
Definition: PageDock.h:210
Definition: BatchTest.cpp:45
PolygonInfoWidget * mPolyWidget
Definition: PageDock.h:263
QLabel * mId
Definition: PageDock.h:262