commit e04c1a2c510635a80dfd412a4e7a52d2c3947534 Author: Omari Stephens Date: Fri Nov 20 20:14:03 2009 +0000 Add increment/decrement features and an auto-advance diff --git a/trunk/src/bar_rating.c b/trunk/src/bar_rating.c index 684e713..7a7bae5 100644 --- a/trunk/src/bar_rating.c +++ b/trunk/src/bar_rating.c @@ -21,6 +21,7 @@ #include "ui_misc.h" #include "rcfile.h" #include "layout.h" +#include "layout_image.h" static void bar_pane_rating_changed(GtkSpinButton *button, gpointer data); @@ -36,8 +37,9 @@ typedef struct _PaneRatingData PaneRatingData; struct _PaneRatingData { PaneData pane; - GtkWidget *widget; - GtkWidget *spinbutton; + GtkHBox *container; + GtkSpinButton *spinbutton; + GtkToggleButton *auto_adv; // autoadvance FileData *fd; gchar *key; gint height; @@ -58,7 +60,7 @@ static void bar_pane_rating_write(PaneRatingData *prd) static void bar_pane_rating_update(PaneRatingData *prd) { - guint value; + guint64 value; g_signal_handlers_block_by_func(prd->spinbutton, bar_pane_rating_changed, prd); @@ -68,10 +70,14 @@ static void bar_pane_rating_update(PaneRatingData *prd) { gtk_spin_button_set_value(prd->spinbutton, value); } + else + { + gtk_spin_button_set_value(prd->spinbutton, 0); + } g_signal_handlers_unblock_by_func(prd->spinbutton, bar_pane_rating_changed, prd); - gtk_widget_set_sensitive(prd->spinbutton, (prd->fd != NULL)); + gtk_widget_set_sensitive((GtkWidget*) prd->spinbutton, (prd->fd != NULL)); } static void bar_pane_rating_set_selection(PaneRatingData *prd, gboolean overwrite) @@ -140,7 +146,7 @@ static gint bar_pane_rating_event(GtkWidget *bar, GdkEvent *event) if (GTK_WIDGET_HAS_FOCUS(prd->spinbutton)) { - return gtk_widget_event(prd->spinbutton, event); + return gtk_widget_event((GtkWidget*) prd->spinbutton, event); } return FALSE; @@ -182,6 +188,30 @@ static void bar_pane_rating_changed(GtkSpinButton *button, gpointer data) file_data_register_notify_func(bar_pane_rating_notify_cb, prd, NOTIFY_PRIORITY_LOW); } +static void bar_pane_rating_inc_value(GtkButton *button, gpointer data) +{ + PaneRatingData *prd = data; + + gtk_spin_button_spin(prd->spinbutton, GTK_SPIN_STEP_FORWARD, 1.0); + + if(gtk_toggle_button_get_active(prd->auto_adv)) + { + layout_image_next(NULL); + } +} + +static void bar_pane_rating_dec_value(GtkButton *button, gpointer data) +{ + PaneRatingData *prd = data; + + gtk_spin_button_spin(prd->spinbutton, GTK_SPIN_STEP_BACKWARD, 1.0); + + if(gtk_toggle_button_get_active(prd->auto_adv)) + { + layout_image_next(NULL); + } +} + /* static void bar_pane_comment_populate_popup(GtkTextView *textview, GtkMenu *menu, gpointer data) @@ -226,7 +256,8 @@ static GtkWidget *bar_pane_rating_new(const gchar *id, const gchar *title, const gboolean expanded, gint height) { PaneRatingData *prd; - GtkWidget *hbox; + GtkHBox *hbox; + GtkWidget *tmp; prd = g_new0(PaneRatingData, 1); @@ -243,25 +274,43 @@ static GtkWidget *bar_pane_rating_new(const gchar *id, const gchar *title, const prd->height = height; // HBOX - hbox = gtk_hbox_new(FALSE, 0); + hbox = (GtkHBox*)gtk_hbox_new(FALSE, 0); - prd->widget = hbox; - g_object_set_data(G_OBJECT(prd->widget), "pane_data", prd); - g_signal_connect(G_OBJECT(prd->widget), "destroy", + prd->container = hbox; + g_object_set_data(G_OBJECT(prd->container), "pane_data", prd); + g_signal_connect(G_OBJECT(prd->container), "destroy", G_CALLBACK(bar_pane_rating_destroy), prd); - gtk_widget_set_size_request(prd->widget, -1, height); - gtk_widget_show(hbox); + gtk_widget_set_size_request((GtkWidget*) prd->container, -1, -1); + gtk_widget_show((GtkWidget*) hbox); + + // AUTOADVANCE CHECKBOX + tmp = gtk_check_button_new_with_label("AA"); + gtk_box_pack_start((GtkBox*) hbox, tmp, TRUE, TRUE, 0); + gtk_widget_show(tmp); + prd->auto_adv = (GtkToggleButton*) tmp; + + // INCREMENT/DECREMENT BUTTONS + tmp = gtk_button_new_with_label(_("↓ Decrement")); + gtk_box_pack_start((GtkBox*) hbox, tmp, TRUE, TRUE, 0); + g_signal_connect(G_OBJECT(tmp), "clicked", G_CALLBACK(bar_pane_rating_dec_value), prd); + gtk_widget_show(tmp); + + tmp = gtk_button_new_with_label(_("↑ Increment")); + gtk_box_pack_end((GtkBox*) hbox, tmp, TRUE, TRUE, 0); + g_signal_connect(G_OBJECT(tmp), "clicked", G_CALLBACK(bar_pane_rating_inc_value), prd); + gtk_widget_show(tmp); + // SPIN BUTTON - prd->spinbutton = gtk_spin_button_new_with_range(0.0, 5.0, 1.0); + prd->spinbutton = (GtkSpinButton*) gtk_spin_button_new_with_range(0.0, 5.0, 1.0); gtk_spin_button_set_numeric(prd->spinbutton, TRUE); gtk_spin_button_set_snap_to_ticks(prd->spinbutton, TRUE); - gtk_box_pack_start(hbox, prd->spinbutton, TRUE, TRUE, 0); + gtk_box_pack_start((GtkBox*) hbox, (GtkWidget*) prd->spinbutton, FALSE, TRUE, 0); // g_signal_connect(G_OBJECT(pcd->comment_view), "populate-popup", // G_CALLBACK(bar_pane_comment_populate_popup), pcd); - gtk_widget_show(prd->spinbutton); + gtk_widget_show((GtkWidget*) prd->spinbutton); g_signal_connect(G_OBJECT(prd->spinbutton), "value-changed", G_CALLBACK(bar_pane_rating_changed), prd); @@ -269,7 +318,7 @@ static GtkWidget *bar_pane_rating_new(const gchar *id, const gchar *title, const file_data_register_notify_func(bar_pane_rating_notify_cb, prd, NOTIFY_PRIORITY_LOW); - return prd->widget; + return (GtkWidget*) prd->container; } GtkWidget *bar_pane_rating_new_from_config(const gchar **attribute_names, @@ -336,7 +385,7 @@ void bar_pane_rating_update_from_config(GtkWidget *pane, const gchar **attribute gtk_label_set_text(GTK_LABEL(prd->pane.title), title); g_free(title); } - gtk_widget_set_size_request(prd->widget, -1, prd->height); + gtk_widget_set_size_request((GtkWidget*) prd->container, -1, -1); bar_update_expander(pane); bar_pane_rating_update(prd); }