mirror of
https://github.com/Gnucash/gnucash.git
synced 2025-02-25 18:55:30 -06:00
Remove cruft.
git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@5351 57a11ea4-9604-0410-9ed3-97b8803252fd
This commit is contained in:
parent
d060f4a155
commit
b3aa8e76fa
@ -1,887 +0,0 @@
|
||||
/********************************************************************\
|
||||
* dialog-utils.c -- utility functions for creating dialogs *
|
||||
* for GnuCash *
|
||||
* Copyright (C) 1999-2000 Linas Vepstas *
|
||||
* *
|
||||
* This program is free software; you can redistribute it and/or *
|
||||
* modify it under the terms of the GNU General Public License as *
|
||||
* published by the Free Software Foundation; either version 2 of *
|
||||
* the License, or (at your option) any later version. *
|
||||
* *
|
||||
* This program is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU General Public License for more details. *
|
||||
* *
|
||||
* You should have received a copy of the GNU General Public License*
|
||||
* along with this program; if not, contact: *
|
||||
* *
|
||||
* Free Software Foundation Voice: +1-617-542-5942 *
|
||||
* 59 Temple Place - Suite 330 Fax: +1-617-542-2652 *
|
||||
* Boston, MA 02111-1307, USA gnu@gnu.org *
|
||||
* *
|
||||
\********************************************************************/
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#include <glade/glade.h>
|
||||
#include <gnome.h>
|
||||
|
||||
#include "account-tree.h"
|
||||
#include "dialog-utils.h"
|
||||
#include "global-options.h"
|
||||
#include "gnc-commodity.h"
|
||||
#include "messages.h"
|
||||
#include "Group.h"
|
||||
#include "gnc-dir.h"
|
||||
#include "gnc-engine-util.h"
|
||||
#include "gnc-euro.h"
|
||||
#include "gnc-ui-util.h"
|
||||
#include "gnc-ui.h"
|
||||
|
||||
|
||||
/* This static indicates the debugging module that this .o belongs to. */
|
||||
static short module = MOD_GUI;
|
||||
|
||||
|
||||
/********************************************************************\
|
||||
* gnc_ui_source_menu_create *
|
||||
* create the menu of stock quote sources *
|
||||
* *
|
||||
* Args: account - account to use to set default choice *
|
||||
* Returns: the menu *
|
||||
\*******************************************************************/
|
||||
GtkWidget *
|
||||
gnc_ui_source_menu_create(Account *account)
|
||||
{
|
||||
gint i;
|
||||
GtkMenu *menu;
|
||||
GtkWidget *item;
|
||||
GtkWidget *omenu;
|
||||
GNCAccountType type;
|
||||
|
||||
menu = GTK_MENU(gtk_menu_new());
|
||||
gtk_widget_show(GTK_WIDGET(menu));
|
||||
|
||||
for (i = 0; i < NUM_SOURCES; i++)
|
||||
{
|
||||
item = gtk_menu_item_new_with_label(gnc_get_source_name(i));
|
||||
gtk_widget_show(item);
|
||||
gtk_menu_append(menu, item);
|
||||
}
|
||||
|
||||
omenu = gtk_option_menu_new();
|
||||
gtk_widget_show(omenu);
|
||||
gtk_option_menu_set_menu(GTK_OPTION_MENU(omenu), GTK_WIDGET(menu));
|
||||
gnc_option_menu_init(omenu);
|
||||
|
||||
return omenu;
|
||||
}
|
||||
|
||||
/********************************************************************\
|
||||
* price quote timezone handling
|
||||
*/
|
||||
|
||||
static gchar *
|
||||
known_timezones[] =
|
||||
{
|
||||
"Asia/Tokyo",
|
||||
"Australia/Sydney",
|
||||
"America/New_York",
|
||||
"America/Chicago",
|
||||
"Europe/London",
|
||||
"Europe/Paris",
|
||||
NULL
|
||||
};
|
||||
|
||||
guint
|
||||
gnc_find_timezone_menu_position(const gchar *timezone)
|
||||
{
|
||||
/* returns 0 on failure, position otherwise. */
|
||||
gboolean found = FALSE;
|
||||
guint i = 0;
|
||||
while(!found && known_timezones[i]) {
|
||||
if(safe_strcmp(timezone, known_timezones[i]) != 0) {
|
||||
i++;
|
||||
} else {
|
||||
found = TRUE;
|
||||
}
|
||||
}
|
||||
if(found) return i + 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
gchar *
|
||||
gnc_timezone_menu_position_to_string(guint pos)
|
||||
{
|
||||
if(pos == 0) return NULL;
|
||||
return known_timezones[pos - 1];
|
||||
}
|
||||
|
||||
GtkWidget *
|
||||
gnc_ui_quote_tz_menu_create(Account *account)
|
||||
{
|
||||
gint i;
|
||||
GtkMenu *menu;
|
||||
GtkWidget *item;
|
||||
GtkWidget *omenu;
|
||||
gchar **itemstr;
|
||||
|
||||
/* add items here as needed, but bear in mind that right now these
|
||||
must be timezones that GNU libc understands. Also, I'd prefer if
|
||||
we only add things here we *know* we need. That's because in
|
||||
order to be portable to non GNU OSes, we may have to support
|
||||
whatever we add here manually on those systems. */
|
||||
|
||||
menu = GTK_MENU(gtk_menu_new());
|
||||
gtk_widget_show(GTK_WIDGET(menu));
|
||||
|
||||
item = gtk_menu_item_new_with_label(_("Use local time"));
|
||||
/* set user data to non NULL so we can detect this item specially. */
|
||||
gtk_object_set_user_data(GTK_OBJECT(item), (gpointer) 1);
|
||||
gtk_widget_show(item);
|
||||
gtk_menu_append(menu, item);
|
||||
|
||||
for(itemstr = &known_timezones[0]; *itemstr; itemstr++) {
|
||||
item = gtk_menu_item_new_with_label(*itemstr);
|
||||
gtk_widget_show(item);
|
||||
gtk_menu_append(menu, item);
|
||||
}
|
||||
|
||||
omenu = gtk_option_menu_new();
|
||||
gtk_widget_show(omenu);
|
||||
gtk_option_menu_set_menu(GTK_OPTION_MENU(omenu), GTK_WIDGET(menu));
|
||||
gnc_option_menu_init(omenu);
|
||||
|
||||
return omenu;
|
||||
}
|
||||
|
||||
/* =========================================================== */
|
||||
|
||||
static void
|
||||
gnc_option_menu_cb(GtkWidget *w, gpointer data)
|
||||
{
|
||||
GNCOptionCallback cb;
|
||||
gpointer _index;
|
||||
gint index;
|
||||
|
||||
cb = gtk_object_get_data(GTK_OBJECT(w), "gnc_option_cb");
|
||||
|
||||
_index = gtk_object_get_data(GTK_OBJECT(w), "gnc_option_index");
|
||||
index = GPOINTER_TO_INT(_index);
|
||||
|
||||
cb(w, index, data);
|
||||
}
|
||||
|
||||
static void
|
||||
option_menu_destroy_cb (GtkObject *obj, gpointer data)
|
||||
{
|
||||
GtkTooltips *tips = data;
|
||||
|
||||
gtk_object_unref (GTK_OBJECT (tips));
|
||||
}
|
||||
|
||||
/********************************************************************\
|
||||
* gnc_ui_create_option_button *
|
||||
* create an option button given the option structure *
|
||||
* *
|
||||
* Args: option_info - the option structure to use *
|
||||
* num_options - the number of options *
|
||||
* Returns: void *
|
||||
\*******************************************************************/
|
||||
GtkWidget *
|
||||
gnc_build_option_menu(GNCOptionInfo *option_info, gint num_options)
|
||||
{
|
||||
GtkTooltips *tooltips;
|
||||
GtkWidget *omenu;
|
||||
GtkWidget *menu;
|
||||
GtkWidget *menu_item;
|
||||
gint i;
|
||||
|
||||
omenu = gtk_option_menu_new();
|
||||
gtk_widget_show(omenu);
|
||||
|
||||
menu = gtk_menu_new();
|
||||
gtk_widget_show(menu);
|
||||
|
||||
tooltips = gtk_tooltips_new();
|
||||
|
||||
gtk_object_ref (GTK_OBJECT (tooltips));
|
||||
gtk_object_sink (GTK_OBJECT (tooltips));
|
||||
|
||||
for (i = 0; i < num_options; i++)
|
||||
{
|
||||
menu_item = gtk_menu_item_new_with_label(option_info[i].name);
|
||||
gtk_tooltips_set_tip(tooltips, menu_item, option_info[i].tip, NULL);
|
||||
gtk_widget_show(menu_item);
|
||||
|
||||
gtk_object_set_data(GTK_OBJECT(menu_item),
|
||||
"gnc_option_cb",
|
||||
option_info[i].callback);
|
||||
|
||||
gtk_object_set_data(GTK_OBJECT(menu_item),
|
||||
"gnc_option_index",
|
||||
GINT_TO_POINTER(i));
|
||||
|
||||
gtk_object_set_data(GTK_OBJECT(menu_item),
|
||||
"gnc_option_menu",
|
||||
omenu);
|
||||
|
||||
if (option_info[i].callback != NULL)
|
||||
gtk_signal_connect(GTK_OBJECT(menu_item), "activate",
|
||||
GTK_SIGNAL_FUNC(gnc_option_menu_cb),
|
||||
option_info[i].user_data);
|
||||
|
||||
gtk_menu_append(GTK_MENU(menu), menu_item);
|
||||
}
|
||||
|
||||
gtk_option_menu_set_menu(GTK_OPTION_MENU(omenu), menu);
|
||||
|
||||
gtk_signal_connect (GTK_OBJECT (omenu), "destroy",
|
||||
GTK_SIGNAL_FUNC (option_menu_destroy_cb), tooltips);
|
||||
|
||||
return omenu;
|
||||
}
|
||||
|
||||
|
||||
/********************************************************************\
|
||||
* gnc_get_pixmap *
|
||||
* returns a GnomePixmap widget given a pixmap filename *
|
||||
* *
|
||||
* Args: none *
|
||||
* Returns: GnomePixmap widget or NULL if there was a problem *
|
||||
\*******************************************************************/
|
||||
GtkWidget *
|
||||
gnc_get_pixmap (const char *name)
|
||||
{
|
||||
GtkWidget *pixmap;
|
||||
char *fullname;
|
||||
|
||||
g_return_val_if_fail (name != NULL, NULL);
|
||||
|
||||
fullname = g_strconcat (GNC_PIXMAP_DIR, "/", name, NULL);
|
||||
pixmap = gnome_pixmap_new_from_file (fullname);
|
||||
g_free (fullname);
|
||||
|
||||
return pixmap;
|
||||
}
|
||||
|
||||
|
||||
/********************************************************************\
|
||||
* gnc_get_imlib_image *
|
||||
* returns a GdkImlibImage object given a pixmap filename *
|
||||
* *
|
||||
* Args: none *
|
||||
* Returns: GnomePixmap widget or NULL if there was a problem *
|
||||
\*******************************************************************/
|
||||
GdkImlibImage *
|
||||
gnc_get_gdk_imlib_image (const char *name)
|
||||
{
|
||||
GdkImlibImage *image;
|
||||
|
||||
char *fullname;
|
||||
|
||||
g_return_val_if_fail (name != NULL, NULL);
|
||||
|
||||
fullname = g_strconcat (GNC_PIXMAP_DIR, "/", name, NULL);
|
||||
image = gdk_imlib_load_image (fullname);
|
||||
g_free (fullname);
|
||||
|
||||
return image;
|
||||
}
|
||||
|
||||
|
||||
/********************************************************************\
|
||||
* gnc_get_toolbar_style *
|
||||
* returns the current toolbar style for gnucash toolbars *
|
||||
* *
|
||||
* Args: none *
|
||||
* Returns: toolbar style *
|
||||
\*******************************************************************/
|
||||
GtkToolbarStyle
|
||||
gnc_get_toolbar_style(void)
|
||||
{
|
||||
GtkToolbarStyle tbstyle = GTK_TOOLBAR_BOTH;
|
||||
char *style_string;
|
||||
|
||||
style_string = gnc_lookup_multichoice_option("General",
|
||||
"Toolbar Buttons",
|
||||
"icons_and_text");
|
||||
|
||||
if (safe_strcmp(style_string, "icons_and_text") == 0)
|
||||
tbstyle = GTK_TOOLBAR_BOTH;
|
||||
else if (safe_strcmp(style_string, "icons_only") == 0)
|
||||
tbstyle = GTK_TOOLBAR_ICONS;
|
||||
else if (safe_strcmp(style_string, "text_only") == 0)
|
||||
tbstyle = GTK_TOOLBAR_TEXT;
|
||||
|
||||
if (style_string != NULL)
|
||||
free(style_string);
|
||||
|
||||
return tbstyle;
|
||||
}
|
||||
|
||||
/********************************************************************
|
||||
* gnc_get_mdi_mode *
|
||||
* returns the current Gnome MDI mode preference *
|
||||
********************************************************************/
|
||||
GnomeMDIMode
|
||||
gnc_get_mdi_mode(void) {
|
||||
GnomeMDIMode mode = GNOME_MDI_DEFAULT_MODE;
|
||||
char * mode_string = gnc_lookup_multichoice_option("General",
|
||||
"Application MDI mode",
|
||||
"");
|
||||
if(!safe_strcmp(mode_string, "mdi-notebook")) {
|
||||
mode = GNOME_MDI_NOTEBOOK;
|
||||
}
|
||||
else if(!safe_strcmp(mode_string, "mdi-toplevel")) {
|
||||
mode = GNOME_MDI_TOPLEVEL;
|
||||
}
|
||||
else if(!safe_strcmp(mode_string, "mdi-modal")) {
|
||||
mode = GNOME_MDI_MODAL;
|
||||
}
|
||||
else if(!safe_strcmp(mode_string, "mdi-default")) {
|
||||
mode = GNOME_MDI_DEFAULT_MODE;
|
||||
}
|
||||
|
||||
if(mode_string) free(mode_string);
|
||||
return mode;
|
||||
}
|
||||
|
||||
|
||||
/********************************************************************\
|
||||
* gnc_get_deficit_color *
|
||||
* fill in the 3 color values for the color of deficit values *
|
||||
* *
|
||||
* Args: color - color structure *
|
||||
* Returns: none *
|
||||
\*******************************************************************/
|
||||
void
|
||||
gnc_get_deficit_color(GdkColor *color)
|
||||
{
|
||||
color->red = 50000;
|
||||
color->green = 0;
|
||||
color->blue = 0;
|
||||
}
|
||||
|
||||
|
||||
/********************************************************************\
|
||||
* gnc_set_label_color *
|
||||
* sets the color of the label given the value *
|
||||
* *
|
||||
* Args: label - gtk label widget *
|
||||
* value - value to use to set color *
|
||||
* Returns: none *
|
||||
\*******************************************************************/
|
||||
void
|
||||
gnc_set_label_color(GtkWidget *label, gnc_numeric value)
|
||||
{
|
||||
gboolean deficit;
|
||||
GdkColormap *cm;
|
||||
GtkStyle *style;
|
||||
|
||||
if (!gnc_color_deficits())
|
||||
return;
|
||||
|
||||
cm = gtk_widget_get_colormap(GTK_WIDGET(label));
|
||||
style = gtk_widget_get_style(GTK_WIDGET(label));
|
||||
|
||||
style = gtk_style_copy(style);
|
||||
|
||||
deficit = gnc_numeric_negative_p (value);
|
||||
|
||||
if (deficit)
|
||||
{
|
||||
gnc_get_deficit_color(&style->fg[GTK_STATE_NORMAL]);
|
||||
gdk_colormap_alloc_color(cm, &style->fg[GTK_STATE_NORMAL], FALSE, TRUE);
|
||||
}
|
||||
else
|
||||
style->fg[GTK_STATE_NORMAL] = style->black;
|
||||
|
||||
gtk_widget_set_style(label, style);
|
||||
|
||||
gtk_style_unref(style);
|
||||
}
|
||||
|
||||
|
||||
/********************************************************************\
|
||||
* gnc_get_window_size *
|
||||
* returns the window size to use for the given option prefix, *
|
||||
* if window sizes are being saved, otherwise returns 0 for both. *
|
||||
* *
|
||||
* Args: prefix - the option name prefix *
|
||||
* width - pointer to width *
|
||||
* height - pointer to height *
|
||||
* Returns: nothing *
|
||||
\*******************************************************************/
|
||||
void
|
||||
gnc_get_window_size(const char *prefix, int *width, int *height)
|
||||
{
|
||||
int w, h;
|
||||
char *name;
|
||||
|
||||
if (gnc_lookup_boolean_option("General", "Save Window Geometry", TRUE))
|
||||
{
|
||||
name = g_strconcat(prefix, "_width", NULL);
|
||||
w = gnc_lookup_number_option("__gui", name, 0.0);
|
||||
g_free(name);
|
||||
|
||||
name = g_strconcat(prefix, "_height", NULL);
|
||||
h = gnc_lookup_number_option("__gui", name, 0.0);
|
||||
g_free(name);
|
||||
}
|
||||
else
|
||||
{
|
||||
w = 0;
|
||||
h = 0;
|
||||
}
|
||||
|
||||
if (width != NULL)
|
||||
*width = w;
|
||||
|
||||
if (height != NULL)
|
||||
*height = h;
|
||||
}
|
||||
|
||||
|
||||
/********************************************************************\
|
||||
* gnc_save_window_size *
|
||||
* save the window size into options whose names are determined *
|
||||
* by the string prefix. *
|
||||
* *
|
||||
* Args: prefix - determines the options used to save the values *
|
||||
* width - width of the window to save *
|
||||
* height - height of the window to save *
|
||||
* Returns: nothing *
|
||||
\********************************************************************/
|
||||
void
|
||||
gnc_save_window_size(const char *prefix, int width, int height)
|
||||
{
|
||||
char *name;
|
||||
gboolean save;
|
||||
|
||||
save = gnc_lookup_boolean_option("General", "Save Window Geometry", FALSE);
|
||||
|
||||
name = g_strconcat(prefix, "_width", NULL);
|
||||
if (save)
|
||||
gnc_set_number_option("__gui", name, width);
|
||||
else
|
||||
gnc_set_option_default("__gui", name);
|
||||
g_free(name);
|
||||
|
||||
name = g_strconcat(prefix, "_height", NULL);
|
||||
if (save)
|
||||
gnc_set_number_option("__gui", name, height);
|
||||
else
|
||||
gnc_set_option_default("__gui", name);
|
||||
g_free(name);
|
||||
}
|
||||
|
||||
|
||||
/********************************************************************\
|
||||
* gnc_fill_menu_with_data *
|
||||
* fill the user data values in the menu structure with the given *
|
||||
* value. The filling is done recursively. *
|
||||
* *
|
||||
* Args: info - the menu to fill *
|
||||
* data - the value to fill with *
|
||||
* Returns: nothing *
|
||||
\********************************************************************/
|
||||
void
|
||||
gnc_fill_menu_with_data(GnomeUIInfo *info, gpointer data)
|
||||
{
|
||||
if (info == NULL)
|
||||
return;
|
||||
|
||||
while (1)
|
||||
{
|
||||
switch (info->type)
|
||||
{
|
||||
case GNOME_APP_UI_RADIOITEMS:
|
||||
case GNOME_APP_UI_SUBTREE:
|
||||
case GNOME_APP_UI_SUBTREE_STOCK:
|
||||
gnc_fill_menu_with_data((GnomeUIInfo *) info->moreinfo, data);
|
||||
break;
|
||||
case GNOME_APP_UI_ENDOFINFO:
|
||||
return;
|
||||
default:
|
||||
info->user_data = data;
|
||||
break;
|
||||
}
|
||||
|
||||
info++;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
gnc_option_menu_init(GtkWidget * w)
|
||||
{
|
||||
GtkWidget * menu;
|
||||
GtkWidget * active;
|
||||
int i;
|
||||
|
||||
menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(w));
|
||||
|
||||
for(i = 0; i < g_list_length(GTK_MENU_SHELL(menu)->children); i++)
|
||||
{
|
||||
gtk_option_menu_set_history(GTK_OPTION_MENU(w), i);
|
||||
active = gtk_menu_get_active(GTK_MENU(menu));
|
||||
gtk_object_set_data(GTK_OBJECT(active),
|
||||
"option_index",
|
||||
GINT_TO_POINTER(i));
|
||||
}
|
||||
|
||||
gtk_option_menu_set_history(GTK_OPTION_MENU(w), 0);
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
gnc_option_menu_get_active(GtkWidget * w)
|
||||
{
|
||||
GtkWidget * menu;
|
||||
GtkWidget * menuitem;
|
||||
|
||||
menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(w));
|
||||
menuitem = gtk_menu_get_active(GTK_MENU(menu));
|
||||
|
||||
return GPOINTER_TO_INT(gtk_object_get_data(GTK_OBJECT(menuitem),
|
||||
"option_index"));
|
||||
}
|
||||
|
||||
|
||||
/********************************************************************\
|
||||
* gnc_window_adjust_for_screen *
|
||||
* adjust the window size if it is bigger than the screen size. *
|
||||
* *
|
||||
* Args: window - the window to adjust *
|
||||
* Returns: nothing *
|
||||
\********************************************************************/
|
||||
void
|
||||
gnc_window_adjust_for_screen(GtkWindow * window)
|
||||
{
|
||||
gint screen_width;
|
||||
gint screen_height;
|
||||
gint width;
|
||||
gint height;
|
||||
|
||||
if (window == NULL)
|
||||
return;
|
||||
|
||||
g_return_if_fail(GTK_IS_WINDOW(window));
|
||||
if (GTK_WIDGET(window)->window == NULL)
|
||||
return;
|
||||
|
||||
screen_width = gdk_screen_width();
|
||||
screen_height = gdk_screen_height();
|
||||
gdk_window_get_size(GTK_WIDGET(window)->window, &width, &height);
|
||||
|
||||
if ((width <= screen_width) && (height <= screen_height))
|
||||
return;
|
||||
|
||||
width = MIN(width, screen_width - 10);
|
||||
width = MAX(width, 0);
|
||||
|
||||
height = MIN(height, screen_height - 10);
|
||||
height = MAX(height, 0);
|
||||
|
||||
gdk_window_resize(GTK_WIDGET(window)->window, width, height);
|
||||
gtk_widget_queue_resize(GTK_WIDGET(window));
|
||||
}
|
||||
|
||||
|
||||
typedef struct
|
||||
{
|
||||
int row;
|
||||
int col;
|
||||
gboolean checked;
|
||||
} GNCCListCheckNode;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
GdkPixmap *on_pixmap;
|
||||
GdkPixmap *off_pixmap;
|
||||
GdkBitmap *mask;
|
||||
|
||||
GList *pending_checks;
|
||||
} GNCCListCheckInfo;
|
||||
|
||||
static void
|
||||
free_check_list (GList *list)
|
||||
{
|
||||
GList *node;
|
||||
|
||||
for (node = list; node; node = node->next)
|
||||
g_free (node->data);
|
||||
|
||||
g_list_free (list);
|
||||
}
|
||||
|
||||
static void
|
||||
check_realize (GtkWidget *widget, gpointer user_data)
|
||||
{
|
||||
GNCCListCheckInfo *check_info = user_data;
|
||||
GdkGCValues gc_values;
|
||||
GtkCList *clist;
|
||||
gint font_height;
|
||||
gint check_size;
|
||||
GdkColormap *cm;
|
||||
GtkStyle *style;
|
||||
GList *list;
|
||||
GList *node;
|
||||
GdkGC *gc;
|
||||
|
||||
if (check_info->mask)
|
||||
return;
|
||||
|
||||
style = gtk_widget_get_style (widget);
|
||||
|
||||
font_height = style->font->ascent + style->font->descent;
|
||||
check_size = (font_height > 0) ? font_height - 3 : 9;
|
||||
|
||||
check_info->mask = gdk_pixmap_new (NULL, check_size, check_size, 1);
|
||||
|
||||
check_info->on_pixmap = gdk_pixmap_new (widget->window,
|
||||
check_size, check_size, -1);
|
||||
|
||||
check_info->off_pixmap = gdk_pixmap_new (widget->window,
|
||||
check_size, check_size, -1);
|
||||
|
||||
gc_values.foreground = style->white;
|
||||
gc = gtk_gc_get (1, gtk_widget_get_colormap (widget),
|
||||
&gc_values, GDK_GC_FOREGROUND);
|
||||
|
||||
gdk_draw_rectangle (check_info->mask, gc, TRUE,
|
||||
0, 0, check_size, check_size);
|
||||
|
||||
gtk_gc_release (gc);
|
||||
|
||||
gc = style->base_gc[GTK_STATE_NORMAL];
|
||||
|
||||
gdk_draw_rectangle (check_info->on_pixmap, gc, TRUE,
|
||||
0, 0, check_size, check_size);
|
||||
gdk_draw_rectangle (check_info->off_pixmap, gc, TRUE,
|
||||
0, 0, check_size, check_size);
|
||||
|
||||
cm = gtk_widget_get_colormap (widget);
|
||||
|
||||
gc_values.foreground.red = 0;
|
||||
gc_values.foreground.green = 65535 / 2;
|
||||
gc_values.foreground.blue = 0;
|
||||
|
||||
gdk_colormap_alloc_color (cm, &gc_values.foreground, FALSE, TRUE);
|
||||
|
||||
gc = gdk_gc_new_with_values (widget->window, &gc_values, GDK_GC_FOREGROUND);
|
||||
|
||||
gdk_draw_line (check_info->on_pixmap, gc,
|
||||
1, check_size / 2,
|
||||
check_size / 3, check_size - 5);
|
||||
gdk_draw_line (check_info->on_pixmap, gc,
|
||||
1, check_size / 2 + 1,
|
||||
check_size / 3, check_size - 4);
|
||||
|
||||
gdk_draw_line (check_info->on_pixmap, gc,
|
||||
check_size / 3, check_size - 5,
|
||||
check_size - 3, 2);
|
||||
gdk_draw_line (check_info->on_pixmap, gc,
|
||||
check_size / 3, check_size - 4,
|
||||
check_size - 3, 1);
|
||||
|
||||
gdk_gc_unref (gc);
|
||||
|
||||
clist = GTK_CLIST (widget);
|
||||
|
||||
list = check_info->pending_checks;
|
||||
check_info->pending_checks = NULL;
|
||||
|
||||
/* reverse so we apply in the order of the calls */
|
||||
list = g_list_reverse (list);
|
||||
|
||||
for (node = list; node; node = node->next)
|
||||
{
|
||||
GNCCListCheckNode *cl_node = node->data;
|
||||
|
||||
gnc_clist_set_check (clist, cl_node->row, cl_node->col, cl_node->checked);
|
||||
}
|
||||
|
||||
free_check_list (list);
|
||||
}
|
||||
|
||||
static void
|
||||
check_unrealize (GtkWidget *widget, gpointer user_data)
|
||||
{
|
||||
GNCCListCheckInfo *check_info = user_data;
|
||||
|
||||
if (check_info->mask)
|
||||
gdk_bitmap_unref (check_info->mask);
|
||||
|
||||
if (check_info->on_pixmap)
|
||||
gdk_pixmap_unref (check_info->on_pixmap);
|
||||
|
||||
if (check_info->off_pixmap)
|
||||
gdk_pixmap_unref (check_info->off_pixmap);
|
||||
|
||||
check_info->mask = NULL;
|
||||
check_info->on_pixmap = NULL;
|
||||
check_info->off_pixmap = NULL;
|
||||
}
|
||||
|
||||
static void
|
||||
check_destroy (GtkWidget *widget, gpointer user_data)
|
||||
{
|
||||
GNCCListCheckInfo *check_info = user_data;
|
||||
|
||||
free_check_list (check_info->pending_checks);
|
||||
check_info->pending_checks = NULL;
|
||||
|
||||
g_free (check_info);
|
||||
}
|
||||
|
||||
static GNCCListCheckInfo *
|
||||
gnc_clist_add_check (GtkCList *list)
|
||||
{
|
||||
GNCCListCheckInfo *check_info;
|
||||
GtkObject *object;
|
||||
|
||||
object = GTK_OBJECT (list);
|
||||
|
||||
check_info = gtk_object_get_data (object, "gnc-check-info");
|
||||
if (check_info)
|
||||
{
|
||||
PWARN ("clist already has check");
|
||||
return check_info;
|
||||
}
|
||||
|
||||
check_info = g_new0 (GNCCListCheckInfo, 1);
|
||||
|
||||
gtk_object_set_data (object, "gnc-check-info", check_info);
|
||||
|
||||
gtk_signal_connect (object, "realize",
|
||||
GTK_SIGNAL_FUNC (check_realize), check_info);
|
||||
gtk_signal_connect (object, "unrealize",
|
||||
GTK_SIGNAL_FUNC (check_unrealize), check_info);
|
||||
gtk_signal_connect (object, "destroy",
|
||||
GTK_SIGNAL_FUNC (check_destroy), check_info);
|
||||
|
||||
if (GTK_WIDGET_REALIZED (GTK_WIDGET (list)))
|
||||
check_realize (GTK_WIDGET (list), check_info);
|
||||
|
||||
return check_info;
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
gnc_clist_set_check (GtkCList *list, int row, int col, gboolean checked)
|
||||
{
|
||||
GNCCListCheckInfo *check_info;
|
||||
GdkPixmap *pixmap;
|
||||
|
||||
g_return_if_fail (GTK_IS_CLIST (list));
|
||||
|
||||
check_info = gtk_object_get_data (GTK_OBJECT (list), "gnc-check-info");
|
||||
if (!check_info)
|
||||
check_info = gnc_clist_add_check (list);
|
||||
|
||||
if (!GTK_WIDGET_REALIZED (GTK_WIDGET (list)))
|
||||
{
|
||||
GNCCListCheckNode *node;
|
||||
|
||||
node = g_new0 (GNCCListCheckNode, 1);
|
||||
|
||||
node->row = row;
|
||||
node->col = col;
|
||||
node->checked = checked;
|
||||
|
||||
check_info->pending_checks =
|
||||
g_list_prepend (check_info->pending_checks, node);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
pixmap = checked ? check_info->on_pixmap : check_info->off_pixmap;
|
||||
|
||||
if (checked)
|
||||
gtk_clist_set_pixmap (list, row, col, pixmap, check_info->mask);
|
||||
else
|
||||
gtk_clist_set_text (list, row, col, "");
|
||||
}
|
||||
|
||||
void
|
||||
gnc_clist_columns_autosize (GtkCList *list)
|
||||
{
|
||||
GtkStyle *style;
|
||||
GdkFont *font;
|
||||
gint i;
|
||||
|
||||
if (!list) return;
|
||||
g_return_if_fail (GTK_IS_CLIST (list));
|
||||
|
||||
style = gtk_widget_get_style (GTK_WIDGET(list));
|
||||
if (!style)
|
||||
return;
|
||||
|
||||
font = style->font;
|
||||
if (!font)
|
||||
return;
|
||||
|
||||
for (i = 0; TRUE; i++)
|
||||
{
|
||||
GtkWidget *widget;
|
||||
char *title;
|
||||
gint width;
|
||||
|
||||
widget = gtk_clist_get_column_widget (list, i);
|
||||
if (!widget)
|
||||
break;
|
||||
|
||||
if (!GTK_IS_LABEL (widget))
|
||||
continue;
|
||||
|
||||
gtk_label_get (GTK_LABEL (widget), &title);
|
||||
|
||||
width = gdk_string_width (font, title);
|
||||
gtk_clist_set_column_min_width (list, i, width + 5);
|
||||
}
|
||||
|
||||
gtk_clist_columns_autosize (list);
|
||||
}
|
||||
|
||||
|
||||
static gboolean glade_inited = FALSE;
|
||||
|
||||
GladeXML *
|
||||
gnc_glade_xml_new (const char *filename, const char *root)
|
||||
{
|
||||
GladeXML *xml;
|
||||
char *fname;
|
||||
|
||||
g_return_val_if_fail (filename != NULL, NULL);
|
||||
g_return_val_if_fail (root != NULL, NULL);
|
||||
|
||||
if (!glade_inited)
|
||||
{
|
||||
glade_gnome_init ();
|
||||
glade_inited = TRUE;
|
||||
}
|
||||
|
||||
fname = g_strconcat (GNC_GLADE_DIR, "/", filename, NULL);
|
||||
|
||||
xml = glade_xml_new (fname, root);
|
||||
|
||||
g_free (fname);
|
||||
|
||||
return xml;
|
||||
}
|
||||
|
||||
GtkWidget *
|
||||
gnc_glade_lookup_widget (GtkWidget *widget, const char *name)
|
||||
{
|
||||
GladeXML *xml;
|
||||
|
||||
if (!widget || !name) return NULL;
|
||||
|
||||
xml = glade_get_widget_tree (widget);
|
||||
if (!xml) return NULL;
|
||||
|
||||
return glade_xml_get_widget (xml, name);
|
||||
}
|
@ -1,95 +0,0 @@
|
||||
/********************************************************************\
|
||||
* dialog-utils.h -- utility functions for creating dialogs *
|
||||
* for GnuCash *
|
||||
* Copyright (C) 1999-2000 Linas Vepstas *
|
||||
* *
|
||||
* This program is free software; you can redistribute it and/or *
|
||||
* modify it under the terms of the GNU General Public License as *
|
||||
* published by the Free Software Foundation; either version 2 of *
|
||||
* the License, or (at your option) any later version. *
|
||||
* *
|
||||
* This program is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU General Public License for more details. *
|
||||
* *
|
||||
* You should have received a copy of the GNU General Public License*
|
||||
* along with this program; if not, contact: *
|
||||
* *
|
||||
* Free Software Foundation Voice: +1-617-542-5942 *
|
||||
* 59 Temple Place - Suite 330 Fax: +1-617-542-2652 *
|
||||
* Boston, MA 02111-1307, USA gnu@gnu.org *
|
||||
* *
|
||||
\********************************************************************/
|
||||
|
||||
#ifndef DIALOG_UTILS_H
|
||||
#define DIALOG_UTILS_H
|
||||
|
||||
#include <glade/glade.h>
|
||||
#include <gnome.h>
|
||||
|
||||
#include "Account.h"
|
||||
|
||||
|
||||
/* option button callback function */
|
||||
typedef void (*GNCOptionCallback) (GtkWidget *, gint index,
|
||||
gpointer user_data);
|
||||
|
||||
/* Structure for building option buttons */
|
||||
typedef struct _GNCOptionInfo GNCOptionInfo;
|
||||
struct _GNCOptionInfo
|
||||
{
|
||||
char *name;
|
||||
char *tip;
|
||||
GNCOptionCallback callback;
|
||||
gpointer user_data;
|
||||
};
|
||||
|
||||
|
||||
/**** PROTOTYPES *************************************************/
|
||||
GtkWidget * gnc_ui_source_menu_create (Account *account);
|
||||
|
||||
guint gnc_find_timezone_menu_position(const gchar *timezone);
|
||||
gchar * gnc_timezone_menu_position_to_string(guint pos);
|
||||
GtkWidget * gnc_ui_quote_tz_menu_create (Account *account);
|
||||
|
||||
GtkWidget * gnc_build_option_menu (GNCOptionInfo *option_info,
|
||||
gint num_options);
|
||||
|
||||
GtkWidget * gnc_get_pixmap (const char *name);
|
||||
GdkImlibImage * gnc_get_gdk_imlib_image (const char *name);
|
||||
|
||||
GtkToolbarStyle gnc_get_toolbar_style (void);
|
||||
GnomeMDIMode gnc_get_mdi_mode(void);
|
||||
|
||||
void gnc_get_deficit_color (GdkColor *color);
|
||||
void gnc_set_label_color (GtkWidget *label, gnc_numeric value);
|
||||
|
||||
void gnc_get_window_size (const char *prefix, int *width, int *height);
|
||||
void gnc_save_window_size (const char *prefix, int width, int height);
|
||||
|
||||
void gnc_fill_menu_with_data (GnomeUIInfo *info, gpointer data);
|
||||
|
||||
void gnc_option_menu_init (GtkWidget * option_menu);
|
||||
int gnc_option_menu_get_active (GtkWidget * option_menu);
|
||||
|
||||
void gnc_window_adjust_for_screen (GtkWindow * window);
|
||||
|
||||
|
||||
/* This function sets or clears a check mark in a GtkCList row.
|
||||
* There are some restrictions on using this function. If you mix
|
||||
* this function with gtk_clist_{insert, prepend, remove} before
|
||||
* the clist is realized, then the checks may appear in the wrong
|
||||
* place. Stick to gtk_clist_append, or use gnc_clist_set_check
|
||||
* after you have built the list. This only applies to unrealized
|
||||
* widgets. */
|
||||
void gnc_clist_set_check (GtkCList *list, int row, int col, gboolean checked);
|
||||
|
||||
/* This function is similar to gtk_clist_columns_autosize, but
|
||||
* also takes into account the column titles. */
|
||||
void gnc_clist_columns_autosize (GtkCList *list);
|
||||
|
||||
GladeXML * gnc_glade_xml_new (const char *filename, const char *root);
|
||||
GtkWidget * gnc_glade_lookup_widget (GtkWidget *widget, const char *name);
|
||||
|
||||
#endif
|
Loading…
Reference in New Issue
Block a user