#define NT_CMD_ID 4
#define NT_CMD_SEARCH_THREAD 5
#define NT_CMD_FAVORITE 6
+#define NT_CMD_AUTO_SCROLL 7
+
+#define AUTO_SCROLL_NONE 0
+#define AUTO_SCROLL_UP -1
+#define AUTO_SCROLL_DOWN 1
typedef struct tag_ctx_reslist_t *ctx_reslist_tp;
typedef struct tag_ctx_reslist_t
BOOL regex_init;
int sel_res_no;
int sel_res_line;
+
+ int auto_scroll;
nt_link_tp res_disp_list;
nt_usr_db_handle usr_db_handle);
static BOOL reslist_clone(nt_thread_handle h_thread, ctx_reslist_tp ctxp);
static void int_ptr_free(void *ptr);
-static int parse_cmd1(const char *param, int *statep, const char **end);
+static int parse_cmd1(const char *param, const char **end);
static BOOL search_line_asc(regex_t *regexp, nt_link_tp reslistp,
int *sel_res_no, int *sel_res_line, int column);
static BOOL search_line_desc(regex_t *regexp, ctx_reslist_tp ctxp,
wchar_t buf[1024*3+1];
wchar_t *cptr;
nt_link_tp link_curp;
- int state;
BOOL search_asc;
BOOL adjust;
BOOL set_value;
int cmd;
attr_t new_res_attr;
const char *endp;
-
+ int result_state;
+ int auto_scroll_state;
+
ctxp = (ctx_reslist_tp)wp->data;
if(!ctxp){
ctxp = init_context(h_select, usr_db_handle);
ctxp->prev_state = prev_state;
ch = wp->key;
-
+ result_state = DISP_STATE_RESLIST;
if(ctxp->max_cur_res < 0 || ctxp->max_cur_offset < 0){
wlines = wp->lines;
clistp = clistp->prev;
}
}
+
+ auto_scroll_state = ctxp->auto_scroll;
+ if(ch == NT_KEY_CMD_AUTO_SCROLL){
+ result_state |= DISP_CMD_AUTO_SCROLL;
+ if(ctxp->auto_scroll == AUTO_SCROLL_UP){
+ ch = NT_KEY_UP;
+ }else{
+ ch = NT_KEY_DOWN;
+ ctxp->auto_scroll = AUTO_SCROLL_DOWN;
+ }
+ }else{
+ ctxp->auto_scroll = AUTO_SCROLL_NONE;
+ }
switch(ch){
+ case NT_KEY_CMD_BOARD_UPDATE:
+ if(auto_scroll_state != AUTO_SCROLL_NONE){
+ result_state |= DISP_CMD_AUTO_SCROLL;
+ ctxp->auto_scroll = auto_scroll_state;
+ }
+ break;
case NT_KEY_REFRESH:
return DISP_STATE_REFRESH;
case NT_KEY_CLOSE:
break;
case NT_KEY_COMMAND1:
assert(wp->cmd_param);
- cmd = parse_cmd1(wp->cmd_param, &state, &endp);
+ cmd = parse_cmd1(wp->cmd_param, &endp);
switch(cmd){
+ case NT_CMD_AUTO_SCROLL:
+ return DISP_CMD_AUTO_SCROLL | DISP_STATE_RESLIST;
case NT_CMD_SEARCH_THREAD:
return DISP_STATE_SEARCH_THREAD;
case NT_CMD_FAVORITE:
return DISP_STATE_FAVORITE;
case NT_CMD_WRITE:
- return state;
+ return DISP_STATE_EDITOR;
case NT_CMD_JMP_NEW:
if(ctxp->prev_read_cnt <= 0)
ctxp->cur_res = 0;
break;
case NT_KEY_UP:
case KEY_UP:
+ if(auto_scroll_state != AUTO_SCROLL_NONE){
+ result_state |= DISP_CMD_AUTO_SCROLL;
+ ctxp->auto_scroll = AUTO_SCROLL_UP;
+ }
ctxp->cur_res_offset--;
if(0 <= ctxp->cur_res_offset){
break;
break;
case NT_KEY_DOWN:
case KEY_DOWN:
+ if(auto_scroll_state != AUTO_SCROLL_NONE){
+ result_state |= DISP_CMD_AUTO_SCROLL;
+ ctxp->auto_scroll = AUTO_SCROLL_DOWN;
+ }
ctxp->cur_res_offset++;
clistp = ctxp->res_disp_list;
for(i = 0; i < ctxp->res_num; i++){
break;
case NT_KEY_PAGEUP:
case KEY_PPAGE:
+ if(auto_scroll_state != AUTO_SCROLL_NONE){
+ result_state |= DISP_CMD_AUTO_SCROLL;
+ ctxp->auto_scroll = AUTO_SCROLL_UP;
+ }
ctxp->cur_res_offset -= wp->lines;
if(ctxp->cur_res_offset >= 0){
break;
break;
case NT_KEY_PAGEDOWN:
case KEY_NPAGE:
+ if(auto_scroll_state != AUTO_SCROLL_NONE){
+ result_state |= DISP_CMD_AUTO_SCROLL;
+ ctxp->auto_scroll = AUTO_SCROLL_DOWN;
+ }
clistp = ctxp->res_disp_list;
if(0 > ctxp->cur_res)
ctxp->cur_res = 0;
}/* end for */
END_FOR:
- return DISP_STATE_RESLIST;
+ return result_state;
}
static int get_id_num(ctx_reslist_tp ctxp, const wchar_t *misc)
return TRUE;
}
-static int parse_cmd1(const char *param, int *statep, const char **end)
+static int parse_cmd1(const char *param, const char **end)
{
int len;
const char *start;
if(0 == strncmp(NT_COMMAND1_WRITE_MSG_1, start,len) ||
0 == strncmp(NT_COMMAND1_WRITE_MSG_2, start,len)){
- *statep = DISP_STATE_EDITOR;
return NT_CMD_WRITE;
}else if(0 == strncmp(NT_COMMAND1_JMP_NEW_1,start,len) ||
0 == strncmp(NT_COMMAND1_JMP_NEW_2, start,len)){
0 == strncmp(NT_COMMAND1_FAVORITE_2,param,
strlen(NT_COMMAND1_FAVORITE_2))){
return NT_CMD_FAVORITE;
+ }else if(0 == strncmp(NT_COMMAND1_AUTOSCROLL_1,param,
+ strlen(NT_COMMAND1_AUTOSCROLL_1)) ||
+ 0 == strncmp(NT_COMMAND1_AUTOSCROLL_2,param,
+ strlen(NT_COMMAND1_AUTOSCROLL_2))){
+ return NT_CMD_AUTO_SCROLL;
}
return NT_CMD_NONE;
}
ctxp->sel_res_line = -1;
ctxp->child_ctx_stackp = NULL;
ctxp->prev_state = DISP_STATE_THREADTITLE;
+ ctxp->auto_scroll = AUTO_SCROLL_NONE;
b_result = reslist_clone(h_thread, ctxp);
nt_thread_release_ref(h_thread);