The Battle for Wesnoth  1.17.10+dev
show_dialog.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 class surface;
19 
20 #include "cursor.hpp"
21 #include "floating_label.hpp"
23 #include "tooltips.hpp"
24 #include "widgets/button.hpp"
25 
26 namespace gui
27 {
28 
29 extern const int ButtonHPadding;
30 extern const int ButtonVPadding;
36  ESCAPE_DIALOG=-3, //special return used by WML event dialogs
39  /* results (0..N) reserved for standard button indices */
40 };
41 
42 bool in_dialog();
43 
47 
48 private:
49  bool reset_to;
50 };
51 
53 public:
56  SDL_Rect interior, exterior, title, button_row;
57  };
58  class style {
59  public:
60  style(const std::string& p, int br) : panel(p), blur_radius(br) {}
61  std::string panel;
63  };
64 
65  //Static members
66  static const int title_border_w, title_border_h;
67  static const style default_style;
68 
69  dialog_frame(const std::string& title="",
70  const style& dialog_style=default_style,
71  std::vector<button*>* buttons=nullptr,
72  button* help_button=nullptr);
73  ~dialog_frame();
74 
75  dimension_measurements layout(int x, int y, int w, int h);
76  dimension_measurements layout(const SDL_Rect& frame_area);
77  void set_layout(dimension_measurements &new_dim) { dim_ = new_dim; }
78  dimension_measurements get_layout() const { return dim_; }
79 
80  int top_padding() const;
81  int bottom_padding() const;
82 
83  void draw();
84 
85  /** Called by draw_manager to validate layout. */
86  virtual void layout() override;
87 
88  /** Called by draw_manager when it believes a redraw is necessary. */
89  virtual bool expose(const rect& region) override;
90 
91  /** The current draw location of the window, on the screen. */
92  virtual rect screen_location() override;
93 
94  //called by draw
95  void draw_border();
96  void draw_background();
97 
98  //also called by layout with null param
99  rect draw_title(bool actually_draw);
100 
101  void set_dirty(bool dirty = true);
102 
103 private:
104  void clear_background();
105 
106  std::string title_;
108  std::vector<button*>* buttons_;
112  texture top_, bot_, left_, right_, top_left_, bot_left_, top_right_, bot_right_, bg_;
114  bool dirty_;
115 };
116 
117 }
static const style default_style
Definition: show_dialog.hpp:67
bool in_dialog()
Definition: show_dialog.cpp:60
General purpose widgets.
std::vector< button * > * buttons_
#define h
const style & dialog_style_
Wrapper class to encapsulate creation and management of an SDL_Texture.
Definition: texture.hpp:32
static void layout()
const int ButtonHPadding
Definition: show_dialog.cpp:49
A top-level drawable item (TLD), such as a window.
std::string title_
style(const std::string &p, int br)
Definition: show_dialog.hpp:60
static bool expose()
static const int title_border_w
Definition: show_dialog.hpp:66
A button is a control that can be pushed to start an action or close a dialog.
Definition: button.hpp:51
mock_party p
structure which will hide all current floating labels, and cause floating labels instantiated after i...
dimension_measurements dim_
An abstract description of a rectangle with integer coordinates.
Definition: rect.hpp:46
int w
DIALOG_RESULT
Definition: show_dialog.hpp:31
void set_layout(dimension_measurements &new_dim)
Definition: show_dialog.hpp:77
dimension_measurements get_layout() const
Definition: show_dialog.hpp:78
Definition: draw.hpp:42
const int ButtonVPadding
Definition: show_dialog.cpp:50