Unify OK/Cancel/Apply buttons
This commit is contained in:
parent
5b777dc309
commit
432e3c4c71
|
@ -4,6 +4,7 @@
|
|||
#include "../group_panel.h"
|
||||
#include "../filters.h"
|
||||
#include "../config.h"
|
||||
#include "ok_buttons_fragment.h"
|
||||
#include "filters.h"
|
||||
|
||||
static inline void render_integer_filter(IntegerFilter* filter);
|
||||
|
@ -255,21 +256,13 @@ void filters_fragment(Config& active_config, Filters& __restrict active_filters,
|
|||
}
|
||||
|
||||
ImGui::Separator();
|
||||
ImVec2 button_size(4 * ImGui::GetFontSize(), 0);
|
||||
if (ImGui::Button("OK", button_size)) {
|
||||
ok_buttons_fragment(p_open, [&]() {
|
||||
active_filters = std::move(inactive_filters);
|
||||
try_write_config(active_config);
|
||||
update_logcat_entries(active_config, logcat_entries, filtered_logcat_entry_offsets);
|
||||
*p_open = false;
|
||||
}
|
||||
ImGui::SameLine();
|
||||
if (ImGui::Button("Cancel", button_size)) {
|
||||
*p_open = false;
|
||||
}
|
||||
ImGui::SameLine();
|
||||
if (ImGui::Button("Apply", button_size)) {
|
||||
}, [&]() {
|
||||
copy_filters(active_filters, inactive_filters);
|
||||
try_write_config(active_config);
|
||||
update_logcat_entries(active_config, logcat_entries, filtered_logcat_entry_offsets);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
|
|
@ -0,0 +1,26 @@
|
|||
#pragma once
|
||||
|
||||
#include <imgui.h>
|
||||
#include "../misc.h"
|
||||
|
||||
void ok_buttons_fragment(bool* p_open, auto ok, auto apply);
|
||||
|
||||
// function bodies must be in the header because https://stackoverflow.com/a/999383
|
||||
|
||||
void ok_buttons_fragment(bool* p_open, auto ok, auto apply) {
|
||||
ImVec2 button_size(4 * ImGui::GetFontSize(), 0);
|
||||
bool ctrl_s_pressed = ImGui::IsKeyPressed(ImGuiMod_Shortcut | ImGuiKey_S);
|
||||
|
||||
if (ImGui::Button("OK", button_size)) {
|
||||
ok();
|
||||
*p_open = false;
|
||||
}
|
||||
ImGui::SameLine();
|
||||
if (ImGui::Button("Cancel", button_size)) {
|
||||
*p_open = false;
|
||||
}
|
||||
ImGui::SameLine();
|
||||
if (ImGui::Button("Apply", button_size) || ctrl_s_pressed) {
|
||||
apply();
|
||||
}
|
||||
}
|
5
misc.cpp
5
misc.cpp
|
@ -67,6 +67,11 @@ bool ImGui::BeginWithCloseShortcut(const char* label, bool* p_open, ImGuiWindowF
|
|||
|
||||
if (p_open && ImGui::Shortcut(ImGuiMod_Shortcut | ImGuiKey_W, 0, ImGuiInputFlags_Repeat)) {
|
||||
*p_open = false;
|
||||
return false;
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
bool ImGui::IsKeyPressed(ImGuiKeyChord key_chord, bool repeat) {
|
||||
return ImGui::Shortcut(key_chord, 0, repeat ? ImGuiInputFlags_Repeat : 0);
|
||||
}
|
||||
|
|
4
misc.h
4
misc.h
|
@ -1,7 +1,7 @@
|
|||
#pragma once
|
||||
|
||||
#include <imgui.h>
|
||||
#include <string>
|
||||
#include <imgui.h>
|
||||
|
||||
std::string quote(const std::string& str);
|
||||
void throw_system_error(int err, const char* what);
|
||||
|
@ -13,4 +13,6 @@ namespace ImGui {
|
|||
bool RedButton(const char* label);
|
||||
bool Button(const char* label, bool enabled);
|
||||
bool BeginWithCloseShortcut(const char* label, bool* p_open, ImGuiWindowFlags flags = 0);
|
||||
// don't spill __all__ of imgui_internal.h
|
||||
bool IsKeyPressed(ImGuiKeyChord key_chord, bool repeat = true);
|
||||
}; // namespace ImGui
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
|
||||
#include "../misc.h"
|
||||
#include "../config.h"
|
||||
#include "../fragments/ok_buttons_fragment.h"
|
||||
#include "settings.h"
|
||||
|
||||
static void try_write_config(const Config& config) {
|
||||
|
@ -28,24 +29,16 @@ void settings_window(Config& __restrict active_config, Config& __restrict inacti
|
|||
ImGui::InputFloat("Monospace font size", &inactive_config.monospace_font_size, 0.5f, 1.0f, "%.3f");
|
||||
|
||||
ImGui::Separator();
|
||||
ImVec2 button_size(4 * ImGui::GetFontSize(), 0);
|
||||
if (ImGui::Button("OK", button_size)) {
|
||||
ok_buttons_fragment(p_open, [&]() {
|
||||
active_config.logcat_command = std::move(inactive_config.logcat_command);
|
||||
active_config.normal_font_size = inactive_config.normal_font_size;
|
||||
active_config.monospace_font_size = inactive_config.monospace_font_size;
|
||||
try_write_config(active_config);
|
||||
*p_open = false;
|
||||
}
|
||||
ImGui::SameLine();
|
||||
if (ImGui::Button("Cancel", button_size)) {
|
||||
*p_open = false;
|
||||
}
|
||||
ImGui::SameLine();
|
||||
if (ImGui::Button("Apply", button_size)) {
|
||||
}, [&]() {
|
||||
active_config.logcat_command = inactive_config.logcat_command;
|
||||
active_config.normal_font_size = inactive_config.normal_font_size;
|
||||
active_config.monospace_font_size = inactive_config.monospace_font_size;
|
||||
try_write_config(active_config);
|
||||
}
|
||||
});
|
||||
ImGui::End();
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue