summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/array.c36
-rw-r--r--src/array.h2
-rw-r--r--src/assets.h12
-rw-r--r--src/languages.h256
-rw-r--r--src/mo_edit.c313
-rw-r--r--src/platform.h1
-rw-r--r--src/project_base.h1
7 files changed, 467 insertions, 154 deletions
diff --git a/src/array.c b/src/array.c
index 2c8127a..7c0cbeb 100644
--- a/src/array.c
+++ b/src/array.c
@@ -19,9 +19,9 @@ array array_create(u64 entry_size)
int array_push(array *array, void *data)
{
- assert(array);
- assert(data);
- assert(array->reserve_jump >= 1);
+ ASSERT(array);
+ ASSERT(data);
+ ASSERT(array->reserve_jump >= 1);
mutex_lock(&array->mutex);
array->length++;
@@ -48,9 +48,9 @@ int array_push(array *array, void *data)
int array_push_size(array *array, void *data, s32 data_size)
{
- assert(array);
- assert(data);
- assert(array->reserve_jump >= 1);
+ ASSERT(array);
+ ASSERT(data);
+ ASSERT(array->reserve_jump >= 1);
mutex_lock(&array->mutex);
array->length++;
@@ -85,7 +85,7 @@ int array_push_size(array *array, void *data, s32 data_size)
void array_reserve(array *array, u32 reserve_count)
{
- assert(array);
+ ASSERT(array);
mutex_lock(&array->mutex);
u32 reserved_count = array->reserved_length - array->length;
@@ -105,9 +105,9 @@ void array_reserve(array *array, u32 reserve_count)
void array_remove_at(array *array, u32 at)
{
- assert(array);
- assert(at >= 0);
- assert(at < array->length);
+ ASSERT(array);
+ ASSERT(at >= 0);
+ ASSERT(at < array->length);
mutex_lock(&array->mutex);
if (array->length > 1)
@@ -136,7 +136,7 @@ void array_remove(array *array, void *ptr)
void array_remove_by(array *array, void *data)
{
- assert(array);
+ ASSERT(array);
mutex_lock(&array->mutex);
for (int i = 0; i < array->length; i++)
@@ -154,9 +154,9 @@ void array_remove_by(array *array, void *data)
void *array_at(array *array, u32 at)
{
mutex_lock(&array->mutex);
- assert(array);
- assert(at >= 0);
- assert(at < array->length);
+ ASSERT(array);
+ ASSERT(at >= 0);
+ ASSERT(at < array->length);
void *result = array->data + (at * array->entry_size);
mutex_unlock(&array->mutex);
@@ -165,16 +165,16 @@ void *array_at(array *array, u32 at)
void array_destroy(array *array)
{
- assert(array);
+ ASSERT(array);
mem_free(array->data);
mutex_destroy(&array->mutex);
}
void array_swap(array *array, u32 swap1, u32 swap2)
{
- assert(array);
- assert(swap2 >= 0);
- assert(swap2 < array->length);
+ ASSERT(array);
+ ASSERT(swap2 >= 0);
+ ASSERT(swap2 < array->length);
if (swap1 == swap2) return;
void *swap1_at = array_at(array, swap1);
diff --git a/src/array.h b/src/array.h
index f18f780..cf3195c 100644
--- a/src/array.h
+++ b/src/array.h
@@ -7,6 +7,8 @@
#ifndef INCLUDE_ARRAY
#define INCLUDE_ARRAY
+#define ASSERT(e_) {if(!(e_)){*(int*)0=0;}}
+
typedef struct t_array
{
u32 length;
diff --git a/src/assets.h b/src/assets.h
index 7202997..88b577e 100644
--- a/src/assets.h
+++ b/src/assets.h
@@ -23,24 +23,12 @@
extern u8 _binary____data_imgs_en_png_start[];
extern u8 _binary____data_imgs_en_png_end[];
-extern u8 _binary____data_imgs_error_png_start[];
-extern u8 _binary____data_imgs_error_png_end[];
-
-extern u8 _binary____data_imgs_folder_png_start[];
-extern u8 _binary____data_imgs_folder_png_end[];
-
extern u8 _binary____data_imgs_nl_png_start[];
extern u8 _binary____data_imgs_nl_png_end[];
-extern u8 _binary____data_imgs_search_png_start[];
-extern u8 _binary____data_imgs_search_png_end[];
-
extern u8 _binary____data_imgs_logo_64_png_start[];
extern u8 _binary____data_imgs_logo_64_png_end[];
-extern u8 _binary____data_imgs_logo_512_png_start[];
-extern u8 _binary____data_imgs_logo_512_png_end[];
-
extern u8 _binary____data_fonts_mono_ttf_start[];
extern u8 _binary____data_fonts_mono_ttf_end[];
diff --git a/src/languages.h b/src/languages.h
index a079141..d4da9c7 100644
--- a/src/languages.h
+++ b/src/languages.h
@@ -6,17 +6,269 @@
#define LANGUAGE_CODE_SIZE 3
+#if 0
typedef struct t_language
{
char code[3];
char fullname[40];
} language;
-
language global_langues[] = {
{"AD","Andorra"},
{"AE","United Arab Emirates"},
{"AF","Afghanistan"},
+ {"AG",""},
+ {"AI",""},
+ {"AL",""},
+ {"AM",""},
+ {"AN",""},
+ {"AO",""},
+ {"AQ",""},
+ {"AR",""},
+ {"AS",""},
+ {"AT",""},
+ {"AU",""},
+ {"AW",""},
+ {"AX",""},
+ {"AZ",""},
+ {"BA",""},
+ {"BB",""},
+ {"BD",""},
+ {"BE",""},
+ {"BF",""},
+ {"BG",""},
+ {"BH",""},
+ {"BI",""},
+ {"BJ",""},
+ {"BL",""},
+ {"BM",""},
+ {"BN",""},
+ {"BO",""},
+ {"BQ",""},
+ {"BR",""},
+ {"BS",""},
+ {"BT",""},
+ {"BV",""},
+ {"BW",""},
+ {"BY",""},
+ {"BZ",""},
+ {"CA",""},
+ {"CC",""},
+ {"CD",""},
+ {"CF",""},
+ {"CG",""},
+ {"CH",""},
+ {"CI",""},
+ {"CK",""},
+ {"CL",""},
+ {"CM",""},
+ {"CN",""},
+ {"CO",""},
+ {"CR",""},
+ {"CU",""},
+ {"CV",""},
+ {"CW",""},
+ {"CX",""},
+ {"CY",""},
+ {"CZ",""},
+ {"DE",""},
+ {"DJ",""},
+ {"DK",""},
+ {"DM",""},
+ {"DO",""},
+ {"DZ",""},
+ {"EC",""},
+ {"EE",""},
+ {"EG",""},
+ {"EH",""},
+ {"ER",""},
+ {"ES",""},
+ {"ET",""},
+ {"EU",""}, // remove?
+ {"FI",""},
+ {"FJ",""},
+ {"FK",""},
+ {"FM",""},
+ {"FO",""},
+ {"FR",""},
+ {"GA",""},
+ {"GB",""},
+ {"GD",""},
+ {"GE",""},
+ {"GF",""},
+ {"GG",""},
+ {"GH",""},
+ {"GI",""},
+ {"GL",""},
+ {"GM",""},
+ {"GN",""},
+ {"GP",""},
+ {"GQ",""},
+ {"GR",""},
+ {"GS",""},
+ {"GT",""},
+ {"GU",""},
+ {"GW",""},
+ {"GY",""},
+ {"HK",""},
+ {"HM",""},
+ {"HN",""},
+ {"HR",""},
+ {"HT",""},
+ {"HU",""},
+ {"IC",""},
+ {"ID",""},
+ {"IE",""},
+ {"IL",""},
+ {"IM",""},
+ {"IN",""},
+ {"IO",""},
+ {"IQ",""},
+ {"IR",""},
+ {"IS",""},
+ {"IT",""},
+ {"JE",""},
+ {"JM",""},
+ {"JO",""},
+ {"JP",""},
+ {"KE",""},
+ {"KG",""},
+ {"KH",""},
+ {"KI",""},
+ {"KM",""},
+ {"KN",""},
+ {"KP",""},
+ {"KR",""},
+ {"KW",""},
+ {"KY",""},
+ {"KZ",""},
+ {"LA",""},
+ {"LB",""},
+ {"LC",""},
+ {"LI",""},
+ {"LK",""},
+ {"LR",""},
+ {"LS",""},
+ {"LT",""},
+ {"LU",""},
+ {"LV",""},
+ {"LY",""},
+ {"MA",""},
+ {"MC",""},
+ {"MD",""},
+ {"ME",""},
+ {"MF",""},
+ {"MG",""},
+ {"MH",""},
+ {"MK",""},
+ {"ML",""},
+ {"MM",""},
+ {"MN",""},
+ {"MO",""},
+ {"MP",""},
+ {"MQ",""},
+ {"MR",""},
+ {"MS",""},
+ {"MT",""},
+ {"MU",""},
+ {"MV",""},
+ {"MW",""},
+ {"MX",""},
+ {"MY",""},
+ {"MZ",""},
+ {"NA",""},
+ {"NC",""},
+ {"NE",""},
+ {"NF",""},
+ {"NG",""},
+ {"NI",""},
+ {"NL",""},
+ {"NO",""},
+ {"NP",""},
+ {"NR",""},
+ {"NU",""},
+ {"NZ",""},
+ {"OM",""},
+ {"PA",""},
+ {"PE",""},
+ {"PF",""},
+ {"PG",""},
+ {"PH",""},
+ {"PK",""},
+ {"PL",""},
+ {"PM",""},
+ {"PN",""},
+ {"PR",""},
+ {"PS",""},
+ {"PT",""},
+ {"PW",""},
+ {"PY",""},
+ {"QA",""},
+ {"RE",""},
+ {"RO",""},
+ {"RS",""},
+ {"RU",""},
+ {"RW",""},
+ {"SA",""},
+ {"SB",""},
+ {"SC",""},
+ {"SD",""},
+ {"SE",""},
+ {"SG",""},
+ {"SH",""},
+ {"SI",""},
+ {"SJ",""},
+ {"SK",""},
+ {"SL",""},
+ {"SM",""},
+ {"SN",""},
+ {"SO",""},
+ {"SR",""},
+ {"SS",""},
+ {"ST",""},
+ {"SV",""},
+ {"SX",""},
+ {"SY",""},
+ {"SZ",""},
+ {"TC",""},
+ {"TD",""},
+ {"TF",""},
+ {"TG",""},
+ {"TH",""},
+ {"TJ",""},
+ {"TK",""},
+ {"TL",""},
+ {"TM",""},
+ {"TN",""},
+ {"TO",""},
+ {"TR",""},
+ {"TT",""},
+ {"TV",""},
+ {"TW",""},
+ {"TZ",""},
+ {"UA",""},
+ {"UG",""},
+ {"UM",""},
+ {"US",""},
+ {"UY",""},
+ {"UZ",""},
+ {"VA",""},
+ {"VC",""},
+ {"VE",""},
+ {"VG",""},
+ {"VI",""},
+ {"VN",""},
+ {"VU",""},
+ {"WF",""},
+ {"WS",""},
+ {"XK",""},
+ {"YE",""},
+ {"YT",""},
+ {"ZA",""},
+ {"ZM",""},
+ {"ZW",""},
};
-#define COUNTRY_CODE_COUNT (sizeof(global_langues)/sizeof(language)) \ No newline at end of file
+#define COUNTRY_CODE_COUNT (sizeof(global_langues)/sizeof(language))
+
+#endif \ No newline at end of file
diff --git a/src/mo_edit.c b/src/mo_edit.c
index abbad3f..3fff401 100644
--- a/src/mo_edit.c
+++ b/src/mo_edit.c
@@ -11,17 +11,31 @@
// TODO(Aldrik): option to disable menu item
// TODO(Aldrik): move the delete button for term to edit panel on the topright and put a exclamation mark at the old spot to indicate a missing translation
+// TODO(Aldrik): language name validation
+// TODO(Aldrik): language mo file name preview when entering name
+// TODO(Aldrik): option to mark languages with colors
+// TODO(Aldrik): change save icon
+
+s32 global_language_id = 1;
+
+#define MAX_LANGUAGE_COUNT 100
+
+typedef struct t_language
+{
+ char *name;
+ s32 id;
+} language;
typedef struct t_translation
{
- bool valid;
+ s32 language_id;
char *value;
} translation;
typedef struct t_term
{
char *name;
- translation translations[COUNTRY_CODE_COUNT];
+ array translations;
} term;
typedef struct t_translation_project
@@ -43,7 +57,8 @@ button_state btn_set_term_name;
dropdown_state dd_available_countries;
textbox_state tb_filter;
textbox_state tb_new_term;
-textbox_state tb_translation_list[COUNTRY_CODE_COUNT];
+textbox_state tb_new_language;
+textbox_state tb_translation_list[MAX_LANGUAGE_COUNT];
image *set_img;
image *add_img;
@@ -83,47 +98,33 @@ static void load_assets()
_binary____data_fonts_mono_ttf_end, 12);
}
-s32 get_available_country_index()
+bool term_has_missing_translations(term *t)
{
- s32 found_index = -1;
- for (s32 x = 0; x < COUNTRY_CODE_COUNT; x++)
+ for (s32 i = 0; i < t->translations.length; i++)
{
- bool found = false;
- for (s32 i = 0; i < current_project->languages.length; i++)
- {
- s32 ind = *(s32*)array_at(&current_project->languages, i);
- if (ind == x) found = true;
- }
-
- if (!found) found_index = x;
- }
-
- return found_index;
-}
-
-bool country_has_been_added_to_project(s32 index)
-{
- for (s32 i = 0; i < current_project->languages.length; i++)
- {
- s32 ind = *(s32*)array_at(&current_project->languages, i);
-
- if (index == ind) return true;
+ translation *tr = array_at(&t->translations, i);
+ if (!tr->value) return true;
}
return false;
}
-s32 get_translated_count_for_language(s32 index)
+s32 get_translated_count_for_language(s32 language_id)
{
s32 count = 0;
for (s32 i = 0; i < current_project->terms.length; i++)
{
term *t = array_at(&current_project->terms, i);
- translation *tr = &t->translations[index];
- if (tr->valid && tr->value)
+ for (s32 x = 0; x < t->translations.length; x++)
{
- count++;
+ translation *tr = array_at(&t->translations, x);
+
+ if (tr->language_id == language_id && tr->value)
+ {
+ count++;
+ break;
+ }
}
}
@@ -145,16 +146,46 @@ bool term_name_is_available(char *name)
return true;
}
-void add_country_to_project()
+language* get_language_by_id(s32 language_id)
{
- array_push(&current_project->languages, &dd_available_countries.selected_index);
+ for (s32 i = 0; i < current_project->languages.length; i++)
+ {
+ language *l = array_at(&current_project->languages, i);
+ if (l->id == language_id)
+ {
+ return l;
+ }
+ }
+ return 0;
+}
+
+void add_language_to_project(char *buffer)
+{
+ if (string_equals(buffer, ""))
+ {
+ // TODO(Aldrik): localize
+ platform_show_message(main_window, "Language name cannot be empty", "Invalid info");
+ return;
+ }
+
+ char *val = mem_alloc(MAX_INPUT_LENGTH);
+ string_copyn(val, buffer, MAX_INPUT_LENGTH);
+
+ language l;
+ l.name = val;
+ l.id = global_language_id++;
+
+ s32 index = array_push(&current_project->languages, &l);
for (s32 x = 0; x < current_project->terms.length; x++)
{
term *t = array_at(&current_project->terms, x);
- translation *tr = &t->translations[dd_available_countries.selected_index];
- tr->valid = true;
+ translation new_t;
+ new_t.value = 0;
+ new_t.language_id = l.id;
+
+ array_push(&t->translations, &new_t);
}
}
@@ -172,25 +203,45 @@ void set_term_name(s32 index, char *name)
}
}
-void remove_country_from_project(s32 index)
+void remove_term_from_project(s32 index)
+{
+ term *t = array_at(&current_project->terms, index);
+ mem_free(t->name);
+ for (s32 i = 0; i < t->translations.length; i++)
+ {
+ translation *tr = array_at(&t->translations, i);
+ mem_free(tr->value);
+ }
+ array_destroy(&t->translations);
+ array_remove_at(&current_project->terms, index);
+}
+
+void remove_language_from_project(s32 language_id)
{
for (s32 i = 0; i < current_project->languages.length; i++)
{
- s32 ind = *(s32*)array_at(&current_project->languages, i);
-
- if (ind == index)
+ language *l = array_at(&current_project->languages, i);
+ if (l->id == language_id)
+ {
array_remove_at(&current_project->languages, i);
+ break;
+ }
}
for (s32 x = 0; x < current_project->terms.length; x++)
{
term *tr = array_at(&current_project->terms, x);
- tr->translations[index].valid = false;
- if (tr->translations[index].value)
+ for (s32 i = 0; i < tr->translations.length; i++)
{
- mem_free(tr->translations[index].value);
- tr->translations[index].value = 0;
+ translation *t = array_at(&tr->translations, i);
+
+ if (t->language_id == language_id)
+ {
+ mem_free(t->value);
+ array_remove_at(&tr->translations, i);
+ break;
+ }
}
}
}
@@ -201,17 +252,19 @@ void select_term(s32 index)
term *t = array_at(&current_project->terms, index);
ui_set_textbox_text(&tb_new_term, t->name);
- for (s32 i = 0; i < COUNTRY_CODE_COUNT; i++)
+ for (s32 i = 0; i < current_project->languages.length; i++)
{
- textbox_state tb = tb_translation_list[i];
+ translation *tr = array_at(&t->translations, i);
+ textbox_state *tb = &tb_translation_list[i];
+ tb->state = false;
- if (t->translations[i].value)
+ if (tr->value)
{
- string_copyn(tb.buffer, t->translations[i].value, MAX_INPUT_LENGTH);
+ ui_set_textbox_text(tb, tr->value);
}
else
{
- string_copyn(tb.buffer, "", MAX_INPUT_LENGTH);
+ ui_set_textbox_text(tb, "");
}
}
}
@@ -234,19 +287,17 @@ s32 add_term_to_project()
}
while(!term_name_is_available(t.name));
- for (s32 x = 0; x < COUNTRY_CODE_COUNT; x++)
- {
- translation tr;
- tr.value = 0;
- tr.valid = false;
- t.translations[x] = tr;
- }
+ t.translations = array_create(sizeof(translation));
+ array_reserve(&t.translations, current_project->languages.length);
for (s32 i = 0; i < current_project->languages.length; i++)
{
- s32 index = *(s32*)array_at(&current_project->languages, i);
- translation *tr = &t.translations[index];
- tr->valid = true;
+ language *l = array_at(&current_project->languages, i);
+
+ translation tr;
+ tr.value = 0;
+ tr.language_id = l->id;
+ array_push(&t.translations, &tr);
}
return array_push(&current_project->terms, &t);
@@ -258,18 +309,19 @@ void save_term_changes()
term *t = array_at(&current_project->terms, current_project->selected_term_index);
- for (s32 x = 0; x < COUNTRY_CODE_COUNT; x++)
+ for (s32 i = 0; i < current_project->languages.length; i++)
{
- textbox_state *tb = &tb_translation_list[x];
+ translation *tr = array_at(&t->translations, i);
+ textbox_state *tb = &tb_translation_list[i];
- if (t->translations[x].valid && strlen(tb->buffer))
+ if (strlen(tb->buffer) || tr->value)
{
- if (!t->translations[x].value)
+ if (!tr->value)
{
- t->translations[x].value = mem_alloc(MAX_INPUT_LENGTH);
+ tr->value = mem_alloc(MAX_INPUT_LENGTH);
}
- string_copyn(t->translations[x].value, tb->buffer, MAX_INPUT_LENGTH);
+ string_copyn(tr->value, tb->buffer, MAX_INPUT_LENGTH);
}
}
}
@@ -282,7 +334,7 @@ void start_new_project()
array_reserve(&current_project->terms, 100);
current_project->terms.reserve_jump = 100;
- current_project->languages = array_create(sizeof(s32));
+ current_project->languages = array_create(sizeof(language));
array_reserve(&current_project->languages, 100);
current_project->languages.reserve_jump = 100;
@@ -320,7 +372,7 @@ int main(int argc, char **argv)
s32 window_w = settings_config_get_number(&config, "WINDOW_WIDTH");
s32 window_h = settings_config_get_number(&config, "WINDOW_HEIGHT");
- if (window_w <= 800 || window_h <= 600)
+ if (window_w < 800 || window_h < 600)
{
window_w = 800;
window_h = 600;
@@ -345,7 +397,6 @@ int main(int argc, char **argv)
camera.rotation = 0;
ui_create(&window, &keyboard, &mouse, &camera, font_small);
- dd_available_countries = ui_create_dropdown();
term_scroll = ui_create_scroll(1);
lang_scroll = ui_create_scroll(1);
trans_scroll = ui_create_scroll(1);
@@ -355,8 +406,9 @@ int main(int argc, char **argv)
btn_new_language = ui_create_button();
tb_filter = ui_create_textbox(MAX_INPUT_LENGTH);
tb_new_term = ui_create_textbox(MAX_TERM_NAME_LENGTH);
+ tb_new_language = ui_create_textbox(MAX_INPUT_LENGTH);
- for (s32 i = 0; i < COUNTRY_CODE_COUNT; i++)
+ for (s32 i = 0; i < MAX_LANGUAGE_COUNT; i++)
tb_translation_list[i] = ui_create_textbox(MAX_INPUT_LENGTH);
// asset worker
@@ -477,13 +529,22 @@ int main(int argc, char **argv)
if (!strlen(tb_filter.buffer) || string_contains(t->name, tb_filter.buffer))
{
- ui_push_button_image(&btn_summary, "", delete_img);
+ bool removed = false;
+ if (ui_push_button_image(&btn_summary, "", delete_img))
+ {
+ removed = true;
+ }
+
//ui_push_image(exclaim_img, 14, 14, 1, rgb(255,255,255));
if (i == current_project->selected_term_index)
{
ui_push_rect(10, global_ui_context.style.textbox_active_border);
}
+ else if (term_has_missing_translations(t))
+ {
+ ui_push_rect(10, MISSING_TRANSLATION_COLOR);
+ }
else
{
ui_push_rect(10, global_ui_context.style.background);
@@ -495,6 +556,15 @@ int main(int argc, char **argv)
}
ui_block_end();
+
+ if (removed)
+ {
+ remove_term_from_project(i);
+ --i;
+
+ if (current_project->selected_term_index >= 0)
+ current_project->selected_term_index--;
+ }
}
}
}
@@ -552,39 +622,38 @@ int main(int argc, char **argv)
{
if (!current_project->languages.length)
{
+ // TODO(Aldrik): localize
ui_push_text("No languages added to project yet.");
}
else
{
- for (s32 i = 0; i < COUNTRY_CODE_COUNT; i++)
+ for (s32 i = 0; i < t->translations.length; i++)
{
- translation *tr = &t->translations[i];
+ translation *tr = array_at(&t->translations, i);
+
+ TEXTBOX_WIDTH = global_ui_context.layout.width - 130;
- if (tr->valid)
+ if (!tr->value && !strlen(tb_translation_list[i].buffer))
{
- TEXTBOX_WIDTH = global_ui_context.layout.width - 130;
-
- if (!tr->value && !strlen(tb_translation_list[i].buffer))
- {
- ui_push_rect(10, MISSING_TRANSLATION_COLOR);
- }
- else if (tr->value && string_equals(tb_translation_list[i].buffer,
- tr->value))
- {
- ui_push_rect(10, global_ui_context.style.background);
- }
- else
- {
- ui_push_rect(10, UNSAVED_CHANGES_COLOR);
- }
-
- ui_push_textbox(&tb_translation_list[i], "");
- ui_push_image(list_img, TEXTBOX_HEIGHT,TEXTBOX_HEIGHT,1,rgb(255,255,255));
- ui_push_text_width(global_langues[i].code, 25, false);
-
- global_ui_context.layout.offset_y += TEXTBOX_HEIGHT + WIDGET_PADDING;
- global_ui_context.layout.offset_x = 310;
+ ui_push_rect(10, MISSING_TRANSLATION_COLOR);
}
+ else if (tr->value && string_equals(tb_translation_list[i].buffer,
+ tr->value))
+ {
+ ui_push_rect(10, global_ui_context.style.background);
+ }
+ else
+ {
+ ui_push_rect(10, UNSAVED_CHANGES_COLOR);
+ }
+
+ ui_push_textbox(&tb_translation_list[i], "");
+
+ language *l = get_language_by_id(tr->language_id);
+ ui_push_text(l->name);
+
+ global_ui_context.layout.offset_y += TEXTBOX_HEIGHT + WIDGET_PADDING;
+ global_ui_context.layout.offset_x = 310;
}
}
}
@@ -596,7 +665,7 @@ int main(int argc, char **argv)
ui_block_begin(LAYOUT_HORIZONTAL);
{
// TODO(Aldrik): translate
- ui_push_textf_width(font_medium, "Overview", 200);
+ ui_push_textf_width(font_medium, "Overview", 100);
char info_text[60];
sprintf(info_text, "%d terms, %d languages", current_project->terms.length, current_project->languages.length);
@@ -612,31 +681,24 @@ int main(int argc, char **argv)
ui_block_begin(LAYOUT_HORIZONTAL);
{
- s32 av_index = get_available_country_index();
+ // TODO(Aldrik): translate
+ ui_push_textbox(&tb_new_language, "Add language");
- if (dd_available_countries.selected_index == -1 && av_index >= 0)
- dd_available_countries.selected_index = av_index;
+ if (keyboard_is_key_pressed(&keyboard, KEY_ENTER))
+ {
+ add_language_to_project(tb_new_language.buffer);
+ ui_set_textbox_text(&tb_new_language, "");
+ keyboard_set_input_text(&keyboard, "");
+ tb_new_language.state = true;
+ }
- if (dd_available_countries.selected_index >= 0)
+ // TODO(Aldrik): translate
+ if (ui_push_button(&btn_new_language, "Add"))
{
- if (ui_push_dropdown(&dd_available_countries,
- global_langues[dd_available_countries.selected_index].fullname))
- {
- for (s32 i = 0; i < COUNTRY_CODE_COUNT; i++)
- {
- if (!country_has_been_added_to_project(i))
- {
- ui_push_dropdown_item(0, global_langues[i].fullname, i);
- }
- }
- }
-
- // TODO(Aldrik): translate
- if (ui_push_button(&btn_new_language, "Add"))
- {
- add_country_to_project();
- dd_available_countries.selected_index = -1;
- }
+ add_language_to_project(tb_new_language.buffer);
+ ui_set_textbox_text(&tb_new_language, "");
+ keyboard_set_input_text(&keyboard, "");
+ tb_new_language.state = true;
}
}
ui_block_end();
@@ -658,21 +720,21 @@ int main(int argc, char **argv)
pressed = true;
}
- s32 index = *(s32*)array_at(&current_project->languages, i);
- ui_push_text_width(global_langues[index].fullname, global_ui_context.layout.width-200, false);
+ language *l = array_at(&current_project->languages, i);
+ ui_push_text_width(l->name, global_ui_context.layout.width-200, false);
color c = global_ui_context.style.foreground;
global_ui_context.style.foreground = rgb(110,110,110);
char stats[50];
- sprintf(stats, "%d/%d translated", get_translated_count_for_language(index), current_project->terms.length);
+ sprintf(stats, "%d/%d translated", get_translated_count_for_language(l->id), current_project->terms.length);
ui_push_text(stats);
global_ui_context.style.foreground = c;
if (pressed)
{
- remove_country_from_project(index);
+ remove_language_from_project(l->id);
i--;
}
@@ -683,7 +745,15 @@ int main(int argc, char **argv)
}
else
{
- // show no project loaded message/image
+ render_text(font_medium, 330, 50, "Create a new project", global_ui_context.style.foreground);
+ render_text_cutoff(font_small, 330, 70,
+ "There is no project loaded yet, you can start a\nnew translation project on the left.", global_ui_context.style.foreground, 400);
+
+ render_rectangle(330, 200, 10, 25, UNSAVED_CHANGES_COLOR);
+ render_text(font_small, 350, 208, "Unsaved changes", global_ui_context.style.foreground);
+
+ render_rectangle(330, 240, 10, 25, MISSING_TRANSLATION_COLOR);
+ render_text(font_small, 350, 248, "Missing translation", global_ui_context.style.foreground);
}
}
ui_end();
@@ -721,6 +791,7 @@ int main(int argc, char **argv)
settings_config_set_string(&config, "LOCALE", current_locale_id);
}
}
+ printf("%s\n", config_path_buffer);
settings_config_write_to_file(&config, config_path_buffer);
settings_config_destroy(&config);
diff --git a/src/platform.h b/src/platform.h
index d256c5f..b9f242c 100644
--- a/src/platform.h
+++ b/src/platform.h
@@ -195,6 +195,7 @@ void platform_destroy();
void platform_set_icon(platform_window *window, image *img);
void platform_autocomplete_path(char *buffer, bool want_dir);
bool platform_directory_exists(char *path);
+void platform_create_directory(char *path);
bool platform_file_exists(char *path);
void platform_show_alert(char *title, char *message);
char *get_config_save_location(char *buffer);
diff --git a/src/project_base.h b/src/project_base.h
index 0563934..6bfa7e1 100644
--- a/src/project_base.h
+++ b/src/project_base.h
@@ -24,7 +24,6 @@
#include "stdint.h"
#include "string.h"
-#include "assert.h"
#include <GL/gl.h>
#ifdef OS_LINUX