The Battle for Wesnoth  1.17.8+dev
widget.hpp
Go to the documentation of this file.
1 /*
2  Copyright (C) 2003 - 2022
3  by David White <dave@whitevine.net>
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 
18 #include "events.hpp"
20 #include "sdl/rect.hpp"
21 #include "sdl/surface.hpp"
22 
23 #include <string>
24 
25 namespace gui {
26 
27 // TODO: making widgets TLDs is horrible. Please move everything to GUI2.
29 {
30 public:
31  const rect& location() const;
32  virtual void set_location(const SDL_Rect& rect);
33  void set_location(int x, int y);
34  void set_width(int w);
35  void set_height(int h);
36  void set_measurements(int w, int h);
37 
38  int width() const;
39  int height() const;
40 
41  //focus() may gain the focus if the currently focused handler doesn't require this event
42  bool focus(const SDL_Event* event);
43  void set_focus(bool focus);
44 
45  virtual void hide(bool value = true);
46  bool hidden() const;
47  virtual void enable(bool new_val = true);
48  bool enabled() const;
49 
50  void set_clip_rect(const SDL_Rect& rect);
51 
52  /** Indicate that the widget should be redrawn. */
53  void queue_redraw();
54  /** Indicate that a specific region of the screen should be redrawn.
55  * This is in absolute drawing coordinates, and is not clipped. */
56  void queue_redraw(const rect&);
57 
58  // Note: all that needs the dirty handling is the editor palette.
59  void set_dirty(bool dirty=true);
60  bool dirty() const;
61  const std::string& id() const;
62  void set_id(const std::string& id);
63 
64  void set_help_string(const std::string& str);
65  void set_tooltip_string(const std::string& str);
66 
67  virtual void process_help_string(int mousex, int mousey) override;
68  virtual void process_tooltip_string(int mousex, int mousey) override;
69 
70 protected:
71  widget(const bool auto_join=true);
72  virtual ~widget();
73 
74 public:
75  /* draw_manager interface */
76 
77  /** Called by draw_manager to validate layout. */
78  virtual void layout() override;
79  /** Called by draw_manager when it believes a redraw is necessary. */
80  virtual bool expose(const rect& region) override;
81  /** The current draw location of the display, on the screen. */
82  virtual rect screen_location() override { return location(); }
83 
84 private:
85  // This could be made public again, but GUI1 widgets are deprecated.
86  // It's better to replace with GUI2 systems than to improve this.
87  void draw();
88 
89 protected:
90  virtual void draw_contents() {}
91  virtual void update_location(const SDL_Rect&) {};
92 
93  virtual void handle_event(const SDL_Event&) override {};
94  bool focus_; // Should user input be ignored?
95 
96  bool mouse_locked() const;
97 
98  void aquire_mouse_lock();
99  void free_mouse_lock();
100 
101 private:
102  rect rect_;
103 
105  bool enabled_;
106  bool clip_;
108 
109  std::string help_text_;
110  std::string tooltip_text_;
111  bool has_help_;
112  std::string id_;
113 
115  static bool mouse_lock_;
116 
117  friend class dialog;
118 };
119 
120 }
bool enabled() const
Definition: widget.cpp:176
virtual void draw_contents()
Definition: widget.hpp:90
void aquire_mouse_lock()
Definition: widget.cpp:49
virtual void enable(bool new_val=true)
Definition: widget.cpp:168
bool hidden() const
Definition: widget.cpp:162
void queue_redraw()
Indicate that the widget should be redrawn.
Definition: widget.cpp:216
void set_clip_rect(const SDL_Rect &rect)
Definition: widget.cpp:155
bool has_help_
Definition: widget.hpp:111
General purpose widgets.
enum gui::widget::@10 state_
void set_width(int w)
Definition: widget.cpp:99
void set_focus(bool focus)
Definition: widget.cpp:129
#define h
rect clip_rect_
Definition: widget.hpp:107
bool dirty() const
Definition: widget.cpp:194
widget(const bool auto_join=true)
Definition: widget.cpp:34
static bool mouse_lock_
Definition: widget.hpp:115
virtual void layout() override
Called by draw_manager to validate layout.
Definition: widget.cpp:89
void set_measurements(int w, int h)
Definition: widget.cpp:109
virtual rect screen_location() override
The current draw location of the display, on the screen.
Definition: widget.hpp:82
void set_dirty(bool dirty=true)
Definition: widget.cpp:181
bool focus(const SDL_Event *event)
Definition: widget.cpp:137
virtual void hide(bool value=true)
Definition: widget.cpp:142
void free_mouse_lock()
Definition: widget.cpp:56
const rect & location() const
Definition: widget.cpp:124
virtual void process_tooltip_string(int mousex, int mousey) override
Definition: widget.cpp:271
A top-level drawable item (TLD), such as a window.
virtual void process_help_string(int mousex, int mousey) override
Definition: widget.cpp:257
virtual void set_location(const SDL_Rect &rect)
Definition: widget.cpp:70
bool mouse_lock_local_
Definition: widget.hpp:114
void set_help_string(const std::string &str)
Definition: widget.cpp:247
virtual bool expose(const rect &region) override
Called by draw_manager when it believes a redraw is necessary.
Definition: widget.cpp:221
friend class dialog
Definition: widget.hpp:117
const std::string & id() const
Definition: widget.cpp:199
virtual void handle_event(const SDL_Event &) override
Definition: widget.hpp:93
std::string id_
Definition: widget.hpp:112
bool focus_
Definition: widget.hpp:93
std::string help_text_
Definition: widget.hpp:109
An abstract description of a rectangle with integer coordinates.
Definition: rect.hpp:46
rect rect_
Definition: widget.hpp:102
virtual void update_location(const SDL_Rect &)
Definition: widget.hpp:91
int width() const
Definition: widget.cpp:114
void draw()
Definition: widget.cpp:231
int w
int height() const
Definition: widget.cpp:119
bool enabled_
Definition: widget.hpp:105
bool mouse_locked() const
Definition: widget.cpp:65
void set_tooltip_string(const std::string &str)
Definition: widget.cpp:252
void set_id(const std::string &id)
Definition: widget.cpp:204
Contains the SDL_Rect helper code.
bool clip_
Definition: widget.hpp:106
virtual ~widget()
Definition: widget.cpp:41
void set_height(int h)
Definition: widget.cpp:104
std::string tooltip_text_
Definition: widget.hpp:110