Help Browser: properly implement toggling by clicking the book icons
This commit is contained in:
parent
a96c270b32
commit
71a89de7b2
3 changed files with 204 additions and 77 deletions
109
data/gui/widget/toggle_button_help_topic.cfg
Normal file
109
data/gui/widget/toggle_button_help_topic.cfg
Normal 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
|
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue