add shortcuts
This commit is contained in:
+68
-30
@@ -97,6 +97,13 @@ static Localized_String month_names[] = { LS_JANUARY, LS_FEBRUARY, LS_MARCH, LS_
|
|||||||
static char *save_file_path = NULL;
|
static char *save_file_path = NULL;
|
||||||
static const char *wiki_url = "https://gitea.ammerhai.com/Ammerhai/work-calendar/wiki";
|
static const char *wiki_url = "https://gitea.ammerhai.com/Ammerhai/work-calendar/wiki";
|
||||||
|
|
||||||
|
static ImGuiID close_popup;
|
||||||
|
static ImGuiID close_calendar_popup;
|
||||||
|
static ImGuiID close_and_load_calendar_popup;
|
||||||
|
static ImGuiID save_password_popup;
|
||||||
|
static ImGuiID open_password_popup;
|
||||||
|
static ImGuiID about_popup;
|
||||||
|
|
||||||
void init() {
|
void init() {
|
||||||
hydro_init();
|
hydro_init();
|
||||||
ImGuiIO &io = ImGui::GetIO();
|
ImGuiIO &io = ImGui::GetIO();
|
||||||
@@ -213,6 +220,15 @@ void save(){
|
|||||||
unsaved_changes = false;
|
unsaved_changes = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void interaction_save_as(){
|
||||||
|
char *new_save_file_path = save_file_dialog();
|
||||||
|
if (new_save_file_path) {
|
||||||
|
if (save_file_path) free(save_file_path);
|
||||||
|
save_file_path = new_save_file_path;
|
||||||
|
ImGui::OpenPopup(save_password_popup);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void load(){
|
void load(){
|
||||||
FILE *save_file = fopen(save_file_path, "rb");
|
FILE *save_file = fopen(save_file_path, "rb");
|
||||||
size_t num_bytes = fread(encrypted_buffer, 1, sizeof(encrypted_buffer), save_file);
|
size_t num_bytes = fread(encrypted_buffer, 1, sizeof(encrypted_buffer), save_file);
|
||||||
@@ -268,6 +284,19 @@ void load(){
|
|||||||
unsaved_changes = false;
|
unsaved_changes = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void interaction_open(){
|
||||||
|
if(unsaved_changes) {
|
||||||
|
ImGui::OpenPopup(close_and_load_calendar_popup);
|
||||||
|
} else {
|
||||||
|
char *new_save_file_path = open_file_dialog();
|
||||||
|
if (new_save_file_path) {
|
||||||
|
if (save_file_path) free(save_file_path);
|
||||||
|
save_file_path = new_save_file_path;
|
||||||
|
ImGui::OpenPopup(open_password_popup);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void close_calendar(){
|
void close_calendar(){
|
||||||
if (save_file_path) free(save_file_path);
|
if (save_file_path) free(save_file_path);
|
||||||
save_file_path = (char *)calloc(1, 1);
|
save_file_path = (char *)calloc(1, 1);
|
||||||
@@ -280,10 +309,43 @@ void close_calendar(){
|
|||||||
unsaved_changes = false;
|
unsaved_changes = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void interaction_close_calendar() {
|
||||||
|
if(unsaved_changes) {
|
||||||
|
ImGui::OpenPopup(close_calendar_popup);
|
||||||
|
} else {
|
||||||
|
close_calendar();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void per_frame(){
|
void per_frame(){
|
||||||
current_language = selected_language;
|
current_language = selected_language;
|
||||||
|
|
||||||
if(last_frame_unsaved_changes != unsaved_changes) {
|
close_popup = ImGui::GetID("###Close");
|
||||||
|
close_calendar_popup = ImGui::GetID("###CloseCalendar");
|
||||||
|
close_and_load_calendar_popup = ImGui::GetID("###CloseLoadCalendar");
|
||||||
|
save_password_popup = ImGui::GetID("###Save");
|
||||||
|
open_password_popup = ImGui::GetID("###Open");
|
||||||
|
about_popup = ImGui::GetID("###About");
|
||||||
|
|
||||||
|
if (ImGui::IsKeyDown(ImGuiMod_Ctrl) && ImGui::IsKeyPressed(ImGuiKey_S, false)) {
|
||||||
|
if (ImGui::IsKeyDown(ImGuiMod_Shift)) {
|
||||||
|
interaction_save_as();
|
||||||
|
} else if (strlen(save_file_path)) {
|
||||||
|
save();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ImGui::IsKeyDown(ImGuiMod_Ctrl) && ImGui::IsKeyPressed(ImGuiKey_O, false)) {
|
||||||
|
interaction_open();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ImGui::IsKeyDown(ImGuiMod_Ctrl) && ImGui::IsKeyPressed(ImGuiKey_X, false)) {
|
||||||
|
interaction_close_calendar();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (last_frame_unsaved_changes != unsaved_changes) {
|
||||||
char *title = (char *)calloc(1, strlen("Work Calendar - ") + strlen(save_file_path) + 2);
|
char *title = (char *)calloc(1, strlen("Work Calendar - ") + strlen(save_file_path) + 2);
|
||||||
memcpy(title, "Work Calendar - ", strlen("Work Calendar - "));
|
memcpy(title, "Work Calendar - ", strlen("Work Calendar - "));
|
||||||
memcpy(title + strlen(title), save_file_path, strlen(save_file_path));
|
memcpy(title + strlen(title), save_file_path, strlen(save_file_path));
|
||||||
@@ -315,47 +377,23 @@ void per_frame(){
|
|||||||
}
|
}
|
||||||
ImGui::DockSpaceOverViewport(main_viewport_dock, ImGui::GetMainViewport(), ImGuiDockNodeFlags_NoTabBar);
|
ImGui::DockSpaceOverViewport(main_viewport_dock, ImGui::GetMainViewport(), ImGuiDockNodeFlags_NoTabBar);
|
||||||
|
|
||||||
ImGuiID close_popup = ImGui::GetID("###Close");
|
|
||||||
ImGuiID close_calendar_popup = ImGui::GetID("###CloseCalendar");
|
|
||||||
ImGuiID close_and_load_calendar_popup = ImGui::GetID("###CloseLoadCalendar");
|
|
||||||
ImGuiID save_password_popup = ImGui::GetID("###Save");
|
|
||||||
ImGuiID open_password_popup = ImGui::GetID("###Open");
|
|
||||||
ImGuiID about_popup = ImGui::GetID("###About");
|
|
||||||
|
|
||||||
if (ImGui::BeginMainMenuBar()) {
|
if (ImGui::BeginMainMenuBar()) {
|
||||||
if (ImGui::BeginMenu(get_localized_string(LS_FILE))) {
|
if (ImGui::BeginMenu(get_localized_string(LS_FILE))) {
|
||||||
if (ImGui::MenuItem(get_localized_string(LS_OPEN), "Ctrl + O")) {
|
if (ImGui::MenuItem(get_localized_string(LS_OPEN), "Ctrl + O")) {
|
||||||
if(unsaved_changes) {
|
interaction_open();
|
||||||
ImGui::OpenPopup(close_and_load_calendar_popup);
|
|
||||||
} else {
|
|
||||||
char *new_save_file_path = open_file_dialog();
|
|
||||||
if (new_save_file_path) {
|
|
||||||
if (save_file_path) free(save_file_path);
|
|
||||||
save_file_path = new_save_file_path;
|
|
||||||
ImGui::OpenPopup(open_password_popup);
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
if (ImGui::MenuItem(get_localized_string(LS_SAVE), "Ctrl + S", false, strlen(save_file_path))) {
|
||||||
if (ImGui::MenuItem(get_localized_string(LS_SAVE), "Ctrl + S", false, !!save_file_path)) {
|
|
||||||
save();
|
save();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ImGui::MenuItem(get_localized_string(LS_SAVE_AS), "Ctrl + Shift + S")) {
|
if (ImGui::MenuItem(get_localized_string(LS_SAVE_AS), "Ctrl + Shift + S")) {
|
||||||
char *new_save_file_path = save_file_dialog();
|
interaction_save_as();
|
||||||
if (new_save_file_path) {
|
|
||||||
if (save_file_path) free(save_file_path);
|
|
||||||
save_file_path = new_save_file_path;
|
|
||||||
ImGui::OpenPopup(save_password_popup);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ImGui::Separator();
|
ImGui::Separator();
|
||||||
if (ImGui::MenuItem(get_localized_string(LS_CLOSE_CALENDAR), "Ctrl + X")) {
|
if (ImGui::MenuItem(get_localized_string(LS_CLOSE_CALENDAR), "Ctrl + X")) {
|
||||||
if(unsaved_changes) {
|
interaction_close_calendar();
|
||||||
ImGui::OpenPopup(close_calendar_popup);
|
|
||||||
} else {
|
|
||||||
close_calendar();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ImGui::Separator();
|
ImGui::Separator();
|
||||||
|
|||||||
Reference in New Issue
Block a user