Maps/Accessories: separate the size from the label.
That now means it's possible to filter the accessory list by accessory size.
This commit is contained in:
parent
28eb40f6b4
commit
b58ff5a763
2 changed files with 620 additions and 554 deletions
File diff suppressed because it is too large
Load diff
|
@ -15,6 +15,7 @@
|
||||||
// along with this program. If not, see <https://www.gnu.org/licenses/>.
|
// along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
#include <Corrade/Containers/ScopeGuard.h>
|
#include <Corrade/Containers/ScopeGuard.h>
|
||||||
|
#include <Corrade/Utility/Format.h>
|
||||||
|
|
||||||
#include <Magnum/ImGuiIntegration/Integration.h>
|
#include <Magnum/ImGuiIntegration/Integration.h>
|
||||||
|
|
||||||
|
@ -495,7 +496,7 @@ void SaveTool::drawAccessoryEditor(Accessory& accessory, Containers::ArrayView<C
|
||||||
ImGui::TextUnformatted("Accessory: <none>");
|
ImGui::TextUnformatted("Accessory: <none>");
|
||||||
}
|
}
|
||||||
else if(accessories.find(accessory.id) != accessories.cend()) {
|
else if(accessories.find(accessory.id) != accessories.cend()) {
|
||||||
ImGui::Text("Accessory #%i - %s", accessory.id, accessories.at(accessory.id).data());
|
ImGui::Text("Accessory #%i - %s", accessory.id, accessories.at(accessory.id).name.data());
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
ImGui::Text("Accessory #%i", accessory.id);
|
ImGui::Text("Accessory #%i", accessory.id);
|
||||||
|
@ -505,12 +506,10 @@ void SaveTool::drawAccessoryEditor(Accessory& accessory, Containers::ArrayView<C
|
||||||
ImGui::SameLine();
|
ImGui::SameLine();
|
||||||
|
|
||||||
static Int tab = 0;
|
static Int tab = 0;
|
||||||
|
static Containers::Optional<AccessorySize> size = Containers::NullOpt;
|
||||||
if(ImGui::SmallButton("Change")) {
|
if(ImGui::SmallButton("Change")) {
|
||||||
ImGui::OpenPopup("##AccessoryPopup");
|
ImGui::OpenPopup("##AccessoryPopup");
|
||||||
if(accessory.id < 1000) {
|
if(accessory.id >= 3000) {
|
||||||
tab = 0;
|
|
||||||
}
|
|
||||||
else if(accessory.id >= 3000) {
|
|
||||||
tab = 3;
|
tab = 3;
|
||||||
}
|
}
|
||||||
else if(accessory.id >= 2000) {
|
else if(accessory.id >= 2000) {
|
||||||
|
@ -519,9 +518,18 @@ void SaveTool::drawAccessoryEditor(Accessory& accessory, Containers::ArrayView<C
|
||||||
else if(accessory.id >= 1000) {
|
else if(accessory.id >= 1000) {
|
||||||
tab = 1;
|
tab = 1;
|
||||||
}
|
}
|
||||||
|
else {
|
||||||
|
tab = 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if(ImGui::BeginPopup("##AccessoryPopup")) {
|
if(ImGui::BeginPopup("##AccessoryPopup")) {
|
||||||
Float selectable_width = 90.0f;
|
static const char* size_labels[] = {
|
||||||
|
"S",
|
||||||
|
"M",
|
||||||
|
"L",
|
||||||
|
"XL"
|
||||||
|
};
|
||||||
|
static const Float selectable_width = 90.0f;
|
||||||
|
|
||||||
ImGui::PushStyleVar(ImGuiStyleVar_SelectableTextAlign, {0.5f, 0.0f});
|
ImGui::PushStyleVar(ImGuiStyleVar_SelectableTextAlign, {0.5f, 0.0f});
|
||||||
if(ImGui::Selectable("Primitives", tab == 0, ImGuiSelectableFlags_DontClosePopups, {selectable_width, 0.0f})) {
|
if(ImGui::Selectable("Primitives", tab == 0, ImGuiSelectableFlags_DontClosePopups, {selectable_width, 0.0f})) {
|
||||||
|
@ -549,10 +557,56 @@ void SaveTool::drawAccessoryEditor(Accessory& accessory, Containers::ArrayView<C
|
||||||
|
|
||||||
ImGui::Separator();
|
ImGui::Separator();
|
||||||
|
|
||||||
|
ImGui::PushStyleVar(ImGuiStyleVar_SelectableTextAlign, {0.5f, 0.0f});
|
||||||
|
if(ImGui::Selectable("All", !size, ImGuiSelectableFlags_DontClosePopups, {70.0f, 0.0f})) {
|
||||||
|
size = Containers::NullOpt;
|
||||||
|
}
|
||||||
|
ImGui::SameLine();
|
||||||
|
ImGui::SeparatorEx(ImGuiSeparatorFlags_Vertical);
|
||||||
|
ImGui::SameLine();
|
||||||
|
if(ImGui::Selectable("S", size && *size == AccessorySize::S, ImGuiSelectableFlags_DontClosePopups, {70.0f, 0.0f})) {
|
||||||
|
if(!size) {
|
||||||
|
size.emplace();
|
||||||
|
}
|
||||||
|
*size = AccessorySize::S;
|
||||||
|
}
|
||||||
|
ImGui::SameLine();
|
||||||
|
ImGui::SeparatorEx(ImGuiSeparatorFlags_Vertical);
|
||||||
|
ImGui::SameLine();
|
||||||
|
if(ImGui::Selectable("M", size && *size == AccessorySize::M, ImGuiSelectableFlags_DontClosePopups, {70.0f, 0.0f})) {
|
||||||
|
if(!size) {
|
||||||
|
size.emplace();
|
||||||
|
}
|
||||||
|
*size = AccessorySize::M;
|
||||||
|
}
|
||||||
|
ImGui::SameLine();
|
||||||
|
ImGui::SeparatorEx(ImGuiSeparatorFlags_Vertical);
|
||||||
|
ImGui::SameLine();
|
||||||
|
if(ImGui::Selectable("L", size && *size == AccessorySize::L, ImGuiSelectableFlags_DontClosePopups, {70.0f, 0.0f})) {
|
||||||
|
if(!size) {
|
||||||
|
size.emplace();
|
||||||
|
}
|
||||||
|
*size = AccessorySize::L;
|
||||||
|
}
|
||||||
|
ImGui::SameLine();
|
||||||
|
ImGui::SeparatorEx(ImGuiSeparatorFlags_Vertical);
|
||||||
|
ImGui::SameLine();
|
||||||
|
if(ImGui::Selectable("XL", size && *size == AccessorySize::XL, ImGuiSelectableFlags_DontClosePopups, {70.0f, 0.0f})) {
|
||||||
|
if(!size) {
|
||||||
|
size.emplace();
|
||||||
|
}
|
||||||
|
*size = AccessorySize::XL;
|
||||||
|
}
|
||||||
|
ImGui::PopStyleVar();
|
||||||
|
|
||||||
|
ImGui::Separator();
|
||||||
|
|
||||||
if(ImGui::BeginListBox("##AccessoryListbox", {-1.0f, 0.0f})) {
|
if(ImGui::BeginListBox("##AccessoryListbox", {-1.0f, 0.0f})) {
|
||||||
for(const auto& acc : accessories) {
|
for(const auto& acc : accessories) {
|
||||||
if(acc.first >= tab * 1000 && acc.first < ((tab + 1) * 1000)) {
|
if(acc.first >= tab * 1000 && acc.first < ((tab + 1) * 1000) && (!size || *size == acc.second.size)) {
|
||||||
if(ImGui::Selectable(acc.second.data(), acc.first == accessory.id)) {
|
if(ImGui::Selectable(Utility::format("{} ({})", acc.second.name, size_labels[acc.second.size]).data(),
|
||||||
|
acc.first == accessory.id))
|
||||||
|
{
|
||||||
accessory.id = acc.first;
|
accessory.id = acc.first;
|
||||||
accessory.attachIndex = 0;
|
accessory.attachIndex = 0;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue