diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/mo_edit.c | 106 | ||||
| -rw-r--r-- | src/save.c | 6 |
2 files changed, 77 insertions, 35 deletions
diff --git a/src/mo_edit.c b/src/mo_edit.c index 0d78f92..8ef8d69 100644 --- a/src/mo_edit.c +++ b/src/mo_edit.c @@ -7,18 +7,12 @@ #include "config.h" #include "project_base.h" -// TODO(Aldrik): move the delete button for term to edit panel on the topright -// TODO(Aldrik): language mo file name preview when entering name -// TODO(Aldrik): option to mark languages with colors -// TODO(Aldrik): change save icon // TODO(Aldrik): delete file of language when deleting language // TODO(Aldrik): control scrollbar with mouse s32 global_language_id = 1; char project_path[MAX_INPUT_LENGTH]; -#define MAX_LANGUAGE_COUNT 100 - typedef struct t_language { char *name; @@ -45,6 +39,7 @@ typedef struct t_translation_project } translation_project; translation_project *current_project = 0; +array tb_translation_list; #include "save.h" #include "save.c" @@ -60,7 +55,6 @@ dropdown_state dd_available_countries; textbox_state tb_filter; textbox_state tb_new_term; textbox_state tb_new_language; -textbox_state tb_translation_list[MAX_LANGUAGE_COUNT]; image *set_img; image *add_img; @@ -171,6 +165,7 @@ s32 add_language_to_project(char *buffer) language *lang = array_at(¤t_project->languages, i); if (string_equals(lang->name, buffer)) { + // TODO(Aldrik): localize platform_show_message(main_window, "Language already added", "Invalid info"); return -1; } @@ -185,6 +180,12 @@ s32 add_language_to_project(char *buffer) s32 index = array_push(¤t_project->languages, &l); + textbox_state new_tb; + new_tb = ui_create_textbox(MAX_INPUT_LENGTH); + new_tb.accept_newline = true; + new_tb.deselect_on_enter = false; + array_push(&tb_translation_list, &new_tb); + for (s32 x = 0; x < current_project->terms.length; x++) { term *t = array_at(¤t_project->terms, x); @@ -234,6 +235,9 @@ void remove_language_from_project(s32 language_id) if (l->id == language_id) { array_remove_at(¤t_project->languages, i); + textbox_state *st = array_at(&tb_translation_list, i); + mem_free(st->buffer); + array_remove_at(&tb_translation_list, i); break; } } @@ -265,7 +269,7 @@ void select_term(s32 index) for (s32 i = 0; i < current_project->languages.length; i++) { translation *tr = array_at(&t->translations, i); - textbox_state *tb = &tb_translation_list[i]; + textbox_state *tb = array_at(&tb_translation_list, i); tb->state = false; if (tr->value) @@ -325,7 +329,7 @@ void save_term_changes() for (s32 i = 0; i < current_project->languages.length; i++) { translation *tr = array_at(&t->translations, i); - textbox_state *tb = &tb_translation_list[i]; + textbox_state *tb = array_at(&tb_translation_list, i); string_copyn(tr->value, tb->buffer, MAX_INPUT_LENGTH); } @@ -428,19 +432,13 @@ int main(int argc, char **argv) tb_new_term = ui_create_textbox(MAX_TERM_NAME_LENGTH); tb_new_language = ui_create_textbox(MAX_INPUT_LENGTH); - for (s32 i = 0; i < MAX_LANGUAGE_COUNT; i++) - { - tb_translation_list[i] = ui_create_textbox(MAX_INPUT_LENGTH); - tb_translation_list[i].accept_newline = true; - tb_translation_list[i].deselect_on_enter = false; - } - // asset worker thread asset_queue_worker1 = thread_start(assets_queue_worker, NULL); thread asset_queue_worker2 = thread_start(assets_queue_worker, NULL); thread_detach(&asset_queue_worker1); thread_detach(&asset_queue_worker2); + tb_translation_list = array_create(sizeof(textbox_state)); load_config(&config); while(window.is_open) { @@ -497,11 +495,10 @@ int main(int argc, char **argv) } else { - // TODO(Aldrik): localize - platform_show_message(main_window, "No project to save", "Error saving project"); + platform_show_message(main_window, localize("no_project_to_save"), localize("error_saving_project")); } } - if (ui_push_menu_item(localize("save_project_as"), "Ctrl + E")) + if (ui_push_menu_item(localize("save_project_as"), "Ctrl + A")) { if (current_project) { @@ -509,10 +506,14 @@ int main(int argc, char **argv) } else { - // TODO(Aldrik): localize - platform_show_message(main_window, "No project to save", "Error saving project"); + platform_show_message(main_window, localize("no_project_to_save"), localize("error_saving_project")); } } + if (ui_push_menu_item(localize("close_project"), "")) + { + current_project = 0; + project_path[0] = 0; + } ui_push_menu_item_separator(); if (ui_push_menu_item(localize("quit"), "Ctrl + Q")) { @@ -524,7 +525,6 @@ int main(int argc, char **argv) ui_push_separator(); - // TODO(Aldrik): make this a setting, resizable panel global_ui_context.layout.width = 300; ui_push_vertical_dragbar(); @@ -537,7 +537,7 @@ int main(int argc, char **argv) current_project->selected_term_index = -1; } - ui_push_textf_width(font_medium, localize("terms"), global_ui_context.layout.width-150); + ui_push_textf_width(font_medium, localize("terms"), global_ui_context.layout.width-106); if (ui_push_button_image(&btn_summary, "", add_img)) { @@ -558,6 +558,12 @@ int main(int argc, char **argv) ui_push_separator(); + // reset scroll if filter text changed + if (tb_filter.state && keyboard.text_changed) + { + term_scroll.scroll = 0; + } + term_scroll.height = main_window->height-global_ui_context.layout.offset_y; ui_scroll_begin(&term_scroll); { @@ -666,11 +672,12 @@ int main(int argc, char **argv) TEXTBOX_WIDTH = global_ui_context.layout.width - 130; - if (!strlen(tb_translation_list[i].buffer)) + textbox_state *tbs = array_at(&tb_translation_list, i); + if (!strlen(tbs->buffer)) { ui_push_rect(10, MISSING_TRANSLATION_COLOR); } - else if (string_equals(tb_translation_list[i].buffer, + else if (string_equals(tbs->buffer, tr->value)) { ui_push_rect(10, global_ui_context.style.background); @@ -680,7 +687,7 @@ int main(int argc, char **argv) ui_push_rect(10, UNSAVED_CHANGES_COLOR); } - ui_push_textbox(&tb_translation_list[i], ""); + ui_push_textbox(tbs, ""); language *l = get_language_by_id(tr->language_id); ui_push_text(l->name); @@ -688,18 +695,18 @@ int main(int argc, char **argv) global_ui_context.layout.offset_y += TEXTBOX_HEIGHT + WIDGET_PADDING; global_ui_context.layout.offset_x = 310; - if (keyboard_is_key_pressed(&keyboard, KEY_TAB) && tb_translation_list[i].state) + if (keyboard_is_key_pressed(&keyboard, KEY_TAB) && tbs->state) { keyboard.input_keys[KEY_TAB] = false; - tb_translation_list[i].state = false; + tbs->state = false; if (i+1 < t->translations.length) { - ui_set_textbox_active(&tb_translation_list[i+1]); + ui_set_textbox_active(array_at(&tb_translation_list, i+1)); } else { - ui_set_textbox_active(&tb_translation_list[0]); + ui_set_textbox_active(array_at(&tb_translation_list, 0)); } } } @@ -746,6 +753,21 @@ int main(int argc, char **argv) keyboard_set_input_text(&keyboard, ""); tb_new_language.state = true; } + + if (!string_equals(tb_new_language.buffer, "")) + { + ui_block_end(); + char filename_buffer[MAX_INPUT_LENGTH]; + filename_buffer[0] = 0; + string_appendn(filename_buffer, localize("filename"), MAX_INPUT_LENGTH); + string_appendn(filename_buffer, ": ", MAX_INPUT_LENGTH); + string_appendn(filename_buffer, tb_new_language.buffer, MAX_INPUT_LENGTH); + string_appendn(filename_buffer, ".mo", MAX_INPUT_LENGTH); + color c = global_ui_context.style.foreground; + global_ui_context.style.foreground = rgb(110,110,110); + ui_push_textf(font_mini, filename_buffer); + global_ui_context.style.foreground = c; + } } ui_block_end(); @@ -808,14 +830,28 @@ int main(int argc, char **argv) } if (keyboard_is_key_down(&keyboard, KEY_LEFT_CONTROL) && keyboard_is_key_pressed(&keyboard, KEY_S)) { - if (string_equals(project_path, "")) - save_project(); + if (current_project) + { + if (string_equals(project_path, "")) + save_project(); + else + save_project_to_folder(project_path); + } else - save_project_to_folder(project_path); + { + platform_show_message(main_window, localize("no_project_to_save"), localize("error_saving_project")); + } } - if (keyboard_is_key_down(&keyboard, KEY_LEFT_CONTROL) && keyboard_is_key_pressed(&keyboard, KEY_E)) + if (keyboard_is_key_down(&keyboard, KEY_LEFT_CONTROL) && keyboard_is_key_pressed(&keyboard, KEY_A)) { - save_project(); + if (current_project) + { + save_project(); + } + else + { + platform_show_message(main_window, localize("no_project_to_save"), localize("error_saving_project")); + } } if (keyboard_is_key_down(&keyboard, KEY_LEFT_CONTROL) && keyboard_is_key_pressed(&keyboard, KEY_Q)) { @@ -178,6 +178,12 @@ bool read_mo_file(char *buffer, s32 buffer_size, s32 language_id) string_copyn(tr.value, buffer+translations[i].offset, MAX_INPUT_LENGTH); tr.language_id = language_id; array_push(&t->translations, &tr); + + textbox_state new_tb; + new_tb = ui_create_textbox(MAX_INPUT_LENGTH); + new_tb.accept_newline = true; + new_tb.deselect_on_enter = false; + array_push(&tb_translation_list, &new_tb); } return true; |
