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:
parent
3281df4e2f
commit
ecffef786a
3 changed files with 60 additions and 20 deletions
|
@ -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]
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Add table
Reference in a new issue