1 /* 2 Copyright (C) 2008 - 2018 by Mark de Wever <koraq@xs4all.nl> 3 Part of the Battle for Wesnoth Project https://www.wesnoth.org/ 4 5 This program is free software; you can redistribute it and/or modify 6 it under the terms of the GNU General Public License as published by 7 the Free Software Foundation; either version 2 of the License, or 8 (at your option) any later version. 9 This program is distributed in the hope that it will be useful, 10 but WITHOUT ANY WARRANTY. 11 12 See the COPYING file for more details. 13 */ 14 15 #pragma once 16 17 #include "gui/widgets/styled_widget.hpp" 18 19 #include "gui/core/widget_definition.hpp" 20 #include "gui/core/window_builder.hpp" 21 22 namespace gui2 23 { 24 namespace implementation 25 { 26 struct builder_image; 27 } 28 29 // ------------ WIDGET -----------{ 30 31 /** An image. */ 32 class image : public styled_widget 33 { 34 public: 35 explicit image(const implementation::builder_image& builder); 36 37 /** 38 * Wrapper for set_label. 39 * 40 * Some people considered this function missing and confusing so added 41 * this forward version. 42 * 43 * @param label The filename image to show. 44 */ set_image(const t_string & label)45 void set_image(const t_string& label) 46 { 47 set_label(label); 48 } 49 50 /** 51 * Wrapper for label. 52 * 53 * Some people considered this function missing and confusing so added 54 * this forward version. 55 * 56 * @returns The filename of the image shown. 57 */ get_image() const58 t_string get_image() const 59 { 60 return get_label(); 61 } 62 can_mouse_focus() const63 virtual bool can_mouse_focus() const override { return !tooltip().empty(); } 64 65 /***** ***** ***** ***** layout functions ***** ***** ***** *****/ 66 67 private: 68 /** See @ref widget::calculate_best_size. */ 69 virtual point calculate_best_size() const override; 70 71 public: 72 /***** ***** ***** ***** Inherited ***** ***** ***** *****/ 73 74 /** See @ref styled_widget::set_active. */ 75 virtual void set_active(const bool active) override; 76 77 /** See @ref styled_widget::get_active. */ 78 virtual bool get_active() const override; 79 80 /** See @ref styled_widget::get_state. */ 81 virtual unsigned get_state() const override; 82 83 /** See @ref widget::disable_click_dismiss. */ 84 bool disable_click_dismiss() const override; 85 86 private: 87 /** 88 * Possible states of the widget. 89 * 90 * Note the order of the states must be the same as defined in settings.hpp. 91 */ 92 enum state_t { 93 ENABLED, 94 }; 95 96 public: 97 /** Static type getter that does not rely on the widget being constructed. */ 98 static const std::string& type(); 99 100 private: 101 /** Inherited from styled_widget, implemented by REGISTER_WIDGET. */ 102 virtual const std::string& get_control_type() const override; 103 }; 104 105 // }---------- DEFINITION ---------{ 106 107 struct image_definition : public styled_widget_definition 108 { 109 explicit image_definition(const config& cfg); 110 111 struct resolution : public resolution_definition 112 { 113 explicit resolution(const config& cfg); 114 }; 115 }; 116 117 // }---------- BUILDER -----------{ 118 119 namespace implementation 120 { 121 122 struct builder_image : public builder_styled_widget 123 { 124 explicit builder_image(const config& cfg); 125 126 using builder_styled_widget::build; 127 128 widget* build() const; 129 }; 130 131 } // namespace implementation 132 133 // }------------ END -------------- 134 135 } // namespace gui2 136