The Battle for Wesnoth  1.17.17+dev
viewport.hpp
Go to the documentation of this file.
1 /*
2  Copyright (C) 2012 - 2023
3  by Mark de Wever <koraq@xs4all.nl>
4  Part of the Battle for Wesnoth Project https://www.wesnoth.org/
5 
6  This program is free software; you can redistribute it and/or modify
7  it under the terms of the GNU General Public License as published by
8  the Free Software Foundation; either version 2 of the License, or
9  (at your option) any later version.
10  This program is distributed in the hope that it will be useful,
11  but WITHOUT ANY WARRANTY.
12 
13  See the COPYING file for more details.
14 */
15 
16 #pragma once
17 
19 #include "gui/widgets/widget.hpp"
20 
21 namespace gui2
22 {
23 
24 // ------------ WIDGET -----------{
25 
26 namespace implementation
27 {
28 struct builder_viewport;
29 } // namespace implementation
30 
31 class grid;
32 
33 /**
34  * @ingroup GUIWidgetWML
35  *
36  * A viewport is an special widget used to view only a part of the widget it 'holds'.
37  *
38  * List with the viewport specific variables:
39  * Key |Type |Default |Description
40  * ---------------|------------------------------------------------|---------|-----------
41  * grow_direction | @ref guivartype_grow_direction "grow_direction"|mandatory|The direction in which new items grow.
42  * parallel_items | @ref guivartype_unsigned "unsigned" |mandatory|The number of items that are growing in parallel.
43  * item_definition| @ref guivartype_section "section" |mandatory|The definition of a new item.
44  */
45 class viewport : public widget
46 {
47  friend struct viewport_implementation;
48 
49 public:
51  const builder_widget::replacements_map& replacements);
52 
53  ~viewport();
54 
55  /** See @ref widget::place. */
56  virtual void place(const point& origin, const point& size) override;
57 
58  /** See @ref widget::layout_initialize. */
59  virtual void layout_initialize(const bool full_initialization) override;
60 
61  /** See @ref widget::impl_draw_children. */
62  virtual void impl_draw_children() override;
63 
64  /** See @ref widget::request_reduce_width. */
65  virtual void request_reduce_width(const unsigned maximum_width) override;
66 
67  /** See @ref widget::find_at. */
68  virtual widget* find_at(const point& coordinate,
69  const bool must_be_active) override;
70 
71  /** See @ref widget::find_at. */
72  virtual const widget* find_at(const point& coordinate,
73  const bool must_be_active) const override;
74 
75  /** See @ref widget::find. */
76  widget* find(const std::string& id, const bool must_be_active) override;
77 
78  /** See @ref widget::find. */
79  const widget* find(const std::string& id,
80  const bool must_be_active) const override;
81 
82 private:
83  /** See @ref widget::calculate_best_size. */
84  virtual point calculate_best_size() const override;
85 
86 public:
87  /** See @ref widget::disable_click_dismiss. */
88  bool disable_click_dismiss() const override;
89 
90  /** See @ref widget::create_walker. */
91  virtual iteration::walker_ptr create_walker() override;
92 
93 private:
94  std::unique_ptr<widget> widget_;
95 };
96 
97 // }---------- BUILDER -----------{
98 
99 namespace implementation
100 {
101 
103 {
104  explicit builder_viewport(const config& cfg);
105 
106  virtual std::unique_ptr<widget> build() const override;
107 
108  virtual std::unique_ptr<widget> build(const replacements_map& replacements) const override;
109 
111 };
112 
113 } // namespace implementation
114 
115 // }------------ END --------------
116 
117 } // namespace gui2
A config object defines a single node in a WML file, with access to child nodes.
Definition: config.hpp:161
A viewport is an special widget used to view only a part of the widget it 'holds'.
Definition: viewport.hpp:46
virtual void layout_initialize(const bool full_initialization) override
See widget::layout_initialize.
Definition: viewport.cpp:103
virtual point calculate_best_size() const override
See widget::calculate_best_size.
Definition: viewport.cpp:147
bool disable_click_dismiss() const override
See widget::disable_click_dismiss.
Definition: viewport.cpp:152
std::unique_ptr< widget > widget_
Definition: viewport.hpp:94
virtual void request_reduce_width(const unsigned maximum_width) override
See widget::request_reduce_width.
Definition: viewport.cpp:121
widget * find(const std::string &id, const bool must_be_active) override
See widget::find.
Definition: viewport.cpp:136
virtual iteration::walker_ptr create_walker() override
See widget::create_walker.
Definition: viewport.cpp:157
virtual void impl_draw_children() override
See widget::impl_draw_children.
Definition: viewport.cpp:112
viewport(const implementation::builder_viewport &builder, const builder_widget::replacements_map &replacements)
Definition: viewport.cpp:84
virtual void place(const point &origin, const point &size) override
See widget::place.
Definition: viewport.cpp:96
virtual widget * find_at(const point &coordinate, const bool must_be_active) override
See widget::find_at.
Definition: viewport.cpp:125
Base class for all widgets.
Definition: widget.hpp:54
std::unique_ptr< class walker_base > walker_ptr
Definition: widget.hpp:43
Generic file dialog.
std::shared_ptr< builder_widget > builder_widget_ptr
Contains the implementation details for lexical_cast and shouldn't be used directly.
bool grid()
Definition: general.cpp:565
map_location coordinate
Contains an x and y coordinate used for starting positions in maps.
std::size_t size(const std::string &str)
Length in characters of a UTF-8 string.
Definition: unicode.cpp:87
Contains the info needed to instantiate a widget.
std::map< std::string, std::shared_ptr< builder_widget > > replacements_map
The replacements type is used to define replacement types.
virtual std::unique_ptr< widget > build() const override
Definition: viewport.cpp:176
Helper to implement private functions without modifying the header.
Definition: viewport.cpp:43
Holds a 2D point.
Definition: point.hpp:25