The Battle for Wesnoth  1.15.12+dev
manager.hpp
Go to the documentation of this file.
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 "addon/client.hpp"
18 #include "addon/info.hpp"
19 #include "addon/state.hpp"
20 
23 #include "gui/widgets/pane.hpp"
24 
25 #include <boost/dynamic_bitset.hpp>
26 
27 namespace gui2
28 {
29 class text_box_base;
30 class text_box;
31 class pane;
32 class selectable_item;
33 class button;
34 class stacked_widget;
35 namespace dialogs
36 {
37 
38 /**
39  * @ingroup GUIWindowDefinitionWML
40  *
41  * Shows the list of addons on the server available for installation.
42  * This dialog is under construction and only used with --new-widgets.
43  * Key |Type |Mandatory|Description
44  * ------------------|--------------|---------|-----------
45  * addons | @ref listbox |yes |A listbox that will contain the info about all addons on the server.
46  * name | control |no |The name of the addon.
47  * version | control |no |The version number of the addon.
48  * author | control |no |The author of the addon.
49  * downloads | control |no |The number of times the addon has been downloaded.
50  * size | control |no |The size of the addon.
51  */
53 {
54 public:
55  explicit addon_manager(addons_client& client);
56 
58  {
60  }
61 
62 private:
63  struct addon_order
64  {
65  std::string label;
66  /** The value used in the preferences file */
67  std::string as_preference;
68  int column_index; // -1 if there is no such column
71 
72  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_)
73  : label(label_)
74  , as_preference(as_preference_)
75  , column_index(column)
76  , sort_func_asc(sort_func_asc_)
77  , sort_func_desc(sort_func_desc_)
78  {}
79  };
80 
81  std::vector<selectable_item*> orders_;
82 
83  void on_addon_select();
84  void toggle_details(button& btn, stacked_widget& stk);
85 
86  virtual const std::string& window_id() const override;
87 
88  virtual void pre_show(window& window) override;
89 
90  void fetch_addons_list();
91  void load_addon_list();
92 
93  void reload_list_and_reselect_item(const std::string id);
94 
95  /** Config which contains the list with the campaigns. */
97 
99 
101 
103 
104  static const std::vector<std::pair<ADDON_STATUS_FILTER, std::string>> status_filter_types_;
105  static const std::vector<std::pair<ADDON_TYPE, std::string>> type_filter_types_;
106  static const std::vector<addon_order> all_orders_;
107 
109 
110  template<void(addon_manager::*fptr)(const addon_info& addon)>
112 
113  void install_addon(const addon_info& addon);
115  {
116  execute_action_on_selected_addon<&addon_manager::install_addon>();
117  }
118 
119  void uninstall_addon(const addon_info& addon);
121  {
122  execute_action_on_selected_addon<&addon_manager::uninstall_addon>();
123  }
124 
125  void update_addon(const addon_info& addon);
127  {
128  execute_action_on_selected_addon<&addon_manager::update_addon>();
129  }
130 
131  void publish_addon(const addon_info& addon);
133  {
134  execute_action_on_selected_addon<&addon_manager::publish_addon>();
135  }
136 
137  void delete_addon(const addon_info& addon);
139  {
140  execute_action_on_selected_addon<&addon_manager::delete_addon>();
141  }
142 
143  void execute_default_action(const addon_info& addon);
145  {
146  execute_action_on_selected_addon<&addon_manager::execute_default_action>();
147  }
148 
149  void update_all_addons();
150 
151  void apply_filters();
152  void order_addons();
153  void on_order_changed(unsigned int sort_column, preferences::SORT_ORDER order);
154  void show_help();
155 
156  boost::dynamic_bitset<> get_name_filter_visibility() const;
157  boost::dynamic_bitset<> get_status_filter_visibility() const;
158  boost::dynamic_bitset<> get_type_filter_visibility() const;
159 
161  bool exit_hook(window& window);
162 };
163 
164 } // namespace dialogs
165 } // namespace gui2
Shows the list of addons on the server available for installation.
Definition: manager.hpp:52
config cfg_
Config which contains the list with the campaigns.
Definition: manager.hpp:96
boost::dynamic_bitset get_status_filter_visibility() const
Definition: manager.cpp:537
bool exit_hook(window &window)
Definition: manager.cpp:971
std::function< bool(const addon_info &, const addon_info &)> addon_sort_func
Definition: addon_list.hpp:41
addons_tracking_list tracking_info_
Definition: manager.hpp:102
preferences::SORT_ORDER SORT_ORDER
Definition: listbox.cpp:41
std::string as_preference
The value used in the preferences file.
Definition: manager.hpp:67
void reload_list_and_reselect_item(const std::string id)
Definition: manager.cpp:504
void execute_default_action(const addon_info &addon)
Called when the player double-clicks an add-on.
Definition: manager.cpp:805
static const std::vector< std::pair< ADDON_STATUS_FILTER, std::string > > status_filter_types_
Definition: manager.hpp:104
addon_list::addon_sort_func sort_func_asc
Definition: manager.hpp:69
void update_addon(const addon_info &addon)
Definition: manager.cpp:688
Generic file dialog.
Definition: field-fwd.hpp:22
boost::dynamic_bitset get_name_filter_visibility() const
Definition: manager.cpp:513
bool get_need_wml_cache_refresh() const
Definition: manager.hpp:57
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:72
void toggle_details(button &btn, stacked_widget &stk)
Definition: manager.cpp:433
addon_list::addon_sort_func sort_func_desc
Definition: manager.hpp:70
Add-ons (campaignd) client class.
Definition: client.hpp:39
Various uncategorised dialogs.
void on_order_changed(unsigned int sort_column, preferences::SORT_ORDER order)
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:779
addons_client & client_
Definition: manager.hpp:98
addon_manager(addons_client &client)
Definition: manager.cpp:209
void execute_default_action_on_selected_addon()
Definition: manager.hpp:144
boost::dynamic_bitset get_type_filter_visibility() const
Definition: manager.cpp:558
void publish_addon(const addon_info &addon)
Performs all backend and UI actions for publishing the specified add-on.
Definition: manager.cpp:723
void install_addon(const addon_info &addon)
Definition: manager.cpp:647
void uninstall_addon(const addon_info &addon)
Definition: manager.cpp:668
static const std::vector< std::pair< ADDON_TYPE, std::string > > type_filter_types_
Definition: manager.hpp:105
std::map< std::string, addon_tracking_info > addons_tracking_list
Definition: state.hpp:63
Abstract base class for all modal dialogs.
Simple push button.
Definition: button.hpp:35
virtual const std::string & window_id() const override
The id of the window to build.
std::vector< selectable_item * > orders_
Definition: manager.hpp:81
A stacked widget holds several widgets on top of each other.
A config object defines a single node in a WML file, with access to child nodes.
Definition: config.hpp:59
std::map< std::string, addon_info > addons_list
Definition: info.hpp:27
base class of top level items, the only item which needs to store the final canvases to draw on...
Definition: window.hpp:64
virtual void pre_show(window &window) override
Actions to be taken before showing the window.
Definition: manager.cpp:274
Networked add-ons (campaignd) client interface.
static const std::vector< addon_order > all_orders_
Definition: manager.hpp:106