Help Browser: properly implement toggling by clicking the book icons

This commit is contained in:
Charles Dang 2017-04-11 05:42:52 +11:00
parent a96c270b32
commit 71a89de7b2
3 changed files with 204 additions and 77 deletions

View file

@ -0,0 +1,109 @@
#textdomain wesnoth-lib
###
### Definition of a toggle button to toggle sections in the help browser.
###
#define _GUI_ICON ICON
[image]
x = 0
y = 1 # The images are 24px high
w = "(image_width)"
h = "(image_height)"
name = {ICON}
[/image]
#enddef
[toggle_button_definition]
id = "help_section_toggle"
description = "This toggle button is meant to be used in topic tree in the help browser"
[resolution]
{GUI_NORMAL__RESOLUTION}
min_width = 26
min_height = 26
default_width = 26
default_height = 26
max_width = 26
max_height = 26
text_extra_width = 0
text_font_size = 0
[state]
[enabled]
[draw]
{_GUI_ICON ("help/closed_section.png")}
[/draw]
[/enabled]
[disabled]
[draw]
{_GUI_ICON ("help/closed_section.png~GS()")}
[/draw]
[/disabled]
[focused]
[draw]
{_GUI_ICON ("help/closed_section.png")}
[/draw]
[/focused]
[/state]
###
### Selected
###
[state]
[enabled]
[draw]
{_GUI_ICON ("help/open_section.png")}
[/draw]
[/enabled]
[disabled]
[draw]
{_GUI_ICON ("help/open_section.png~GS()")}
[/draw]
[/disabled]
[focused]
[draw]
{_GUI_ICON ("help/open_section.png")}
[/draw]
[/focused]
[/state]
[/resolution]
[/toggle_button_definition]
#undef _GUI_ICON

View file

@ -1,5 +1,70 @@
#textdomain wesnoth-lib
#define _GUI_NODE _ID _TOGGLE_OR_IMAGE_WML
[node]
id = {_ID}
[node_definition]
[row]
[column]
horizontal_grow = true
[toggle_panel]
id = "tree_view_node_label"
[grid]
[row]
[column]
grow_factor = 0
border = "all"
border_size = 5
{_TOGGLE_OR_IMAGE_WML}
[/column]
[column]
grow_factor = 1
border = "all"
border_size = 5
horizontal_grow = true
[label]
id = "topic_name"
linked_group = "names"
definition = "default_small"
[/label]
[/column]
[column]
grow_factor = 0
border = "all"
border_size = 5
[spacer]
width = 5
[/spacer]
[/column]
[/row]
[/grid]
[/toggle_panel]
[/column]
[/row]
[/node_definition]
[/node]
#enddef
#define _GUI_TOPIC_TREE
[tree_view]
id = "topic_tree"
@ -10,70 +75,22 @@
indentation_step_size = 20
[node]
id = "topic"
{_GUI_NODE "section" (
[toggle_button]
id = "tree_view_node_icon"
definition = "help_section_toggle"
linked_group = "images"
[/toggle_button]
)}
[node_definition]
[row]
[column]
horizontal_grow = true
[toggle_panel]
id = "tree_view_node_label"
[grid]
[row]
[column]
grow_factor = 0
border = "all"
border_size = 5
[image]
id = "topic_icon"
linked_group = "images"
[/image]
[/column]
[column]
grow_factor = 1
border = "all"
border_size = 5
horizontal_grow = true
[label]
id = "topic_name"
linked_group = "names"
definition = "default_small"
[/label]
[/column]
[column]
grow_factor = 0
border = "all"
border_size = 5
[spacer]
width = 5
[/spacer]
[/column]
[/row]
[/grid]
[/toggle_panel]
[/column]
[/row]
[/node_definition]
[/node]
{_GUI_NODE "topic" (
[image]
id = "topic_image"
definition = "default"
label = "help/topic.png"
linked_group = "images"
[/image]
)}
[/tree_view]
#enddef
@ -250,3 +267,4 @@
[/window]
#undef _GUI_TOPIC_TREE
#undef _GUI_NODE

View file

@ -56,10 +56,13 @@ help_browser::help_browser()
void help_browser::pre_show(window& window)
{
tree_view& topic_tree = find_widget<tree_view>(&window, "topic_tree", false);
button& back_button = find_widget<button>(&window, "back", false);
button& next_button = find_widget<button>(&window, "next", false);
next_button.set_visible(widget::visibility::hidden);
back_button.set_visible(widget::visibility::hidden);
connect_signal_mouse_left_click(back_button, std::bind(&help_browser::on_history_navigate, this, std::ref(window), true));
connect_signal_mouse_left_click(next_button, std::bind(&help_browser::on_history_navigate, this, std::ref(window), false));
@ -94,10 +97,7 @@ tree_view_node& help_browser::add_topic(const std::string& topic_id, const std::
item["label"] = topic_title;
data.emplace("topic_name", item);
item["label"] = expands ? help::closed_section_img : help::topic_img;
data.emplace("topic_icon", item);
tree_view_node& new_node = parent.add_child("topic", data);
tree_view_node& new_node = parent.add_child(expands ? "section" : "topic", data);
new_node.set_id(std::string(expands ? "+" : "-") + topic_id);
return new_node;
@ -184,13 +184,6 @@ void help_browser::on_topic_select(window& window)
tree_view_node* selected = topic_tree.selected_item();
assert(selected);
// FIXME: should we be manually doing this?
if(selected->is_folded()) {
selected->unfold();
} else {
selected->fold();
}
std::string topic_id = selected->id();
if(topic_id.empty()) {
@ -227,8 +220,10 @@ void help_browser::on_topic_select(window& window)
if(!history_.empty()) {
history_.erase(std::next(history_pos_), history_.end());
}
history_.push_back(topic_id);
history_pos_ = std::prev(history_.end());
find_widget<button>(&window, "back", false).set_visible(widget::visibility::visible);
find_widget<button>(&window, "next", false).set_visible(widget::visibility::hidden);
@ -236,14 +231,19 @@ void help_browser::on_topic_select(window& window)
topic_pages.select_page(topic_i);
}
void help_browser::on_history_navigate(window& window, bool backwards) {
void help_browser::on_history_navigate(window& window, bool backwards)
{
if(backwards) {
history_pos_--;
} else {
history_pos_++;
}
find_widget<button>(&window, "back", false).set_visible(history_pos_ == history_.begin() ? widget::visibility::hidden : widget::visibility::visible);
find_widget<button>(&window, "next", false).set_visible(history_pos_ == std::prev(history_.end()) ? widget::visibility::hidden : widget::visibility::visible);
find_widget<button>(&window, "back", false).set_visible(
history_pos_ == history_.begin() ? widget::visibility::hidden : widget::visibility::visible);
find_widget<button>(&window, "next", false).set_visible(
history_pos_ == std::prev(history_.end()) ? widget::visibility::hidden : widget::visibility::visible);
const unsigned topic_i = parsed_pages_.at(*history_pos_);
find_widget<multi_page>(&window, "topic_text_pages", false).select_page(topic_i);
}