poe

Уређивач .po фајлова
Дневник | Датотеке | Референце | ПРОЧИТАЈМЕ | ЛИЦЕНЦА

чување d3c9fb339022d498a4111db601432b52e978e650
родитељ b39e5e9e8e2aefcb6118893e8cda089c01b2e6c0
Аутор: Страхиња Радић <contact@strahinja.org>
Датум:   Fri,  9 Jul 2021 14:57:10 +0200

Continued work on search; corrected a bug in u32_draw_string

Signed-off-by: Страхиња Радић <contact@strahinja.org>

Diffstat:
Mdraw.c | 41+++++++++++++++++++++--------------------
Mdraw.h | 10+++++-----
Mpoe.c | 130+++++++++++++++++++++++++++++++++++++++++--------------------------------------
измењених датотека: 3, додавања: 93(+), брисања: 88(-)

diff --git a/draw.c b/draw.c @@ -96,9 +96,9 @@ init_drawstate(struct DrawState* state, char* error, char* filename, state->info_first_shown_column = 0; state->info_first_shown_row = 0; state->info_rows_count = 0; - state->search_input_column = 0; - state->search_input_first_shown_column = 0; - state->search_input_display_column = 0; + state->search_column = 0; + state->search_first_shown_column = 0; + state->search_display_column = 0; state->prompt = prompt; state->prompt_callback = NULL; state->running = 1; @@ -397,7 +397,7 @@ u32_draw_string(const int x, const int y, const uint16_t fg, const uint16_t bg, j++) tb_change_cell(x+d+p_l+sc+j, y, ' ', fg, bg); - sc += (ts - (ssc % ts)); + sc += ssc+(ts - (ssc % ts))-ds; } /* else, just increase counter * @@ -508,14 +508,13 @@ draw_editbox(const struct DrawState* state) return NULL; int startx, endx, starty, endy; - int w = EDIT_WIDTH; - int h = EDIT_HEIGHT; - int maxx = state->maxx; - int maxy = state->maxy; - //uint32_t buf[MSGSTR_MAX]; + int w = EDIT_WIDTH; + int h = EDIT_HEIGHT; + int maxx = state->maxx; + int maxy = state->maxy; char flags_buf[MAXFLAGSBUF+4]; - struct PoEntry* entry = &state->entries[state->msgid_number-1]; - size_t dlen = 0; + struct PoEntry* entry = &state->entries[state->msgid_number-1]; + size_t dlen = 0; strcpy(flags_buf, "[ "); format_flags(flags_buf+2, MAXFLAGSBUF, entry); @@ -625,11 +624,12 @@ const struct DrawState* draw_search(const struct DrawState* state) { int startx, endx, starty, endy; - int w = SEARCH_WIDTH; - int h = SEARCH_HEIGHT; - int maxx = state->maxx; - int maxy = state->maxy; - size_t len = u32_strlen(state->search); + int w = SEARCH_WIDTH; + int h = SEARCH_HEIGHT; + int maxx = state->maxx; + int maxy = state->maxy; + size_t len = u32_strlen(state->search); + size_t dlen = 0; startx = w > maxx ? 0 : (maxx - w) / 2; endx = w > maxx ? maxx-1 : maxx-startx; @@ -640,13 +640,14 @@ draw_search(const struct DrawState* state) draw_box(startx, endx, starty, endy, SEARCH_FG, SEARCH_BG); draw_rect(startx+1, endx-1, starty+1, endy-2, SEARCH_EDIT_FG, SEARCH_EDIT_BG); - if (len > state->search_input_first_shown_column) + dlen = display_length(state, state->search, len); + if (dlen > state->search_first_shown_column) u32_draw_string(startx+1, starty+1, SEARCH_EDIT_FG, SEARCH_EDIT_BG, state->search, - w-3, w-3, 0, 0, LEFT, state->input_first_shown_column, + w-2, w-2, 1, 1, LEFT, state->search_first_shown_column, 1); - tb_set_cursor(startx+1+state->search_input_display_column - - state->search_input_first_shown_column, + tb_set_cursor(startx+2+state->search_display_column - + state->search_first_shown_column, starty+1); return state; } diff --git a/draw.h b/draw.h @@ -14,10 +14,10 @@ #define EDIT_HEIGHT 20 #define HELP_WIDTH 50 #define HELP_HEIGHT 21 -#define SEARCH_WIDTH 15 +#define SEARCH_WIDTH 20 #define SEARCH_HEIGHT 4 #define TAB_SIZE 8 -#define MAXSEARCH (255+1) +#define MAXSEARCH (512+1) typedef enum { LEFT, @@ -51,9 +51,9 @@ struct DrawState { int info_first_shown_row; int info_rows_count; int info_rows_maxlen; - int search_input_column; - int search_input_first_shown_column; - int search_input_display_column; + int search_column; + int search_first_shown_column; + int search_display_column; struct PoEntry* entries; void (*prompt_callback)(struct DrawState*, struct tb_event*); int running; diff --git a/poe.c b/poe.c @@ -451,9 +451,9 @@ void show_search(struct DrawState* state) { state->show_search = 1; - state->search_input_column = 0; - state->search_input_display_column = 0; - state->search_input_first_shown_column = 0; + state->search_column = 0; + state->search_display_column = 0; + state->search_first_shown_column = 0; if (!state->search) state->search = calloc(MAXSEARCH, sizeof(uint32_t)); state->search[0] = 0; @@ -479,98 +479,102 @@ cancel_search(struct DrawState* state) void move_search_start(struct DrawState* state) { - state->search_input_column = 0; - state->search_input_display_column = 0; - state->search_input_first_shown_column = 0; + state->search_column = 0; + state->search_display_column = 0; + state->search_first_shown_column = 0; } void move_search_left(struct DrawState* state) { - if (state->search_input_column == 0) + if (state->search_column == 0) return; - if (state->search[state->search_input_column-1] == '\t') - state->search_input_display_column = display_length(state, - state->search, state->search_input_column-1); + if (state->search[state->search_column-1] == '\t') + state->search_display_column = display_length(state, + state->search, state->search_column-1); else - state->search_input_display_column--; - state->search_input_column--; + state->search_display_column--; + state->search_column--; - if (state->search_input_display_column < - state->search_input_first_shown_column) - state->search_input_first_shown_column = - state->search_input_display_column; + if (state->search_display_column < + state->search_first_shown_column) + state->search_first_shown_column = + state->search_display_column; } void move_search_right(struct DrawState* state) { size_t len = u32_strlen(state->search); - if (state->search_input_column == len) + if (state->search_column == len) return; - if (state->search[state->search_input_column] == '\t') - state->search_input_display_column = display_length(state, - state->search, state->search_input_column+1); + if (state->search[state->search_column] == '\t') + state->search_display_column = display_length(state, + state->search, state->search_column+1); else - state->search_input_display_column++; - state->search_input_column++; + state->search_display_column++; + state->search_column++; - if (state->search_input_display_column - - state->search_input_first_shown_column > SEARCH_WIDTH-3) - state->search_input_first_shown_column = - state->search_input_display_column - SEARCH_WIDTH+3; + if (state->search_display_column - + state->search_first_shown_column > SEARCH_WIDTH-4) + state->search_first_shown_column = + state->search_display_column - SEARCH_WIDTH+4; } void move_search_end(struct DrawState* state) { size_t len = u32_strlen(state->search); - state->search_input_column = len; - size_t dlen = display_length(state, state->search, - state->search_input_column); - state->search_input_display_column = dlen; - if (dlen > SEARCH_WIDTH-3) - state->search_input_first_shown_column = dlen - SEARCH_WIDTH+3; + state->search_column = len; + size_t dlen = display_length(state, state->search, state->search_column); + state->search_display_column = dlen; + if (dlen > SEARCH_WIDTH-4) + state->search_first_shown_column = dlen - SEARCH_WIDTH+4; else - state->search_input_first_shown_column = 0; + state->search_first_shown_column = 0; } void insert_search_char(struct DrawState* state, uint32_t ch) { size_t len = u32_strlen(state->search); - if (state->search_input_column < MAXSEARCH-1) + if (state->search_column < MAXSEARCH-1) { size_t i = len; - int add_null = state->search[state->search_input_column] == 0; - while (i < MAXSEARCH-2 && i > state->search_input_column) + int add_null = state->search[state->search_column] == 0; + while (i < MAXSEARCH-2 && i > state->search_column) { state->search[i] = state->search[i-1]; i--; } - state->search[state->search_input_column++] = ch; - if (state->search_input_column == MAXSEARCH) - state->search_input_column = MAXSEARCH-1; - state->search_input_display_column = display_length(state, + state->search[state->search_column++] = ch; + if (state->search_column == MAXSEARCH) + state->search_column = MAXSEARCH-1; + state->search_display_column = display_length(state, state->search, - state->search_input_column); + state->search_column); + if (state->search_display_column - + state->search_first_shown_column > + SEARCH_WIDTH-4) + { + state->search_first_shown_column = + state->search_display_column - SEARCH_WIDTH+4; + state->search_display_column = display_length(state, + state->search, state->search_column); + } if (add_null) - state->search[state->search_input_column] = 0; + state->search[state->search_column] = 0; } - if (state->search_input_display_column - - state->search_input_first_shown_column > SEARCH_WIDTH-3) - state->search_input_first_shown_column = - state->search_input_display_column - SEARCH_WIDTH+3; } void erase_search_backwards(struct DrawState* state) { - if (state->search_input_column > 0) + if (state->search_column > 0) { - size_t i = state->search_input_column; + size_t i = state->search_column; do { state->search[i-1] = state->search[i]; @@ -578,29 +582,29 @@ erase_search_backwards(struct DrawState* state) } while (state->search[i]); state->search[i-1] = 0; - state->search_input_column--; - if (state->search_input_column < - state->search_input_first_shown_column) + state->search_column--; + if (state->search_column < + state->search_first_shown_column) { - if (state->search_input_column > SEARCH_WIDTH-4) - state->search_input_first_shown_column = - state->search_input_column + if (state->search_column > SEARCH_WIDTH-4) + state->search_first_shown_column = + state->search_column - SEARCH_WIDTH+4; else - state->search_input_first_shown_column = 0; + state->search_first_shown_column = 0; } - state->search_input_display_column = display_length(state, + state->search_display_column = display_length(state, state->search, - state->search_input_column); + state->search_column); } } void erase_search_forward(struct DrawState* state) { - if (state->search[state->search_input_column]) + if (state->search[state->search_column]) { - size_t i = state->search_input_column; + size_t i = state->search_column; while (i < MAXSEARCH-2 && state->search[i+1]) { state->search[i] = state->search[i+1]; @@ -613,22 +617,22 @@ erase_search_forward(struct DrawState* state) void erase_search_to_start(struct DrawState* state) { - size_t i = state->search_input_column; + size_t i = state->search_column; size_t len = u32_strlen(state->search); do { - state->search[i-state->search_input_column] = state->search[i]; + state->search[i-state->search_column] = state->search[i]; i++; } while (state->search[i]); - state->search[len-state->search_input_column] = 0; + state->search[len-state->search_column] = 0; move_search_start(state); } void erase_search_to_end(struct DrawState* state) { - state->search[state->search_input_column] = 0; + state->search[state->search_column] = 0; move_search_end(state); }