summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormartin-s <martin-s@ffa7fe5e-494d-0410-b361-a75ebd5db220>2013-06-01 16:32:45 +0000
committermartin-s <martin-s@ffa7fe5e-494d-0410-b361-a75ebd5db220>2013-06-01 16:32:45 +0000
commitc8c89815de8f9b6b07bc29ec83f254e3d7b1a539 (patch)
tree5369329557a1b92382209e5e6882e68d31b892b0
parenteab3cffbf817f47851b52d29f1f83ee9e792ec57 (diff)
downloadnavit-c8c89815de8f9b6b07bc29ec83f254e3d7b1a539.tar.gz
Add:gui_internal:Made scroll buttons more abstract
git-svn-id: https://navit.svn.sourceforge.net/svnroot/navit/trunk@5527 ffa7fe5e-494d-0410-b361-a75ebd5db220
-rw-r--r--navit/navit/gui/internal/gui_internal.c4
-rw-r--r--navit/navit/gui/internal/gui_internal_keyboard.c2
-rw-r--r--navit/navit/gui/internal/gui_internal_poi.c4
-rw-r--r--navit/navit/gui/internal/gui_internal_widget.c89
-rw-r--r--navit/navit/gui/internal/gui_internal_widget.h51
5 files changed, 77 insertions, 73 deletions
diff --git a/navit/navit/gui/internal/gui_internal.c b/navit/navit/gui/internal/gui_internal.c
index d93e4ca74..42dc4051c 100644
--- a/navit/navit/gui/internal/gui_internal.c
+++ b/navit/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/navit/gui/internal/gui_internal_keyboard.c b/navit/navit/gui/internal/gui_internal_keyboard.c
index 758b342b8..ca0b1ab6a 100644
--- a/navit/navit/gui/internal/gui_internal_keyboard.c
+++ b/navit/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/navit/gui/internal/gui_internal_poi.c b/navit/navit/gui/internal/gui_internal_poi.c
index 86a64b012..f4ae2e1c7 100644
--- a/navit/navit/gui/internal/gui_internal_poi.c
+++ b/navit/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/navit/gui/internal/gui_internal_widget.c b/navit/navit/gui/internal/gui_internal_widget.c
index 100005fde..e851fc980 100644
--- a/navit/navit/gui/internal/gui_internal_widget.c
+++ b/navit/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/navit/gui/internal/gui_internal_widget.h b/navit/navit/gui/internal/gui_internal_widget.h
index fb4293b15..9cdd9ae10 100644
--- a/navit/navit/gui/internal/gui_internal_widget.h
+++ b/navit/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;
};
/**