The Battle for Wesnoth  1.15.2+dev
help_browser.cpp
Go to the documentation of this file.
1 /*
2  Copyright (C) 2017-2018 by Charles Dang <exodia339@gmail.com>
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 #define GETTEXT_DOMAIN "wesnoth-lib"
16 
18 
19 #include "game_config_manager.hpp"
21 #include "gui/widgets/button.hpp"
22 #include "gui/widgets/image.hpp"
25 #include "gui/widgets/settings.hpp"
26 #include "gui/widgets/settings.hpp"
27 #include "gui/widgets/text_box.hpp"
30 #include "gui/widgets/window.hpp"
31 
32 #ifdef GUI2_EXPERIMENTAL_LISTBOX
33 #include "gui/widgets/list.hpp"
34 #else
35 #include "gui/widgets/listbox.hpp"
36 #endif
37 
38 #include "help/help.hpp"
39 
40 namespace gui2
41 {
42 namespace dialogs
43 {
44 
45 REGISTER_DIALOG(help_browser)
46 
48  : initial_topic_("introduction")
49  , help_cfg_(game_config_manager::get()->game_config().child("help"))
50 {
51 }
52 
54 {
55  tree_view& topic_tree = find_widget<tree_view>(&window, "topic_tree", false);
56  multi_page& topic_pages = find_widget<multi_page>(&window, "topic_text_pages", false);
57 
59  std::bind(&help_browser::on_topic_select, this, std::ref(window)));
60 
61  window.keyboard_capture(&topic_tree);
62 
63  unsigned id = 0;
64 
65  for(const auto& topic : help_cfg_.child_range("topic")) {
66  std::map<std::string, string_map> data;
68 
69  item["label"] = topic["title"];
70  data.emplace("topic_name", item);
71 
72  topic_tree.add_node("topic", data).set_id(std::to_string(id));
73 
74  // FIXME: maybe using a multi page isn't a good idea here... :| it causes massive lag when opening.
75  item.clear();
76  data.clear();
77 
78  item["label"] = topic["text"].empty() ? "" : topic["text"].str();
79  data.emplace("topic_text", item);
80 
81  topic_pages.add_page(data);
82 
83  ++id;
84  }
85 
86  on_topic_select(window);
87 }
88 
90 {
91  tree_view& tree = find_widget<tree_view>(&window, "topic_tree", false);
92 
93  if(tree.empty()) {
94  return;
95  }
96 
97  assert(tree.selected_item());
98 
99  if(tree.selected_item()->id().empty()) {
100  return;
101  }
102 
103  const unsigned topic_i = lexical_cast<unsigned>(tree.selected_item()->id());
104  find_widget<multi_page>(&window, "topic_text_pages", false).select_page(topic_i);
105 
106 }
107 
108 } // namespace dialogs
109 } // namespace gui2
const std::string & id() const
Definition: widget.cpp:107
This file contains the window object, this object is a top level container which has the event manage...
child_itors child_range(config_key_type key)
Definition: config.cpp:362
tree_view_node * selected_item()
Definition: tree_view.hpp:95
To lexical_cast(From value)
Lexical cast converts one type to another.
virtual void pre_show(window &window) override
Inherited from modal_dialog.
Generic file dialog.
Definition: field-fwd.hpp:22
void connect_signal_notify_modified(dispatcher &dispatcher, const signal_notification_function &signal)
Connects a signal handler for getting a notification upon modification.
Definition: dispatcher.cpp:248
This file contains the settings handling of the widget library.
void on_topic_select(window &window)
Various uncategorised dialogs.
Game configuration data as global variables.
Definition: build_info.cpp:49
CURSOR_TYPE get()
Definition: cursor.cpp:215
Help browser dialog.
std::map< std::string, t_string > string_map
Definition: widget.hpp:24
The multi page class.
Definition: multi_page.hpp:35
bool empty() const
Definition: tree_view.cpp:110
void set_id(const std::string &id)
Definition: widget.cpp:95
Definition: help.cpp:55
base class of top level items, the only item which needs to store the final canvases to draw on ...
Definition: window.hpp:62
tree_view_node & add_node(const std::string &id, const std::map< std::string, string_map > &data, const int index=-1)
Definition: tree_view.cpp:56
std::pair< std::string, unsigned > item
Definition: help_impl.hpp:371