mirror of
https://github.com/wesnoth/wesnoth
synced 2025-05-18 14:04:02 +00:00
Converted Statistics dialog to GUI2
This commit is contained in:
parent
524f23db58
commit
049f067073
601
data/gui/window/statistics_dialog.cfg
Normal file
601
data/gui/window/statistics_dialog.cfg
Normal file
@ -0,0 +1,601 @@
|
|||||||
|
#textdomain wesnoth-lib
|
||||||
|
###
|
||||||
|
### Definition of the window to display scenario or campaign statistics
|
||||||
|
###
|
||||||
|
|
||||||
|
#define _GUI_MAIN_STATS_LIST
|
||||||
|
[listbox]
|
||||||
|
id = "stats_list_main"
|
||||||
|
definition = "default"
|
||||||
|
|
||||||
|
horizontal_scrollbar_mode = "never"
|
||||||
|
|
||||||
|
[list_definition]
|
||||||
|
|
||||||
|
[row]
|
||||||
|
|
||||||
|
[column]
|
||||||
|
vertical_grow = "true"
|
||||||
|
horizontal_grow = "true"
|
||||||
|
|
||||||
|
[toggle_panel]
|
||||||
|
definition = "default"
|
||||||
|
|
||||||
|
[grid]
|
||||||
|
|
||||||
|
[row]
|
||||||
|
|
||||||
|
[column]
|
||||||
|
grow_factor = 2
|
||||||
|
border = "all"
|
||||||
|
border_size = 5
|
||||||
|
horizontal_grow = "true"
|
||||||
|
|
||||||
|
[label]
|
||||||
|
id = "stat_type"
|
||||||
|
definition = "default"
|
||||||
|
linked_group = "type"
|
||||||
|
[/label]
|
||||||
|
[/column]
|
||||||
|
|
||||||
|
[column]
|
||||||
|
grow_factor = 2
|
||||||
|
border = "all"
|
||||||
|
border_size = 5
|
||||||
|
horizontal_grow = "true"
|
||||||
|
|
||||||
|
[label]
|
||||||
|
id = "stat_detail"
|
||||||
|
definition = "default_small"
|
||||||
|
linked_group = "detail"
|
||||||
|
[/label]
|
||||||
|
[/column]
|
||||||
|
|
||||||
|
[column]
|
||||||
|
grow_factor = 0
|
||||||
|
border = "all"
|
||||||
|
border_size = 5
|
||||||
|
horizontal_grow = "true"
|
||||||
|
|
||||||
|
[image]
|
||||||
|
id = "cost_icon"
|
||||||
|
definition = "default"
|
||||||
|
label = "themes/gold.png"
|
||||||
|
[/image]
|
||||||
|
[/column]
|
||||||
|
|
||||||
|
[column]
|
||||||
|
grow_factor = 1
|
||||||
|
border = "all"
|
||||||
|
border_size = 5
|
||||||
|
horizontal_grow = "true"
|
||||||
|
|
||||||
|
[label]
|
||||||
|
id = "stat_cost"
|
||||||
|
definition = "default_small"
|
||||||
|
linked_group = "cost"
|
||||||
|
[/label]
|
||||||
|
[/column]
|
||||||
|
|
||||||
|
[/row]
|
||||||
|
|
||||||
|
[/grid]
|
||||||
|
|
||||||
|
[/toggle_panel]
|
||||||
|
|
||||||
|
[/column]
|
||||||
|
|
||||||
|
[/row]
|
||||||
|
|
||||||
|
[/list_definition]
|
||||||
|
|
||||||
|
[/listbox]
|
||||||
|
#enddef
|
||||||
|
|
||||||
|
#define _GUI_DAMAGE_STATS_LIST
|
||||||
|
[listbox]
|
||||||
|
id = "stats_list_damage"
|
||||||
|
definition = "default"
|
||||||
|
|
||||||
|
horizontal_scrollbar_mode = "never"
|
||||||
|
|
||||||
|
[header]
|
||||||
|
|
||||||
|
[row]
|
||||||
|
|
||||||
|
[column]
|
||||||
|
grow_factor = 1
|
||||||
|
horizontal_grow = "true"
|
||||||
|
border = "top,bottom"
|
||||||
|
border_size = 5
|
||||||
|
|
||||||
|
[label]
|
||||||
|
definition = "default_small"
|
||||||
|
label = _ "Damage"
|
||||||
|
linked_group = "type"
|
||||||
|
[/label]
|
||||||
|
[/column]
|
||||||
|
|
||||||
|
[column]
|
||||||
|
grow_factor = 1
|
||||||
|
horizontal_grow = "true"
|
||||||
|
border = "top,bottom"
|
||||||
|
border_size = 5
|
||||||
|
|
||||||
|
[label]
|
||||||
|
definition = "default_small"
|
||||||
|
label = _ "Overall"
|
||||||
|
linked_group = "detail"
|
||||||
|
[/label]
|
||||||
|
[/column]
|
||||||
|
|
||||||
|
[column]
|
||||||
|
grow_factor = 1
|
||||||
|
horizontal_grow = "true"
|
||||||
|
border = "top,bottom"
|
||||||
|
border_size = 5
|
||||||
|
|
||||||
|
[label]
|
||||||
|
definition = "default_small"
|
||||||
|
label = _ "This Turn"
|
||||||
|
linked_group = "cost"
|
||||||
|
[/label]
|
||||||
|
[/column]
|
||||||
|
|
||||||
|
[/row]
|
||||||
|
|
||||||
|
[/header]
|
||||||
|
|
||||||
|
[list_definition]
|
||||||
|
|
||||||
|
[row]
|
||||||
|
|
||||||
|
[column]
|
||||||
|
vertical_grow = "true"
|
||||||
|
horizontal_grow = "true"
|
||||||
|
|
||||||
|
[toggle_panel]
|
||||||
|
definition = "default"
|
||||||
|
|
||||||
|
[grid]
|
||||||
|
|
||||||
|
[row]
|
||||||
|
|
||||||
|
[column]
|
||||||
|
grow_factor = 1
|
||||||
|
border = "all"
|
||||||
|
border_size = 5
|
||||||
|
horizontal_grow = "true"
|
||||||
|
|
||||||
|
[label]
|
||||||
|
id = "damage_type"
|
||||||
|
definition = "default"
|
||||||
|
linked_group = "type"
|
||||||
|
[/label]
|
||||||
|
[/column]
|
||||||
|
|
||||||
|
[column]
|
||||||
|
grow_factor = 1
|
||||||
|
border = "all"
|
||||||
|
border_size = 5
|
||||||
|
horizontal_grow = "true"
|
||||||
|
|
||||||
|
[label]
|
||||||
|
id = "damage_overall"
|
||||||
|
definition = "default_small"
|
||||||
|
linked_group = "detail"
|
||||||
|
[/label]
|
||||||
|
[/column]
|
||||||
|
|
||||||
|
[column]
|
||||||
|
grow_factor = 1
|
||||||
|
border = "all"
|
||||||
|
border_size = 5
|
||||||
|
horizontal_grow = "true"
|
||||||
|
|
||||||
|
[label]
|
||||||
|
id = "damage_this_turn"
|
||||||
|
definition = "default_small"
|
||||||
|
linked_group = "cost"
|
||||||
|
[/label]
|
||||||
|
[/column]
|
||||||
|
|
||||||
|
[/row]
|
||||||
|
|
||||||
|
[/grid]
|
||||||
|
|
||||||
|
[/toggle_panel]
|
||||||
|
|
||||||
|
[/column]
|
||||||
|
|
||||||
|
[/row]
|
||||||
|
|
||||||
|
[/list_definition]
|
||||||
|
|
||||||
|
[/listbox]
|
||||||
|
#enddef
|
||||||
|
|
||||||
|
#define _GUI_UNIT_COUNT_LIST
|
||||||
|
[listbox]
|
||||||
|
id = "stats_list_units"
|
||||||
|
definition = "default"
|
||||||
|
has_minimum = "false"
|
||||||
|
|
||||||
|
horizontal_scrollbar_mode = "never"
|
||||||
|
|
||||||
|
[list_definition]
|
||||||
|
|
||||||
|
[row]
|
||||||
|
|
||||||
|
[column]
|
||||||
|
vertical_grow = "true"
|
||||||
|
horizontal_grow = "true"
|
||||||
|
|
||||||
|
[toggle_panel]
|
||||||
|
definition = "default"
|
||||||
|
|
||||||
|
[grid]
|
||||||
|
|
||||||
|
[row]
|
||||||
|
|
||||||
|
[column]
|
||||||
|
grow_factor = 0
|
||||||
|
border = "all"
|
||||||
|
border_size = 5
|
||||||
|
horizontal_grow = "true"
|
||||||
|
|
||||||
|
[image]
|
||||||
|
id = "unit_image"
|
||||||
|
definition = "default"
|
||||||
|
linked_group = "unit_image"
|
||||||
|
[/image]
|
||||||
|
[/column]
|
||||||
|
|
||||||
|
[column]
|
||||||
|
grow_factor = 1
|
||||||
|
border = "all"
|
||||||
|
border_size = 5
|
||||||
|
horizontal_grow = "true"
|
||||||
|
|
||||||
|
[label]
|
||||||
|
id = "unit_name"
|
||||||
|
definition = "default_small"
|
||||||
|
linked_group = "unit_name"
|
||||||
|
[/label]
|
||||||
|
[/column]
|
||||||
|
|
||||||
|
[column]
|
||||||
|
grow_factor = 1
|
||||||
|
border = "all"
|
||||||
|
border_size = 5
|
||||||
|
horizontal_grow = "true"
|
||||||
|
|
||||||
|
[label]
|
||||||
|
id = "unit_count"
|
||||||
|
definition = "default"
|
||||||
|
linked_group = "unit_count"
|
||||||
|
[/label]
|
||||||
|
[/column]
|
||||||
|
|
||||||
|
[column]
|
||||||
|
grow_factor = 0
|
||||||
|
|
||||||
|
[spacer]
|
||||||
|
width = 10
|
||||||
|
[/spacer]
|
||||||
|
[/column]
|
||||||
|
|
||||||
|
[/row]
|
||||||
|
|
||||||
|
[/grid]
|
||||||
|
|
||||||
|
[/toggle_panel]
|
||||||
|
|
||||||
|
[/column]
|
||||||
|
|
||||||
|
[/row]
|
||||||
|
|
||||||
|
[/list_definition]
|
||||||
|
|
||||||
|
[/listbox]
|
||||||
|
#enddef
|
||||||
|
|
||||||
|
#define _GUI_STATS_TAB_BAR
|
||||||
|
[toggle_panel]
|
||||||
|
linked_group = "tabs"
|
||||||
|
|
||||||
|
[grid]
|
||||||
|
|
||||||
|
[row]
|
||||||
|
|
||||||
|
{_GUI_STATS_TAB_PADDING}
|
||||||
|
|
||||||
|
[column]
|
||||||
|
grow_factor = 1
|
||||||
|
border = all
|
||||||
|
border_size = 5
|
||||||
|
|
||||||
|
[label]
|
||||||
|
id = "tab_label"
|
||||||
|
wrap = true
|
||||||
|
[/label]
|
||||||
|
|
||||||
|
[/column]
|
||||||
|
|
||||||
|
{_GUI_STATS_TAB_PADDING}
|
||||||
|
|
||||||
|
[/row]
|
||||||
|
|
||||||
|
[/grid]
|
||||||
|
|
||||||
|
[/toggle_panel]
|
||||||
|
#enddef
|
||||||
|
|
||||||
|
#define _GUI_STATS_TAB_PADDING
|
||||||
|
[column]
|
||||||
|
border = all
|
||||||
|
border_size = 5
|
||||||
|
|
||||||
|
[spacer]
|
||||||
|
width = 10
|
||||||
|
[/spacer]
|
||||||
|
|
||||||
|
[/column]
|
||||||
|
#enddef
|
||||||
|
|
||||||
|
[window]
|
||||||
|
id = "statistics_dialog"
|
||||||
|
description = "Statistics dialog."
|
||||||
|
|
||||||
|
[resolution]
|
||||||
|
definition = "default"
|
||||||
|
|
||||||
|
automatic_placement = "true"
|
||||||
|
vertical_placement = "center"
|
||||||
|
horizontal_placement = "center"
|
||||||
|
|
||||||
|
maximum_height = 500
|
||||||
|
|
||||||
|
[linked_group]
|
||||||
|
id = "tabs"
|
||||||
|
fixed_width = "true"
|
||||||
|
[/linked_group]
|
||||||
|
|
||||||
|
# Primary groups
|
||||||
|
[linked_group]
|
||||||
|
id = "type"
|
||||||
|
fixed_width = "true"
|
||||||
|
[/linked_group]
|
||||||
|
|
||||||
|
[linked_group]
|
||||||
|
id = "detail"
|
||||||
|
fixed_width = "true"
|
||||||
|
[/linked_group]
|
||||||
|
|
||||||
|
[linked_group]
|
||||||
|
id = "cost"
|
||||||
|
fixed_width = "true"
|
||||||
|
[/linked_group]
|
||||||
|
|
||||||
|
# Unit groups
|
||||||
|
[linked_group]
|
||||||
|
id = "unit_image"
|
||||||
|
fixed_width = "true"
|
||||||
|
[/linked_group]
|
||||||
|
|
||||||
|
[linked_group]
|
||||||
|
id = "unit_name"
|
||||||
|
fixed_width = "true"
|
||||||
|
[/linked_group]
|
||||||
|
|
||||||
|
[linked_group]
|
||||||
|
id = "unit_count"
|
||||||
|
fixed_width = "true"
|
||||||
|
[/linked_group]
|
||||||
|
|
||||||
|
[tooltip]
|
||||||
|
id = "tooltip"
|
||||||
|
[/tooltip]
|
||||||
|
|
||||||
|
[helptip]
|
||||||
|
id = "tooltip"
|
||||||
|
[/helptip]
|
||||||
|
|
||||||
|
[grid]
|
||||||
|
|
||||||
|
[row]
|
||||||
|
|
||||||
|
[column]
|
||||||
|
grow_factor = 1
|
||||||
|
|
||||||
|
border = "all"
|
||||||
|
border_size = 5
|
||||||
|
horizontal_alignment = "left"
|
||||||
|
|
||||||
|
[label]
|
||||||
|
id = "title"
|
||||||
|
definition = "title"
|
||||||
|
|
||||||
|
label = _ "Statistics"
|
||||||
|
[/label]
|
||||||
|
|
||||||
|
[/column]
|
||||||
|
|
||||||
|
[/row]
|
||||||
|
|
||||||
|
[row]
|
||||||
|
grow_factor = 0
|
||||||
|
|
||||||
|
[column]
|
||||||
|
horizontal_grow = "true"
|
||||||
|
|
||||||
|
[grid]
|
||||||
|
|
||||||
|
[row]
|
||||||
|
|
||||||
|
[column]
|
||||||
|
grow_factor = 0
|
||||||
|
border = "all"
|
||||||
|
border_size = 5
|
||||||
|
horizontal_alignment = "left"
|
||||||
|
|
||||||
|
[menu_button]
|
||||||
|
id = "scenario_menu"
|
||||||
|
definition = "default"
|
||||||
|
[/menu_button]
|
||||||
|
[/column]
|
||||||
|
|
||||||
|
[column]
|
||||||
|
grow_factor = 1
|
||||||
|
border = all
|
||||||
|
border_size = 5
|
||||||
|
horizontal_alignment = "right"
|
||||||
|
|
||||||
|
[horizontal_listbox]
|
||||||
|
id = "tab_bar"
|
||||||
|
|
||||||
|
[list_definition]
|
||||||
|
[row]
|
||||||
|
[column]
|
||||||
|
{_GUI_STATS_TAB_BAR}
|
||||||
|
[/column]
|
||||||
|
[/row]
|
||||||
|
[/list_definition]
|
||||||
|
|
||||||
|
[list_data]
|
||||||
|
[row]
|
||||||
|
|
||||||
|
[column]
|
||||||
|
|
||||||
|
[widget]
|
||||||
|
id = "tab_label"
|
||||||
|
label = _ "Scenario"
|
||||||
|
[/widget]
|
||||||
|
|
||||||
|
[/column]
|
||||||
|
|
||||||
|
[/row]
|
||||||
|
|
||||||
|
[row]
|
||||||
|
|
||||||
|
[column]
|
||||||
|
|
||||||
|
[widget]
|
||||||
|
id = "tab_label"
|
||||||
|
label = _ "Campaign"
|
||||||
|
[/widget]
|
||||||
|
|
||||||
|
[/column]
|
||||||
|
|
||||||
|
[/row]
|
||||||
|
|
||||||
|
[/list_data]
|
||||||
|
|
||||||
|
[/horizontal_listbox]
|
||||||
|
|
||||||
|
[/column]
|
||||||
|
|
||||||
|
[/row]
|
||||||
|
|
||||||
|
[/grid]
|
||||||
|
|
||||||
|
[/column]
|
||||||
|
|
||||||
|
[/row]
|
||||||
|
|
||||||
|
[row]
|
||||||
|
grow_factor = 1
|
||||||
|
|
||||||
|
[column]
|
||||||
|
horizontal_grow = "true"
|
||||||
|
vertical_grow = "true"
|
||||||
|
|
||||||
|
[grid]
|
||||||
|
|
||||||
|
[row]
|
||||||
|
|
||||||
|
[column]
|
||||||
|
horizontal_grow = "true"
|
||||||
|
vertical_grow = "true"
|
||||||
|
|
||||||
|
[grid]
|
||||||
|
|
||||||
|
[row]
|
||||||
|
grow_factor = 0
|
||||||
|
|
||||||
|
[column]
|
||||||
|
grow_factor = 1
|
||||||
|
border = "all"
|
||||||
|
border_size = 5
|
||||||
|
horizontal_grow = "true"
|
||||||
|
vertical_grow = "true"
|
||||||
|
|
||||||
|
{_GUI_MAIN_STATS_LIST}
|
||||||
|
[/column]
|
||||||
|
|
||||||
|
[/row]
|
||||||
|
|
||||||
|
[row]
|
||||||
|
grow_factor = 1
|
||||||
|
|
||||||
|
[column]
|
||||||
|
border = "all"
|
||||||
|
border_size = 5
|
||||||
|
horizontal_grow = "true"
|
||||||
|
vertical_grow = "true"
|
||||||
|
|
||||||
|
{_GUI_DAMAGE_STATS_LIST}
|
||||||
|
[/column]
|
||||||
|
|
||||||
|
[/row]
|
||||||
|
|
||||||
|
[/grid]
|
||||||
|
|
||||||
|
[/column]
|
||||||
|
|
||||||
|
[column]
|
||||||
|
grow_factor = 0
|
||||||
|
border = "all"
|
||||||
|
border_size = 5
|
||||||
|
horizontal_grow = "true"
|
||||||
|
vertical_grow = "true"
|
||||||
|
|
||||||
|
{_GUI_UNIT_COUNT_LIST}
|
||||||
|
[/column]
|
||||||
|
|
||||||
|
[/row]
|
||||||
|
|
||||||
|
[/grid]
|
||||||
|
|
||||||
|
[/column]
|
||||||
|
|
||||||
|
[/row]
|
||||||
|
|
||||||
|
[row]
|
||||||
|
grow_factor = 0
|
||||||
|
|
||||||
|
[column]
|
||||||
|
border = "all"
|
||||||
|
border_size = 5
|
||||||
|
horizontal_alignment = "right"
|
||||||
|
|
||||||
|
[button]
|
||||||
|
id = "cancel"
|
||||||
|
label = _ "Close"
|
||||||
|
[/button]
|
||||||
|
|
||||||
|
[/column]
|
||||||
|
|
||||||
|
[/row]
|
||||||
|
|
||||||
|
[/grid]
|
||||||
|
|
||||||
|
[/resolution]
|
||||||
|
|
||||||
|
[/window]
|
||||||
|
|
||||||
|
#undef _GUI_MAIN_STATS_LIST
|
||||||
|
#undef _GUI_DAMAGE_STATS_LIST
|
||||||
|
#undef _GUI_UNIT_COUNT_LIST
|
||||||
|
#undef _GUI_STATS_TAB_BAR
|
||||||
|
#undef _GUI_STATS_TAB_PADDING
|
@ -646,6 +646,8 @@
|
|||||||
<Unit filename="../../src/gui/dialogs/simple_item_selector.hpp" />
|
<Unit filename="../../src/gui/dialogs/simple_item_selector.hpp" />
|
||||||
<Unit filename="../../src/gui/dialogs/sp_options_configure.cpp" />
|
<Unit filename="../../src/gui/dialogs/sp_options_configure.cpp" />
|
||||||
<Unit filename="../../src/gui/dialogs/sp_options_configure.hpp" />
|
<Unit filename="../../src/gui/dialogs/sp_options_configure.hpp" />
|
||||||
|
<Unit filename="../../src/gui/dialogs/statistics_dialog.cpp" />
|
||||||
|
<Unit filename="../../src/gui/dialogs/statistics_dialog.hpp" />
|
||||||
<Unit filename="../../src/gui/dialogs/theme_list.cpp" />
|
<Unit filename="../../src/gui/dialogs/theme_list.cpp" />
|
||||||
<Unit filename="../../src/gui/dialogs/theme_list.hpp" />
|
<Unit filename="../../src/gui/dialogs/theme_list.hpp" />
|
||||||
<Unit filename="../../src/gui/dialogs/tip.cpp" />
|
<Unit filename="../../src/gui/dialogs/tip.cpp" />
|
||||||
@ -1019,8 +1021,6 @@
|
|||||||
<Unit filename="../../src/spirit_po/version.hpp" />
|
<Unit filename="../../src/spirit_po/version.hpp" />
|
||||||
<Unit filename="../../src/statistics.cpp" />
|
<Unit filename="../../src/statistics.cpp" />
|
||||||
<Unit filename="../../src/statistics.hpp" />
|
<Unit filename="../../src/statistics.hpp" />
|
||||||
<Unit filename="../../src/statistics_dialog.cpp" />
|
|
||||||
<Unit filename="../../src/statistics_dialog.hpp" />
|
|
||||||
<Unit filename="../../src/storyscreen/controller.cpp" />
|
<Unit filename="../../src/storyscreen/controller.cpp" />
|
||||||
<Unit filename="../../src/storyscreen/controller.hpp" />
|
<Unit filename="../../src/storyscreen/controller.hpp" />
|
||||||
<Unit filename="../../src/storyscreen/interface.cpp" />
|
<Unit filename="../../src/storyscreen/interface.cpp" />
|
||||||
|
@ -813,6 +813,7 @@ set(wesnoth-main_SRC
|
|||||||
gui/dialogs/select_orb_colors.cpp
|
gui/dialogs/select_orb_colors.cpp
|
||||||
gui/dialogs/simple_item_selector.cpp
|
gui/dialogs/simple_item_selector.cpp
|
||||||
gui/dialogs/sp_options_configure.cpp
|
gui/dialogs/sp_options_configure.cpp
|
||||||
|
gui/dialogs/statistics_dialog.cpp
|
||||||
gui/dialogs/multiplayer/synced_choice_wait.cpp
|
gui/dialogs/multiplayer/synced_choice_wait.cpp
|
||||||
gui/dialogs/theme_list.cpp
|
gui/dialogs/theme_list.cpp
|
||||||
gui/dialogs/title_screen.cpp
|
gui/dialogs/title_screen.cpp
|
||||||
@ -897,7 +898,6 @@ set(wesnoth-main_SRC
|
|||||||
side_filter.cpp
|
side_filter.cpp
|
||||||
game_initialization/singleplayer.cpp
|
game_initialization/singleplayer.cpp
|
||||||
statistics.cpp
|
statistics.cpp
|
||||||
statistics_dialog.cpp
|
|
||||||
storyscreen/controller.cpp
|
storyscreen/controller.cpp
|
||||||
storyscreen/interface.cpp
|
storyscreen/interface.cpp
|
||||||
storyscreen/part.cpp
|
storyscreen/part.cpp
|
||||||
|
@ -412,6 +412,7 @@ wesnoth_sources = Split("""
|
|||||||
gui/dialogs/select_orb_colors.cpp
|
gui/dialogs/select_orb_colors.cpp
|
||||||
gui/dialogs/simple_item_selector.cpp
|
gui/dialogs/simple_item_selector.cpp
|
||||||
gui/dialogs/sp_options_configure.cpp
|
gui/dialogs/sp_options_configure.cpp
|
||||||
|
gui/dialogs/statistics_dialog.cpp
|
||||||
gui/dialogs/theme_list.cpp
|
gui/dialogs/theme_list.cpp
|
||||||
gui/dialogs/tip.cpp
|
gui/dialogs/tip.cpp
|
||||||
gui/dialogs/title_screen.cpp
|
gui/dialogs/title_screen.cpp
|
||||||
@ -532,7 +533,6 @@ wesnoth_sources = Split("""
|
|||||||
scripting/plugins/manager.cpp
|
scripting/plugins/manager.cpp
|
||||||
settings.cpp
|
settings.cpp
|
||||||
side_filter.cpp
|
side_filter.cpp
|
||||||
statistics_dialog.cpp
|
|
||||||
statistics.cpp
|
statistics.cpp
|
||||||
storyscreen/controller.cpp
|
storyscreen/controller.cpp
|
||||||
storyscreen/interface.cpp
|
storyscreen/interface.cpp
|
||||||
|
285
src/gui/dialogs/statistics_dialog.cpp
Normal file
285
src/gui/dialogs/statistics_dialog.cpp
Normal file
@ -0,0 +1,285 @@
|
|||||||
|
/*
|
||||||
|
Copyright (C) 2016 by the Battle for Wesnoth Project http://www.wesnoth.org/
|
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY.
|
||||||
|
|
||||||
|
See the COPYING file for more details.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define GETTEXT_DOMAIN "wesnoth-lib"
|
||||||
|
|
||||||
|
#include "gui/dialogs/statistics_dialog.hpp"
|
||||||
|
|
||||||
|
#include "config_assign.hpp"
|
||||||
|
#include "font/constants.hpp"
|
||||||
|
#include "formatter.hpp"
|
||||||
|
#include "gettext.hpp"
|
||||||
|
#include "gui/auxiliary/find_widget.hpp"
|
||||||
|
#include "gui/dialogs/helper.hpp"
|
||||||
|
#include "gui/widgets/label.hpp"
|
||||||
|
#ifdef GUI2_EXPERIMENTAL_LISTBOX
|
||||||
|
#include "gui/widgets/list.hpp"
|
||||||
|
#else
|
||||||
|
#include "gui/widgets/listbox.hpp"
|
||||||
|
#endif
|
||||||
|
#include "gui/widgets/menu_button.hpp"
|
||||||
|
#include "gui/widgets/settings.hpp"
|
||||||
|
#include "gui/widgets/window.hpp"
|
||||||
|
#include "team.hpp"
|
||||||
|
#include "units/types.hpp"
|
||||||
|
|
||||||
|
#include "utils/functional.hpp"
|
||||||
|
#include <iostream>
|
||||||
|
|
||||||
|
namespace gui2
|
||||||
|
{
|
||||||
|
namespace dialogs
|
||||||
|
{
|
||||||
|
|
||||||
|
static bool use_campaign = false;
|
||||||
|
|
||||||
|
REGISTER_DIALOG(statistics_dialog)
|
||||||
|
|
||||||
|
statistics_dialog::statistics_dialog(const team& current_team)
|
||||||
|
: current_team_(current_team)
|
||||||
|
, campaign_(statistics::calculate_stats(current_team.save_id()))
|
||||||
|
, scenarios_(statistics::level_stats(current_team.save_id()))
|
||||||
|
, scenario_index_(scenarios_.size() - 1)
|
||||||
|
, main_stat_table_()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void statistics_dialog::pre_show(window& window)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// Set title
|
||||||
|
//
|
||||||
|
label& title = find_widget<label>(&window, "title", false);
|
||||||
|
title.set_label((formatter() << title.get_label() << " (" << current_team_.side_name() << ")").str());
|
||||||
|
|
||||||
|
//
|
||||||
|
// Set up scenario menu
|
||||||
|
//
|
||||||
|
std::vector<config> menu_items;
|
||||||
|
for(const auto& scenario : scenarios_) {
|
||||||
|
menu_items.push_back(config_of("label", *scenario.first));
|
||||||
|
}
|
||||||
|
|
||||||
|
menu_button& scenario_menu = find_widget<menu_button>(&window, "scenario_menu", false);
|
||||||
|
|
||||||
|
scenario_menu.set_values(menu_items, scenario_index_);
|
||||||
|
scenario_menu.connect_click_handler(std::bind(&statistics_dialog::on_scenario_select, this, std::ref(window)));
|
||||||
|
|
||||||
|
//
|
||||||
|
// Set up tab toggle
|
||||||
|
//
|
||||||
|
listbox& tab_bar = find_widget<listbox>(&window, "tab_bar", false);
|
||||||
|
tab_bar.select_row(use_campaign);
|
||||||
|
|
||||||
|
#ifdef GUI2_EXPERIMENTAL_LISTBOX
|
||||||
|
connect_signal_notify_modified(*tab_bar,
|
||||||
|
std::bind(&statistics_dialog::on_tab_select, *this, std::ref(window)));
|
||||||
|
#else
|
||||||
|
tab_bar.set_callback_value_change(
|
||||||
|
dialog_callback<statistics_dialog, &statistics_dialog::on_tab_select>);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
//
|
||||||
|
// Set up primary stats list
|
||||||
|
//
|
||||||
|
listbox& stat_list = find_widget<listbox>(&window, "stats_list_main", false);
|
||||||
|
|
||||||
|
#ifdef GUI2_EXPERIMENTAL_LISTBOX
|
||||||
|
connect_signal_notify_modified(*stat_list,
|
||||||
|
std::bind(&statistics_dialog::on_primary_list_select, *this, std::ref(window)));
|
||||||
|
#else
|
||||||
|
stat_list.set_callback_value_change(
|
||||||
|
dialog_callback<statistics_dialog, &statistics_dialog::on_primary_list_select>);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
update_lists(window);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline const statistics::stats& statistics_dialog::current_stats()
|
||||||
|
{
|
||||||
|
return use_campaign ? campaign_ : *scenarios_[scenario_index_].second;
|
||||||
|
}
|
||||||
|
|
||||||
|
void statistics_dialog::add_stat_row(window& window, const std::string& type, const statistics::stats::str_int_map& value, const bool has_cost)
|
||||||
|
{
|
||||||
|
listbox& stat_list = find_widget<listbox>(&window, "stats_list_main", false);
|
||||||
|
|
||||||
|
std::map<std::string, string_map> data;
|
||||||
|
string_map item;
|
||||||
|
|
||||||
|
item["label"] = type;
|
||||||
|
data.emplace("stat_type", item);
|
||||||
|
|
||||||
|
item["label"] = std::to_string(statistics::sum_str_int_map(value));
|
||||||
|
data.emplace("stat_detail", item);
|
||||||
|
|
||||||
|
item["label"] = has_cost ? std::to_string(statistics::sum_cost_str_int_map(value)) : font::unicode_em_dash;
|
||||||
|
data.emplace("stat_cost", item);
|
||||||
|
|
||||||
|
stat_list.add_row(data);
|
||||||
|
|
||||||
|
main_stat_table_.push_back(&value);
|
||||||
|
}
|
||||||
|
|
||||||
|
void statistics_dialog::add_damage_row(
|
||||||
|
window& window,
|
||||||
|
const std::string& type,
|
||||||
|
const long long& damage,
|
||||||
|
const long long& expected,
|
||||||
|
const long long& turn_damage,
|
||||||
|
const long long& turn_expected,
|
||||||
|
const bool show_this_turn)
|
||||||
|
{
|
||||||
|
listbox& damage_list = find_widget<listbox>(&window, "stats_list_damage", false);
|
||||||
|
|
||||||
|
std::map<std::string, string_map> data;
|
||||||
|
string_map item;
|
||||||
|
|
||||||
|
item["label"] = type;
|
||||||
|
data.emplace("damage_type", item);
|
||||||
|
|
||||||
|
const int shift = statistics::stats::decimal_shift;
|
||||||
|
|
||||||
|
const long long dsa = shift * damage - expected;
|
||||||
|
const long long dst = shift * turn_damage - turn_expected;
|
||||||
|
|
||||||
|
std::ostringstream str;
|
||||||
|
str << damage << " / "
|
||||||
|
<< (expected * 10 + shift / 2) / shift * 0.1
|
||||||
|
<< " " // TODO: should probably make this two columns
|
||||||
|
<< ((dsa < 0) ^ (expected < 0) ? "" : "+")
|
||||||
|
<< (expected == 0 ? 0 : 100 * dsa / expected) << '%';
|
||||||
|
|
||||||
|
item["label"] = str.str();
|
||||||
|
data.emplace("damage_overall", item);
|
||||||
|
|
||||||
|
str.str("");
|
||||||
|
|
||||||
|
if(show_this_turn) {
|
||||||
|
str << turn_damage << " / "
|
||||||
|
<< (turn_expected * 10 + shift / 2) / shift * 0.1
|
||||||
|
<< " " // TODO: should probably make this two columns
|
||||||
|
<< ((dst < 0) ^ (turn_expected < 0) ? "" : "+")
|
||||||
|
<< (turn_expected == 0 ? 0 : 100 * dst / turn_expected) << '%';
|
||||||
|
|
||||||
|
item["label"] = str.str();
|
||||||
|
data.emplace("damage_this_turn", item);
|
||||||
|
}
|
||||||
|
|
||||||
|
damage_list.add_row(data);
|
||||||
|
}
|
||||||
|
|
||||||
|
void statistics_dialog::update_lists(window& window)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// Update primary stats list
|
||||||
|
//
|
||||||
|
listbox& stat_list = find_widget<listbox>(&window, "stats_list_main", false);
|
||||||
|
|
||||||
|
stat_list.clear();
|
||||||
|
main_stat_table_.clear();
|
||||||
|
|
||||||
|
const statistics::stats& stats = current_stats();
|
||||||
|
|
||||||
|
add_stat_row(window, _("Recruits"), stats.recruits);
|
||||||
|
add_stat_row(window, _("Recalls"), stats.recalls);
|
||||||
|
add_stat_row(window, _("Advancements"), stats.advanced_to, false);
|
||||||
|
add_stat_row(window, _("Losses"), stats.deaths);
|
||||||
|
add_stat_row(window, _("Kills"), stats.killed);
|
||||||
|
|
||||||
|
// Update unit count list
|
||||||
|
on_primary_list_select(window);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Update damage stats list
|
||||||
|
//
|
||||||
|
const bool show_this_turn = use_campaign || scenario_index_ + 1 == scenarios_.size();
|
||||||
|
|
||||||
|
listbox& damage_list = find_widget<listbox>(&window, "stats_list_damage", false);
|
||||||
|
|
||||||
|
damage_list.clear();
|
||||||
|
|
||||||
|
add_damage_row(window, _("Inflicted"),
|
||||||
|
stats.damage_inflicted,
|
||||||
|
stats.expected_damage_inflicted,
|
||||||
|
stats.turn_damage_inflicted,
|
||||||
|
stats.turn_expected_damage_inflicted,
|
||||||
|
show_this_turn
|
||||||
|
);
|
||||||
|
|
||||||
|
add_damage_row(window, _("Taken"),
|
||||||
|
stats.damage_taken,
|
||||||
|
stats.expected_damage_taken,
|
||||||
|
stats.turn_damage_taken,
|
||||||
|
stats.turn_expected_damage_taken,
|
||||||
|
show_this_turn
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
void statistics_dialog::on_tab_select(window& window)
|
||||||
|
{
|
||||||
|
const bool is_campaign_tab = find_widget<listbox>(&window, "tab_bar", false).get_selected_row() == 1;
|
||||||
|
|
||||||
|
if(use_campaign != is_campaign_tab) {
|
||||||
|
use_campaign = is_campaign_tab;
|
||||||
|
|
||||||
|
update_lists(window);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void statistics_dialog::on_scenario_select(window& window)
|
||||||
|
{
|
||||||
|
const size_t new_index = find_widget<menu_button>(&window, "scenario_menu", false).get_value();
|
||||||
|
|
||||||
|
if(scenario_index_ != new_index) {
|
||||||
|
scenario_index_ = new_index;
|
||||||
|
|
||||||
|
update_lists(window);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void statistics_dialog::on_primary_list_select(window& window)
|
||||||
|
{
|
||||||
|
const int selected_row = find_widget<listbox>(&window, "stats_list_main", false).get_selected_row();
|
||||||
|
if(selected_row == -1) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
listbox& unit_list = find_widget<listbox>(&window, "stats_list_units", false);
|
||||||
|
|
||||||
|
unit_list.clear();
|
||||||
|
|
||||||
|
for(const auto& i : *main_stat_table_[selected_row]) {
|
||||||
|
const unit_type* type = unit_types.find(i.first);
|
||||||
|
if(!type) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::map<std::string, string_map> data;
|
||||||
|
string_map item;
|
||||||
|
|
||||||
|
item["label"] = (formatter() << type->image() << "~RC(" << type->flag_rgb() << ">" << current_team_.color() << ")").str();
|
||||||
|
data.emplace("unit_image", item);
|
||||||
|
|
||||||
|
item["label"] = type->type_name();
|
||||||
|
data.emplace("unit_name", item);
|
||||||
|
|
||||||
|
item["label"] = (formatter() << i.second << font::unicode_multiplication_sign).str();
|
||||||
|
data.emplace("unit_count", item);
|
||||||
|
|
||||||
|
unit_list.add_row(data);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace dialogs
|
||||||
|
} // namespace gui2
|
83
src/gui/dialogs/statistics_dialog.hpp
Normal file
83
src/gui/dialogs/statistics_dialog.hpp
Normal file
@ -0,0 +1,83 @@
|
|||||||
|
/*
|
||||||
|
Copyright (C) 2016 by the Battle for Wesnoth Project http://www.wesnoth.org/
|
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY.
|
||||||
|
|
||||||
|
See the COPYING file for more details.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef GUI_DIALOGS_STATISTICS_DIALOG_HPP_INCLUDED
|
||||||
|
#define GUI_DIALOGS_STATISTICS_DIALOG_HPP_INCLUDED
|
||||||
|
|
||||||
|
#include "gui/dialogs/dialog.hpp"
|
||||||
|
#include "statistics.hpp"
|
||||||
|
|
||||||
|
class CVideo;
|
||||||
|
class team;
|
||||||
|
|
||||||
|
namespace gui2
|
||||||
|
{
|
||||||
|
|
||||||
|
class menu_button;
|
||||||
|
|
||||||
|
namespace dialogs
|
||||||
|
{
|
||||||
|
|
||||||
|
class statistics_dialog : public modal_dialog
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
statistics_dialog(const team& current_team);
|
||||||
|
|
||||||
|
static void display(const team& current_team, CVideo& video)
|
||||||
|
{
|
||||||
|
statistics_dialog(current_team).show(video);
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
/** Inherited from modal_dialog, implemented by REGISTER_DIALOG. */
|
||||||
|
virtual const std::string& window_id() const;
|
||||||
|
|
||||||
|
/** Inherited from modal_dialog. */
|
||||||
|
void pre_show(window& window);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Picks out the stats structure that was selected for displaying.
|
||||||
|
*/
|
||||||
|
inline const statistics::stats & current_stats();
|
||||||
|
|
||||||
|
void add_stat_row(window& window, const std::string& type, const statistics::stats::str_int_map& value, const bool has_cost = true);
|
||||||
|
|
||||||
|
void add_damage_row(
|
||||||
|
window& window,
|
||||||
|
const std::string& type,
|
||||||
|
const long long& damage,
|
||||||
|
const long long& expected,
|
||||||
|
const long long& turn_damage,
|
||||||
|
const long long& turn_expected,
|
||||||
|
const bool show_this_turn);
|
||||||
|
|
||||||
|
void update_lists(window& window);
|
||||||
|
|
||||||
|
void on_primary_list_select(window& window);
|
||||||
|
void on_scenario_select(window& window);
|
||||||
|
void on_tab_select(window& window);
|
||||||
|
|
||||||
|
const team& current_team_;
|
||||||
|
|
||||||
|
const statistics::stats campaign_;
|
||||||
|
const statistics::levels scenarios_;
|
||||||
|
|
||||||
|
size_t scenario_index_;
|
||||||
|
|
||||||
|
std::vector<const statistics::stats::str_int_map*> main_stat_table_;
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace dialogs
|
||||||
|
} // namespace gui2
|
||||||
|
|
||||||
|
#endif /* ! GUI_DIALOGS_STATISTICS_DIALOG_HPP_INCLUDED */
|
@ -29,6 +29,7 @@
|
|||||||
#include "ai/manager.hpp"
|
#include "ai/manager.hpp"
|
||||||
#include "chat_command_handler.hpp"
|
#include "chat_command_handler.hpp"
|
||||||
#include "config_assign.hpp"
|
#include "config_assign.hpp"
|
||||||
|
#include "construct_dialog.hpp"
|
||||||
#include "display_chat_manager.hpp"
|
#include "display_chat_manager.hpp"
|
||||||
#include "formatter.hpp"
|
#include "formatter.hpp"
|
||||||
#include "formula/string_utils.hpp"
|
#include "formula/string_utils.hpp"
|
||||||
@ -50,6 +51,7 @@
|
|||||||
#include "gui/dialogs/multiplayer/mp_change_control.hpp"
|
#include "gui/dialogs/multiplayer/mp_change_control.hpp"
|
||||||
#include "gui/dialogs/preferences_dialog.hpp"
|
#include "gui/dialogs/preferences_dialog.hpp"
|
||||||
#include "gui/dialogs/simple_item_selector.hpp"
|
#include "gui/dialogs/simple_item_selector.hpp"
|
||||||
|
#include "gui/dialogs/statistics_dialog.hpp"
|
||||||
#include "gui/dialogs/edit_text.hpp"
|
#include "gui/dialogs/edit_text.hpp"
|
||||||
#include "gui/dialogs/game_stats.hpp"
|
#include "gui/dialogs/game_stats.hpp"
|
||||||
#include "gui/dialogs/unit_create.hpp"
|
#include "gui/dialogs/unit_create.hpp"
|
||||||
@ -78,7 +80,6 @@
|
|||||||
#include "scripting/game_lua_kernel.hpp"
|
#include "scripting/game_lua_kernel.hpp"
|
||||||
#include "scripting/plugins/manager.hpp"
|
#include "scripting/plugins/manager.hpp"
|
||||||
#include "sound.hpp"
|
#include "sound.hpp"
|
||||||
#include "statistics_dialog.hpp"
|
|
||||||
#include "synced_context.hpp"
|
#include "synced_context.hpp"
|
||||||
#include "terrain/builder.hpp"
|
#include "terrain/builder.hpp"
|
||||||
#include "units/unit.hpp"
|
#include "units/unit.hpp"
|
||||||
@ -133,15 +134,7 @@ void menu_handler::objectives()
|
|||||||
|
|
||||||
void menu_handler::show_statistics(int side_num)
|
void menu_handler::show_statistics(int side_num)
|
||||||
{
|
{
|
||||||
team ¤t_team = teams()[side_num - 1];
|
gui2::dialogs::statistics_dialog::display(teams()[side_num - 1], gui_->video());
|
||||||
// Current Player name
|
|
||||||
const std::string &player = current_team.side_name();
|
|
||||||
//add player's name to title of dialog
|
|
||||||
std::stringstream title_str;
|
|
||||||
title_str << _("Statistics") << " (" << player << ")";
|
|
||||||
statistics_dialog stats_dialog(*gui_, title_str.str(),
|
|
||||||
side_num, current_team.save_id(), player);
|
|
||||||
stats_dialog.show();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void menu_handler::unit_list()
|
void menu_handler::unit_list()
|
||||||
|
@ -1,326 +0,0 @@
|
|||||||
/*
|
|
||||||
Copyright (C) 2006 - 2016 by Joerg Hinrichs <joerg.hinrichs@alice-dsl.de>
|
|
||||||
wesnoth playturn Copyright (C) 2003 by David White <dave@whitevine.net>
|
|
||||||
Part of the Battle for Wesnoth Project http://www.wesnoth.org/
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation; either version 2 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY.
|
|
||||||
|
|
||||||
See the COPYING file for more details.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "gettext.hpp"
|
|
||||||
#include "font/marked-up_text.hpp"
|
|
||||||
#include "statistics_dialog.hpp"
|
|
||||||
#include "units/types.hpp"
|
|
||||||
#include "wml_separators.hpp"
|
|
||||||
#include "game_display.hpp"
|
|
||||||
|
|
||||||
|
|
||||||
bool statistics_dialog::use_campaign_ = false;
|
|
||||||
// These values just need to be larger than the number of rows in the dialog.
|
|
||||||
static const int BUTTON_SCENE = 101;
|
|
||||||
static const int BUTTON_TOGGLE = 102;
|
|
||||||
|
|
||||||
|
|
||||||
namespace {
|
|
||||||
|
|
||||||
std::vector<std::string> create_unit_table(const statistics::stats::str_int_map& m, unsigned int team)
|
|
||||||
{
|
|
||||||
std::vector<std::string> table;
|
|
||||||
for(statistics::stats::str_int_map::const_iterator i = m.begin(); i != m.end(); ++i) {
|
|
||||||
const unit_type *type = unit_types.find(i->first);
|
|
||||||
if (!type) continue;
|
|
||||||
|
|
||||||
std::stringstream str;
|
|
||||||
|
|
||||||
str << IMAGE_PREFIX << type->image();
|
|
||||||
str << "~RC(" << type->flag_rgb() << ">" << team << ")";
|
|
||||||
str << COLUMN_SEPARATOR << type->type_name() << COLUMN_SEPARATOR << i->second << "\n";
|
|
||||||
table.push_back(str.str());
|
|
||||||
}
|
|
||||||
|
|
||||||
return table;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void make_damage_line(std::vector<std::string>& items, const std::string& header,
|
|
||||||
const long long& damage, const long long& expected,
|
|
||||||
const long long& turn_damage, const long long& turn_expected,
|
|
||||||
bool show_this_turn)
|
|
||||||
{
|
|
||||||
int shift = statistics::stats::decimal_shift;
|
|
||||||
|
|
||||||
long long dsa = shift * damage - expected;
|
|
||||||
long long dst = shift * turn_damage - turn_expected;
|
|
||||||
|
|
||||||
std::ostringstream str;
|
|
||||||
str << header << COLUMN_SEPARATOR
|
|
||||||
<< damage << " / "
|
|
||||||
<< (expected * 10 + shift / 2) / shift * 0.1
|
|
||||||
<< COLUMN_SEPARATOR
|
|
||||||
<< ((dsa < 0) ^ (expected < 0) ? "" : "+")
|
|
||||||
<< (expected == 0 ? 0 : 100 * dsa / expected) << '%';
|
|
||||||
if ( show_this_turn ) {
|
|
||||||
str << COLUMN_SEPARATOR
|
|
||||||
<< COLUMN_SEPARATOR
|
|
||||||
<< turn_damage << " / "
|
|
||||||
<< (turn_expected * 10 + shift / 2) / shift * 0.1
|
|
||||||
<< COLUMN_SEPARATOR
|
|
||||||
<< ((dst < 0) ^ (turn_expected < 0) ? "" : "+")
|
|
||||||
<< (turn_expected == 0 ? 0 : 100 * dst / turn_expected) << '%';
|
|
||||||
}
|
|
||||||
items.push_back(str.str());
|
|
||||||
}
|
|
||||||
|
|
||||||
} //end anonymous namespace
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Picks out the stats structure that was selected for displaying.
|
|
||||||
*/
|
|
||||||
inline const statistics::stats & statistics_dialog::current_stats()
|
|
||||||
{
|
|
||||||
return use_campaign_ ? campaign_ : *scenarios_[scenario_index_].second;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void statistics_dialog::action(gui::dialog_process_info &dp_info)
|
|
||||||
{
|
|
||||||
int sel = get_menu().selection();
|
|
||||||
bool has_details = sel < 5 && sel >= 0 && unit_count_[sel] > 0;
|
|
||||||
detail_btn_->enable(has_details);
|
|
||||||
if(dp_info.double_clicked && has_details) {
|
|
||||||
set_result(sel);
|
|
||||||
} else if(dp_info.new_key_down && !dp_info.key_down) {
|
|
||||||
set_result(gui::CLOSE_DIALOG);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Prepare the sub-dialog for Statistic Details
|
|
||||||
std::string title;
|
|
||||||
std::vector<std::string> items_sub;
|
|
||||||
switch(result()) {
|
|
||||||
case gui::CLOSE_DIALOG:
|
|
||||||
break;
|
|
||||||
case 0:
|
|
||||||
items_sub = create_unit_table(current_stats().recruits, team_num_);
|
|
||||||
title = _("Recruits");
|
|
||||||
break;
|
|
||||||
case 1:
|
|
||||||
items_sub = create_unit_table(current_stats().recalls, team_num_);
|
|
||||||
title = _("Recalls");
|
|
||||||
break;
|
|
||||||
case 2:
|
|
||||||
items_sub = create_unit_table(current_stats().advanced_to, team_num_);
|
|
||||||
title = _("Advancements");
|
|
||||||
break;
|
|
||||||
case 3:
|
|
||||||
items_sub = create_unit_table(current_stats().deaths, team_num_);
|
|
||||||
title = _("Losses");
|
|
||||||
break;
|
|
||||||
case 4:
|
|
||||||
// Give kills a (probably) different team color.
|
|
||||||
items_sub = create_unit_table(current_stats().killed, team_num_ == 1 ? 2 : 1);
|
|
||||||
title = _("Kills");
|
|
||||||
break;
|
|
||||||
|
|
||||||
case BUTTON_SCENE:
|
|
||||||
// Scenario selection.
|
|
||||||
do_scene_selection();
|
|
||||||
set_result(gui::CONTINUE_DIALOG);
|
|
||||||
break;
|
|
||||||
case BUTTON_TOGGLE:
|
|
||||||
// Toggle between campaign and scenario stats.
|
|
||||||
display_stats(!use_campaign_);
|
|
||||||
set_result(gui::CONTINUE_DIALOG);
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
if (items_sub.empty() == false) {
|
|
||||||
gui::dialog d(get_video(), title + " (" + player_name_ + ")", "", gui::CLOSE_ONLY);
|
|
||||||
d.set_menu(items_sub);
|
|
||||||
d.show();
|
|
||||||
dp_info.clear_buttons();
|
|
||||||
set_result(gui::CONTINUE_DIALOG);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
statistics_dialog::statistics_dialog(game_display &disp,
|
|
||||||
const std::string& title,
|
|
||||||
const unsigned int team,
|
|
||||||
const std::string& team_id,
|
|
||||||
const std::string& player) :
|
|
||||||
dialog(disp.video(), title, "", gui::NULL_DIALOG),
|
|
||||||
detail_btn_(new gui::standard_dialog_button(disp.video(), _("Details"), 0 , false)),
|
|
||||||
toggle_btn_(new gui::dialog_button(disp.video(), "", gui::button::TYPE_PRESS, BUTTON_TOGGLE)),
|
|
||||||
scene_btn_(new gui::dialog_button(disp.video(), _("Select Scenario"), gui::button::TYPE_PRESS, BUTTON_SCENE)),
|
|
||||||
player_name_(player),
|
|
||||||
campaign_(statistics::calculate_stats(team_id)),
|
|
||||||
scenarios_(statistics::level_stats(team_id)),
|
|
||||||
scenario_index_(scenarios_.size() - 1), // current scenario
|
|
||||||
team_num_(team),
|
|
||||||
unit_count_(5,0)
|
|
||||||
{
|
|
||||||
if ( scenarios_.size() > 1 ) {
|
|
||||||
add_button(scene_btn_, gui::dialog::BUTTON_EXTRA_LEFT);
|
|
||||||
add_button(toggle_btn_, gui::dialog::BUTTON_EXTRA_LEFT);
|
|
||||||
}
|
|
||||||
add_button(detail_btn_, gui::dialog::BUTTON_EXTRA);
|
|
||||||
add_button(new gui::standard_dialog_button(disp.video(), _("Close"), 1, true),
|
|
||||||
gui::dialog::BUTTON_STANDARD);
|
|
||||||
|
|
||||||
// Initialize the displayed data.
|
|
||||||
if ( use_campaign_ || scenarios_.size() == 1 )
|
|
||||||
display_stats(use_campaign_);
|
|
||||||
else {
|
|
||||||
// Starting with the scenario stats, but we need to make sure the
|
|
||||||
// window is wide enough for the campaign stats.
|
|
||||||
display_stats(true);
|
|
||||||
layout();
|
|
||||||
display_stats(false);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
statistics_dialog::~statistics_dialog()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Fills in the text to be displayed in the dialog.
|
|
||||||
* This also updates the scenario/campaign toggle button.
|
|
||||||
*
|
|
||||||
* @param[in] campaign Indicates whether or not the campaign stats are to
|
|
||||||
* be displayed.
|
|
||||||
*/
|
|
||||||
void statistics_dialog::display_stats(bool campaign)
|
|
||||||
{
|
|
||||||
// Record which stats we will display.
|
|
||||||
use_campaign_ = campaign;
|
|
||||||
const statistics::stats & stats = current_stats();
|
|
||||||
const bool show_this_turn =
|
|
||||||
use_campaign_ || scenario_index_ + 1 == scenarios_.size();
|
|
||||||
|
|
||||||
int n, cost;
|
|
||||||
std::vector<std::string> items;
|
|
||||||
// The heading for the menu items:
|
|
||||||
{
|
|
||||||
std::stringstream str;
|
|
||||||
str << HEADING_PREFIX
|
|
||||||
<< COLUMN_SEPARATOR
|
|
||||||
<< font::BOLD_TEXT << (use_campaign_ ? _("Campaign") : _("Scenario"));
|
|
||||||
items.push_back(str.str());
|
|
||||||
}
|
|
||||||
// Prepare the menu items
|
|
||||||
{
|
|
||||||
std::stringstream str;
|
|
||||||
n = statistics::sum_str_int_map(stats.recruits);
|
|
||||||
cost = stats.recruit_cost;
|
|
||||||
unit_count_[0] = n;
|
|
||||||
str << _("Recruits") << COLUMN_SEPARATOR << n
|
|
||||||
<< COLUMN_SEPARATOR
|
|
||||||
<< COLUMN_SEPARATOR << IMAGE_PREFIX << "themes/gold.png"
|
|
||||||
<< COLUMN_SEPARATOR << cost;
|
|
||||||
items.push_back(str.str());
|
|
||||||
}
|
|
||||||
{
|
|
||||||
std::stringstream str;
|
|
||||||
n = statistics::sum_str_int_map(stats.recalls);
|
|
||||||
cost = stats.recall_cost;
|
|
||||||
unit_count_[1] = n;
|
|
||||||
str << _("Recalls") << COLUMN_SEPARATOR << n
|
|
||||||
<< COLUMN_SEPARATOR
|
|
||||||
<< COLUMN_SEPARATOR << IMAGE_PREFIX << "themes/gold.png"
|
|
||||||
<< COLUMN_SEPARATOR << cost;
|
|
||||||
items.push_back(str.str());
|
|
||||||
}
|
|
||||||
{
|
|
||||||
std::stringstream str;
|
|
||||||
n = statistics::sum_str_int_map(stats.advanced_to);
|
|
||||||
unit_count_[2] = n;
|
|
||||||
str << _("Advancements") << COLUMN_SEPARATOR << n;
|
|
||||||
items.push_back(str.str());
|
|
||||||
}
|
|
||||||
{
|
|
||||||
std::stringstream str;
|
|
||||||
n = statistics::sum_str_int_map(stats.deaths);
|
|
||||||
unit_count_[3] = n;
|
|
||||||
cost = statistics::sum_cost_str_int_map(stats.deaths);
|
|
||||||
str << _("Losses") << COLUMN_SEPARATOR << n
|
|
||||||
<< COLUMN_SEPARATOR
|
|
||||||
<< COLUMN_SEPARATOR << IMAGE_PREFIX << "themes/gold.png"
|
|
||||||
<< COLUMN_SEPARATOR << cost;
|
|
||||||
items.push_back(str.str());
|
|
||||||
}
|
|
||||||
{
|
|
||||||
std::stringstream str;
|
|
||||||
n = statistics::sum_str_int_map(stats.killed);
|
|
||||||
unit_count_[4] = n;
|
|
||||||
cost = statistics::sum_cost_str_int_map(stats.killed);
|
|
||||||
str << _("Kills") << COLUMN_SEPARATOR << n
|
|
||||||
<< COLUMN_SEPARATOR
|
|
||||||
<< COLUMN_SEPARATOR << IMAGE_PREFIX << "themes/gold.png"
|
|
||||||
<< COLUMN_SEPARATOR << cost;
|
|
||||||
items.push_back(str.str());
|
|
||||||
}
|
|
||||||
items.push_back("");
|
|
||||||
{
|
|
||||||
std::stringstream str;
|
|
||||||
str << font::BOLD_TEXT << _("Damage")
|
|
||||||
<< COLUMN_SEPARATOR << _("Overall");
|
|
||||||
if ( show_this_turn ) {
|
|
||||||
str << COLUMN_SEPARATOR
|
|
||||||
<< COLUMN_SEPARATOR
|
|
||||||
<< COLUMN_SEPARATOR << _("This Turn");
|
|
||||||
}
|
|
||||||
items.push_back(str.str());
|
|
||||||
}
|
|
||||||
|
|
||||||
make_damage_line(items, _("Inflicted"),
|
|
||||||
stats.damage_inflicted, stats.expected_damage_inflicted,
|
|
||||||
stats.turn_damage_inflicted, stats.turn_expected_damage_inflicted,
|
|
||||||
show_this_turn);
|
|
||||||
make_damage_line(items, _("Taken"),
|
|
||||||
stats.damage_taken, stats.expected_damage_taken,
|
|
||||||
stats.turn_damage_taken, stats.turn_expected_damage_taken,
|
|
||||||
show_this_turn);
|
|
||||||
|
|
||||||
set_menu_items(items, true);
|
|
||||||
toggle_btn_->set_label(use_campaign_ ? _("Scenario") : _("Campaign"));
|
|
||||||
scene_btn_->enable(!use_campaign_);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Implements the scenario selection popup.
|
|
||||||
*/
|
|
||||||
void statistics_dialog::do_scene_selection()
|
|
||||||
{
|
|
||||||
// Prepare a list of scenario names.
|
|
||||||
std::vector<std::string> names;
|
|
||||||
for ( size_t i = 0; i != scenarios_.size(); ++i )
|
|
||||||
names.push_back(*scenarios_[i].first);
|
|
||||||
|
|
||||||
// Let the player choose a scenario.
|
|
||||||
SDL_Rect const &loc = scene_btn_->location();
|
|
||||||
size_t new_scenario = gui::show_dialog(get_video(), nullptr, "", "",
|
|
||||||
gui::MESSAGE, &names, nullptr, "", nullptr,
|
|
||||||
-1, nullptr, loc.x, loc.y + loc.h);
|
|
||||||
|
|
||||||
if ( new_scenario != scenario_index_ && new_scenario < scenarios_.size() )
|
|
||||||
{
|
|
||||||
// Switch the displayed data to the selected scenario.
|
|
||||||
scenario_index_ = new_scenario;
|
|
||||||
scene_btn_->set_label(*scenarios_[new_scenario].first);
|
|
||||||
display_stats(false);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,60 +0,0 @@
|
|||||||
/*
|
|
||||||
Copyright (C) 2006 - 2016 by Joerg Hinrichs <joerg.hinrichs@alice-dsl.de>
|
|
||||||
wesnoth playturn Copyright (C) 2003 by David White <dave@whitevine.net>
|
|
||||||
Part of the Battle for Wesnoth Project http://www.wesnoth.org/
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation; either version 2 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY.
|
|
||||||
|
|
||||||
See the COPYING file for more details.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef STATISTICS_DIALOG_HPP_INCLUDED
|
|
||||||
#define STATISTICS_DIALOG_HPP_INCLUDED
|
|
||||||
|
|
||||||
#include "construct_dialog.hpp"
|
|
||||||
#include "statistics.hpp"
|
|
||||||
|
|
||||||
#include <vector>
|
|
||||||
#include <string>
|
|
||||||
|
|
||||||
class game_display;
|
|
||||||
|
|
||||||
class statistics_dialog : public gui::dialog
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
statistics_dialog(game_display &disp,
|
|
||||||
const std::string& title,
|
|
||||||
const unsigned int team,
|
|
||||||
const std::string& team_id,
|
|
||||||
const std::string& player);
|
|
||||||
~statistics_dialog();
|
|
||||||
protected:
|
|
||||||
void action(gui::dialog_process_info &dp_info);
|
|
||||||
private:
|
|
||||||
/// Picks out the stats structure that was selected for displaying.
|
|
||||||
inline const statistics::stats & current_stats();
|
|
||||||
/// Fills in the text to be displayed in the dialog.
|
|
||||||
void display_stats(bool campaign);
|
|
||||||
/// Implements the scenario selection popup.
|
|
||||||
void do_scene_selection();
|
|
||||||
|
|
||||||
gui::dialog_button *detail_btn_;
|
|
||||||
gui::dialog_button *toggle_btn_;
|
|
||||||
gui::dialog_button *scene_btn_;
|
|
||||||
std::string player_name_;
|
|
||||||
const statistics::stats campaign_;
|
|
||||||
const statistics::levels scenarios_;
|
|
||||||
size_t scenario_index_;
|
|
||||||
unsigned int team_num_;
|
|
||||||
std::vector<int> unit_count_;
|
|
||||||
|
|
||||||
// This is static so the setting can be remembered throughout the session.
|
|
||||||
static bool use_campaign_;
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif
|
|
@ -86,6 +86,7 @@
|
|||||||
#include "gui/dialogs/screenshot_notification.hpp"
|
#include "gui/dialogs/screenshot_notification.hpp"
|
||||||
#include "gui/dialogs/select_orb_colors.hpp"
|
#include "gui/dialogs/select_orb_colors.hpp"
|
||||||
#include "gui/dialogs/sp_options_configure.hpp"
|
#include "gui/dialogs/sp_options_configure.hpp"
|
||||||
|
#include "gui/dialogs/statistics_dialog.hpp"
|
||||||
#include "gui/dialogs/theme_list.hpp"
|
#include "gui/dialogs/theme_list.hpp"
|
||||||
#include "gui/dialogs/title_screen.hpp"
|
#include "gui/dialogs/title_screen.hpp"
|
||||||
#include "gui/dialogs/tip.hpp"
|
#include "gui/dialogs/tip.hpp"
|
||||||
@ -438,6 +439,7 @@ BOOST_AUTO_TEST_CASE(test_gui2)
|
|||||||
test<screenshot_notification>();
|
test<screenshot_notification>();
|
||||||
test<select_orb_colors>();
|
test<select_orb_colors>();
|
||||||
test<sp_options_configure>();
|
test<sp_options_configure>();
|
||||||
|
test<statistics_dialog>();
|
||||||
test<theme_list>();
|
test<theme_list>();
|
||||||
//test<title_screen>();
|
//test<title_screen>();
|
||||||
test<transient_message>();
|
test<transient_message>();
|
||||||
@ -1153,5 +1155,16 @@ struct dialog_tester<sp_options_configure>
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
template<>
|
||||||
|
struct dialog_tester<statistics_dialog>
|
||||||
|
{
|
||||||
|
team t;
|
||||||
|
dialog_tester() : t() {}
|
||||||
|
statistics_dialog* create()
|
||||||
|
{
|
||||||
|
return new statistics_dialog(t);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user