Freeciv21
Develop your civilization from humble roots to a global empire
decorations.h
Go to the documentation of this file.
1 /* .' '. Copyright (c) 1996-2023 Freeciv21 and Freeciv ********
2  \\ . . \ \ contributors. This file is part of Freeciv21.
3  \ \ o o \ \ Freeciv21 is free software: you can redistribute it
4  \ . \/ \/ \ \ and/or modify it under the terms of the GNU
5  \/ , . \\ General Public License as published by the Free
6  ' ,. '( .\\ Software Foundation, either version 3 of the License,
7  //``\\ . | \ or (at your option) any later version.
8 ~~~~~'''''~''''''~~~\~ You should have received a copy of the
9  (( GNU General Public License along with Freeciv21.
10  \\ If not, see https://www.gnu.org/licenses/.
11  ))
12 ************* V ******************************************************/
13 #pragma once
14 
15 #include <QFlags>
16 #include <QFrame>
17 #include <QLabel>
18 #include <QRubberBand>
19 
20 /**************************************************************************
21  Widget allowing moving other widgets
22 **************************************************************************/
23 class move_widget : public QLabel {
24  Q_OBJECT
25 public:
26  move_widget(QWidget *parent);
27  void put_to_corner();
28 
29 protected:
30  void mouseMoveEvent(QMouseEvent *event) override;
31  void mousePressEvent(QMouseEvent *event) override;
32 
33 private:
34  QPoint point;
35 };
36 
37 /****************************************************************************
38  Widget for resizing other widgets
39 ****************************************************************************/
40 class scale_widget : public QRubberBand {
41  Q_OBJECT
42 
43 public:
44  scale_widget(Shape s, QWidget *p = 0);
45  float scale;
46 
47 protected:
48  void paintEvent(QPaintEvent *event) override;
49  void mousePressEvent(QMouseEvent *event) override;
50 
51 private:
52  int size;
53  QPixmap plus;
54  QPixmap minus;
55 };
56 
57 /**************************************************************************
58  Abstract class for widgets wanting to do custom action
59  when closing widgets is called (eg. update menu)
60 **************************************************************************/
61 class fcwidget : public QFrame {
62  Q_OBJECT
63 
64 public:
66  explicit fcwidget(QWidget *parent = nullptr) : QFrame(parent) {}
67 
68  virtual void update_menu() = 0;
69 };
70 
71 /**************************************************************************
72  Abstract class for widgets that can be resized by dragging the edges.
73 **************************************************************************/
74 class resizable_widget : public fcwidget {
75  Q_OBJECT
76 
77  static constexpr int event_width = 25;
78  static constexpr int margin_width = 3;
79 
80 signals:
81  void resized(QRect rect);
82 
83 public:
84  // make widget resizable (multiple flags supported)
85  void setResizable(Qt::Edges edges);
86 
87  // get resizable flags
88  Qt::Edges getResizable() const;
89 
90 private:
91  Qt::Edges get_in_event_mouse(const QMouseEvent *event) const;
92 
93  Qt::Edges eventFlags{};
94  Qt::Edges resizeFlags{};
95 
96 protected:
97  void mousePressEvent(QMouseEvent *event) override;
98  void mouseMoveEvent(QMouseEvent *event) override;
99  void mouseReleaseEvent(QMouseEvent *event) override;
100 };
101 
102 /**************************************************************************
103  Widget allowing closing other widgets
104 **************************************************************************/
105 class close_widget : public QLabel {
106  Q_OBJECT
107 
108 public:
109  close_widget(QWidget *parent);
110  void put_to_corner();
111 
112 protected:
113  void hideEvent(QHideEvent *event) override;
114  void mousePressEvent(QMouseEvent *event) override;
115 };
void mousePressEvent(QMouseEvent *event) override
Mouse handler for close widget, hides parent widget.
void put_to_corner()
Puts close widget to right top corner.
close_widget(QWidget *parent)
Constructor for close widget.
void hideEvent(QHideEvent *event) override
Hide event handler for close widget.
virtual void update_menu()=0
fcwidget(QWidget *parent=nullptr)
Constructor.
Definition: decorations.h:66
void put_to_corner()
Puts move widget to left top corner.
Definition: decorations.cpp:99
void mousePressEvent(QMouseEvent *event) override
Sets moving point for move widget;.
QPoint point
Definition: decorations.h:34
void mouseMoveEvent(QMouseEvent *event) override
Mouse handler for move widget (moves parent widget)
move_widget(QWidget *parent)
Constructor for move widget.
Definition: decorations.cpp:84
Qt::Edges eventFlags
Definition: decorations.h:93
Qt::Edges get_in_event_mouse(const QMouseEvent *event) const
Get resizable_flag from mouse position.
void setResizable(Qt::Edges edges)
Set resizable flags.
Qt::Edges getResizable() const
Get resizable flags of wdiget.
void mousePressEvent(QMouseEvent *event) override
Checks if info_tab can be moved.
void resized(QRect rect)
Qt::Edges resizeFlags
Definition: decorations.h:94
static constexpr int event_width
Definition: decorations.h:77
void mouseMoveEvent(QMouseEvent *event) override
Called when mouse moved (mouse track is enabled).
static constexpr int margin_width
Definition: decorations.h:78
void mouseReleaseEvent(QMouseEvent *event) override
Restores cursor when resizing is done.
QPixmap minus
Definition: decorations.h:54
QPixmap plus
Definition: decorations.h:53
scale_widget(Shape s, QWidget *p=0)
Scale widget allowing scaling other widgets, shown in right top corner.
Definition: decorations.cpp:36
void paintEvent(QPaintEvent *event) override
Draws 2 icons for resizing.
Definition: decorations.cpp:56
void mousePressEvent(QMouseEvent *event) override
Mouse press event for scale widget.
Definition: decorations.cpp:69
enum event_type event
Definition: events.cpp:68