ocarina: Add a text button for library scanning

A text button will use a slightly larger image to make it easier to see.
This also gives me an opportunity to add some help text to describe what
the button does.
This commit is contained in:
Bryan Schumaker 2011-09-10 10:30:25 -04:00
parent 95ebff8b6e
commit 9df15e944c
5 changed files with 60 additions and 4 deletions

View File

@ -10,6 +10,12 @@ GtkWidget *make_button(const gchar *stockid,
void (* func)(GtkWidget *, GdkEvent *, gpointer), void (* func)(GtkWidget *, GdkEvent *, gpointer),
bool show); bool show);
GtkWidget *make_text_button(const gchar *stockid,
string text,
void (* func)(GtkWidget *, GdkEvent *, gpointer),
bool show);
GtkWidget *make_play_button(); GtkWidget *make_play_button();
GtkWidget *make_pause_button(); GtkWidget *make_pause_button();
GtkWidget *make_stop_button(); GtkWidget *make_stop_button();

View File

@ -9,6 +9,7 @@ extern "C" {
g_signal_connect(widget, event, G_CALLBACK(func), arg) g_signal_connect(widget, event, G_CALLBACK(func), arg)
void box_pack_start(GtkWidget *, GtkWidget *, gboolean, gboolean, guint); void box_pack_start(GtkWidget *, GtkWidget *, gboolean, gboolean, guint);
void box_pack_end(GtkWidget *, GtkWidget *, gboolean, gboolean, guint);
void container_add(GtkWidget *, GtkWidget *); void container_add(GtkWidget *, GtkWidget *);
#endif #endif

View File

@ -15,24 +15,48 @@ static GtkWidget *get_button(void (* func)(GtkWidget *, GdkEvent *, gpointer),
return button; return button;
} }
static GtkWidget *get_image(const gchar *stockid) static GtkWidget *get_image(const gchar *stockid, GtkIconSize size)
{ {
GtkWidget *img = gtk_image_new_from_stock(stockid, GTK_ICON_SIZE_MENU); GtkWidget *img = gtk_image_new_from_stock(stockid, size);
gtk_widget_show(img); gtk_widget_show(img);
return img; return img;
} }
static GtkWidget *get_label(string text)
{
GtkWidget *label = gtk_label_new(text.c_str());
gtk_widget_show(label);
return label;
}
GtkWidget *make_button(const gchar *stockid, GtkWidget *make_button(const gchar *stockid,
void (* func)(GtkWidget *, GdkEvent *, gpointer), void (* func)(GtkWidget *, GdkEvent *, gpointer),
bool show) bool show)
{ {
GtkWidget *button = get_button(func, show); GtkWidget *button = get_button(func, show);
GtkWidget *image = get_image(stockid); GtkWidget *image = get_image(stockid, GTK_ICON_SIZE_MENU);
container_add(button, image); container_add(button, image);
return button; return button;
} }
GtkWidget *make_text_button(const gchar *stockid,
string text,
void (* func)(GtkWidget *, GdkEvent *, gpointer),
bool show)
{
GtkWidget *button = get_button(func, show);
GtkWidget *image = get_image(stockid, GTK_ICON_SIZE_BUTTON);
GtkWidget *label = get_label(text);
GtkWidget *box = gtk_hbox_new(FALSE, 0);
box_pack_start(box, image, FALSE, FALSE, 0);
box_pack_start(box, label, FALSE, FALSE, 0);
container_add(button, box);
gtk_widget_show(box);
return button;
}
static void on_click_open_file(GtkWidget *b, GdkEvent *e, gpointer d) static void on_click_open_file(GtkWidget *b, GdkEvent *e, gpointer d)
{ {
string file = ocarina_choose_file(); string file = ocarina_choose_file();

View File

@ -7,6 +7,12 @@ void box_pack_start(GtkWidget *box, GtkWidget *child, gboolean expand,
gtk_box_pack_start(GTK_BOX(box), child, expand, fill, padding); gtk_box_pack_start(GTK_BOX(box), child, expand, fill, padding);
} }
void box_pack_end(GtkWidget *box, GtkWidget *child, gboolean expand,
gboolean fill, guint padding)
{
gtk_box_pack_end(GTK_BOX(box), child, expand, fill, padding);
}
void container_add(GtkWidget *container, GtkWidget *widget) void container_add(GtkWidget *container, GtkWidget *widget)
{ {
gtk_container_add(GTK_CONTAINER(container), widget); gtk_container_add(GTK_CONTAINER(container), widget);

View File

@ -1,14 +1,33 @@
#include <ocarina/settings.h> #include <ocarina/settings.h>
#include <ocarina/button.h>
#include <ocarina/gtk.h> #include <ocarina/gtk.h>
/* This is a gtk vbox */ /* This is a gtk vbox */
static GtkWidget *library_settings = NULL; static GtkWidget *library_settings = NULL;
static void on_click_add(GtkWidget *b, GdkEvent *e, gpointer d)
{
}
static GtkWidget *make_add_button()
{
return make_text_button(GTK_STOCK_ADD,
"Add to Library",
on_click_add,
true);
}
void library_settings_init() void library_settings_init()
{ {
library_settings = gtk_vbox_new(FALSE, 0); GtkWidget *add_button = gtk_hbox_new(FALSE, 0);
library_settings = gtk_vbox_new(FALSE, 0);
box_pack_start(library_settings, add_button, FALSE, FALSE, 0);
box_pack_end(add_button, make_add_button(), FALSE, FALSE, 0);
gtk_widget_show(library_settings); gtk_widget_show(library_settings);
gtk_widget_show(add_button);
add_settings_page("Library", library_settings); add_settings_page("Library", library_settings);
} }