index 2380e2e6bf669fbf15bdcc48444d995bba1bd51c..94232810054a6545620527584e9a02be661d4525 100644 (file)
/* Note: this file should be kept compilable as both .cpp and .c */
+#include <cmath>
#include <string.h>
#include <gdk/gdkkeysyms.h>
+#include <gtk/gtkversion.h>
#include <gtk/gtktoolitem.h>
#include <gtk/gtkspinbutton.h>
#include <gtk/gtkhscale.h>
+#if GTK_CHECK_VERSION(2,12,0)
+#include <gtk/gtkscalebutton.h>
+#include <gtk/gtkstock.h>
+#endif /* GTK_CHECK_VERSION(2,12,0) */
#include <gtk/gtkhbox.h>
#include <gtk/gtklabel.h>
#include <gtk/gtkmisc.h>
APPEARANCE_MINIMAL, // no label, just choices in a drop-down menu
};
+#if GTK_CHECK_VERSION(2,12,0)
+/* TODO need to have appropriate icons setup for these: */
+static const gchar *floogles[] = {
+ GTK_STOCK_REMOVE,
+ GTK_STOCK_ADD,
+ GTK_STOCK_GO_DOWN,
+ GTK_STOCK_ABOUT,
+ GTK_STOCK_GO_UP,
+ 0};
+#endif /* GTK_CHECK_VERSION(2,12,0) */
+
typedef struct _EgeAdjustmentDescr EgeAdjustmentDescr;
struct _EgeAdjustmentDescr
return handled;
}
+static gchar*
+slider_format_falue (GtkScale* scale, gdouble value, gchar *label)
+{
+ (void)scale;
+ return g_strdup_printf("%s %d", label, (int) round(value));
+}
+
static GtkWidget* create_tool_item( GtkAction* action )
{
GtkWidget* item = 0;
EgeAdjustmentAction* act = EGE_ADJUSTMENT_ACTION( action );
GtkWidget* spinbutton = 0;
GtkWidget* hb = gtk_hbox_new( FALSE, 5 );
+
GValue value;
+ memset( &value, 0, sizeof(value) );
+ g_value_init( &value, G_TYPE_STRING );
+ g_object_get_property( G_OBJECT(action), "short_label", &value );
+ const gchar* sss = g_value_get_string( &value );
if ( act->private_data->appearanceMode == APPEARANCE_FULL ) {
spinbutton = gtk_hscale_new( act->private_data->adj);
gtk_widget_set_size_request(spinbutton, 100, -1);
+ gtk_scale_set_digits (GTK_SCALE(spinbutton), 0);
+ gtk_signal_connect(GTK_OBJECT(spinbutton), "format-value", GTK_SIGNAL_FUNC(slider_format_falue), (void *) sss);
+
+#if GTK_CHECK_VERSION(2,12,0)
+ } else if ( act->private_data->appearanceMode == APPEARANCE_MINIMAL ) {
+ spinbutton = gtk_scale_button_new( GTK_ICON_SIZE_MENU, 0, 100, 2, 0 );
+ gtk_scale_button_set_adjustment( GTK_SCALE_BUTTON(spinbutton), act->private_data->adj );
+ gtk_scale_button_set_icons( GTK_SCALE_BUTTON(spinbutton), floogles );
+#endif /* GTK_CHECK_VERSION(2,12,0) */
} else {
spinbutton = gtk_spin_button_new( act->private_data->adj, act->private_data->climbRate, act->private_data->digits );
}
item = GTK_WIDGET( gtk_tool_item_new() );
- memset( &value, 0, sizeof(value) );
- g_value_init( &value, G_TYPE_STRING );
- g_object_get_property( G_OBJECT(action), "short_label", &value );
- const gchar* sss = g_value_get_string( &value );
-
- GtkWidget* lbl = gtk_label_new( sss ? sss : "wwww" );
- GtkWidget* filler1 = gtk_label_new(" ");
-
{
GValue tooltip;
memset( &tooltip, 0, sizeof(tooltip) );
}
}
- gtk_misc_set_alignment( GTK_MISC(lbl), 1.0, 0.5 );
+ if ( act->private_data->appearanceMode != APPEARANCE_FULL ) {
+ GtkWidget* lbl = gtk_label_new( sss ? sss : "wwww" );
+ GtkWidget* filler1 = gtk_label_new(" ");
+ gtk_misc_set_alignment( GTK_MISC(lbl), 1.0, 0.5 );
+ gtk_box_pack_start( GTK_BOX(hb), filler1, FALSE, FALSE, 0 );
+ gtk_box_pack_start( GTK_BOX(hb), lbl, FALSE, FALSE, 0 );
+ }
- gtk_box_pack_start( GTK_BOX(hb), filler1, FALSE, FALSE, 0 );
- gtk_box_pack_start( GTK_BOX(hb), lbl, FALSE, FALSE, 0 );
if ( act->private_data->appearanceMode == APPEARANCE_FULL ) {
gtk_box_pack_start( GTK_BOX(hb), spinbutton, TRUE, TRUE, 0 );
} else {
g_signal_connect_swapped( G_OBJECT(spinbutton), "event", G_CALLBACK(event_cb), action );
if ( act->private_data->appearanceMode == APPEARANCE_FULL ) {
/* */
+#if GTK_CHECK_VERSION(2,12,0)
+ } else if ( act->private_data->appearanceMode == APPEARANCE_MINIMAL ) {
+ /* */
+#endif /* GTK_CHECK_VERSION(2,12,0) */
} else {
gtk_entry_set_width_chars( GTK_ENTRY(spinbutton), act->private_data->digits + 3 );
}
EgeAdjustmentAction* action = EGE_ADJUSTMENT_ACTION( data );
if ( GTK_IS_SPIN_BUTTON(widget) ) {
action->private_data->lastVal = gtk_spin_button_get_value( GTK_SPIN_BUTTON(widget) );
+#if GTK_CHECK_VERSION(2,12,0)
+ } else if ( GTK_IS_SCALE_BUTTON(widget) ) {
+ action->private_data->lastVal = gtk_scale_button_get_value( GTK_SCALE_BUTTON(widget) );
+#endif /* GTK_CHECK_VERSION(2,12,0) */
} else if (GTK_IS_RANGE(widget) ) {
action->private_data->lastVal = gtk_range_get_value( GTK_RANGE(widget) );
}