Skip to content

Commit

Permalink
Help Browser: properly implement toggling by clicking the book icons
Browse files Browse the repository at this point in the history
  • Loading branch information
Vultraz committed Apr 16, 2017
1 parent 25f45f1 commit f28794f
Show file tree
Hide file tree
Showing 3 changed files with 193 additions and 66 deletions.
109 changes: 109 additions & 0 deletions data/gui/widget/toggle_button_help_topic.cfg
@@ -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
122 changes: 70 additions & 52 deletions data/gui/window/help_browser.cfg
@@ -1,79 +1,96 @@
#textdomain wesnoth-lib

#define _GUI_TOPIC_TREE
[tree_view]
id = "topic_tree"
definition = "default"
#define _GUI_NODE _ID _TOGGLE_OR_IMAGE_WML
[node]
id = {_ID}

horizontal_scrollbar_mode = "never"
vertical_scrollbar_mode = "always"
[node_definition]

indentation_step_size = 20
[row]

[column]
horizontal_grow = true

[node]
id = "topic"
[toggle_panel]
id = "tree_view_node_label"

[node_definition]
[grid]

[row]
[row]

[column]
horizontal_grow = true
[column]
grow_factor = 0
border = "all"
border_size = 5

[toggle_panel]
id = "tree_view_node_label"
{_TOGGLE_OR_IMAGE_WML}

[grid]
[/column]

[row]
[column]
grow_factor = 1
border = "all"
border_size = 5
horizontal_grow = true

[column]
grow_factor = 0
border = "all"
border_size = 5
[label]
id = "topic_name"
linked_group = "names"
definition = "default_small"
[/label]
[/column]

[image]
id = "topic_icon"
linked_group = "images"
[/image]
[/column]
[column]
grow_factor = 0
border = "all"
border_size = 5

[column]
grow_factor = 1
border = "all"
border_size = 5
horizontal_grow = true
[spacer]
width = 5
[/spacer]
[/column]

[label]
id = "topic_name"
linked_group = "names"
definition = "default_small"
[/label]
[/column]
[/row]

[column]
grow_factor = 0
border = "all"
border_size = 5
[/grid]

[spacer]
width = 5
[/spacer]
[/column]
[/toggle_panel]

[/row]
[/column]

[/grid]
[/row]

[/toggle_panel]
[/node_definition]

[/column]
[/node]
#enddef

[/row]
#define _GUI_TOPIC_TREE
[tree_view]
id = "topic_tree"
definition = "default"

[/node_definition]
horizontal_scrollbar_mode = "never"
vertical_scrollbar_mode = "always"

indentation_step_size = 20

[/node]
{_GUI_NODE "section" (
[toggle_button]
id = "tree_view_node_icon"
definition = "help_section_toggle"
linked_group = "images"
[/toggle_button]
)}

{_GUI_NODE "topic" (
[image]
id = "topic_image"
definition = "default"
label = "help/topic.png"
linked_group = "images"
[/image]
)}

[/tree_view]
#enddef
Expand Down Expand Up @@ -250,3 +267,4 @@
[/window]

#undef _GUI_TOPIC_TREE
#undef _GUI_NODE
28 changes: 14 additions & 14 deletions src/gui/dialogs/help_browser.cpp
Expand Up @@ -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));

Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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 == "") {
Expand Down Expand Up @@ -227,23 +220,30 @@ 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);

const unsigned topic_i = parsed_pages_.at(topic_id);
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);
}
Expand Down

0 comments on commit f28794f

Please sign in to comment.