Skip to content

Commit

Permalink
Merge pull request #1239 from Nivaturimika/sortType
Browse files Browse the repository at this point in the history
Sort regiments and ships by type
  • Loading branch information
schombert authored Apr 7, 2024
2 parents bb8e265 + 51fd264 commit 2cee90e
Show file tree
Hide file tree
Showing 2 changed files with 58 additions and 18 deletions.
44 changes: 26 additions & 18 deletions src/gui/gui_unit_panel.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -747,16 +747,20 @@ class unit_details_army_listbox : public listbox_element_base<subunit_details_en
}

void on_update(sys::state& state) noexcept override {
auto content = retrieve<dcon::army_id>(state, parent);
row_contents.clear();
if(parent) {
Cyto::Any payload = dcon::army_id{};
parent->impl_get(state, payload);
auto content = any_cast<dcon::army_id>(payload);
state.world.army_for_each_army_membership_as_army(content, [&](dcon::army_membership_id amid) {
auto rid = state.world.army_membership_get_regiment(amid);
row_contents.push_back(rid);
});
}
state.world.army_for_each_army_membership_as_army(content, [&](dcon::army_membership_id amid) {
auto rid = state.world.army_membership_get_regiment(amid);
row_contents.push_back(rid);
});
std::sort(row_contents.begin(), row_contents.end(), [&](dcon::regiment_id a, dcon::regiment_id b) {
auto av = state.world.regiment_get_type(a).index();
auto bv = state.world.regiment_get_type(b).index();
if(av != bv)
return av > bv;
else
return a.index() < b.index();
});
update(state);
}
};
Expand All @@ -773,16 +777,20 @@ class unit_details_navy_listbox : public listbox_element_base<subunit_details_en
}

void on_update(sys::state& state) noexcept override {
auto content = retrieve<dcon::navy_id>(state, parent);
row_contents.clear();
if(parent) {
Cyto::Any payload = dcon::navy_id{};
parent->impl_get(state, payload);
auto content = any_cast<dcon::navy_id>(payload);
state.world.navy_for_each_navy_membership_as_navy(content, [&](dcon::navy_membership_id nmid) {
auto sid = state.world.navy_membership_get_ship(nmid);
row_contents.push_back(sid);
});
}
state.world.navy_for_each_navy_membership_as_navy(content, [&](dcon::navy_membership_id nmid) {
auto sid = state.world.navy_membership_get_ship(nmid);
row_contents.push_back(sid);
});
std::sort(row_contents.begin(), row_contents.end(), [&](dcon::ship_id a, dcon::ship_id b) {
auto av = state.world.ship_get_type(a).index();
auto bv = state.world.ship_get_type(b).index();
if(av != bv)
return av > bv;
else
return a.index() < b.index();
});
update(state);
}
};
Expand Down
32 changes: 32 additions & 0 deletions src/gui/gui_unit_panel_subwindow.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -330,12 +330,28 @@ using listbox_left = listbox_element_base<reorg_unit_listbox_row<T2>, T2>;
listbox_left::row_contents.push_back(regi.get_regiment().id);
}
}
std::sort(listbox_left::row_contents.begin(), listbox_left::row_contents.end(), [&](dcon::regiment_id a, dcon::regiment_id b) {
auto av = state.world.regiment_get_type(a).index();
auto bv = state.world.regiment_get_type(b).index();
if(av != bv)
return av > bv;
else
return a.index() < b.index();
});
} else {
for(auto regi : fat.get_navy_membership()) {
if(auto result = std::find(begin(selectedunits), end(selectedunits), regi.get_ship().id); result == std::end(selectedunits)) {
listbox_left::row_contents.push_back(regi.get_ship().id);
}
}
std::sort(listbox_left::row_contents.begin(), listbox_left::row_contents.end(), [&](dcon::ship_id a, dcon::ship_id b) {
auto av = state.world.ship_get_type(a).index();
auto bv = state.world.ship_get_type(b).index();
if(av != bv)
return av > bv;
else
return a.index() < b.index();
});
}

listbox_left::update(state);
Expand Down Expand Up @@ -370,12 +386,28 @@ using listbox_right = listbox_element_base<reorg_unit_listbox_row<T2>, T2>;
listbox_right::row_contents.push_back(regi.get_regiment().id);
}
}
std::sort(listbox_right::row_contents.begin(), listbox_right::row_contents.end(), [&](dcon::regiment_id a, dcon::regiment_id b) {
auto av = state.world.regiment_get_type(a).index();
auto bv = state.world.regiment_get_type(b).index();
if(av != bv)
return av > bv;
else
return a.index() < b.index();
});
} else {
for(auto regi : fat.get_navy_membership()) {
if(auto result = std::find(begin(selectedunits), end(selectedunits), regi.get_ship().id); result != std::end(selectedunits)) {
listbox_right::row_contents.push_back(regi.get_ship().id);
}
}
std::sort(listbox_right::row_contents.begin(), listbox_right::row_contents.end(), [&](dcon::ship_id a, dcon::ship_id b) {
auto av = state.world.ship_get_type(a).index();
auto bv = state.world.ship_get_type(b).index();
if(av != bv)
return av > bv;
else
return a.index() < b.index();
});
}

listbox_right::update(state);
Expand Down

0 comments on commit 2cee90e

Please sign in to comment.