diff options
author | martin-s <martin-s@ffa7fe5e-494d-0410-b361-a75ebd5db220> | 2013-06-01 16:32:45 +0000 |
---|---|---|
committer | martin-s <martin-s@ffa7fe5e-494d-0410-b361-a75ebd5db220> | 2013-06-01 16:32:45 +0000 |
commit | fa900714e23a8821bb04f472b5a32839dd5b9d24 (patch) | |
tree | a54b65b711ac9cac0717285ffb0207fdd51e5070 | |
parent | 9cb92d77a32938b21112030ef924c9732bbf7ecc (diff) | |
download | navit-fa900714e23a8821bb04f472b5a32839dd5b9d24.tar.gz |
Add:gui_internal:Made scroll buttons more abstract
git-svn-id: http://svn.code.sf.net/p/navit/code/trunk/navit@5527 ffa7fe5e-494d-0410-b361-a75ebd5db220
-rw-r--r-- | navit/gui/internal/gui_internal.c | 4 | ||||
-rw-r--r-- | navit/gui/internal/gui_internal_keyboard.c | 2 | ||||
-rw-r--r-- | navit/gui/internal/gui_internal_poi.c | 4 | ||||
-rw-r--r-- | navit/gui/internal/gui_internal_widget.c | 89 | ||||
-rw-r--r-- | navit/gui/internal/gui_internal_widget.h | 51 |
5 files changed, 77 insertions, 73 deletions
diff --git a/navit/gui/internal/gui_internal.c b/navit/gui/internal/gui_internal.c index d93e4ca74..42dc4051c 100644 --- a/navit/gui/internal/gui_internal.c +++ b/navit/gui/internal/gui_internal.c @@ -349,8 +349,8 @@ static void gui_internal_motion_cb(struct gui_priv *this) int y=wt->p.y+wt->h-wr->h; int n; - if(td->button_box && td->button_box->p.y!=0) - y=td->button_box->p.y - td->button_box->h; + if(td->scroll_buttons.button_box && td->scroll_buttons.button_box->p.y!=0) + y=td->scroll_buttons.button_box->p.y - td->scroll_buttons.button_box->h; if(y>this->current.y) y=this->current.y; diff --git a/navit/gui/internal/gui_internal_keyboard.c b/navit/gui/internal/gui_internal_keyboard.c index 758b342b8..ca0b1ab6a 100644 --- a/navit/gui/internal/gui_internal_keyboard.c +++ b/navit/gui/internal/gui_internal_keyboard.c @@ -256,7 +256,7 @@ gui_internal_keyboard_do(struct gui_priv *this, struct widget *wkbdb, int mode) if(md->search_list && md->search_list->type==widget_table) { struct table_data *td=(struct table_data*)(md->search_list->data); - td->button_box_hide=mode<1024; + td->scroll_buttons.button_box_hide=mode<1024; } if (mode >= 56 && mode < 64) { /* special case for coordinates input screen (enter_coord) */ diff --git a/navit/gui/internal/gui_internal_poi.c b/navit/gui/internal/gui_internal_poi.c index 86a64b012..f4ae2e1c7 100644 --- a/navit/gui/internal/gui_internal_poi.c +++ b/navit/gui/internal/gui_internal_poi.c @@ -784,11 +784,11 @@ gui_internal_cmd_pois(struct gui_priv *this, struct widget *wm, void *data) } if(currow>=param->count) break; - if(!(td->next_button->state & STATE_SENSITIVE)) { + if(!(td->scroll_buttons.next_button->state & STATE_SENSITIVE)) { dbg(0,"Reached last page but item %i not found. Stop paging.\n",param->count); break; } - gui_internal_table_button_next(this, td->next_button, NULL); + gui_internal_table_button_next(this, td->scroll_buttons.next_button, NULL); } #endif } diff --git a/navit/gui/internal/gui_internal_widget.c b/navit/gui/internal/gui_internal_widget.c index 100005fde..e851fc980 100644 --- a/navit/gui/internal/gui_internal_widget.c +++ b/navit/gui/internal/gui_internal_widget.c @@ -750,6 +750,23 @@ gui_internal_button_label(struct gui_priv *this, const char *label, int mode) return wlb; } +static void +gui_internal_scroll_buttons_init(struct gui_priv *this, struct widget *widget, struct scroll_buttons *sb) +{ + sb->next_button = gui_internal_button_new_with_callback(this, _("Next"), image_new_xs(this, "gui_arrow_right"), + gravity_center|orientation_horizontal|flags_swap, gui_internal_table_button_next, widget); + sb->prev_button = gui_internal_button_new_with_callback(this, _("Prev"), image_new_xs(this, "gui_arrow_left"), + gravity_center|orientation_horizontal, gui_internal_table_button_prev, widget); + + sb->button_box=gui_internal_box_new(this, gravity_center|orientation_horizontal); + gui_internal_widget_append(widget, sb->button_box); + gui_internal_widget_append(sb->button_box, sb->prev_button); + gui_internal_widget_append(sb->button_box, sb->next_button); + + sb->button_box->bl=this->spacing; + gui_internal_widget_pack(this,sb->button_box); +} + /** * @brief Creates a new table widget. * @@ -777,22 +794,8 @@ struct widget * gui_internal_widget_table_new(struct gui_priv * this, enum flags widget->background=this->background; data = (struct table_data*)widget->data; - if (buttons) { - data->next_button = gui_internal_button_new_with_callback(this, _("Next"), image_new_xs(this, "gui_arrow_right"), - gravity_center|orientation_horizontal|flags_swap, gui_internal_table_button_next, widget); - data->prev_button = gui_internal_button_new_with_callback(this, _("Prev"), image_new_xs(this, "gui_arrow_left"), - gravity_center|orientation_horizontal, gui_internal_table_button_prev, widget); - - data->this=this; - - data->button_box=gui_internal_box_new(this, gravity_center|orientation_horizontal); - gui_internal_widget_append(widget, data->button_box); - gui_internal_widget_append(data->button_box, data->prev_button); - gui_internal_widget_append(data->button_box, data->next_button); - - data->button_box->bl=this->spacing; - gui_internal_widget_pack(this,data->button_box); - } + if (buttons) + gui_internal_scroll_buttons_init(this, widget, &data->scroll_buttons); return widget; @@ -810,7 +813,7 @@ void gui_internal_widget_table_clear(struct gui_priv * this,struct widget * tabl iter = table->children; while(iter ) { - if(iter->data != table_data->button_box) { + if(iter->data != table_data->scroll_buttons.button_box) { struct widget * child = (struct widget*)iter->data; gui_internal_widget_destroy(this,child); if(table->children == iter) { @@ -964,7 +967,7 @@ gui_internal_compute_table_dimensions(struct gui_priv * this,struct widget * w) { cur_row_widget = (struct widget*) cur_row->data; current_desc = column_desc; - if(cur_row_widget == table_data->button_box) + if(cur_row_widget == table_data->scroll_buttons.button_box) { continue; } @@ -1050,7 +1053,7 @@ gui_internal_table_pack(struct gui_priv * this, struct widget * w) for(current = column_data; current; current=g_list_next(current)) { - if(table_data->button_box == current->data ) + if(table_data->scroll_buttons.button_box == current->data ) { continue; } @@ -1066,7 +1069,7 @@ gui_internal_table_pack(struct gui_priv * this, struct widget * w) for(current=w->children; current; current=g_list_next(current)) { - if(current->data!= table_data->button_box) + if(current->data!= table_data->scroll_buttons.button_box) { count++; } @@ -1088,9 +1091,9 @@ gui_internal_table_pack(struct gui_priv * this, struct widget * w) w->h = this->root.h- w->c.y - height; } - if (table_data->button_box) + if (table_data->scroll_buttons.button_box) { - gui_internal_widget_pack(this,table_data->button_box); + gui_internal_widget_pack(this,table_data->scroll_buttons.button_box); } @@ -1158,7 +1161,7 @@ gui_internal_table_render(struct gui_priv * this, struct widget * w) * Skip rows that are on previous pages. */ cur_row = w->children; - if(table_data->top_row && table_data->top_row != w->children && !table_data->button_box_hide) + if(table_data->top_row && table_data->top_row != w->children && !table_data->scroll_buttons.button_box_hide) { cur_row = table_data->top_row; is_first_page=0; @@ -1177,14 +1180,14 @@ gui_internal_table_render(struct gui_priv * this, struct widget * w) current_desc = column_desc; cur_row_widget = (struct widget*)cur_row->data; x =w->p.x+this->spacing; - if(cur_row_widget == table_data->button_box ) + if(cur_row_widget == table_data->scroll_buttons.button_box ) { continue; } dim = (struct table_column_desc*)current_desc->data; - if (table_data->button_box && !table_data->button_box_hide) - bbox_height=table_data->button_box->h; + if (table_data->scroll_buttons.button_box && !table_data->scroll_buttons.button_box_hide) + bbox_height=table_data->scroll_buttons.button_box->h; if( y + dim->height + bbox_height + this->spacing >= w->p.y + w->h ) { @@ -1229,45 +1232,45 @@ gui_internal_table_render(struct gui_priv * this, struct widget * w) table_data->bottom_row=cur_row; current_desc = g_list_next(current_desc); } - if(table_data->button_box && (is_skipped || !is_first_page) && !table_data->button_box_hide ) + if(table_data->scroll_buttons.button_box && (is_skipped || !is_first_page) && !table_data->scroll_buttons.button_box_hide ) { - table_data->button_box->p.y =w->p.y+w->h-table_data->button_box->h - + table_data->scroll_buttons.button_box->p.y =w->p.y+w->h-table_data->scroll_buttons.button_box->h - this->spacing; - if(table_data->button_box->p.y < y ) + if(table_data->scroll_buttons.button_box->p.y < y ) { - table_data->button_box->p.y=y; + table_data->scroll_buttons.button_box->p.y=y; } - table_data->button_box->p.x = w->p.x; - table_data->button_box->w = w->w; + table_data->scroll_buttons.button_box->p.x = w->p.x; + table_data->scroll_buttons.button_box->w = w->w; // table_data->button_box->h = w->h - y; // table_data->next_button->h=table_data->button_box->h; // table_data->prev_button->h=table_data->button_box->h; // table_data->next_button->c.y=table_data->button_box->c.y; // table_data->prev_button->c.y=table_data->button_box->c.y; - gui_internal_widget_pack(this,table_data->button_box); - if(table_data->next_button->p.y > w->p.y + w->h + table_data->next_button->h) + gui_internal_widget_pack(this,table_data->scroll_buttons.button_box); + if(table_data->scroll_buttons.next_button->p.y > w->p.y + w->h + table_data->scroll_buttons.next_button->h) { - table_data->button_box->p.y = w->p.y + w->h - - table_data->button_box->h; + table_data->scroll_buttons.button_box->p.y = w->p.y + w->h - + table_data->scroll_buttons.button_box->h; } if(is_skipped) { - table_data->next_button->state|= STATE_SENSITIVE; + table_data->scroll_buttons.next_button->state|= STATE_SENSITIVE; } else { - table_data->next_button->state&= ~STATE_SENSITIVE; + table_data->scroll_buttons.next_button->state&= ~STATE_SENSITIVE; } if(table_data->top_row != w->children) { - table_data->prev_button->state|= STATE_SENSITIVE; + table_data->scroll_buttons.prev_button->state|= STATE_SENSITIVE; } else { - table_data->prev_button->state&= ~STATE_SENSITIVE; + table_data->scroll_buttons.prev_button->state&= ~STATE_SENSITIVE; } - gui_internal_widget_render(this,table_data->button_box); + gui_internal_widget_render(this,table_data->scroll_buttons.button_box); } /** @@ -1343,8 +1346,8 @@ gui_internal_table_button_prev(struct gui_priv * this, struct widget * wm, void int n; GList *top=table_data->top_row; struct widget *w=(struct widget*)top->data; - if(table_data->button_box->p.y!=0) { - bottomy=table_data->button_box->p.y; + if(table_data->scroll_buttons.button_box->p.y!=0) { + bottomy=table_data->scroll_buttons.button_box->p.y; } n=(bottomy-w->p.y)/w->h; while(n-- > 0 && (top=g_list_previous(top))!=NULL); diff --git a/navit/gui/internal/gui_internal_widget.h b/navit/gui/internal/gui_internal_widget.h index fb4293b15..9cdd9ae10 100644 --- a/navit/gui/internal/gui_internal_widget.h +++ b/navit/gui/internal/gui_internal_widget.h @@ -76,6 +76,31 @@ struct widget { struct widget *parent; }; +struct scroll_buttons { + /** + * Button box should not be displayed if button_box_hide is not zero. + */ + int button_box_hide; + /** + * A container box that is the child of the table widget that contains+groups + * the next and previous button. + */ + struct widget * button_box; + /** + * A button widget to handle 'next page' requests + */ + struct widget * next_button; + /** + * A button widget to handle 'previous page' requests. + */ + struct widget * prev_button; + /** + * a pointer to the gui context. + * This is needed by the free function to destory the buttons. + */ + struct gui_priv * this; +}; + /** * @brief A structure to store information about a table. * @@ -98,32 +123,8 @@ struct table_data */ GList * bottom_row; - /** - * A container box that is the child of the table widget that contains+groups - * the next and previous button. - */ - struct widget * button_box; + struct scroll_buttons scroll_buttons; - /** - * Button box should not be displayed if button_box_hide is not zero. - */ - int button_box_hide; - - /** - * A button widget to handle 'next page' requests - */ - struct widget * next_button; - /** - * A button widget to handle 'previous page' requests. - */ - struct widget * prev_button; - - - /** - * a pointer to the gui context. - * This is needed by the free function to destory the buttons. - */ - struct gui_priv * this; }; /** |