42 dcon::state_building_construction_id, dcon::province_building_construction_id, dcon::province_land_construction_id,
55 auto content = retrieve< outliner_data>(
state,
parent);
59 if(std::holds_alternative<dcon::gp_relationship_id>(content)) {
61 auto grid = std::get<dcon::gp_relationship_id>(content);
62 auto nid =
state.world.gp_relationship_get_influence_target(grid);
64 for(
auto n :
state.world.in_nation) {
71 auto rel =
state.world.get_gp_relationship_by_gp_influence_pair(nid, n);
72 auto influence =
state.world.gp_relationship_get_influence(rel);
74 auto status =
state.world.gp_relationship_get_status(rel);
85 auto content = retrieve< outliner_data>(
state,
parent);
86 visible = !std::holds_alternative<outliner_filter>(content);
97 auto content = retrieve< outliner_data>(
state,
parent);
99 if(std::holds_alternative<dcon::army_id>(content)) {
100 auto army = fatten(
state.world, std::get<dcon::army_id>(content));
101 state.selected_armies.clear();
102 state.selected_navies.clear();
103 state.select(army.id);
104 state.map_state.center_map_on_province(
state, army.get_location_from_army_location());
105 }
else if(std::holds_alternative<dcon::navy_id>(content)) {
106 auto navy = fatten(
state.world, std::get<dcon::navy_id>(content));
107 state.selected_armies.clear();
108 state.selected_navies.clear();
109 state.select(navy.id);
110 state.map_state.center_map_on_province(
state, navy.get_location_from_navy_location());
111 }
else if(std::holds_alternative<dcon::gp_relationship_id>(content)) {
112 auto grid = std::get<dcon::gp_relationship_id>(content);
113 auto nid =
state.world.gp_relationship_get_influence_target(grid);
115 state.open_diplomacy(nid);
116 }
else if(std::holds_alternative<dcon::state_building_construction_id>(content)) {
117 auto st_con = fatten(
state.world, std::get<dcon::state_building_construction_id>(content));
118 auto p = st_con.get_state().get_capital().id;
121 state.map_state.center_map_on_province(
state, p);
122 }
else if(std::holds_alternative<dcon::province_building_construction_id>(content)) {
123 auto pbcid = std::get<dcon::province_building_construction_id>(content);
124 auto p =
state.world.province_building_construction_get_province(pbcid);
127 state.map_state.center_map_on_province(
state, p);
128 }
else if(std::holds_alternative<dcon::province_land_construction_id>(content)) {
129 auto plcid = std::get<dcon::province_land_construction_id>(content);
130 auto p =
state.world.pop_get_province_from_pop_location(
state.world.province_land_construction_get_pop(plcid));
132 state.map_state.center_map_on_province(
state, p);
133 }
else if(std::holds_alternative<dcon::province_naval_construction_id>(content)) {
134 auto pncid = std::get<dcon::province_naval_construction_id>(content);
135 auto p =
state.world.province_naval_construction_get_province(pncid);
137 state.map_state.center_map_on_province(
state, p);
138 }
else if(std::holds_alternative<dcon::state_instance_id>(content)) {
139 auto siid = std::get<dcon::state_instance_id>(content);
141 auto p = fat_si.get_capital().id;
143 state.map_state.center_map_on_province(
state, p);
144 }
else if(std::holds_alternative<outliner_rebel_occupation>(content)) {
145 auto p = std::get<outliner_rebel_occupation>(content).p;
147 state.map_state.center_map_on_province(
state, p);
148 }
else if(std::holds_alternative<outliner_hostile_siege>(content)) {
149 auto p = std::get<outliner_hostile_siege>(content).p;
151 state.map_state.center_map_on_province(
state, p);
152 }
else if(std::holds_alternative<outliner_my_siege>(content)) {
153 auto p = std::get<outliner_my_siege>(content).p;
155 state.map_state.center_map_on_province(
state, p);
156 }
else if(std::holds_alternative<dcon::land_battle_id>(content)) {
157 auto b = std::get<dcon::land_battle_id>(content);
158 auto p =
state.world.land_battle_get_location_from_land_battle_location(b);
160 state.map_state.center_map_on_province(
state, p);
161 }
else if(std::holds_alternative<dcon::naval_battle_id>(content)) {
162 auto b = std::get<dcon::naval_battle_id>(content);
163 auto p =
state.world.naval_battle_get_location_from_naval_battle_location(b);
165 state.map_state.center_map_on_province(
state, p);
166 }
else if(std::holds_alternative<outliner_rally_point>(content)) {
167 auto p = std::get<outliner_rally_point>(content).p;
169 state.map_state.center_map_on_province(
state, p);
176 auto content = retrieve< outliner_data>(
state,
parent);
177 if(std::holds_alternative<dcon::army_id>(content)) {
178 auto army = fatten(
state.world, std::get<dcon::army_id>(content));
179 state.select(army.id);
180 state.map_state.center_map_on_province(
state, army.get_location_from_army_location());
181 }
else if(std::holds_alternative<dcon::navy_id>(content)) {
182 auto navy = fatten(
state.world, std::get<dcon::navy_id>(content));
183 state.select(navy.id);
184 state.map_state.center_map_on_province(
state, navy.get_location_from_navy_location());
195 auto content = retrieve< outliner_data>(
state,
parent);
196 if(std::holds_alternative<outliner_rally_point>(content)) {
197 auto p = std::get<outliner_rally_point>(content).p;
212 auto content = retrieve< outliner_data>(
state,
parent);
213 if(std::holds_alternative<outliner_rally_point>(content)) {
214 auto p = std::get<outliner_rally_point>(content).p;
215 visible =
state.world.province_get_naval_rally_point(p) && !
state.world.province_get_land_rally_point(p);
229 auto content = retrieve< outliner_data>(
state,
parent);
230 if(std::holds_alternative<dcon::army_id>(content)) {
231 auto v = std::get<dcon::army_id>(content);
233 }
else if(std::holds_alternative<dcon::navy_id>(content)) {
234 auto v = std::get<dcon::navy_id>(content);
249 auto content = retrieve< outliner_data>(
state,
parent);
250 if(std::holds_alternative<dcon::army_id>(content)) {
251 auto v = std::get<dcon::army_id>(content);
252 visible = bool(
state.world.army_get_battle_from_army_battle_participation(v));
253 }
else if(std::holds_alternative<dcon::navy_id>(content)) {
254 auto v = std::get<dcon::navy_id>(content);
255 visible = bool(
state.world.navy_get_battle_from_navy_battle_participation(v));
256 }
else if(std::holds_alternative<dcon::land_battle_id>(content)) {
258 }
else if(std::holds_alternative<dcon::naval_battle_id>(content)) {
273 auto content = retrieve< outliner_data>(
state,
parent);
274 visible = std::holds_alternative<outliner_filter>(content);
288 auto content = retrieve< outliner_data>(
state,
parent);
289 if(std::holds_alternative<outliner_filter>(content)) {
353 auto content = retrieve< outliner_data>(
state,
parent);
354 if(std::holds_alternative<outliner_filter>(content)) {
357 else if(std::holds_alternative<dcon::army_id>(content)) {
358 auto army = fatten(
state.world, std::get<dcon::army_id>(content));
365 auto tag_str = std::string(
"@") +
nations::int_to_tag(army.get_controller_from_army_control().get_identity_from_identity_holder().get_identifying_int()) +
"@(A)";
371 std::string ctrl_str =
"";
373 for(
const auto e :
state.ctrl_armies[i]) {
375 ctrl_str +=
"(" + std::to_string(i) +
")";
384 else if(std::holds_alternative<dcon::navy_id>(content)) {
386 auto navy = fatten(
state.world, std::get<dcon::navy_id>(content));
392 auto tag_str = std::string(
"@") +
nations::int_to_tag(navy.get_controller_from_navy_control().get_identity_from_identity_holder().get_identifying_int()) +
"@(N)";
398 std::string ctrl_str =
"";
400 for(
const auto e :
state.ctrl_navies[i]) {
402 ctrl_str +=
"(" + std::to_string(i) +
")";
411 else if(std::holds_alternative<dcon::gp_relationship_id>(content)) {
412 auto grid = std::get<dcon::gp_relationship_id>(content);
413 auto nid =
state.world.gp_relationship_get_influence_target(grid);
414 auto status =
state.world.gp_relationship_get_status(grid);
415 auto influence =
state.world.gp_relationship_get_influence(grid);
422 else if(std::holds_alternative<dcon::state_building_construction_id>(content)) {
423 auto st_con = fatten(
state.world, std::get<dcon::state_building_construction_id>(content));
424 auto ftid =
state.world.state_building_construction_get_type(st_con);
427 float purchased = 0.0f;
428 auto&
goods =
state.world.factory_type_get_construction_costs(st_con.get_type());
430 float factory_mod =
state.world.nation_get_modifier_values(st_con.get_nation(), sys::national_mod_offsets::factory_cost) + 1.0f;
431 float pop_factory_mod = std::max(0.1f,
state.world.nation_get_modifier_values(st_con.get_nation(), sys::national_mod_offsets::factory_owner_cost));
432 auto admin_eff = st_con.get_nation().get_administrative_efficiency();
433 float admin_cost_factor = (st_con.get_is_pop_project() ? pop_factory_mod : (2.0f - admin_eff)) * factory_mod;
436 total +=
goods.commodity_amounts[i] * admin_cost_factor;
437 purchased += st_con.get_purchased_goods().commodity_amounts[i];
439 auto progress = total > 0.0f ? purchased / total : 0.0f;
446 else if(std::holds_alternative<dcon::province_building_construction_id>(content)) {
447 auto pbcid = std::get<dcon::province_building_construction_id>(content);
448 auto btid =
state.world.province_building_construction_get_type(pbcid);
457 else if(std::holds_alternative<dcon::province_land_construction_id>(content)) {
458 auto plcid = std::get<dcon::province_land_construction_id>(content);
459 auto utid =
state.world.province_land_construction_get_type(plcid);
460 auto unitname = utid ?
state.military_definitions.unit_base_definitions[utid].name : dcon::text_key{};
462 auto pop =
state.world.province_land_construction_get_pop(plcid);
463 auto province =
state.world.pop_get_province_from_pop_location(pop);
475 else if(std::holds_alternative<dcon::province_naval_construction_id>(content)) {
476 auto pncid = std::get<dcon::province_naval_construction_id>(content);
477 auto utid =
state.world.province_naval_construction_get_type(pncid);
478 auto unitname =
state.military_definitions.unit_base_definitions[utid].name;
480 auto province =
state.world.province_naval_construction_get_province(pncid);
491 else if(std::holds_alternative<dcon::state_instance_id>(content)) {
492 auto siid = std::get<dcon::state_instance_id>(content);
495 if(fat_si.get_nation_from_state_ownership() !=
state.local_player_nation) {
499 }
else if(fat_nf.get_promotion_type()) {
502 if(fat_nf.get_promotion_type() ==
state.culture_definitions.clergy) {
506 }
else if(fat_nf.get_promotion_type() ==
state.culture_definitions.bureaucrat) {
519 else if(std::holds_alternative<outliner_rebel_occupation>(content)) {
520 auto p = std::get<outliner_rebel_occupation>(content).p;
526 else if(std::holds_alternative<outliner_hostile_siege>(content)) {
527 auto p = std::get<outliner_hostile_siege>(content).p;
533 else if(std::holds_alternative<outliner_my_siege>(content)) {
534 auto p = std::get<outliner_my_siege>(content).p;
540 else if(std::holds_alternative<dcon::land_battle_id>(content)) {
541 auto p = std::get<dcon::land_battle_id>(content);
547 else if(std::holds_alternative<dcon::naval_battle_id>(content)) {
548 auto p = std::get<dcon::naval_battle_id>(content);
554 else if(std::holds_alternative<outliner_rally_point>(content)) {
555 auto p = std::get<outliner_rally_point>(content).p;
567 if(
name ==
"outliner_header") {
568 return make_element_by_type<outliner_header_bg>(
state,
id);
569 }
else if(
name ==
"header_text") {
570 return make_element_by_type<outliner_header_text>(
state,
id);
571 }
else if(
name ==
"outliner_standard") {
572 return make_element_by_type<outliner_element_button>(
state,
id);
573 }
else if(
name ==
"combat_icon") {
574 return make_element_by_type<outliner_combat_icon>(
state,
id);;
575 }
else if(
name ==
"moving_icon") {
576 return make_element_by_type<outliner_moving_icon>(
state,
id);
577 }
else if(
name ==
"rally_land_icon") {
578 return make_element_by_type<outliner_land_rally>(
state,
id);
579 }
else if(
name ==
"rally_navy_icon") {
580 return make_element_by_type<outliner_naval_rally>(
state,
id);
581 }
else if(
name ==
"entry_text") {
582 return make_element_by_type<outliner_entry_text>(
state,
id);
583 }
else if(
name ==
"info_text") {
584 return make_element_by_type<invisible_element>(
state,
id);
596 return make_element_by_type<outliner_element>(
state,
"outliner_entry");
605 return any_cast<bool>(payload);
613 auto ptr = make_element_by_type<image_element_base>(
state,
state.ui_state.
defs_by_name.find(
state.lookup_key(
"outliner_bottom"))->second.definition);
614 ptr->set_visible(
state,
true);
625 for(
auto op :
state.world.nation_get_province_ownership(
state.local_player_nation)) {
626 if(!op.get_province().get_nation_from_province_control()) {
637 std::vector<dcon::province_id>
temp;
638 for(
auto ar :
state.world.nation_get_army_control(
state.local_player_nation)) {
639 auto p = ar.get_army().get_location_from_army_location();
640 if(p.get_siege_progress() > 0.0f) {
641 if(std::find(
temp.begin(),
temp.end(), p.id) ==
temp.end()) {
642 temp.push_back(p.id);
654 for(
auto op :
state.world.nation_get_province_control(
state.local_player_nation)) {
655 if(op.get_province().get_siege_progress() > 0.0f) {
666 std::vector<dcon::land_battle_id>
temp;
667 for(
auto ar :
state.world.nation_get_army_control(
state.local_player_nation)) {
668 auto p = ar.get_army().get_location_from_army_location();
669 if(
auto b = ar.get_army().get_battle_from_army_battle_participation(); b) {
670 if(std::find(
temp.begin(),
temp.end(), b.id) ==
temp.end()) {
671 temp.push_back(b.id);
684 std::vector<dcon::naval_battle_id>
temp;
685 for(
auto n :
state.world.nation_get_navy_control(
state.local_player_nation)) {
686 auto p = n.get_navy().get_location_from_navy_location();
687 if(
auto b = n.get_navy().get_battle_from_navy_battle_participation(); b) {
688 if(std::find(
temp.begin(),
temp.end(), b.id) ==
temp.end()) {
689 temp.push_back(b.id);
701 state.world.nation_for_each_army_control_as_controller(
state.local_player_nation, [&](dcon::army_control_id acid) {
702 auto aid = state.world.army_control_get_army(acid);
703 row_contents.push_back(aid);
711 state.world.nation_for_each_navy_control_as_controller(
state.local_player_nation, [&](dcon::navy_control_id ncid) {
712 auto nid = state.world.navy_control_get_navy(ncid);
713 row_contents.push_back(nid);
721 state.world.nation_for_each_state_building_construction(
state.local_player_nation,
722 [&](dcon::state_building_construction_id sbcid) { row_contents.push_back(sbcid); });
729 state.world.nation_for_each_province_building_construction(
state.local_player_nation,
730 [&](dcon::province_building_construction_id pbcid) { row_contents.push_back(pbcid); });
737 state.world.nation_for_each_province_land_construction(
state.local_player_nation,
738 [&](dcon::province_land_construction_id plcid) { row_contents.push_back(plcid); });
745 state.world.nation_for_each_province_naval_construction(
state.local_player_nation,
746 [&](dcon::province_naval_construction_id pncid) { row_contents.push_back(pncid); });
753 state.world.nation_for_each_gp_relationship_as_great_power(
state.local_player_nation, [&](dcon::gp_relationship_id grid) {
754 auto status = (state.world.gp_relationship_get_status(grid) & nations::influence::priority_mask);
755 if(status != nations::influence::priority_zero)
756 row_contents.push_back(grid);
764 state.world.nation_for_each_state_ownership(
state.local_player_nation, [&](dcon::state_ownership_id soid) {
765 auto fat = dcon::fatten(state.world, soid).get_state();
766 if(fat.get_owner_focus().is_valid()) {
767 row_contents.push_back(fat.id);
770 if(
auto fp =
state.world.flashpoint_focus_get_state(
state.world.nation_get_flashpoint_focus(
state.local_player_nation)); fp) {
780 for(
auto op :
state.world.nation_get_province_ownership(
state.local_player_nation)) {
781 if(op.get_province().get_land_rally_point() || op.get_province().get_naval_rally_point()) {
792 auto max_rows = space / rsz;
794 if(max_size < space) {
800 resize(state, max_rows * rsz);
814template<outliner_filter Filter>
816 static std::string_view get_filter_text_key(
outliner_filter f)
noexcept {
818 case outliner_filter::rebel_occupations:
819 return "ol_view_rebel_occupations";
820 case outliner_filter::sieges:
821 return "remove_ol_view_sieges";
822 case outliner_filter::hostile_sieges:
823 return "remove_ol_view_hostile_sieges";
824 case outliner_filter::combat:
825 return "ol_view_combat";
826 case outliner_filter::naval_combat:
827 return "ol_view_navalcombat";
828 case outliner_filter::armies:
829 return "ol_view_armies";
830 case outliner_filter::navies:
831 return "ol_view_navies";
832 case outliner_filter::factories:
833 return "ol_view_factories";
834 case outliner_filter::buildings:
835 return "ol_view_buildings";
836 case outliner_filter::army_construction:
837 return "ol_view_army_construction";
838 case outliner_filter::navy_construction:
839 return "ol_view_navy_construction";
840 case outliner_filter::gp_influence:
841 return "ol_view_gp_influence";
842 case outliner_filter::national_focus:
843 return "ol_view_natfocus";
844 case outliner_filter::rally_points:
845 return "ol_view_rallypoints";
855 parent->impl_get(
state, payload);
856 return any_cast<bool>(payload);
864 parent->impl_set(
state, payload);
870 return tooltip_behavior::variable_tooltip;
874 auto name = get_filter_text_key(Filter);
896 return tooltip_behavior::variable_tooltip;
915 if(
name ==
"outliner_top") {
916 return make_element_by_type<outliner_minmax_button>(
state,
id);
917 }
else if(
name ==
"outliner_list") {
918 auto ptr = make_element_by_type<outliner_listbox>(
state,
id);
921 }
else if(
name ==
"outliner_view_rebel_occupations") {
922 return make_element_by_type<outliner_filter_checkbox<outliner_filter::rebel_occupations>>(
state, id);
923 }
else if(
name ==
"outliner_view_sieges") {
924 return make_element_by_type<outliner_filter_checkbox<outliner_filter::sieges>>(
state, id);
925 }
else if(
name ==
"outliner_view_hostile_sieges") {
926 return make_element_by_type<outliner_filter_checkbox<outliner_filter::hostile_sieges>>(
state, id);
927 }
else if(
name ==
"outliner_view_combat") {
928 return make_element_by_type<outliner_filter_checkbox<outliner_filter::combat>>(
state, id);
929 }
else if(
name ==
"outliner_view_navalcombat") {
930 return make_element_by_type<outliner_filter_checkbox<outliner_filter::naval_combat>>(
state, id);
931 }
else if(
name ==
"outliner_view_armies") {
932 return make_element_by_type<outliner_filter_checkbox<outliner_filter::armies>>(
state, id);
933 }
else if(
name ==
"outliner_view_navies") {
934 return make_element_by_type<outliner_filter_checkbox<outliner_filter::navies>>(
state, id);
935 }
else if(
name ==
"outliner_view_factories") {
936 return make_element_by_type<outliner_filter_checkbox<outliner_filter::factories>>(
state, id);
937 }
else if(
name ==
"outliner_view_buildings") {
938 return make_element_by_type<outliner_filter_checkbox<outliner_filter::buildings>>(
state, id);
939 }
else if(
name ==
"outliner_view_army_construction") {
940 return make_element_by_type<outliner_filter_checkbox<outliner_filter::army_construction>>(
state, id);
941 }
else if(
name ==
"outliner_view_navy_construction") {
942 return make_element_by_type<outliner_filter_checkbox<outliner_filter::navy_construction>>(
state, id);
943 }
else if(
name ==
"outliner_view_gp_influence") {
944 return make_element_by_type<outliner_filter_checkbox<outliner_filter::gp_influence>>(
state, id);
945 }
else if(
name ==
"outliner_view_natfocus") {
946 return make_element_by_type<outliner_filter_checkbox<outliner_filter::national_focus>>(
state, id);
947 }
else if(
name ==
"outliner_view_rallypoints") {
948 return make_element_by_type<outliner_filter_checkbox<outliner_filter::rally_points>>(
state, id);
956 auto filter = any_cast<outliner_filter>(payload);
959 state.save_user_settings();
962 return message_result::consumed;
964 return message_result::unseen;
969 auto filter = any_cast<outliner_filter>(payload);
970 payload.emplace<
bool>(
state.user_settings.outliner_views[
uint8_t(filter)]);
971 return message_result::consumed;
973 return message_result::unseen;
void add_child_to_back(std::unique_ptr< element_base > child) noexcept final
virtual message_result get(sys::state &state, Cyto::Any &payload) noexcept
virtual void impl_on_update(sys::state &state) noexcept
message_result impl_get(sys::state &state, Cyto::Any &payload) noexcept
void set_visible(sys::state &state, bool vis)
void render(sys::state &state, int32_t x, int32_t y) noexcept override
void on_create(sys::state &state) noexcept override
int32_t visible_row_count
std::vector< ui::element_base * > row_windows
void resize(sys::state &state, int32_t height)
std::vector< outliner_data > row_contents
void on_update(sys::state &state) noexcept override
void render(sys::state &state, int32_t x, int32_t y) noexcept override
void on_update(sys::state &state) noexcept override
std::unique_ptr< element_base > make_child(sys::state &state, std::string_view name, dcon::gui_def_id id) noexcept override
void on_create(sys::state &state) noexcept override
void on_update(sys::state &state) noexcept override
void button_action(sys::state &state) noexcept override
void update_tooltip(sys::state &state, int32_t x, int32_t y, text::columnar_layout &contents) noexcept override
tooltip_behavior has_tooltip(sys::state &state) noexcept override
bool is_active(sys::state &state) noexcept override
void render(sys::state &state, int32_t x, int32_t y) noexcept override
void on_update(sys::state &state) noexcept override
bool get_filter(sys::state &state, outliner_filter filter) noexcept
void on_update(sys::state &state) noexcept override
void on_create(sys::state &state) noexcept override
std::unique_ptr< element_base > make_row(sys::state &state) noexcept override
image_element_base * bottom_image
void render(sys::state &state, int32_t x, int32_t y) noexcept override
void on_update(sys::state &state) noexcept override
void render(sys::state &state, int32_t x, int32_t y) noexcept override
void on_update(sys::state &state) noexcept override
std::unique_ptr< element_base > make_child(sys::state &state, std::string_view name, dcon::gui_def_id id) noexcept override
message_result get(sys::state &state, Cyto::Any &payload) noexcept override
message_result set(sys::state &state, Cyto::Any &payload) noexcept override
void on_create(sys::state &state) noexcept override
void set_text(sys::state &state, std::string const &new_text)
pop_satisfaction_wrapper_fat fatten(data_container const &c, pop_satisfaction_wrapper_id id) noexcept
constexpr dcon::demographics_key total(0)
dcon::demographics_key to_key(sys::state const &state, dcon::pop_type_id v)
construction_status province_building_construction(sys::state &state, dcon::province_id p, province_building_type t)
std::string_view province_building_type_get_name(economy::province_building_type v)
float unit_construction_progress(sys::state &state, dcon::province_land_construction_id c)
float attrition_amount(sys::state &state, dcon::navy_id a)
constexpr uint8_t priority_zero
constexpr uint8_t priority_mask
bool is_great_power(sys::state const &state, dcon::nation_id id)
std::string int_to_tag(uint32_t v)
float state_admin_efficiency(sys::state &state, dcon::state_instance_id id)
std::string resolve_string_substitution(sys::state &state, dcon::text_key source_text, substitution_map const &mp)
layout_box open_layout_box(layout_base &dest, int32_t indent)
void localised_format_box(sys::state &state, layout_base &dest, layout_box &box, std::string_view key, text::substitution_map const &sub)
std::string format_float(float num, size_t digits)
void add_line(sys::state &state, layout_base &dest, dcon::text_key txt, int32_t indent)
void add_to_substitution_map(substitution_map &mp, variable_type key, substitution value)
std::string get_dynamic_state_name(sys::state &state, dcon::state_instance_id state_id)
uint16_t name_into_font_id(sys::state &state, std::string_view txt)
ankerl::unordered_dense::map< uint32_t, substitution > substitution_map
std::string produce_simple_string(sys::state const &state, dcon::text_key id)
dcon::text_key get_name(sys::state &state, dcon::nation_id id)
std::string format_percentage(float num, size_t digits)
std::string get_influence_level_name(sys::state const &state, uint8_t v)
void close_layout_box(columnar_layout &dest, layout_box &box)
unitamounts calc_amounts_from_navy(sys::state &state, dcon::navy_fat_id navy)
unitamounts calc_amounts_from_army(sys::state &state, dcon::army_fat_id army)
xy_pair get_absolute_location(sys::state &state, element_base const &node)
std::variant< outliner_filter, dcon::army_id, dcon::navy_id, dcon::gp_relationship_id, dcon::state_building_construction_id, dcon::province_building_construction_id, dcon::province_land_construction_id, dcon::province_naval_construction_id, dcon::state_instance_id, outliner_rebel_occupation, outliner_hostile_siege, outliner_my_siege, dcon::land_battle_id, dcon::naval_battle_id, outliner_rally_point > outliner_data
static constexpr uint32_t set_size
union ui::element_data::internal_data data
ankerl::unordered_dense::map< dcon::text_key, element_target, hash_text_key > defs_by_name
element_base * province_window
element_base * outliner_window
text_base_data text_common