[Gnucash-changes] r11999 - gnucash/trunk - Convert the font picker
and color picker from deprecated gnome widgets
David Hampton
hampton at cvs.gnucash.org
Sun Nov 20 20:55:17 EST 2005
Author: hampton
Date: 2005-11-20 20:55:16 -0500 (Sun, 20 Nov 2005)
New Revision: 11999
Trac: http://svn.gnucash.org/trac/changeset/11999
Modified:
gnucash/trunk/ChangeLog
gnucash/trunk/src/gnome-utils/dialog-options.c
Log:
Convert the font picker and color picker from deprecated gnome widgets
to their gtk counterparts. Also convert the image picker when
compiled with gtk2.6 or better.
Modified: gnucash/trunk/ChangeLog
===================================================================
--- gnucash/trunk/ChangeLog 2005-11-21 00:44:42 UTC (rev 11998)
+++ gnucash/trunk/ChangeLog 2005-11-21 01:55:16 UTC (rev 11999)
@@ -1,5 +1,10 @@
2005-11-20 David Hampton <hampton at employees.org>
+ * src/gnome-utils/dialog-options.c: Convert the font picker and
+ color picker from deprecated gnome widgets to their gtk
+ counterparts. Also convert the image picker when compiled with
+ gtk2.6 or better.
+
* src/report/report-gnome/dialog-style-sheet.c: Close stylesheet
edit dialog when the stylesheet picker dialog is closed. Prevents
a crash.
Modified: gnucash/trunk/src/gnome-utils/dialog-options.c
===================================================================
--- gnucash/trunk/src/gnome-utils/dialog-options.c 2005-11-21 00:44:42 UTC (rev 11998)
+++ gnucash/trunk/src/gnome-utils/dialog-options.c 2005-11-21 01:55:16 UTC (rev 11999)
@@ -22,7 +22,11 @@
#include "config.h"
+#ifdef HAVE_GLIB26
+#include <gtk/gtk.h>
+#else
#include <gnome.h>
+#endif
#include <gdk/gdk.h>
#include <glib/gi18n.h>
#include <g-wrap-wct.h>
@@ -64,6 +68,9 @@
*/
#define MAX_TAB_COUNT 4
+/* A pointer to the last selected filename */
+#define LAST_SELECTION "last-selection"
+
/* A Hash-table of GNCOptionDef_t keyed with option names. */
static GHashTable *optionTable = NULL;
@@ -107,6 +114,18 @@
gpointer data);
+static inline gint
+color_d_to_i16 (double d)
+{
+ return (d * 0xFFFF);
+}
+
+static inline double
+color_i16_to_d (gint i16)
+{
+ return ((double)i16 / 0xFFFF);
+}
+
static void
gnc_options_dialog_changed_internal (GtkWidget *widget, gboolean sensitive)
{
@@ -200,6 +219,56 @@
return;
}
+#ifdef HAVE_GLIB26
+static void
+gnc_image_option_update_preview_cb (GtkFileChooser *chooser,
+ GNCOption *option)
+{
+ gchar *filename;
+ GtkImage *image;
+ GdkPixbuf *pixbuf;
+ gboolean have_preview;
+
+ g_return_if_fail(chooser != NULL);
+
+ ENTER("chooser %p, option %p", chooser, option);
+ filename = gtk_file_chooser_get_preview_filename(chooser);
+ DEBUG("chooser preview name is %s.", filename);
+ if (filename == NULL) {
+ filename = g_strdup(g_object_get_data(G_OBJECT(chooser), LAST_SELECTION));
+ DEBUG("using last selection of %s", filename);
+ if (filename == NULL) {
+ LEAVE("no usable name");
+ return;
+ }
+ }
+
+ image = GTK_IMAGE(gtk_file_chooser_get_preview_widget(chooser));
+ pixbuf = gdk_pixbuf_new_from_file_at_size(filename, 128, 128, NULL);
+ g_free(filename);
+ have_preview = (pixbuf != NULL);
+
+ gtk_image_set_from_pixbuf(image, pixbuf);
+ if (pixbuf)
+ gdk_pixbuf_unref(pixbuf);
+
+ gtk_file_chooser_set_preview_widget_active(chooser, have_preview);
+ LEAVE("preview visible is %d", have_preview);
+}
+
+static void
+gnc_image_option_selection_changed_cb (GtkFileChooser *chooser,
+ GNCOption *option)
+{
+ gchar *filename;
+
+ filename = gtk_file_chooser_get_preview_filename(chooser);
+ if (!filename)
+ return;
+ g_object_set_data_full(G_OBJECT(chooser), LAST_SELECTION, filename, g_free);
+}
+#endif
+
/********************************************************************\
* gnc_option_set_ui_value_internal *
* sets the GUI representation of an option with either its *
@@ -799,17 +868,15 @@
}
static void
-gnc_option_color_changed_cb(GnomeColorPicker *picker, guint arg1, guint arg2,
- guint arg3, guint arg4, GNCOption *option)
+gnc_option_color_changed_cb(GtkColorButton *color_button, GNCOption *option)
{
- gnc_option_changed_widget_cb(GTK_WIDGET(picker), option);
+ gnc_option_changed_widget_cb(GTK_WIDGET(color_button), option);
}
static void
-gnc_option_font_changed_cb(GnomeFontPicker *picker, gchar *font_name,
- GNCOption *option)
+gnc_option_font_changed_cb(GtkFontButton *font_button, GNCOption *option)
{
- gnc_option_changed_widget_cb(GTK_WIDGET(picker), option);
+ gnc_option_changed_widget_cb(GTK_WIDGET(font_button), option);
}
static void
@@ -1723,9 +1790,9 @@
use_alpha = gnc_option_use_alpha(option);
- value = gnome_color_picker_new();
- gnome_color_picker_set_title(GNOME_COLOR_PICKER(value), name);
- gnome_color_picker_set_use_alpha(GNOME_COLOR_PICKER(value), use_alpha);
+ value = gtk_color_button_new();
+ gtk_color_button_set_title(GTK_COLOR_BUTTON(value), name);
+ gtk_color_button_set_use_alpha(GTK_COLOR_BUTTON(value), use_alpha);
gnc_option_set_widget (option, value);
gnc_option_set_ui_value(option, FALSE);
@@ -1756,9 +1823,12 @@
g_free(colon_name);
*enclosing = gtk_hbox_new(FALSE, 5);
- value = gnome_font_picker_new();
- gnome_font_picker_set_mode(GNOME_FONT_PICKER(value),
- GNOME_FONT_PICKER_MODE_FONT_INFO);
+ value = gtk_font_button_new();
+ g_object_set(G_OBJECT(value),
+ "use-font", TRUE,
+ "show-style", TRUE,
+ "show-size", TRUE,
+ (char *)NULL);
gnc_option_set_widget (option, value);
@@ -1782,7 +1852,9 @@
{
GtkWidget *value;
GtkWidget *label;
+#ifndef HAVE_GLIB26
GtkWidget *entry;
+#endif
gchar *colon_name;
ENTER("option %p(%s), name %s", option, gnc_option_name(option), name);
@@ -1792,6 +1864,20 @@
g_free(colon_name);
*enclosing = gtk_hbox_new(FALSE, 5);
+#ifdef HAVE_GLIB26
+ value = gtk_file_chooser_button_new(_("Select image"),
+ GTK_FILE_CHOOSER_ACTION_OPEN);
+ g_object_set(G_OBJECT(value),
+ "width-chars", 30,
+ "preview-widget", gtk_image_new(),
+ (char *)NULL);
+ g_signal_connect(G_OBJECT (value), "selection-changed",
+ G_CALLBACK(gnc_option_changed_widget_cb), option);
+ g_signal_connect(G_OBJECT (value), "selection-changed",
+ G_CALLBACK(gnc_image_option_selection_changed_cb), option);
+ g_signal_connect(G_OBJECT (value), "update-preview",
+ G_CALLBACK(gnc_image_option_update_preview_cb), option);
+#else
value = gnome_pixmap_entry_new(NULL, _("Select pixmap"),
FALSE);
gnome_pixmap_entry_set_preview(GNOME_PIXMAP_ENTRY(value), FALSE);
@@ -1799,6 +1885,7 @@
entry = gnome_pixmap_entry_gtk_entry (GNOME_PIXMAP_ENTRY(value));
g_signal_connect(G_OBJECT (entry), "changed",
G_CALLBACK(gnc_option_changed_widget_cb), option);
+#endif
gnc_option_set_widget (option, value);
gnc_option_set_ui_value(option, FALSE);
@@ -2169,15 +2256,22 @@
if (gnc_option_get_color_info(option, use_default,
&red, &green, &blue, &alpha))
{
- GnomeColorPicker *picker;
+ GtkColorButton *color_button;
+ GdkColor color;
- picker = GNOME_COLOR_PICKER(widget);
+ DEBUG("red %f, green %f, blue %f, alpha %f", red, green, blue, alpha);
+ color_button = GTK_COLOR_BUTTON(widget);
- gnome_color_picker_set_d(picker, red, green, blue, alpha);
+ color.red = color_d_to_i16(red);
+ color.green = color_d_to_i16(green);
+ color.blue = color_d_to_i16(blue);
+ gtk_color_button_set_color(color_button, &color);
+ gtk_color_button_set_alpha(color_button, color_d_to_i16(alpha));
return FALSE;
}
- else
- return TRUE;
+
+ LEAVE("TRUE");
+ return TRUE;
}
static gboolean
@@ -2189,8 +2283,8 @@
const gchar *string = SCM_STRING_CHARS(value);
if ((string != NULL) && (*string != '\0'))
{
- GnomeFontPicker *picker = GNOME_FONT_PICKER(widget);
- gnome_font_picker_set_font_name(picker, string);
+ GtkFontButton *font_button = GTK_FONT_BUTTON(widget);
+ gtk_font_button_set_font_name(font_button, string);
}
return FALSE;
}
@@ -2209,10 +2303,21 @@
if (string && *string)
{
+#ifdef HAVE_GLIB26
+ gchar *test;
+ DEBUG("string = %s", string);
+ gtk_file_chooser_select_filename(GTK_FILE_CHOOSER(widget), string);
+ test = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(widget));
+ g_object_set_data_full(G_OBJECT(widget), LAST_SELECTION,
+ g_strdup(string), g_free);
+ DEBUG("Set %s, retrieved %s", string, test);
+ gnc_image_option_update_preview_cb(GTK_FILE_CHOOSER(widget), option);
+#else
GtkEntry *entry;
DEBUG("string = %s", string);
entry = GTK_ENTRY(gnome_pixmap_entry_gtk_entry(GNOME_PIXMAP_ENTRY(widget)));
gtk_entry_set_text(entry, string);
+#endif
}
LEAVE("FALSE");
return FALSE;
@@ -2530,13 +2635,20 @@
gnc_option_get_ui_value_color (GNCOption *option, GtkWidget *widget)
{
SCM result;
- GnomeColorPicker *picker;
+ GtkColorButton *color_button;
+ GdkColor color;
gdouble red, green, blue, alpha;
gdouble scale;
- picker = GNOME_COLOR_PICKER(widget);
+ ENTER("option %p(%s), widget %p",
+ option, gnc_option_name(option), widget);
- gnome_color_picker_get_d(picker, &red, &green, &blue, &alpha);
+ color_button = GTK_COLOR_BUTTON(widget);
+ gtk_color_button_get_color(color_button, &color);
+ red = color_i16_to_d(color.red);
+ green = color_i16_to_d(color.green);
+ blue = color_i16_to_d(color.blue);
+ alpha = color_i16_to_d(gtk_color_button_get_alpha(color_button));
scale = gnc_option_color_range(option);
@@ -2551,20 +2663,32 @@
static SCM
gnc_option_get_ui_value_font (GNCOption *option, GtkWidget *widget)
{
- GnomeFontPicker *picker = GNOME_FONT_PICKER(widget);
+ GtkFontButton *font_button = GTK_FONT_BUTTON(widget);
const gchar * string;
- string = gnome_font_picker_get_font_name(picker);
+ string = gtk_font_button_get_font_name(font_button);
return (scm_makfrom0str(string));
}
static SCM
gnc_option_get_ui_value_pixmap (GNCOption *option, GtkWidget *widget)
{
+#ifdef HAVE_GLIB26
+ gchar *string;
+ SCM result;
+
+ string = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(widget));
+ DEBUG("filename %s", string);
+ result = scm_makfrom0str(string ? string : "");
+ if (string)
+ g_free(string);
+ return result;
+#else
GnomePixmapEntry * p = GNOME_PIXMAP_ENTRY(widget);
char * string = gnome_pixmap_entry_get_filename(p);
return (scm_makfrom0str(string ? string : ""));
+#endif
}
static SCM
More information about the gnucash-changes
mailing list