- // if(event_number > event_viewer_data->last_event ||
- // event_number + list_height-1 < event_viewer_data->first_event ||
- // event_viewer_data->first_event == -1)
- {
- /* no event can be reused, clear and start from nothing */
- if(value == -1.0) direction = SCROLL_STEP_DOWN;
- else if(value == 1.0 ) direction = SCROLL_STEP_UP;
- else if(value == -2.0) direction = SCROLL_PAGE_DOWN;
- else if(value == 2.0 ) direction = SCROLL_PAGE_UP;
- else if(value == 0.0 ) direction = SCROLL_NONE;
- else direction = SCROLL_JUMP;
-
- if(g_queue_get_length(event_viewer_data->event_fields_queue)==0)
- direction = SCROLL_JUMP;
-
- switch(direction){
- case SCROLL_STEP_UP:
- if(direction == SCROLL_STEP_UP) g_debug("direction STEP_UP");
- case SCROLL_PAGE_UP:
- if(direction == SCROLL_PAGE_UP) g_debug("direction PAGE_UP");
- if(direction == SCROLL_PAGE_UP){
- backward = list_height>event_viewer_data->start_event_index ? TRUE : FALSE;
- }else{
- backward = event_viewer_data->start_event_index == 0 ? TRUE : FALSE;
- }
- if(backward){
- first = event_viewer_data->event_fields_queue->head;
- if(!first)break;
- event_fields = (EventFields*)first->data;
- LttTime backward_start = event_fields->time;
-
- maxNum = RESERVE_SMALL_SIZE_CUBE;
- event_viewer_data->append = FALSE;
- do{
- if(direction == SCROLL_PAGE_UP){
- minNum = list_height - event_viewer_data->start_event_index ;
- }else{
- minNum = 1;
- }
- first = event_viewer_data->event_fields_queue->head;
- if(!first)break;
- event_fields = (EventFields*)first->data;
- end = event_fields->time;
-
- backward_start = LTT_TIME_MAX(ltt_time_sub(backward_start,
- ltt_time_backward),
- tsc->time_span.start_time);
-
- /*
- ltt_event_position_get(event_fields->ep, &block_num, &event_num, &tf);
- if(size !=0){
- if(event_num > minNum){
- backward_num = event_num > RESERVE_SMALL_SIZE
- ? event_num - RESERVE_SMALL_SIZE : 1;
- ltt_event_position_set(event_fields->ep, block_num, backward_num);
- ltt_tracefile_seek_position(tf, event_fields->ep);
- g_assert(ltt_tracefile_read(tf,ev) != NULL);
- start = ltt_event_time(ev);
- maxNum = RESERVE_SMALL_SIZE_CUBE;
- }else{
- if(block_num > 1){
- ltt_event_position_set(event_fields->ep, block_num-1, 1);
- ltt_tracefile_seek_position(tf, event_fields->ep);
- g_assert(ltt_tracefile_read(tf,ev) != NULL);
- start = ltt_event_time(ev);
- }else{
- start.tv_sec = 0;
- start.tv_nsec = 0;
- }
- maxNum = RESERVE_SMALL_SIZE_CUBE;
- }
- }else{
- if(block_num > count){
- ltt_event_position_set(event_fields->ep, block_num-count, 1);
- ltt_tracefile_seek_position(tf, event_fields->ep);
- g_assert(ltt_tracefile_read(tf, ev) != NULL);
- start = ltt_event_time(ev);
- }else{
- start.tv_sec = 0;
- start.tv_nsec = 0;
- }
- maxNum = RESERVE_SMALL_SIZE_CUBE;
- }
- */
-
- event_viewer_data->current_event_index = event_viewer_data->start_event_index;
- get_events(event_viewer_data, backward_start, end, maxNum, &size);
- event_viewer_data->start_event_index = event_viewer_data->current_event_index;
-
- if(size < minNum
- && (ltt_time_compare(backward_start, tsc->time_span.start_time)>0))
- need_backward_again = TRUE;
- else need_backward_again = FALSE;
- if(size == 0){
- count++;
- }else{
- count = 0;
- }
- }while(need_backward_again);
- }
- if(direction == SCROLL_STEP_UP)
- event_number = event_viewer_data->start_event_index - 1;
- else
- event_number = event_viewer_data->start_event_index - list_height;
- break;
- case SCROLL_STEP_DOWN:
- g_debug("direction STEP_DOWN");
- if(event_viewer_data->end_event_index == event_viewer_data->number_of_events - 1){
- event_viewer_data->append = TRUE;
- first = event_viewer_data->event_fields_queue->head;
- if(!first)break;
- event_fields = (EventFields*)g_list_nth_data(first,event_viewer_data->number_of_events - 1);
- start = event_fields->time;
- start.tv_nsec++;
- end.tv_sec = G_MAXULONG;
- end.tv_nsec = G_MAXULONG;
- get_events(event_viewer_data, start, end, RESERVE_SMALL_SIZE, &size);
- if(size == 0){
- get_events(event_viewer_data, start, end, RESERVE_SMALL_SIZE_SQUARE,&size);
- if(size == 0)
- get_events(event_viewer_data, start, end, RESERVE_SMALL_SIZE_CUBE,&size);
- }
- if(size==0) event_number = event_viewer_data->start_event_index;
- else event_number = event_viewer_data->number_of_events - size - list_height + 1;
- }else event_number = event_viewer_data->start_event_index + 1;
- break;
- case SCROLL_PAGE_DOWN:
- g_debug("direction PAGE_DOWN");
- i = event_viewer_data->number_of_events - 1 - list_height;
- if((gint)(event_viewer_data->end_event_index) >= i){
- int remain_events = event_viewer_data->number_of_events - 1
- - event_viewer_data->end_event_index;
- event_viewer_data->append = TRUE;
- first = event_viewer_data->event_fields_queue->head;
- if(!first)break;
- event_fields = (EventFields*)g_list_nth_data(first,event_viewer_data->number_of_events - 1);
- start = event_fields->time;
- start.tv_nsec++;
- end.tv_sec = G_MAXULONG;
- end.tv_nsec = G_MAXULONG;
- get_events(event_viewer_data, start, end, RESERVE_SMALL_SIZE,&size);
- if(size == 0){
- get_events(event_viewer_data, start, end, RESERVE_SMALL_SIZE_SQUARE,&size);
- if(size == 0)
- get_events(event_viewer_data, start, end, RESERVE_SMALL_SIZE_CUBE,&size);
- }
- remain_events += size;
- if(list_height <= remain_events)
- event_number = event_viewer_data->number_of_events - remain_events - 1;
- else
- event_number = event_viewer_data->number_of_events - 1 - list_height;
- }else event_number = event_viewer_data->start_event_index + list_height - 1;
- break;
- case SCROLL_JUMP:
- g_debug("direction SCROLL_JUMP");
- event_viewer_data->append = TRUE;
- remove_all_items_from_queue(event_viewer_data->event_fields_queue);
- end.tv_sec = G_MAXULONG;
- end.tv_nsec = G_MAXULONG;
- time = ltt_time_from_double(time_value / NANOSECONDS_PER_SECOND);
- start = ltt_time_add(time_span.start_time, time);
- event_viewer_data->previous_value = time_value;
- get_events(event_viewer_data, start, end, RESERVE_SMALL_SIZE,&size);
- if(size < list_height && size > 0){
- event_viewer_data->append = FALSE;
- first = event_viewer_data->event_fields_queue->head;
- if(!first)break;
- event_fields = (EventFields*)first->data;
- end = event_fields->time;
- if(end.tv_nsec != 0)
- end.tv_nsec--;