Freeciv21
Develop your civilization from humble roots to a global empire
minimap_panel.cpp
Go to the documentation of this file.
1 /*
2  * This file is part of Freeciv21.
3  * SPDX-FileCopyrightText: 2022 Louis Moureaux
4  * SPDX-FileCopyrightText: 2022-2023 James Robertson
5  *
6  * SPDX-License-Identifier: GPL-3.0-or-later
7  */
8 
9 #include "minimap_panel.h"
10 
11 // Qt
12 #include <QMenu>
13 
14 // client
15 #include "icons.h"
16 #include "options.h"
17 #include "overview_common.h"
18 #include "page_game.h"
19 #include "top_bar.h"
20 #include "views/view_map.h"
21 
25 minimap_panel::minimap_panel(map_view *map, QWidget *parent)
26 {
27  setParent(parent);
28  ui.setupUi(this);
29  setAttribute(Qt::WA_NoMousePropagation);
30  setMinimumSize(100, 100);
31  setResizable(Qt::LeftEdge | Qt::TopEdge);
32 
33  ui.zoom_in->setIcon(
34  fcIcons::instance()->getIcon(QStringLiteral("zoom-in")));
35  connect(ui.zoom_in, &QAbstractButton::clicked, map, &map_view::zoom_in);
36 
37  ui.zoom_reset->setIcon(
38  fcIcons::instance()->getIcon(QStringLiteral("zoom-original")));
39  connect(ui.zoom_reset, &QAbstractButton::clicked, map,
41 
42  ui.zoom_out->setIcon(
43  fcIcons::instance()->getIcon(QStringLiteral("zoom-out")));
44  connect(ui.zoom_out, &QAbstractButton::clicked, map, &map_view::zoom_out);
45 
46  ui.settings->setIcon(
47  fcIcons::instance()->getIcon(QStringLiteral("settings-minimap")));
49 
50  connect(ui.turn_done, &QAbstractButton::clicked, top_bar_finish_turn);
51 }
52 
57 {
58  ui.minimap->setVisible(visible);
59  ui.zoom_in->setVisible(visible);
60  ui.zoom_reset->setVisible(visible);
61  ui.zoom_out->setVisible(visible);
62  ui.settings->setVisible(visible);
63  ui.spacer->changeSize(0, 0, QSizePolicy::Minimum,
64  visible ? QSizePolicy::Expanding
65  : QSizePolicy::Minimum);
66  // See documentation for QSpacerItem::changeSize
67  ui.verticalLayout->invalidate();
68 
69  // This isn't properly propagated by the map view. One day we'll have a
70  // proper QLayout...
71  QApplication::postEvent(queen()->game_tab_widget,
72  new QEvent(QEvent::LayoutRequest));
73 }
74 
79 {
80  auto menu = new QMenu;
81 
82  m_show_relief = menu->addAction(_("Show Relief"));
83  m_show_relief->setCheckable(true);
84 
86  QObject::connect(m_show_relief, &QAction::toggled, [](bool checked) {
89  });
90 
91  m_show_borders = menu->addAction(_("Show Borders"));
92  m_show_borders->setCheckable(true);
93  ;
95  QObject::connect(m_show_borders, &QAction::toggled, [=](bool checked) {
97  m_show_borders_ocean->setEnabled(checked);
99  });
100 
101  m_show_borders_ocean = menu->addAction(_("Show Borders on Oceans"));
102  m_show_borders_ocean->setCheckable(true);
103 
104  m_show_borders_ocean->setChecked(
106  m_show_borders_ocean->setEnabled(
108  QObject::connect(
109  m_show_borders_ocean, &QAction::toggled, [](bool checked) {
112  });
113 
114  m_show_cities = menu->addAction(_("Show Cities"));
115  m_show_cities->setCheckable(true);
116 
118  QObject::connect(m_show_cities, &QAction::toggled, [](bool checked) {
121  });
122 
123  m_show_cities = menu->addAction(_("Show Units"));
124  m_show_cities->setCheckable(true);
125 
127  QObject::connect(m_show_cities, &QAction::toggled, [](bool checked) {
130  });
131 
132  m_show_fog = menu->addAction(_("Show Fog of War"));
133  m_show_fog->setCheckable(true);
134 
135  m_show_fog->setChecked(gui_options->overview.fog);
136  QObject::connect(m_show_fog, &QAction::toggled, [](bool checked) {
137  gui_options->overview.fog = checked;
139  });
140 
141  ui.settings->setMenu(menu);
142 }
143 
148 {
149  queen()->minimap_panel->turn_done()->update_timeout_label();
150 }
static fcIcons * instance()
Returns instance of fc_icons.
Definition: icons.cpp:36
void zoom_out()
Zooms out by 20%.
Definition: view_map.cpp:243
void zoom_reset()
Resets the zoom level.
Definition: view_map.cpp:238
void zoom_in()
Zooms in by 20%.
Definition: view_map.cpp:233
void setup_minimap_menu()
Creates the menu with the minimap settings.
QAction * m_show_relief
Definition: minimap_panel.h:46
QAction * m_show_borders
Definition: minimap_panel.h:46
minimap_panel(map_view *map, QWidget *parent=nullptr)
Constructor.
Ui::minimap_panel ui
Definition: minimap_panel.h:44
auto turn_done()
Retrieves the Turn Done button.
Definition: minimap_panel.h:39
QAction * m_show_borders_ocean
Definition: minimap_panel.h:46
void set_minimap_visible(bool visible)
Shows or hides the minimap.
QAction * m_show_cities
Definition: minimap_panel.h:47
QAction * m_show_fog
Definition: minimap_panel.h:47
::minimap_panel * minimap_panel
Definition: page_game.h:82
void setResizable(Qt::Edges edges)
Set resizable flags.
#define _(String)
Definition: fcintl.h:50
void update_timeout_label()
Update the timeout display.
client_options * gui_options
Definition: options.cpp:74
@ OLAYER_BORDERS
Definition: options.h:25
@ OLAYER_CITIES
Definition: options.h:28
@ OLAYER_BORDERS_ON_OCEAN
Definition: options.h:26
@ OLAYER_UNITS
Definition: options.h:27
@ OLAYER_RELIEF
Definition: options.h:24
void refresh_overview_canvas()
Redraw the entire backing store for the overview minimap.
pageGame * queen()
Return game instandce.
Definition: page_game.cpp:557
struct overview overview
Definition: options.h:179
bool fog
Definition: options.h:44
bool layers[OLAYER_COUNT]
Definition: options.h:45
void top_bar_finish_turn()
Callback for finishing turn.
Definition: top_bar.cpp:457