The Battle for Wesnoth  1.17.4+dev
viewport.hpp
Go to the documentation of this file.
1 /*
2  Copyright (C) 2012 - 2022
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(int x_offset, int y_offset) override;
63 
64  /** See @ref widget::child_populate_dirty_list. */
65  virtual void
66  child_populate_dirty_list(window& caller,
67  const std::vector<widget*>& call_stack) override;
68 
69  /** See @ref widget::request_reduce_width. */
70  virtual void request_reduce_width(const unsigned maximum_width) override;
71 
72  /** See @ref widget::find_at. */
73  virtual widget* find_at(const point& coordinate,
74  const bool must_be_active) override;
75 
76  /** See @ref widget::find_at. */
77  virtual const widget* find_at(const point& coordinate,
78  const bool must_be_active) const override;
79 
80  /** See @ref widget::find. */
81  widget* find(const std::string& id, const bool must_be_active) override;
82 
83  /** See @ref widget::find. */
84  const widget* find(const std::string& id,
85  const bool must_be_active) const override;
86 
87 private:
88  /** See @ref widget::calculate_best_size. */
89  virtual point calculate_best_size() const override;
90 
91 public:
92  /** See @ref widget::disable_click_dismiss. */
93  bool disable_click_dismiss() const override;
94 
95  /** See @ref widget::create_walker. */
96  virtual iteration::walker_ptr create_walker() override;
97 
98 private:
99  std::unique_ptr<widget> widget_;
100 };
101 
102 // }---------- BUILDER -----------{
103 
104 namespace implementation
105 {
106 
108 {
109  explicit builder_viewport(const config& cfg);
110 
111  virtual std::unique_ptr<widget> build() const override;
112 
113  virtual std::unique_ptr<widget> build(const replacements_map& replacements) const override;
114 
116 };
117 
118 } // namespace implementation
119 
120 // }------------ END --------------
121 
122 } // namespace gui2
Contains the info needed to instantiate a widget.
std::unique_ptr< class walker_base > walker_ptr
Definition: widget.hpp:39
std::unique_ptr< widget > widget_
Definition: viewport.hpp:99
std::shared_ptr< builder_widget > builder_widget_ptr
Helper to implement private functions without modifying the header.
Definition: viewport.cpp:40
Base class for all widgets.
Definition: widget.hpp:49
std::map< std::string, std::shared_ptr< builder_widget > > replacements_map
The replacements type is used to define replacement types.
Generic file dialog.
Definition: field-fwd.hpp:23
std::size_t size(const std::string &str)
Length in characters of a UTF-8 string.
Definition: unicode.cpp:87
static thread_local std::deque< std::string > call_stack
For printing error messages when WFL parsing or evaluation fails, this contains the names of the WFL ...
Definition: function.cpp:47
A viewport is an special widget used to view only a part of the widget it &#39;holds&#39;.
Definition: viewport.hpp:45
Holds a 2D point.
Definition: point.hpp:24
bool grid()
Definition: general.cpp:562
std::unique_ptr< window > build(const builder_window::window_resolution &definition)
Builds a window.
map_location coordinate
Contains an x and y coordinate used for starting positions in maps.
A config object defines a single node in a WML file, with access to child nodes.
Definition: config.hpp:60
base class of top level items, the only item which needs to store the final canvases to draw on...
Definition: window.hpp:66
Contains the implementation details for lexical_cast and shouldn&#39;t be used directly.