GUI2/Help Browser: display raw topic text

Not sure a multi page is the best way to go here. There's a 2 - 3 second lag when opening the browser.
This commit is contained in:
Charles Dang 2017-03-23 23:35:24 +11:00
parent 3281df4e2f
commit ecffef786a
3 changed files with 60 additions and 20 deletions

View file

@ -81,9 +81,7 @@
[resolution]
definition = "default"
automatic_placement = "true"
vertical_placement = "center"
horizontal_placement = "center"
{GUI_WINDOW_FIXED_SIZE_CENTERED 1200 700}
[tooltip]
id = "tooltip_large"
@ -142,15 +140,15 @@
[column]
grow_factor = 1
#[multi_page]
# id = "help_text_pages"
[multi_page]
id = "topic_text_pages"
# [page_definition]
[page_definition]
# [row]
# grow_factor = 1
[row]
grow_factor = 1
# [column]
[column]
border = "all"
border_size = 5
horizontal_grow = true
@ -160,13 +158,13 @@
definition = "default"
id = "topic_text"
[/scroll_label]
# [/column]
[/column]
# [/row]
[/row]
# [/page_definition]
[/page_definition]
#[/multi_page]
[/multi_page]
[/column]

View file

@ -26,6 +26,7 @@
#include "gui/widgets/settings.hpp"
#include "gui/widgets/text_box.hpp"
#include "gui/widgets/tree_view.hpp"
#include "gui/widgets/tree_view_node.hpp"
#include "gui/widgets/window.hpp"
#ifdef GUI2_EXPERIMENTAL_LISTBOX
@ -45,23 +46,62 @@ REGISTER_DIALOG(help_browser)
help_browser::help_browser()
: initial_topic_("introduction")
, help_cfg_(game_config_manager::get()->game_config().child("help"))
, help_cfg_(game_config_manager::get()->game_config().child("help"))
{
}
void help_browser::pre_show(window& window)
{
tree_view& topic_tree = find_widget<tree_view>(&window, "topic_tree", false);
tree_view& topic_tree = find_widget<tree_view>(&window, "topic_tree", false);
multi_page& topic_pages = find_widget<multi_page>(&window, "topic_text_pages", false);
topic_tree.set_selection_change_callback(std::bind(&help_browser::on_topic_select, this, std::ref(window)));
window.keyboard_capture(&topic_tree);
unsigned id = 0;
for(const auto& topic : help_cfg_.child_range("topic")) {
std::map<std::string, string_map> data;
string_map item;
item["label"] = topic["title"];
data.emplace("topic_name", item);
item["label"] = topic["title"];
data.emplace("topic_name", item);
topic_tree.add_node("topic", data).set_id(std::to_string(id));
// FIXME: maybe using a multi page isn't a good idea here... :| it causes massive lag when opening.
item.clear();
data.clear();
item["label"] = topic["text"].empty() ? "" : topic["text"].str();
data.emplace("topic_text", item);
topic_pages.add_page(data);
++id;
}
on_topic_select(window);
}
void help_browser::on_topic_select(window& window)
{
tree_view& tree = find_widget<tree_view>(&window, "topic_tree", false);
if(tree.empty()) {
return;
}
assert(tree.selected_item());
if(tree.selected_item()->id() == "") {
return;
}
const unsigned topic_i = lexical_cast<unsigned>(tree.selected_item()->id());
find_widget<multi_page>(&window, "topic_text_pages", false).select_page(topic_i);
topic_tree.add_node("topic", data);
}
}
} // namespace dialogs

View file

@ -31,7 +31,7 @@ class help_browser : public modal_dialog
public:
help_browser();
static void display(CVideo& video)
static void display(CVideo& video)
{
help_browser().show(video);
}
@ -46,6 +46,8 @@ private:
/** Inherited from modal_dialog. */
void pre_show(window& window);
void on_topic_select(window& window);
};
} // namespace dialogs