]> git.deb.at Git - pkg/abook.git/blobdiff - edit.c
*** empty log message ***
[pkg/abook.git] / edit.c
diff --git a/edit.c b/edit.c
index 4502e106191571b1a1cd3d5946d2a11b371cb967..c4f17afbdc41336b202336e3968a6aeaae22319a 100644 (file)
--- a/edit.c
+++ b/edit.c
@@ -14,6 +14,7 @@
 #include "ui.h"
 #include "abook.h"
 #include "database.h"
+#include "gettext.h"
 #include "list.h"
 #include "edit.h"
 #include "misc.h"
@@ -37,33 +38,45 @@ WINDOW *editw;
 static void
 editor_tab(const int tab)
 {
-       int i;
-       const int spacing = 12;
+       int i, j;
+       int x_pos = 2; /* current x pos */
        static char *tab_names[] = {
-               "CONTACT",
-               "ADDRESS",
-               " PHONE ",
-               " OTHER ",
-               "CUSTOM "
+               N_("CONTACT"),
+               N_("ADDRESS"),
+               N_(" PHONE "),
+               N_(" OTHER "),
+               N_("CUSTOM ")
        };
 
        mvwhline(editw, TABLINE + 1, 0, UI_HLINE_CHAR, EDITW_COLS);
-       for(i = 0; i < TABS; i++) {
-               mvwaddch(editw,  TABLINE+1, spacing * i + 2,  UI_TEE_CHAR);
-               mvwaddch(editw,  TABLINE+1, spacing * i + 12, UI_TEE_CHAR);
-       }
 
        for(i = 0; i < TABS; i++) {
-               mvwaddch(editw,  TABLINE, spacing * i + 2,  UI_ULCORNER_CHAR);
-               mvwaddch(editw,  TABLINE, spacing * i + 3,  UI_LBOXLINE_CHAR);
-               mvwaddstr(editw, TABLINE, spacing * i + 4,  tab_names[i]);
-               mvwaddch(editw,  TABLINE, spacing * i + 11, UI_RBOXLINE_CHAR);
-               mvwaddch(editw,  TABLINE, spacing * i + 12, UI_URCORNER_CHAR);
-       }
+               int width = strwidth(gettext(tab_names[i])) + 5;
 
-       mvwaddch(editw,  TABLINE+1, spacing * tab + 2, UI_LRCORNER_CHAR);
-       mvwaddstr(editw, TABLINE+1, spacing * tab + 3, "         ");
-       mvwaddch(editw,  TABLINE+1, spacing * tab + 12, UI_LLCORNER_CHAR);
+               if(x_pos + width + 1 > EDITW_COLS) {
+                       statusline_msg(_("Tab name too wide for screen"));
+                       break;
+               }
+
+               mvwaddch(editw,  TABLINE + 1, x_pos,  UI_TEE_CHAR);
+               mvwaddch(editw,  TABLINE + 1, x_pos + width - 2, UI_TEE_CHAR);
+
+               mvwaddch(editw,  TABLINE, x_pos,  UI_ULCORNER_CHAR);
+               mvwaddch(editw,  TABLINE, x_pos + 1,  UI_LBOXLINE_CHAR);
+               mvwaddstr(editw, TABLINE, x_pos + 2,  gettext(tab_names[i]));
+               mvwaddch(editw,  TABLINE, x_pos + width - 3, UI_RBOXLINE_CHAR);
+               mvwaddch(editw,  TABLINE, x_pos + width - 2, UI_URCORNER_CHAR);
+
+               if(i == tab) {
+                       mvwaddch(editw,  TABLINE + 1, x_pos, UI_LRCORNER_CHAR);
+                       for(j = 0; j < width - 3; j++)
+                               mvwaddstr(editw,
+                                       TABLINE + 1, x_pos + j + 1, " ");
+                       mvwaddch(editw,  TABLINE + 1, x_pos + width - 2,
+                               UI_LLCORNER_CHAR);
+               }
+               x_pos += width;
+       }
 }
 
 void
@@ -78,7 +91,7 @@ get_first_email(char *str, int item)
 
        strncpy(str, database[item][EMAIL], MAX_EMAIL_LEN);
        if( (tmp = strchr(str, ',')) )
-               *tmp=0;
+               *tmp = 0;
        else
                str[MAX_EMAIL_LEN-1] = 0;
 }
@@ -94,7 +107,7 @@ roll_emails(int item)
        if( !(p = strchr(tmp, ',')) )
                return;
        else
-               *p=0;
+               *p = 0;
 
        strcpy(database[item][EMAIL], p+1);
        strcat(database[item][EMAIL], ",");
@@ -136,7 +149,11 @@ edit_undo(int item, int mode)
                        }
                        backup = xmalloc(sizeof(list_item));
                        for(i = 0; i < ITEM_FIELDS; i++)
-                               backup[0][i] = safe_strdup(database[item][i]);
+                               if(database[item][i] == NULL)
+                                       backup[0][i] = NULL;
+                               else
+                                       backup[0][i] =
+                                               xstrdup(database[item][i]);
                        break;
                case RESTORE_ITEM:
                        if(backup) {
@@ -199,7 +216,7 @@ editor_print_data(int tab, int item)
                        split_emailstr(item, emails);
                        getyx(editw, y, x);
                        mvwaddstr(editw, y+1, FIELDS_START_X,
-                                       "E-mail addresses:");
+                                       _("E-mail addresses:"));
                        for(k = 0; k < MAX_EMAILS; k++) {
                                getyx(editw, y, x);
                                mvwprintw(editw, y+1, FIELDS_START_X,
@@ -218,7 +235,7 @@ editor_print_data(int tab, int item)
 
                mvwprintw(editw, y, FIELDS_START_X, "%d - %s",
                                j,
-                               abook_fields[i].name);
+                               gettext(abook_fields[i].name));
                mvwaddch(editw, y, TAB_COLON_POS, ':');
                mvwaddstr(editw, y, TAB_COLON_POS + 2,
                                safe_str(database[item][i]));
@@ -276,12 +293,12 @@ change_name_field(char **field)
 {
        char *tmp;
 
-       tmp = strdup(*field);
+       tmp = xstrdup(*field);
        change_field("Name: ", field);
 
        if(*field == NULL || ! **field) {
                xfree(*field);
-               *field = strdup(tmp);
+               *field = xstrdup(tmp);
        }
 
        xfree(tmp);
@@ -304,7 +321,7 @@ edit_emails(char c, int item)
        int email_num = c - '2';
 
        split_emailstr(item, emails);
-       field = strdup(emails[email_num]);
+       field = xstrdup(emails[email_num]);
 
        if(change_field("E-mail: ", &field))
                return; /* user cancelled ( C-g ) */
@@ -328,7 +345,7 @@ edit_emails(char c, int item)
        if(tmp[len -1] == ',')
                tmp[len-1] =0;
 
-       database[item][EMAIL] = strdup(tmp);
+       database[item][EMAIL] = xstrdup(tmp);
 }
 
 static int
@@ -366,7 +383,7 @@ edit_field(int tab, char c, int item)
        if(j != n)
                return 0;
 
-       str = mkstr("%s: ", abook_fields[i].name);
+       str = strdup_printf("%s: ", gettext(abook_fields[i].name));
        change_field(str, &database[item][i]);
 
        free(str);
@@ -381,7 +398,7 @@ edit_loop(int item)
        int c;
 
        werase(editw);
-       headerline(EDITOR_HELPLINE);
+       headerline(gettext(EDITOR_HELPLINE));
        refresh_statusline();
        print_editor_header(item);
        editor_tab(tab);