The Battle for Wesnoth  1.19.0-dev
manager.hpp
Go to the documentation of this file.
1 /*
2  Copyright (C) 2008 - 2024
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 
18 #include "addon/client.hpp"
19 #include "addon/info.hpp"
20 #include "addon/state.hpp"
21 
24 
25 
26 namespace gui2
27 {
28 class selectable_item;
29 class button;
30 class stacked_widget;
31 namespace dialogs
32 {
33 
34 /**
35  * @ingroup GUIWindowDefinitionWML
36  *
37  * Shows the list of addons on the server available for installation.
38  *
39  * Key |Type |Mandatory|Description
40  * ------------------|--------------|---------|-----------
41  * addons | @ref listbox |yes |A listbox that will contain the info about all addons on the server.
42  * name | label |yes |The name of the addon.
43  * version_filter | menu_button |yes |List allowing current or older versions to be selected.
44  * author | label |yes |The author of the addon.
45  * downloads | label |yes |The number of times the addon has been downloaded.
46  * size | label |yes |The size of the addon.
47  * tags | label |yes |Contents of the PblWML "tags" attribute.
48  */
50 {
51 public:
52  explicit addon_manager(addons_client& client);
53 
55  {
57  }
58 
59 private:
60  struct addon_order
61  {
62  std::string label;
63  /** The value used in the preferences file */
64  std::string as_preference;
65  int column_index; // -1 if there is no such column
68 
69  addon_order(std::string label_, std::string as_preference_, int column, addon_list::addon_sort_func sort_func_asc_, addon_list::addon_sort_func sort_func_desc_)
70  : label(label_)
71  , as_preference(as_preference_)
72  , column_index(column)
73  , sort_func_asc(sort_func_asc_)
74  , sort_func_desc(sort_func_desc_)
75  {}
76  };
77 
78  std::vector<selectable_item*> orders_;
79 
80  void on_addon_select();
81  void toggle_details(button& btn, stacked_widget& stk);
82 
83  virtual const std::string& window_id() const override;
84 
85  virtual void pre_show(window& window) override;
86 
87  void fetch_addons_list();
88  void load_addon_list();
89 
90  void reload_list_and_reselect_item(const std::string id);
91 
92  /** Config which contains the list with the campaigns. */
94 
96 
98 
100 
101  static const std::vector<std::pair<ADDON_STATUS_FILTER, std::string>> status_filter_types_;
102  static const std::vector<std::pair<ADDON_TYPE, std::string>> type_filter_types_;
103  std::vector<std::pair<int, std::string>> language_filter_types_;
104  static const std::vector<addon_order> all_orders_;
105 
107 
108  template<void(addon_manager::*fptr)(const addon_info& addon)>
110 
111  void install_addon(const addon_info& addon);
113  {
114  execute_action_on_selected_addon<&addon_manager::install_addon>();
115  }
116 
117  void uninstall_addon(const addon_info& addon);
119  {
120  execute_action_on_selected_addon<&addon_manager::uninstall_addon>();
121  }
122 
123  void update_addon(const addon_info& addon);
125  {
126  execute_action_on_selected_addon<&addon_manager::update_addon>();
127  }
128 
129  void publish_addon(const addon_info& addon);
131  {
132  execute_action_on_selected_addon<&addon_manager::publish_addon>();
133  }
134 
135  void delete_addon(const addon_info& addon);
137  {
138  execute_action_on_selected_addon<&addon_manager::delete_addon>();
139  }
140 
141  void execute_default_action(const addon_info& addon);
143  {
144  execute_action_on_selected_addon<&addon_manager::execute_default_action>();
145  }
146 
147  void update_all_addons();
148 
149  void apply_filters();
150  void order_addons();
151  void on_order_changed(unsigned int sort_column, sort_order::type order);
152  void show_help();
153 
154  boost::dynamic_bitset<> get_name_filter_visibility() const;
155  boost::dynamic_bitset<> get_status_filter_visibility() const;
156  boost::dynamic_bitset<> get_tag_filter_visibility() const;
157  boost::dynamic_bitset<> get_type_filter_visibility() const;
158  boost::dynamic_bitset<> get_lang_filter_visibility() const;
159 
161  bool exit_hook(window& window);
162 };
163 
164 } // namespace dialogs
165 } // namespace gui2
Add-ons (campaignd) client class.
Definition: client.hpp:41
A config object defines a single node in a WML file, with access to child nodes.
Definition: config.hpp:159
std::function< bool(const addon_info &, const addon_info &)> addon_sort_func
Definition: addon_list.hpp:40
Simple push button.
Definition: button.hpp:36
Shows the list of addons on the server available for installation.
Definition: manager.hpp:50
void uninstall_addon(const addon_info &addon)
Definition: manager.cpp:855
void on_order_changed(unsigned int sort_column, sort_order::type order)
Definition: manager.cpp:797
static const std::vector< std::pair< ADDON_STATUS_FILTER, std::string > > status_filter_types_
Definition: manager.hpp:101
boost::dynamic_bitset get_lang_filter_visibility() const
Definition: manager.cpp:721
addons_client & client_
Definition: manager.hpp:95
virtual const std::string & window_id() const override
The ID of the window to build.
boost::dynamic_bitset get_status_filter_visibility() const
Definition: manager.cpp:643
void execute_default_action(const addon_info &addon)
Called when the player double-clicks an add-on.
Definition: manager.cpp:1000
std::vector< std::pair< int, std::string > > language_filter_types_
Definition: manager.hpp:103
void execute_default_action_on_selected_addon()
Definition: manager.hpp:142
boost::dynamic_bitset get_name_filter_visibility() const
Definition: manager.cpp:619
void toggle_details(button &btn, stacked_widget &stk)
Definition: manager.cpp:537
void reload_list_and_reselect_item(const std::string id)
Definition: manager.cpp:610
void delete_addon(const addon_info &addon)
Performs all backend and UI actions for taking down the specified add-on.
Definition: manager.cpp:974
addon_manager(addons_client &client)
Definition: manager.cpp:236
config cfg_
Config which contains the list with the campaigns.
Definition: manager.hpp:93
boost::dynamic_bitset get_type_filter_visibility() const
Definition: manager.cpp:696
addons_tracking_list tracking_info_
Definition: manager.hpp:99
static const std::vector< addon_order > all_orders_
Definition: manager.hpp:104
boost::dynamic_bitset get_tag_filter_visibility() const
Definition: manager.cpp:664
virtual void pre_show(window &window) override
Actions to be taken before showing the window.
Definition: manager.cpp:302
static const std::vector< std::pair< ADDON_TYPE, std::string > > type_filter_types_
Definition: manager.hpp:102
bool get_need_wml_cache_refresh() const
Definition: manager.hpp:54
void install_addon(const addon_info &addon)
Definition: manager.cpp:834
void update_addon(const addon_info &addon)
Definition: manager.cpp:875
std::vector< selectable_item * > orders_
Definition: manager.hpp:78
void publish_addon(const addon_info &addon)
Performs all backend and UI actions for publishing the specified add-on.
Definition: manager.cpp:910
Abstract base class for all modal dialogs.
A label displays text that can be wrapped but no scrollbars are provided.
Definition: label.hpp:56
A stacked widget holds several widgets on top of each other.
t_string label_
Contain the non-editable text associated with styled_widget.
base class of top level items, the only item which needs to store the final canvases to draw on.
Definition: window.hpp:63
Networked add-ons (campaignd) client interface.
std::map< std::string, addon_info > addons_list
Definition: info.hpp:27
Various uncategorised dialogs.
Generic file dialog.
std::map< std::string, addon_tracking_info > addons_tracking_list
Definition: state.hpp:64
addon_list::addon_sort_func sort_func_desc
Definition: manager.hpp:67
addon_list::addon_sort_func sort_func_asc
Definition: manager.hpp:66
std::string as_preference
The value used in the preferences file.
Definition: manager.hpp:64
addon_order(std::string label_, std::string as_preference_, int column, addon_list::addon_sort_func sort_func_asc_, addon_list::addon_sort_func sort_func_desc_)
Definition: manager.hpp:69