summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/mo_edit.c106
-rw-r--r--src/save.c6
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(&current_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(&current_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(&current_project->terms, x);
@@ -234,6 +235,9 @@ void remove_language_from_project(s32 language_id)
if (l->id == language_id)
{
array_remove_at(&current_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))
{
diff --git a/src/save.c b/src/save.c
index ded92b4..cf76322 100644
--- a/src/save.c
+++ b/src/save.c
@@ -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;