ui: file list: fixes navigation (up/down/pup, pdown)
This commit is contained in:
+1
-1
@@ -136,7 +136,7 @@ int upload_confirm_cb(w_app_t *app, char *query, int q_len) {
|
|||||||
clear_file_in_query(app->query_args);
|
clear_file_in_query(app->query_args);
|
||||||
app->query_args->state = S_FILE_LIST;
|
app->query_args->state = S_FILE_LIST;
|
||||||
app->modal.needs_destroy = true;
|
app->modal.needs_destroy = true;
|
||||||
w_fl_rest(fui);
|
w_fl_reset(fui);
|
||||||
server_send_string(app->query_args, "file list %u %u\n", fui->max_lines, 1);
|
server_send_string(app->query_args, "file list %u %u\n", fui->max_lines, 1);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|||||||
+21
-15
@@ -16,7 +16,7 @@
|
|||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
|
||||||
void w_fl_rest(w_ui_file_list_t *fl_ui);
|
void w_fl_reset(w_ui_file_list_t *fl_ui);
|
||||||
|
|
||||||
void w_fl_cb(w_cb_args_t *args) {
|
void w_fl_cb(w_cb_args_t *args) {
|
||||||
w_app_t *app = args->app;
|
w_app_t *app = args->app;
|
||||||
@@ -45,7 +45,7 @@ void w_fl_cb(w_cb_args_t *args) {
|
|||||||
}
|
}
|
||||||
server_send_string(app->query_args, "%s %u %u\n", q_prefix,
|
server_send_string(app->query_args, "%s %u %u\n", q_prefix,
|
||||||
fui->max_lines, 1);
|
fui->max_lines, 1);
|
||||||
w_fl_rest(fui);
|
w_fl_reset(fui);
|
||||||
} else {
|
} else {
|
||||||
bconchar(fui->search_key, key);
|
bconchar(fui->search_key, key);
|
||||||
w_fl_draw(fui);
|
w_fl_draw(fui);
|
||||||
@@ -57,43 +57,48 @@ void w_fl_cb(w_cb_args_t *args) {
|
|||||||
case KEY_DOWN:
|
case KEY_DOWN:
|
||||||
if (fui->current_idx < fui->current_count - 1) {
|
if (fui->current_idx < fui->current_count - 1) {
|
||||||
fui->current_idx++;
|
fui->current_idx++;
|
||||||
w_fl_draw(fui);
|
|
||||||
} else if (fui->current_page < fui->pages) {
|
} else if (fui->current_page < fui->pages) {
|
||||||
app->query_args->state = S_FILE_LIST;
|
app->query_args->state = S_FILE_LIST;
|
||||||
server_send_string(app->query_args, "%s %u %u\n", q_prefix,
|
server_send_string(app->query_args, "%s %u %u\n", q_prefix,
|
||||||
fui->max_lines, fui->current_page + 1);
|
fui->max_lines, fui->current_page + 1);
|
||||||
w_fl_rest(fui);
|
w_fl_reset(fui);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
w_fl_draw(fui);
|
||||||
break;
|
break;
|
||||||
case KEY_UP:
|
case KEY_UP:
|
||||||
if (fui->current_idx > 0) {
|
if (fui->current_idx > 0) {
|
||||||
fui->current_idx--;
|
fui->current_idx--;
|
||||||
w_fl_draw(fui);
|
|
||||||
} else if (fui->current_page > 1) {
|
} else if (fui->current_page > 1) {
|
||||||
app->query_args->state = S_FILE_LIST;
|
app->query_args->state = S_FILE_LIST;
|
||||||
server_send_string(app->query_args, "%s %u %u\n", q_prefix,
|
server_send_string(app->query_args, "%s %u %u\n", q_prefix,
|
||||||
fui->max_lines, fui->current_page - 1);
|
fui->max_lines, fui->current_page - 1);
|
||||||
w_fl_rest(fui);
|
w_fl_reset(fui);
|
||||||
fui->activate_last = true;
|
fui->activate_last = true;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
w_fl_draw(fui);
|
||||||
break;
|
break;
|
||||||
case KEY_NPAGE:
|
case KEY_NPAGE:
|
||||||
if (fui->current_page < fui->pages) {
|
if (fui->current_page < fui->pages) {
|
||||||
app->query_args->state = S_FILE_LIST;
|
app->query_args->state = S_FILE_LIST;
|
||||||
server_send_string(app->query_args, "%s %u %u\n", q_prefix,
|
server_send_string(app->query_args, "%s %u %u\n", q_prefix,
|
||||||
fui->max_lines, fui->current_page + 1);
|
fui->max_lines, fui->current_page + 1);
|
||||||
w_fl_rest(fui);
|
w_fl_reset(fui);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
w_fl_draw(fui);
|
||||||
break;
|
break;
|
||||||
case KEY_PPAGE:
|
case KEY_PPAGE:
|
||||||
if (fui->current_page > 1) {
|
if (fui->current_page > 1) {
|
||||||
app->query_args->state = S_FILE_LIST;
|
app->query_args->state = S_FILE_LIST;
|
||||||
server_send_string(app->query_args, "%s %u %u\n", q_prefix,
|
server_send_string(app->query_args, "%s %u %u\n", q_prefix,
|
||||||
fui->max_lines, fui->current_page - 1);
|
fui->max_lines, fui->current_page - 1);
|
||||||
w_fl_rest(fui);
|
w_fl_reset(fui);
|
||||||
fui->activate_last = true;
|
fui->activate_last = true;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
break;
|
w_fl_draw(fui);
|
||||||
break;
|
break;
|
||||||
case '\33':
|
case '\33':
|
||||||
fui->active_search = false;
|
fui->active_search = false;
|
||||||
@@ -103,7 +108,7 @@ void w_fl_cb(w_cb_args_t *args) {
|
|||||||
app->query_args->state = S_FILE_LIST;
|
app->query_args->state = S_FILE_LIST;
|
||||||
server_send_string(app->query_args, "%s %u %u\n", q_prefix, fui->max_lines,
|
server_send_string(app->query_args, "%s %u %u\n", q_prefix, fui->max_lines,
|
||||||
1);
|
1);
|
||||||
w_fl_rest(fui);
|
w_fl_reset(fui);
|
||||||
case '\n':
|
case '\n':
|
||||||
ui_file_select(app->file_args, app->query_args, fui->current_idx + 1);
|
ui_file_select(app->file_args, app->query_args, fui->current_idx + 1);
|
||||||
break;
|
break;
|
||||||
@@ -126,14 +131,13 @@ w_ui_file_list_t *w_fl_init(w_app_t *app) {
|
|||||||
app->main_ui.type = mw_fl_server;
|
app->main_ui.type = mw_fl_server;
|
||||||
app->main_ui.cb_refresh = w_fl_cb_refresh;
|
app->main_ui.cb_refresh = w_fl_cb_refresh;
|
||||||
w_init(&(fui->w), NULL, &(app->win), "");
|
w_init(&(fui->w), NULL, &(app->win), "");
|
||||||
WINDOW *parent_win = app->win;
|
WINDOW *win_parent = app->win;
|
||||||
fui->current_idx = 0;
|
fui->current_idx = 0;
|
||||||
fui->current_page = 1;
|
fui->current_page = 1;
|
||||||
fui->pages = 1;
|
fui->pages = 1;
|
||||||
fui->current_count = 0;
|
fui->current_count = 0;
|
||||||
fui->full_count = 0;
|
fui->full_count = 0;
|
||||||
fui->activate_last = false;
|
fui->activate_last = false;
|
||||||
fui->max_lines = getmaxy(parent_win) - 3; /* 2+1 (bottom info line) */
|
|
||||||
fui->active_search = false;
|
fui->active_search = false;
|
||||||
fui->search_key = bfromcstrrangealloc(12, 64, "");
|
fui->search_key = bfromcstrrangealloc(12, 64, "");
|
||||||
fui->start = NULL;
|
fui->start = NULL;
|
||||||
@@ -153,6 +157,8 @@ w_ui_file_list_t *w_fl_init(w_app_t *app) {
|
|||||||
/* create the action window */
|
/* create the action window */
|
||||||
fui->win_info =
|
fui->win_info =
|
||||||
newwin(app->coordinates.max_y - 4, right_w_x, 2, left_w_x + 1);
|
newwin(app->coordinates.max_y - 4, right_w_x, 2, left_w_x + 1);
|
||||||
|
fui->max_lines = getmaxy(fui->win_list) - 3; /* 2+1 (bottom info line) */
|
||||||
|
|
||||||
return fui;
|
return fui;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -162,7 +168,7 @@ void w_fl_destroy(w_ui_file_list_t **fui) {
|
|||||||
*fui = NULL;
|
*fui = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
void w_fl_rest(w_ui_file_list_t *fl_ui) {
|
void w_fl_reset(w_ui_file_list_t *fl_ui) {
|
||||||
fl_clear(fl_ui->start, fl_ui->current);
|
fl_clear(fl_ui->start, fl_ui->current);
|
||||||
fl_ui->current_idx = 0;
|
fl_ui->current_idx = 0;
|
||||||
fl_ui->current_page = 0;
|
fl_ui->current_page = 0;
|
||||||
@@ -180,7 +186,7 @@ void w_fl_draw(w_ui_file_list_t *fui) {
|
|||||||
getmaxyx(win, sz_y, sz_x);
|
getmaxyx(win, sz_y, sz_x);
|
||||||
|
|
||||||
int32_t sz_y_f = sz_y - 2; /* TODO: можно заменить на поле max_lines */
|
int32_t sz_y_f = sz_y - 2; /* TODO: можно заменить на поле max_lines */
|
||||||
sz_x -= 1; /* do not count the borders */
|
sz_x -= 1; /* do not count the borders */
|
||||||
p_y = 1;
|
p_y = 1;
|
||||||
p_x = 1;
|
p_x = 1;
|
||||||
fl_item_t *el = NULL;
|
fl_item_t *el = NULL;
|
||||||
@@ -218,7 +224,7 @@ void w_fl_draw(w_ui_file_list_t *fui) {
|
|||||||
active_el = el;
|
active_el = el;
|
||||||
}
|
}
|
||||||
p_x = 1;
|
p_x = 1;
|
||||||
p_x += u_utf8_curs_printw(win, p_y, p_x, el->name, sz_x-1);
|
p_x += u_utf8_curs_printw(win, p_y, p_x, el->name, sz_x - 1);
|
||||||
int pad = sz_x - p_x;
|
int pad = sz_x - p_x;
|
||||||
if (pad >= 0) {
|
if (pad >= 0) {
|
||||||
mvwprintw(win, p_y, p_x, "%*s", pad, "");
|
mvwprintw(win, p_y, p_x, "%*s", pad, "");
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ typedef struct {
|
|||||||
void w_fl_draw(w_ui_file_list_t *fl_ui);
|
void w_fl_draw(w_ui_file_list_t *fl_ui);
|
||||||
w_ui_file_list_t *w_fl_init(w_app_t *app);
|
w_ui_file_list_t *w_fl_init(w_app_t *app);
|
||||||
void w_fl_cb(w_cb_args_t *args);
|
void w_fl_cb(w_cb_args_t *args);
|
||||||
void w_fl_rest(w_ui_file_list_t *fl_ui);
|
void w_fl_reset(w_ui_file_list_t *fl_ui);
|
||||||
void w_fl_destroy(w_ui_file_list_t **fui);
|
void w_fl_destroy(w_ui_file_list_t **fui);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
@@ -19,7 +19,7 @@
|
|||||||
#include "fs_file_list.h"
|
#include "fs_file_list.h"
|
||||||
#include "widget_core.h"
|
#include "widget_core.h"
|
||||||
|
|
||||||
void w_fl_rest(w_lfl_ui_t *fl_ui);
|
void w_fl_reset(w_lfl_ui_t *fl_ui);
|
||||||
|
|
||||||
struct fl_args {
|
struct fl_args {
|
||||||
char *name;
|
char *name;
|
||||||
@@ -225,22 +225,24 @@ void w_lfl_cb(w_cb_args_t *args) {
|
|||||||
if (fui->current_idx < fui->rows_num - 1) {
|
if (fui->current_idx < fui->rows_num - 1) {
|
||||||
fui->current = fui->current->next;
|
fui->current = fui->current->next;
|
||||||
fui->current_idx++;
|
fui->current_idx++;
|
||||||
w_lfl_draw(fui);
|
|
||||||
} else {
|
} else {
|
||||||
page_next(fui);
|
page_next(fui);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
w_lfl_draw(fui);
|
||||||
break;
|
break;
|
||||||
case KEY_UP:
|
case KEY_UP:
|
||||||
if (fui->current->prev != NULL) {
|
if (fui->current->prev != NULL) {
|
||||||
if (fui->current_idx > 0) {
|
if (fui->current_idx > 0) {
|
||||||
fui->current = fui->current->prev;
|
fui->current = fui->current->prev;
|
||||||
fui->current_idx--;
|
fui->current_idx--;
|
||||||
w_lfl_draw(fui);
|
|
||||||
} else {
|
} else {
|
||||||
page_previous(fui);
|
page_previous(fui);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
w_lfl_draw(fui);
|
||||||
break;
|
break;
|
||||||
case KEY_NPAGE:
|
case KEY_NPAGE:
|
||||||
page_next(fui);
|
page_next(fui);
|
||||||
|
|||||||
Reference in New Issue
Block a user