Convert to newer method of allocating private data structures for

objects.  This allows glib to consolidate the space for all of the
various public and private data structures on an object and reduce
memory fragmentation.



git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@11848 57a11ea4-9604-0410-9ed3-97b8803252fd
This commit is contained in:
David Hampton 2005-11-06 02:47:18 +00:00
parent 6b5cfa04cf
commit 087de2b80a
20 changed files with 284 additions and 175 deletions

View File

@ -54,7 +54,7 @@ static void gnc_general_search_init (GNCGeneralSearch *gsl);
static void gnc_general_search_class_init (GNCGeneralSearchClass *class);
static void gnc_general_search_destroy (GtkObject *object);
#define _PRIVATE(x) (((GNCSearchString *)(x))->priv)
typedef struct _GNCGeneralSearchPrivate GNCGeneralSearchPrivate;
struct _GNCGeneralSearchPrivate {
GUID guid;
@ -66,6 +66,9 @@ struct _GNCGeneralSearchPrivate {
gint component_id;
};
#define _PRIVATE(o) \
(G_TYPE_INSTANCE_GET_PRIVATE ((o), GNC_TYPE_GENERAL_SEARCH, GNCGeneralSearchPrivate))
static GtkHBoxClass *parent_class;
static guint general_search_signals[LAST_SIGNAL];
@ -122,12 +125,13 @@ gnc_general_search_class_init (GNCGeneralSearchClass *klass)
object_class->destroy = gnc_general_search_destroy;
klass->changed = NULL;
g_type_class_add_private(klass, sizeof(GNCGeneralSearchPrivate));
}
static void
gnc_general_search_init (GNCGeneralSearch *gsl)
{
gsl->priv = g_malloc0 (sizeof (*gsl->priv));
gsl->selected_item = NULL;
}
@ -135,6 +139,7 @@ static void
gnc_general_search_destroy (GtkObject *object)
{
GNCGeneralSearch *gsl;
GNCGeneralSearchPrivate *priv;
g_return_if_fail (object != NULL);
g_return_if_fail (GNC_IS_GENERAL_SEARCH (object));
@ -144,21 +149,15 @@ gnc_general_search_destroy (GtkObject *object)
gsl->entry = NULL;
gsl->button = NULL;
if (gsl->priv) {
/* Clear the callbacks */
if (gsl->priv->sw) {
gnc_search_dialog_set_select_cb (gsl->priv->sw, NULL,
NULL, FALSE);
gnc_search_dialog_disconnect (gsl->priv->sw, gsl);
gsl->priv->sw = NULL;
}
priv = _PRIVATE(gsl);
/* Clear the callbacks */
if (priv->sw) {
gnc_search_dialog_set_select_cb (priv->sw, NULL, NULL, FALSE);
gnc_search_dialog_disconnect (priv->sw, gsl);
priv->sw = NULL;
/* Unregister ourselves */
gnc_unregister_gui_component (gsl->priv->component_id);
/* And let go */
g_free (gsl->priv);
gsl->priv = NULL;
gnc_unregister_gui_component (priv->component_id);
}
if (GTK_OBJECT_CLASS (parent_class)->destroy)
@ -169,12 +168,14 @@ gnc_general_search_destroy (GtkObject *object)
static void
reset_selection_text (GNCGeneralSearch *gsl)
{
GNCGeneralSearchPrivate *priv;
const char *text;
priv = _PRIVATE(gsl);
if (gsl->selected_item == NULL)
text = "";
else
text = gncObjectPrintable (gsl->priv->type, gsl->selected_item);
text = gncObjectPrintable (priv->type, gsl->selected_item);
gtk_entry_set_text(GTK_ENTRY(gsl->entry), text);
}
@ -184,10 +185,12 @@ static void
refresh_handler (GHashTable *changes, gpointer data)
{
GNCGeneralSearch *gsl = data;
GNCGeneralSearchPrivate *priv;
const EventInfo *info;
priv = _PRIVATE(gsl);
if (changes) {
info = gnc_gui_get_entity_events (changes, &gsl->priv->guid);
info = gnc_gui_get_entity_events (changes, &priv->guid);
if (info) {
if (info->event_mask & GNC_EVENT_DESTROY)
gsl->selected_item = NULL;
@ -209,7 +212,10 @@ static int
on_close_cb (GtkDialog *dialog, gpointer user_data)
{
GNCGeneralSearch *gsl = user_data;
gsl->priv->sw = NULL;
GNCGeneralSearchPrivate *priv;
priv = _PRIVATE(gsl);
priv->sw = NULL;
return FALSE;
}
@ -218,21 +224,23 @@ static void
search_cb(GtkButton * button, gpointer user_data)
{
GNCGeneralSearch *gsl = user_data;
GNCGeneralSearchPrivate *priv;
GNCSearchWindow *sw;
if (gsl->priv->sw) {
gnc_search_dialog_raise (gsl->priv->sw);
priv = _PRIVATE(gsl);
if (priv->sw) {
gnc_search_dialog_raise (priv->sw);
return;
}
sw = (gsl->priv->search_cb)(gsl->selected_item, gsl->priv->user_data);
sw = (priv->search_cb)(gsl->selected_item, priv->user_data);
/* NULL means nothing to 'select' */
if (sw == NULL)
return;
/* Ok, save this search window and setup callbacks */
gsl->priv->sw = sw;
priv->sw = sw;
/* Catch when the search dialog closes */
gnc_search_dialog_connect_on_close (sw, GTK_SIGNAL_FUNC (on_close_cb),
@ -272,6 +280,7 @@ gnc_general_search_new (GNCIdTypeConst type, const char *label,
GNCSearchCB search_cb, gpointer user_data)
{
GNCGeneralSearch *gsl;
GNCGeneralSearchPrivate *priv;
const QofParam *get_guid;
g_return_val_if_fail (type && label && search_cb, NULL);
@ -279,15 +288,16 @@ gnc_general_search_new (GNCIdTypeConst type, const char *label,
get_guid = qof_class_get_parameter (type, QOF_PARAM_GUID);
g_return_val_if_fail (get_guid, NULL);
gsl = g_object_new (gnc_general_search_get_type (), NULL);
gsl = g_object_new (GNC_TYPE_GENERAL_SEARCH, NULL);
create_children (gsl, label);
gsl->priv->type = type;
gsl->priv->search_cb = search_cb;
gsl->priv->user_data = user_data;
gsl->priv->get_guid = get_guid;
gsl->priv->component_id =
priv = _PRIVATE(gsl);
priv->type = type;
priv->search_cb = search_cb;
priv->user_data = user_data;
priv->get_guid = get_guid;
priv->component_id =
gnc_register_gui_component (GNCGENERALSEARCH_CLASS,
refresh_handler, NULL, gsl);
@ -306,9 +316,12 @@ gnc_general_search_new (GNCIdTypeConst type, const char *label,
void
gnc_general_search_set_selected (GNCGeneralSearch *gsl, gpointer selection)
{
GNCGeneralSearchPrivate *priv;
g_return_if_fail(gsl != NULL);
g_return_if_fail(GNC_IS_GENERAL_SEARCH(gsl));
priv = _PRIVATE(gsl);
if (selection != gsl->selected_item) {
gsl->selected_item = selection;
reset_selection_text (gsl);
@ -316,18 +329,17 @@ gnc_general_search_set_selected (GNCGeneralSearch *gsl, gpointer selection)
general_search_signals[SELECTION_CHANGED]);
}
gnc_gui_component_clear_watches (gsl->priv->component_id);
gnc_gui_component_clear_watches (priv->component_id);
if (selection)
{
const QofParam *get_guid = gsl->priv->get_guid;
gsl->priv->guid = * ((GUID *)(get_guid->param_getfcn
if (selection) {
const QofParam *get_guid = priv->get_guid;
priv->guid = * ((GUID *)(get_guid->param_getfcn
(gsl->selected_item, get_guid)));
gnc_gui_component_watch_entity
(gsl->priv->component_id, &(gsl->priv->guid),
(priv->component_id, &(priv->guid),
GNC_EVENT_MODIFY | GNC_EVENT_DESTROY);
} else
gsl->priv->guid = *xaccGUIDNULL ();
priv->guid = *xaccGUIDNULL ();
}
/**

View File

@ -36,14 +36,17 @@
#include "dialog-search.h"
#include "gnc-book.h"
#define GNC_TYPE_GENERAL_SEARCH \
(gnc_general_search_get_type ())
#define GNC_GENERAL_SEARCH(obj) \
G_TYPE_CHECK_INSTANCE_CAST (obj, gnc_general_search_get_type(), GNCGeneralSearch)
G_TYPE_CHECK_INSTANCE_CAST (obj, GNC_TYPE_GENERAL_SEARCH, GNCGeneralSearch)
#define GNC_GENERAL_SEARCH_CLASS(klass) \
G_TYPE_CLASS_CAST (klass, gnc_general_search_get_type(), \
G_TYPE_CLASS_CAST (klass, GNC_TYPE_GENERAL_SEARCH, \
GNCGeneralSearchClass)
#define GNC_IS_GENERAL_SEARCH(obj) \
G_TYPE_CHECK_INSTANCE_TYPE (obj, gnc_general_search_get_type ())
G_TYPE_CHECK_INSTANCE_TYPE (obj, GNC_TYPE_GENERAL_SEARCH)
/*
* If this returns NULL, then do nothing (probably an edit window). If
@ -54,7 +57,6 @@ typedef GNCSearchWindow *(*GNCSearchCB) (gpointer start, gpointer user_data);
typedef struct {
GtkHBox hbox;
struct _GNCGeneralSearchPrivate *priv;
GtkWidget * entry; /* display of selection name */
GtkWidget * button; /* button for popping up search window */

View File

@ -42,13 +42,16 @@ static void gnc_search_account_class_init (GNCSearchAccountClass *class);
static void gnc_search_account_init (GNCSearchAccount *gspaper);
static void gnc_search_account_finalize (GObject *obj);
#define _PRIVATE(x) (((GNCSearchAccount *)(x))->priv)
typedef struct _GNCSearchAccountPrivate GNCSearchAccountPrivate;
struct _GNCSearchAccountPrivate {
gboolean match_all;
GList * selected_accounts;
};
#define _PRIVATE(o) \
(G_TYPE_INSTANCE_GET_PRIVATE ((o), GNC_TYPE_SEARCH_ACCOUNT, GNCSearchAccountPrivate))
static GNCSearchCoreTypeClass *parent_class;
@ -94,12 +97,13 @@ gnc_search_account_class_init (GNCSearchAccountClass *class)
gnc_search_core_type->get_widget = gncs_get_widget;
gnc_search_core_type->get_predicate = gncs_get_predicate;
gnc_search_core_type->clone = gncs_clone;
g_type_class_add_private(class, sizeof(GNCSearchAccountPrivate));
}
static void
gnc_search_account_init (GNCSearchAccount *o)
{
o->priv = g_malloc0 (sizeof (*o->priv));
o->how = GUID_MATCH_ANY;
}
@ -109,8 +113,6 @@ gnc_search_account_finalize (GObject *obj)
GNCSearchAccount *o = (GNCSearchAccount *)obj;
g_assert (IS_GNCSEARCH_ACCOUNT (o));
g_free(o->priv);
G_OBJECT_CLASS (parent_class)->finalize(obj);
}
@ -124,7 +126,7 @@ gnc_search_account_finalize (GObject *obj)
GNCSearchAccount *
gnc_search_account_new (void)
{
GNCSearchAccount *o = g_object_new(gnc_search_account_get_type (), NULL);
GNCSearchAccount *o = g_object_new(GNC_TYPE_SEARCH_ACCOUNT, NULL);
return o;
}
@ -138,8 +140,12 @@ gnc_search_account_new (void)
GNCSearchAccount *
gnc_search_account_matchall_new (void)
{
GNCSearchAccount *o = g_object_new(gnc_search_account_get_type (), NULL);
o->priv->match_all = TRUE;
GNCSearchAccount *o;
GNCSearchAccountPrivate *priv;
o = g_object_new(GNC_TYPE_SEARCH_ACCOUNT, NULL);
priv = _PRIVATE(o);
priv->match_all = TRUE;
o->how = GUID_MATCH_ALL;
return o;
}
@ -148,12 +154,14 @@ static gboolean
gncs_validate (GNCSearchCoreType *fe)
{
GNCSearchAccount *fi = (GNCSearchAccount *)fe;
GNCSearchAccountPrivate *priv;
gboolean valid = TRUE;
g_return_val_if_fail (fi, FALSE);
g_return_val_if_fail (IS_GNCSEARCH_ACCOUNT (fi), FALSE);
if (fi->priv->selected_accounts == NULL && fi->how ) {
priv = _PRIVATE(fi);
if (priv->selected_accounts == NULL && fi->how ) {
valid = FALSE;
gnc_error_dialog (NULL, _("You have not selected any accounts"));
}
@ -192,12 +200,14 @@ static GtkWidget *
make_menu (GNCSearchCoreType *fe)
{
GNCSearchAccount *fi = (GNCSearchAccount *)fe;
GNCSearchAccountPrivate *priv;
GtkWidget *menu, *item, *first, *opmenu;
int current = 0, index = 0;
menu = gtk_menu_new ();
if (fi->priv->match_all) {
priv = _PRIVATE(fi);
if (priv->match_all) {
ADD_MENU_ITEM (_("matches all accounts"), GUID_MATCH_ALL);
first = item;
} else {
@ -218,7 +228,10 @@ make_menu (GNCSearchCoreType *fe)
static char *
describe_button (GNCSearchAccount *fi)
{
if (fi->priv->selected_accounts)
GNCSearchAccountPrivate *priv;
priv = _PRIVATE(fi);
if (priv->selected_accounts)
return (_("Selected Accounts"));
return (_("Choose Accounts"));
}
@ -226,6 +239,7 @@ describe_button (GNCSearchAccount *fi)
static void
button_clicked (GtkButton *button, GNCSearchAccount *fi)
{
GNCSearchAccountPrivate *priv;
GtkDialog *dialog;
GtkWidget *account_tree;
GtkWidget *accounts_scroller;
@ -240,9 +254,10 @@ button_clicked (GtkButton *button, GNCSearchAccount *fi)
gtk_tree_selection_set_mode (selection, GTK_SELECTION_MULTIPLE);
/* Select the currently-selected accounts */
if (fi->priv->selected_accounts)
priv = _PRIVATE(fi);
if (priv->selected_accounts)
gnc_tree_view_account_set_selected_accounts (GNC_TREE_VIEW_ACCOUNT(account_tree),
fi->priv->selected_accounts, FALSE);
priv->selected_accounts, FALSE);
/* Create the account scroller and put the tree in it */
accounts_scroller = gtk_scrolled_window_new (NULL, NULL);
@ -271,10 +286,10 @@ button_clicked (GtkButton *button, GNCSearchAccount *fi)
/* Now run the dialog */
if (gtk_dialog_run (dialog) == GTK_RESPONSE_OK) {
if (fi->priv->selected_accounts)
g_list_free (fi->priv->selected_accounts);
if (priv->selected_accounts)
g_list_free (priv->selected_accounts);
fi->priv->selected_accounts =
priv->selected_accounts =
gnc_tree_view_account_get_selected_accounts (GNC_TREE_VIEW_ACCOUNT (account_tree));
desc = describe_button (fi);
@ -316,13 +331,15 @@ gncs_get_widget (GNCSearchCoreType *fe)
static QueryPredData_t gncs_get_predicate (GNCSearchCoreType *fe)
{
GNCSearchAccountPrivate *priv;
GNCSearchAccount *fi = (GNCSearchAccount *)fe;
GList *l = NULL, *node;
g_return_val_if_fail (fi, NULL);
g_return_val_if_fail (IS_GNCSEARCH_ACCOUNT (fi), NULL);
for (node = fi->priv->selected_accounts; node; node = node->next) {
priv = _PRIVATE(fi);
for (node = priv->selected_accounts; node; node = node->next) {
Account *acc = node->data;
const GUID *guid = xaccAccountGetGUID (acc);
l = g_list_prepend (l, (gpointer)guid);
@ -335,14 +352,17 @@ static QueryPredData_t gncs_get_predicate (GNCSearchCoreType *fe)
static GNCSearchCoreType *gncs_clone(GNCSearchCoreType *fe)
{
GNCSearchAccount *se, *fse = (GNCSearchAccount *)fe;
GNCSearchAccountPrivate *se_priv, *fse_priv;
g_return_val_if_fail (fse, NULL);
g_return_val_if_fail (IS_GNCSEARCH_ACCOUNT (fse), NULL);
fse_priv = _PRIVATE(fse);
se = gnc_search_account_new ();
se_priv = _PRIVATE(se);
se->how = fse->how;
se->priv->match_all = fse->priv->match_all;
se->priv->selected_accounts = g_list_copy (fse->priv->selected_accounts);
se_priv->match_all = fse_priv->match_all;
se_priv->selected_accounts = g_list_copy (fse_priv->selected_accounts);
return (GNCSearchCoreType *)se;
}

View File

@ -24,16 +24,16 @@
#include "search-core-type.h"
#include "QueryNew.h"
#define GNCSEARCH_ACCOUNT(obj) GTK_CHECK_CAST (obj, gnc_search_account_get_type (), GNCSearchAccount)
#define GNCSEARCH_ACCOUNT_CLASS(klass) GTK_CHECK_CLASS_CAST (klass, gnc_search_account_get_type (), GNCSearchAccountClass)
#define IS_GNCSEARCH_ACCOUNT(obj) GTK_CHECK_TYPE (obj, gnc_search_account_get_type ())
#define GNC_TYPE_SEARCH_ACCOUNT (gnc_search_account_get_type ())
#define GNCSEARCH_ACCOUNT(obj) GTK_CHECK_CAST (obj, GNC_TYPE_SEARCH_ACCOUNT, GNCSearchAccount)
#define GNCSEARCH_ACCOUNT_CLASS(klass) GTK_CHECK_CLASS_CAST (klass, GNC_TYPE_SEARCH_ACCOUNT, GNCSearchAccountClass)
#define IS_GNCSEARCH_ACCOUNT(obj) GTK_CHECK_TYPE (obj, GNC_TYPE_SEARCH_ACCOUNT)
typedef struct _GNCSearchAccount GNCSearchAccount;
typedef struct _GNCSearchAccountClass GNCSearchAccountClass;
struct _GNCSearchAccount {
GNCSearchCoreType parent;
struct _GNCSearchAccountPrivate *priv;
guid_match_t how;
};

View File

@ -39,11 +39,15 @@ static void gnc_search_boolean_class_init (GNCSearchBooleanClass *class);
static void gnc_search_boolean_init (GNCSearchBoolean *gspaper);
static void gnc_search_boolean_finalize (GObject *obj);
#define _PRIVATE(x) (((GNCSearchBoolean *)(x))->priv)
typedef struct _GNCSearchBooleanPrivate GNCSearchBooleanPrivate;
struct _GNCSearchBooleanPrivate {
gpointer dummy;
};
#define _PRIVATE(o) \
(G_TYPE_INSTANCE_GET_PRIVATE ((o), GNC_TYPE_SEARCH_BOOLEAN, GNCSearchBooleanPrivate))
static GNCSearchCoreTypeClass *parent_class;
guint
@ -88,12 +92,13 @@ gnc_search_boolean_class_init (GNCSearchBooleanClass *class)
gnc_search_core_type->get_widget = gncs_get_widget;
gnc_search_core_type->get_predicate = gncs_get_predicate;
gnc_search_core_type->clone = gncs_clone;
g_type_class_add_private(class, sizeof(GNCSearchBooleanPrivate));
}
static void
gnc_search_boolean_init (GNCSearchBoolean *o)
{
o->priv = g_malloc0 (sizeof (*o->priv));
o->how = COMPARE_EQUAL;
o->value = TRUE;
}
@ -104,8 +109,6 @@ gnc_search_boolean_finalize (GObject *obj)
GNCSearchBoolean *o = (GNCSearchBoolean *)obj;
g_assert (IS_GNCSEARCH_BOOLEAN (o));
g_free(o->priv);
G_OBJECT_CLASS (parent_class)->finalize(obj);
}
@ -119,7 +122,7 @@ gnc_search_boolean_finalize (GObject *obj)
GNCSearchBoolean *
gnc_search_boolean_new (void)
{
GNCSearchBoolean *o = g_object_new(gnc_search_boolean_get_type (), NULL);
GNCSearchBoolean *o = g_object_new(GNC_TYPE_SEARCH_BOOLEAN, NULL);
return o;
}

View File

@ -24,16 +24,16 @@
#include "search-core-type.h"
#include "QueryNew.h"
#define GNCSEARCH_BOOLEAN(obj) GTK_CHECK_CAST (obj, gnc_search_boolean_get_type (), GNCSearchBoolean)
#define GNCSEARCH_BOOLEAN_CLASS(klass) GTK_CHECK_CLASS_CAST (klass, gnc_search_boolean_get_type (), GNCSearchBooleanClass)
#define IS_GNCSEARCH_BOOLEAN(obj) GTK_CHECK_TYPE (obj, gnc_search_boolean_get_type ())
#define GNC_TYPE_SEARCH_BOOLEAN (gnc_search_boolean_get_type ())
#define GNCSEARCH_BOOLEAN(obj) GTK_CHECK_CAST (obj, GNC_TYPE_SEARCH_BOOLEAN, GNCSearchBoolean)
#define GNCSEARCH_BOOLEAN_CLASS(klass) GTK_CHECK_CLASS_CAST (klass, GNC_TYPE_SEARCH_BOOLEAN, GNCSearchBooleanClass)
#define IS_GNCSEARCH_BOOLEAN(obj) GTK_CHECK_TYPE (obj, GNC_TYPE_SEARCH_BOOLEAN)
typedef struct _GNCSearchBoolean GNCSearchBoolean;
typedef struct _GNCSearchBooleanClass GNCSearchBooleanClass;
struct _GNCSearchBoolean {
GNCSearchCoreType parent;
struct _GNCSearchBooleanPrivate *priv;
query_compare_t how;
gboolean value;

View File

@ -48,10 +48,15 @@ static void gnc_search_core_type_class_init (GNCSearchCoreTypeClass *class);
static void gnc_search_core_type_init (GNCSearchCoreType *gspaper);
static void gnc_search_core_type_finalize (GObject *obj);
#define _PRIVATE(x) (((GNCSearchCoreType *)(x))->priv)
typedef struct _GNCSearchCoreTypePrivate GNCSearchCoreTypePrivate;
struct _GNCSearchCoreTypePrivate {
gpointer dummy;
};
#define _PRIVATE(o) \
(G_TYPE_INSTANCE_GET_PRIVATE ((o), GNC_TYPE_SEARCH_CORE_TYPE, GNCSearchCoreTypePrivate))
static GtkObjectClass *parent_class;
static GHashTable *typeTable = NULL;
@ -94,19 +99,20 @@ gnc_search_core_type_class_init (GNCSearchCoreTypeClass *klass)
klass->validate = validate;
klass->grab_focus = grab_focus;
klass->editable_enters = editable_enters;
g_type_class_add_private(klass, sizeof(GNCSearchCoreTypePrivate));
}
static void
gnc_search_core_type_init (GNCSearchCoreType *o)
{
o->priv = g_malloc0 (sizeof (*o->priv));
}
static void
gnc_search_core_type_finalize (GObject *obj)
{
GNCSearchCoreType *o = (GNCSearchCoreType *)obj;
g_free(o->priv);
g_assert (GNC_IS_SEARCH_CORE_TYPE (o));
G_OBJECT_CLASS (parent_class)->finalize(obj);
}

View File

@ -29,12 +29,11 @@
#define GNC_TYPE_SEARCH_CORE_TYPE (gnc_search_core_type_get_type ())
#define GNC_SEARCH_CORE_TYPE(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GNC_TYPE_SEARCH_CORE_TYPE, GNCSearchCoreType))
#define GNC_SEARCH_CORE_TYPE_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), GNC_TYPE_SEARCH_CORE_TYPE, GNCSearchCoreTypeClass))
#define GNC_IS_SEARCH_CORE_TYPE(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GNC_TYPE_SEARCH_CORE_TYPE)
#define GNC_IS_SEARCH_CORE_TYPE(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GNC_TYPE_SEARCH_CORE_TYPE))
#define GNC_SEARCH_CORE_TYPE_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), GNC_TYPE_SEARCH_CORE_TYPE, GNCSearchCoreTypeClass))
typedef struct {
GtkObject parent;
struct _GNCSearchCoreTypePrivate *priv;
GNCSearchParam * param;
} GNCSearchCoreType;

View File

@ -43,12 +43,15 @@ static void gnc_search_date_class_init (GNCSearchDateClass *class);
static void gnc_search_date_init (GNCSearchDate *gspaper);
static void gnc_search_date_finalize (GObject *obj);
#define _PRIVATE(x) (((GNCSearchDate *)(x))->priv)
typedef struct _GNCSearchDatePrivate GNCSearchDatePrivate;
struct _GNCSearchDatePrivate {
GtkWidget *entry;
};
#define _PRIVATE(o) \
(G_TYPE_INSTANCE_GET_PRIVATE ((o), GNC_TYPE_SEARCH_DATE, GNCSearchDatePrivate))
static GNCSearchCoreTypeClass *parent_class;
guint
@ -95,12 +98,13 @@ gnc_search_date_class_init (GNCSearchDateClass *class)
gnc_search_core_type->get_widget = gncs_get_widget;
gnc_search_core_type->get_predicate = gncs_get_predicate;
gnc_search_core_type->clone = gncs_clone;
g_type_class_add_private(class, sizeof(GNCSearchDatePrivate));
}
static void
gnc_search_date_init (GNCSearchDate *o)
{
o->priv = g_malloc0 (sizeof (*o->priv));
o->ts.tv_sec = time(NULL);
o->how = COMPARE_LT;
}
@ -108,13 +112,15 @@ gnc_search_date_init (GNCSearchDate *o)
static void
gnc_search_date_finalize (GObject *obj)
{
GNCSearchDate *o = (GNCSearchDate *)obj;
g_assert (IS_GNCSEARCH_DATE (o));
GNCSearchDate *o;
GNCSearchDatePrivate *priv;
if (o->priv->entry)
gtk_widget_destroy (o->priv->entry);
g_assert (IS_GNCSEARCH_DATE (obj));
g_free(o->priv);
o = GNCSEARCH_DATE(obj);
priv = _PRIVATE(o);
if (priv->entry)
gtk_widget_destroy (priv->entry);
G_OBJECT_CLASS (parent_class)->finalize(obj);
}
@ -129,7 +135,7 @@ gnc_search_date_finalize (GObject *obj)
GNCSearchDate *
gnc_search_date_new (void)
{
GNCSearchDate *o = g_object_new(gnc_search_date_get_type (), NULL);
GNCSearchDate *o = g_object_new(GNC_TYPE_SEARCH_DATE, NULL);
return o;
}
@ -225,24 +231,28 @@ static void
grab_focus (GNCSearchCoreType *fe)
{
GNCSearchDate *fi = (GNCSearchDate *)fe;
GNCSearchDatePrivate *priv;
g_return_if_fail (fi);
g_return_if_fail (IS_GNCSEARCH_DATE (fi));
if (fi->priv->entry)
gtk_widget_grab_focus (GNC_DATE_EDIT(fi->priv->entry)->date_entry);
priv = _PRIVATE(fi);
if (priv->entry)
gtk_widget_grab_focus (GNC_DATE_EDIT(priv->entry)->date_entry);
}
static void
editable_enters (GNCSearchCoreType *fe)
{
GNCSearchDate *fi = (GNCSearchDate *)fe;
GNCSearchDatePrivate *priv;
g_return_if_fail (fi);
g_return_if_fail (IS_GNCSEARCH_DATE (fi));
if (fi->priv->entry)
gnc_date_editable_enters (GNC_DATE_EDIT (fi->priv->entry), TRUE);
priv = _PRIVATE(fi);
if (priv->entry)
gnc_date_editable_enters (GNC_DATE_EDIT (priv->entry), TRUE);
}
static GtkWidget *
@ -250,10 +260,12 @@ gncs_get_widget (GNCSearchCoreType *fe)
{
GtkWidget *entry, *menu, *box;
GNCSearchDate *fi = (GNCSearchDate *)fe;
GNCSearchDatePrivate *priv;
g_return_val_if_fail (fi, NULL);
g_return_val_if_fail (IS_GNCSEARCH_DATE (fi), NULL);
priv = _PRIVATE(fi);
box = gtk_hbox_new (FALSE, 3);
/* Build and connect the option menu */
@ -265,7 +277,7 @@ gncs_get_widget (GNCSearchCoreType *fe)
g_signal_connect (G_OBJECT (entry), "date_changed", G_CALLBACK (date_changed), fe);
gtk_box_pack_start (GTK_BOX (box), entry, FALSE, FALSE, 3);
g_object_ref (entry);
fi->priv->entry = entry;
priv->entry = entry;
/* And return the box */
return box;
@ -274,13 +286,15 @@ gncs_get_widget (GNCSearchCoreType *fe)
static QueryPredData_t gncs_get_predicate (GNCSearchCoreType *fe)
{
GNCSearchDate *fi = (GNCSearchDate *)fe;
GNCSearchDatePrivate *priv;
g_return_val_if_fail (fi, NULL);
g_return_val_if_fail (IS_GNCSEARCH_DATE (fi), NULL);
/* Make sure we actually use the currently-entered date */
if (fi->priv->entry)
fi->ts = gnc_date_edit_get_date_ts (GNC_DATE_EDIT (fi->priv->entry));
priv = _PRIVATE(fi);
if (priv->entry)
fi->ts = gnc_date_edit_get_date_ts (GNC_DATE_EDIT (priv->entry));
return gncQueryDatePredicate (fi->how, DATE_MATCH_NORMAL, fi->ts);
}

View File

@ -25,16 +25,16 @@
#include "QueryNew.h"
#include "gnc-date.h"
#define GNCSEARCH_DATE(obj) GTK_CHECK_CAST (obj, gnc_search_date_get_type (), GNCSearchDate)
#define GNCSEARCH_DATE_CLASS(klass) GTK_CHECK_CLASS_CAST (klass, gnc_search_date_get_type (), GNCSearchDateClass)
#define IS_GNCSEARCH_DATE(obj) GTK_CHECK_TYPE (obj, gnc_search_date_get_type ())
#define GNC_TYPE_SEARCH_DATE (gnc_search_date_get_type ())
#define GNCSEARCH_DATE(obj) GTK_CHECK_CAST (obj, GNC_TYPE_SEARCH_DATE, GNCSearchDate)
#define GNCSEARCH_DATE_CLASS(klass) GTK_CHECK_CLASS_CAST (klass, GNC_TYPE_SEARCH_DATE, GNCSearchDateClass)
#define IS_GNCSEARCH_DATE(obj) GTK_CHECK_TYPE (obj, GNC_TYPE_SEARCH_DATE)
typedef struct _GNCSearchDate GNCSearchDate;
typedef struct _GNCSearchDateClass GNCSearchDateClass;
struct _GNCSearchDate {
GNCSearchCoreType parent;
struct _GNCSearchDatePrivate *priv;
query_compare_t how;
Timespec ts;

View File

@ -42,13 +42,16 @@ static void gnc_search_double_class_init (GNCSearchDoubleClass *class);
static void gnc_search_double_init (GNCSearchDouble *gspaper);
static void gnc_search_double_finalize (GObject *obj);
#define _PRIVATE(x) (((GNCSearchDouble *)(x))->priv)
typedef struct _GNCSearchDoublePrivate GNCSearchDoublePrivate;
struct _GNCSearchDoublePrivate {
GtkWidget * entry;
GNCAmountEdit *gae;
};
#define _PRIVATE(o) \
(G_TYPE_INSTANCE_GET_PRIVATE ((o), GNC_TYPE_SEARCH_DOUBLE, GNCSearchDoublePrivate))
static GNCSearchCoreTypeClass *parent_class;
guint
@ -95,12 +98,13 @@ gnc_search_double_class_init (GNCSearchDoubleClass *class)
gnc_search_core_type->get_widget = gncs_get_widget;
gnc_search_core_type->get_predicate = gncs_get_predicate;
gnc_search_core_type->clone = gncs_clone;
g_type_class_add_private(class, sizeof(GNCSearchDoublePrivate));
}
static void
gnc_search_double_init (GNCSearchDouble *o)
{
o->priv = g_malloc0 (sizeof (*o->priv));
o->how = COMPARE_EQUAL;
}
@ -110,8 +114,6 @@ gnc_search_double_finalize (GObject *obj)
GNCSearchDouble *o = (GNCSearchDouble *)obj;
g_assert (IS_GNCSEARCH_DOUBLE (o));
g_free(o->priv);
G_OBJECT_CLASS (parent_class)->finalize(obj);
}
@ -125,7 +127,7 @@ gnc_search_double_finalize (GObject *obj)
GNCSearchDouble *
gnc_search_double_new (void)
{
GNCSearchDouble *o = g_object_new(gnc_search_double_get_type (), NULL);
GNCSearchDouble *o = g_object_new(GNC_TYPE_SEARCH_DOUBLE, NULL);
return o;
}
@ -221,24 +223,28 @@ static void
grab_focus (GNCSearchCoreType *fe)
{
GNCSearchDouble *fi = (GNCSearchDouble *)fe;
GNCSearchDoublePrivate *priv ;
g_return_if_fail (fi);
g_return_if_fail (IS_GNCSEARCH_DOUBLE (fi));
if (fi->priv->entry)
gtk_widget_grab_focus (fi->priv->entry);
priv = _PRIVATE(fi);
if (priv->entry)
gtk_widget_grab_focus (priv->entry);
}
static void
editable_enters (GNCSearchCoreType *fe)
{
GNCSearchDouble *fi = (GNCSearchDouble *)fe;
GNCSearchDoublePrivate *priv ;
g_return_if_fail (fi);
g_return_if_fail (IS_GNCSEARCH_DOUBLE (fi));
if (fi->priv->entry)
gtk_entry_set_activates_default(GTK_ENTRY (fi->priv->entry), TRUE);
priv = _PRIVATE(fi);
if (priv->entry)
gtk_entry_set_activates_default(GTK_ENTRY (priv->entry), TRUE);
}
static GtkWidget *
@ -246,10 +252,12 @@ gncs_get_widget (GNCSearchCoreType *fe)
{
GtkWidget *entry, *menu, *box;
GNCSearchDouble *fi = (GNCSearchDouble *)fe;
GNCSearchDoublePrivate *priv ;
g_return_val_if_fail (fi, NULL);
g_return_val_if_fail (IS_GNCSEARCH_DOUBLE (fi), NULL);
priv = _PRIVATE(fi);
box = gtk_hbox_new (FALSE, 3);
/* Build and connect the option menu */
@ -262,8 +270,8 @@ gncs_get_widget (GNCSearchCoreType *fe)
gnc_amount_edit_set_damount (GNC_AMOUNT_EDIT (entry), fi->value);
g_signal_connect (G_OBJECT (entry), "amount_changed", G_CALLBACK (entry_changed), fe);
gtk_box_pack_start (GTK_BOX (box), entry, FALSE, FALSE, 3);
fi->priv->entry = gnc_amount_edit_gtk_entry (GNC_AMOUNT_EDIT (entry));
fi->priv->gae = GNC_AMOUNT_EDIT (entry);
priv->entry = gnc_amount_edit_gtk_entry (GNC_AMOUNT_EDIT (entry));
priv->gae = GNC_AMOUNT_EDIT (entry);
/* And return the box */
return box;
@ -272,12 +280,14 @@ gncs_get_widget (GNCSearchCoreType *fe)
static QueryPredData_t gncs_get_predicate (GNCSearchCoreType *fe)
{
GNCSearchDouble *fi = (GNCSearchDouble *)fe;
GNCSearchDoublePrivate *priv ;
g_return_val_if_fail (fi, NULL);
g_return_val_if_fail (IS_GNCSEARCH_DOUBLE (fi), NULL);
/* force the computation of the entry, because we may not get the signal */
entry_changed (fi->priv->gae, fi);
priv = _PRIVATE(fi);
entry_changed (priv->gae, fi);
return gncQueryDoublePredicate (fi->how, fi->value);
}

View File

@ -24,16 +24,16 @@
#include "search-core-type.h"
#include "QueryNew.h"
#define GNCSEARCH_DOUBLE(obj) GTK_CHECK_CAST (obj, gnc_search_double_get_type (), GNCSearchDouble)
#define GNCSEARCH_DOUBLE_CLASS(klass) GTK_CHECK_CLASS_CAST (klass, gnc_search_double_get_type (), GNCSearchDoubleClass)
#define IS_GNCSEARCH_DOUBLE(obj) GTK_CHECK_TYPE (obj, gnc_search_double_get_type ())
#define GNC_TYPE_SEARCH_DOUBLE (gnc_search_double_get_type ())
#define GNCSEARCH_DOUBLE(obj) GTK_CHECK_CAST (obj, GNC_TYPE_SEARCH_DOUBLE, GNCSearchDouble)
#define GNCSEARCH_DOUBLE_CLASS(klass) GTK_CHECK_CLASS_CAST (klass, GNC_TYPE_SEARCH_DOUBLE, GNCSearchDoubleClass)
#define IS_GNCSEARCH_DOUBLE(obj) GTK_CHECK_TYPE (obj, GNC_TYPE_SEARCH_DOUBLE)
typedef struct _GNCSearchDouble GNCSearchDouble;
typedef struct _GNCSearchDoubleClass GNCSearchDoubleClass;
struct _GNCSearchDouble {
GNCSearchCoreType parent;
struct _GNCSearchDoublePrivate *priv;
query_compare_t how;
double value;

View File

@ -42,13 +42,17 @@ static void gnc_search_int64_class_init (GNCSearchInt64Class *class);
static void gnc_search_int64_init (GNCSearchInt64 *gspaper);
static void gnc_search_int64_finalize (GObject *obj);
#define _PRIVATE(x) (((GNCSearchInt64 *)(x))->priv)
typedef struct _GNCSearchInt64Private GNCSearchInt64Private;
struct _GNCSearchInt64Private {
GtkWidget *entry;
GNCAmountEdit *gae;
};
#define _PRIVATE(o) \
(G_TYPE_INSTANCE_GET_PRIVATE ((o), GNC_TYPE_SEARCH_INT64, GNCSearchInt64Private))
static GNCSearchCoreTypeClass *parent_class;
guint
@ -95,12 +99,13 @@ gnc_search_int64_class_init (GNCSearchInt64Class *class)
gnc_search_core_type->get_widget = gncs_get_widget;
gnc_search_core_type->get_predicate = gncs_get_predicate;
gnc_search_core_type->clone = gncs_clone;
g_type_class_add_private(class, sizeof(GNCSearchInt64Private));
}
static void
gnc_search_int64_init (GNCSearchInt64 *o)
{
o->priv = g_malloc0 (sizeof (*o->priv));
o->how = COMPARE_EQUAL;
}
@ -110,8 +115,6 @@ gnc_search_int64_finalize (GObject *obj)
GNCSearchInt64 *o = (GNCSearchInt64 *)obj;
g_assert (IS_GNCSEARCH_INT64 (o));
g_free(o->priv);
G_OBJECT_CLASS (parent_class)->finalize(obj);
}
@ -125,7 +128,7 @@ gnc_search_int64_finalize (GObject *obj)
GNCSearchInt64 *
gnc_search_int64_new (void)
{
GNCSearchInt64 *o = g_object_new(gnc_search_int64_get_type (), NULL);
GNCSearchInt64 *o = g_object_new(GNC_TYPE_SEARCH_INT64, NULL);
return o;
}
@ -223,24 +226,28 @@ static void
grab_focus (GNCSearchCoreType *fe)
{
GNCSearchInt64 *fi = (GNCSearchInt64 *)fe;
GNCSearchInt64Private *priv;
g_return_if_fail (fi);
g_return_if_fail (IS_GNCSEARCH_INT64 (fi));
if (fi->priv->entry)
gtk_widget_grab_focus (fi->priv->entry);
priv = _PRIVATE(fi);
if (priv->entry)
gtk_widget_grab_focus (priv->entry);
}
static void
editable_enters (GNCSearchCoreType *fe)
{
GNCSearchInt64 *fi = (GNCSearchInt64 *)fe;
GNCSearchInt64Private *priv;
g_return_if_fail (fi);
g_return_if_fail (IS_GNCSEARCH_INT64 (fi));
if (fi->priv->entry)
gtk_entry_set_activates_default(GTK_ENTRY (fi->priv->entry), TRUE);
priv = _PRIVATE(fi);
if (priv->entry)
gtk_entry_set_activates_default(GTK_ENTRY (priv->entry), TRUE);
}
static GtkWidget *
@ -248,10 +255,12 @@ gncs_get_widget (GNCSearchCoreType *fe)
{
GtkWidget *entry, *menu, *box;
GNCSearchInt64 *fi = (GNCSearchInt64 *)fe;
GNCSearchInt64Private *priv;
g_return_val_if_fail (fi, NULL);
g_return_val_if_fail (IS_GNCSEARCH_INT64 (fi), NULL);
priv = _PRIVATE(fi);
box = gtk_hbox_new (FALSE, 3);
/* Build and connect the option menu */
@ -268,8 +277,8 @@ gncs_get_widget (GNCSearchCoreType *fe)
}
g_signal_connect (G_OBJECT (entry), "amount_changed", G_CALLBACK (entry_changed), fe);
gtk_box_pack_start (GTK_BOX (box), entry, FALSE, FALSE, 3);
fi->priv->entry = gnc_amount_edit_gtk_entry (GNC_AMOUNT_EDIT (entry));
fi->priv->gae = GNC_AMOUNT_EDIT (entry);
priv->entry = gnc_amount_edit_gtk_entry (GNC_AMOUNT_EDIT (entry));
priv->gae = GNC_AMOUNT_EDIT (entry);
/* And return the box */
return box;
@ -278,12 +287,14 @@ gncs_get_widget (GNCSearchCoreType *fe)
static QueryPredData_t gncs_get_predicate (GNCSearchCoreType *fe)
{
GNCSearchInt64 *fi = (GNCSearchInt64 *)fe;
GNCSearchInt64Private *priv;
g_return_val_if_fail (fi, NULL);
g_return_val_if_fail (IS_GNCSEARCH_INT64 (fi), NULL);
/* force the computation of the entry, because we may not get the signal */
entry_changed (fi->priv->gae, fi);
priv = _PRIVATE(fi);
entry_changed (priv->gae, fi);
return gncQueryInt64Predicate (fi->how, fi->value);
}

View File

@ -24,16 +24,16 @@
#include "search-core-type.h"
#include "QueryNew.h"
#define GNCSEARCH_INT64(obj) GTK_CHECK_CAST (obj, gnc_search_int64_get_type (), GNCSearchInt64)
#define GNCSEARCH_INT64_CLASS(klass) GTK_CHECK_CLASS_CAST (klass, gnc_search_int64_get_type (), GNCSearchInt64Class)
#define IS_GNCSEARCH_INT64(obj) GTK_CHECK_TYPE (obj, gnc_search_int64_get_type ())
#define GNC_TYPE_SEARCH_INT64 (gnc_search_int64_get_type ())
#define GNCSEARCH_INT64(obj) GTK_CHECK_CAST (obj, GNC_TYPE_SEARCH_INT64, GNCSearchInt64)
#define GNCSEARCH_INT64_CLASS(klass) GTK_CHECK_CLASS_CAST (klass, GNC_TYPE_SEARCH_INT64, GNCSearchInt64Class)
#define IS_GNCSEARCH_INT64(obj) GTK_CHECK_TYPE (obj, GNC_TYPE_SEARCH_INT64)
typedef struct _GNCSearchInt64 GNCSearchInt64;
typedef struct _GNCSearchInt64Class GNCSearchInt64Class;
struct _GNCSearchInt64 {
GNCSearchCoreType parent;
struct _GNCSearchInt64Private *priv;
query_compare_t how;
gint64 value;

View File

@ -42,7 +42,7 @@ static void gnc_search_numeric_class_init (GNCSearchNumericClass *class);
static void gnc_search_numeric_init (GNCSearchNumeric *gspaper);
static void gnc_search_numeric_finalize (GObject *obj);
#define _PRIVATE(x) (((GNCSearchNumeric *)(x))->priv)
typedef struct _GNCSearchNumericPrivate GNCSearchNumericPrivate;
struct _GNCSearchNumericPrivate {
gboolean is_debcred;
@ -50,6 +50,9 @@ struct _GNCSearchNumericPrivate {
GNCAmountEdit *gae;
};
#define _PRIVATE(o) \
(G_TYPE_INSTANCE_GET_PRIVATE ((o), GNC_TYPE_SEARCH_NUMERIC, GNCSearchNumericPrivate))
static GNCSearchCoreTypeClass *parent_class;
guint
@ -96,12 +99,13 @@ gnc_search_numeric_class_init (GNCSearchNumericClass *class)
gnc_search_core_type->get_widget = gncs_get_widget;
gnc_search_core_type->get_predicate = gncs_get_predicate;
gnc_search_core_type->clone = gncs_clone;
g_type_class_add_private(class, sizeof(GNCSearchNumericPrivate));
}
static void
gnc_search_numeric_init (GNCSearchNumeric *o)
{
o->priv = g_malloc0 (sizeof (*o->priv));
o->value = gnc_numeric_zero ();
o->how = COMPARE_EQUAL;
o->option = NUMERIC_MATCH_ANY;
@ -113,8 +117,6 @@ gnc_search_numeric_finalize (GObject *obj)
GNCSearchNumeric *o = (GNCSearchNumeric *)obj;
g_assert (IS_GNCSEARCH_NUMERIC (o));
g_free(o->priv);
G_OBJECT_CLASS (parent_class)->finalize(obj);
}
@ -128,7 +130,7 @@ gnc_search_numeric_finalize (GObject *obj)
GNCSearchNumeric *
gnc_search_numeric_new (void)
{
GNCSearchNumeric *o = g_object_new(gnc_search_numeric_get_type (), NULL);
GNCSearchNumeric *o = g_object_new(GNC_TYPE_SEARCH_NUMERIC, NULL);
return o;
}
@ -142,8 +144,12 @@ gnc_search_numeric_new (void)
GNCSearchNumeric *
gnc_search_numeric_debcred_new (void)
{
GNCSearchNumeric *o = g_object_new(gnc_search_numeric_get_type (), NULL);
o->priv->is_debcred = TRUE;
GNCSearchNumeric *o;
GNCSearchNumericPrivate *priv;
o = g_object_new(GNC_TYPE_SEARCH_NUMERIC, NULL);
priv = _PRIVATE(o);
priv->is_debcred = TRUE;
return o;
}
@ -228,29 +234,31 @@ static GtkWidget *
make_how_menu (GNCSearchCoreType *fe)
{
GNCSearchNumeric *fi = (GNCSearchNumeric *)fe;
GNCSearchNumericPrivate *priv;
GtkWidget *menu, *item, *first = NULL, *opmenu;
int current = 0, index = 0;
menu = gtk_menu_new ();
ADD_MENU_ITEM (fi->how, (fi->priv->is_debcred ?
priv = _PRIVATE(fi);
ADD_MENU_ITEM (fi->how, (priv->is_debcred ?
_("less than") : _("is less than")),
COMPARE_LT, G_CALLBACK (how_option_changed));
first = item; /* Force one */
ADD_MENU_ITEM (fi->how, (fi->priv->is_debcred ?
ADD_MENU_ITEM (fi->how, (priv->is_debcred ?
_("less than or equal to") :
_("is less than or equal to")),
COMPARE_LTE, G_CALLBACK (how_option_changed));
ADD_MENU_ITEM (fi->how, (fi->priv->is_debcred ?
ADD_MENU_ITEM (fi->how, (priv->is_debcred ?
_("equal to") : _("equals")),
COMPARE_EQUAL, G_CALLBACK (how_option_changed));
ADD_MENU_ITEM (fi->how, (fi->priv->is_debcred ?
ADD_MENU_ITEM (fi->how, (priv->is_debcred ?
_("not equal to") : _("does not equal")),
COMPARE_NEQ, G_CALLBACK (how_option_changed));
ADD_MENU_ITEM (fi->how, (fi->priv->is_debcred ?
ADD_MENU_ITEM (fi->how, (priv->is_debcred ?
_("greater than") : _("is greater than")),
COMPARE_GT, G_CALLBACK (how_option_changed));
ADD_MENU_ITEM (fi->how, (fi->priv->is_debcred ?
ADD_MENU_ITEM (fi->how, (priv->is_debcred ?
_("greater than or equal to") :
_("is greater than or equal to")),
COMPARE_GTE, G_CALLBACK (how_option_changed));
@ -294,24 +302,28 @@ static void
grab_focus (GNCSearchCoreType *fe)
{
GNCSearchNumeric *fi = (GNCSearchNumeric *)fe;
GNCSearchNumericPrivate *priv;
g_return_if_fail (fi);
g_return_if_fail (IS_GNCSEARCH_NUMERIC (fi));
if (fi->priv->entry)
gtk_widget_grab_focus (fi->priv->entry);
priv = _PRIVATE(fi);
if (priv->entry)
gtk_widget_grab_focus (priv->entry);
}
static void
editable_enters (GNCSearchCoreType *fe)
{
GNCSearchNumeric *fi = (GNCSearchNumeric *)fe;
GNCSearchNumericPrivate *priv;
g_return_if_fail (fi);
g_return_if_fail (IS_GNCSEARCH_NUMERIC (fi));
if (fi->priv->entry)
gtk_entry_set_activates_default(GTK_ENTRY (fi->priv->entry), TRUE);
priv = _PRIVATE(fi);
if (priv->entry)
gtk_entry_set_activates_default(GTK_ENTRY (priv->entry), TRUE);
}
static GtkWidget *
@ -319,14 +331,16 @@ gncs_get_widget (GNCSearchCoreType *fe)
{
GtkWidget *entry, *menu, *box;
GNCSearchNumeric *fi = (GNCSearchNumeric *)fe;
GNCSearchNumericPrivate *priv;
g_return_val_if_fail (fi, NULL);
g_return_val_if_fail (IS_GNCSEARCH_NUMERIC (fi), NULL);
priv = _PRIVATE(fi);
box = gtk_hbox_new (FALSE, 3);
/* Build and connect the option menu(s) */
if (fi->priv->is_debcred) {
if (priv->is_debcred) {
menu = make_option_menu (fe);
gtk_box_pack_start (GTK_BOX (box), menu, FALSE, FALSE, 3);
}
@ -339,8 +353,8 @@ gncs_get_widget (GNCSearchCoreType *fe)
gnc_amount_edit_set_amount (GNC_AMOUNT_EDIT (entry), fi->value);
g_signal_connect (G_OBJECT (entry), "amount_changed", G_CALLBACK (entry_changed), fe);
gtk_box_pack_start (GTK_BOX (box), entry, FALSE, FALSE, 3);
fi->priv->gae = GNC_AMOUNT_EDIT (entry);
fi->priv->entry = gnc_amount_edit_gtk_entry (GNC_AMOUNT_EDIT (entry));
priv->gae = GNC_AMOUNT_EDIT (entry);
priv->entry = gnc_amount_edit_gtk_entry (GNC_AMOUNT_EDIT (entry));
/* And return the box */
return box;
@ -349,12 +363,14 @@ gncs_get_widget (GNCSearchCoreType *fe)
static QueryPredData_t gncs_get_predicate (GNCSearchCoreType *fe)
{
GNCSearchNumeric *fi = (GNCSearchNumeric *)fe;
GNCSearchNumericPrivate *priv;
g_return_val_if_fail (fi, NULL);
g_return_val_if_fail (IS_GNCSEARCH_NUMERIC (fi), NULL);
/* force the computation of the entry, because we may not get the signal */
entry_changed (fi->priv->gae, fi);
priv = _PRIVATE(fi);
entry_changed (priv->gae, fi);
return gncQueryNumericPredicate (fi->how, fi->option, fi->value);
}
@ -362,15 +378,18 @@ static QueryPredData_t gncs_get_predicate (GNCSearchCoreType *fe)
static GNCSearchCoreType *gncs_clone(GNCSearchCoreType *fe)
{
GNCSearchNumeric *se, *fse = (GNCSearchNumeric *)fe;
GNCSearchNumericPrivate *se_priv, *fse_priv;
g_return_val_if_fail (fse, NULL);
g_return_val_if_fail (IS_GNCSEARCH_NUMERIC (fse), NULL);
fse_priv = _PRIVATE(fse);
se = gnc_search_numeric_new ();
gnc_search_numeric_set_value (se, fse->value);
gnc_search_numeric_set_how (se, fse->how);
se_priv = _PRIVATE(se);
gnc_search_numeric_set_option (se, fse->option);
se->priv->is_debcred = fse->priv->is_debcred;
se_priv->is_debcred = fse_priv->is_debcred;
return (GNCSearchCoreType *)se;
}

View File

@ -25,9 +25,10 @@
#include "gnc-numeric.h"
#include "QueryNew.h"
#define GNCSEARCH_NUMERIC(obj) GTK_CHECK_CAST (obj, gnc_search_numeric_get_type (), GNCSearchNumeric)
#define GNCSEARCH_NUMERIC_CLASS(klass) GTK_CHECK_CLASS_CAST (klass, gnc_search_numeric_get_type (), GNCSearchNumericClass)
#define IS_GNCSEARCH_NUMERIC(obj) GTK_CHECK_TYPE (obj, gnc_search_numeric_get_type ())
#define GNC_TYPE_SEARCH_NUMERIC (gnc_search_numeric_get_type ())
#define GNCSEARCH_NUMERIC(obj) GTK_CHECK_CAST (obj, GNC_TYPE_SEARCH_NUMERIC, GNCSearchNumeric)
#define GNCSEARCH_NUMERIC_CLASS(klass) GTK_CHECK_CLASS_CAST (klass, GNC_TYPE_SEARCH_NUMERIC, GNCSearchNumericClass)
#define IS_GNCSEARCH_NUMERIC(obj) GTK_CHECK_TYPE (obj, GNC_TYPE_SEARCH_NUMERIC)
typedef struct _GNCSearchNumeric GNCSearchNumeric;
typedef struct _GNCSearchNumericClass GNCSearchNumericClass;

View File

@ -40,11 +40,15 @@ static void gnc_search_reconciled_class_init (GNCSearchReconciledClass *class);
static void gnc_search_reconciled_init (GNCSearchReconciled *gspaper);
static void gnc_search_reconciled_finalize (GObject *obj);
#define _PRIVATE(x) (((GNCSearchReconciled *)(x))->priv)
typedef struct _GNCSearchReconciledPrivate GNCSearchReconciledPrivate;
struct _GNCSearchReconciledPrivate {
gpointer dummy;
};
#define _PRIVATE(o) \
(G_TYPE_INSTANCE_GET_PRIVATE ((o), GNC_TYPE_SEARCH_RECONCILED, GNCSearchReconciledPrivate))
static GNCSearchCoreTypeClass *parent_class;
guint
@ -89,12 +93,13 @@ gnc_search_reconciled_class_init (GNCSearchReconciledClass *class)
gnc_search_core_type->get_widget = gncs_get_widget;
gnc_search_core_type->get_predicate = gncs_get_predicate;
gnc_search_core_type->clone = gncs_clone;
g_type_class_add_private(class, sizeof(GNCSearchReconciledPrivate));
}
static void
gnc_search_reconciled_init (GNCSearchReconciled *o)
{
o->priv = g_malloc0 (sizeof (*o->priv));
o->how = COMPARE_EQUAL;
o->value = CLEARED_NO;
}
@ -105,8 +110,6 @@ gnc_search_reconciled_finalize (GObject *obj)
GNCSearchReconciled *o = (GNCSearchReconciled *)obj;
g_assert (IS_GNCSEARCH_RECONCILED (o));
g_free(o->priv);
G_OBJECT_CLASS (parent_class)->finalize(obj);
}
@ -120,7 +123,7 @@ gnc_search_reconciled_finalize (GObject *obj)
GNCSearchReconciled *
gnc_search_reconciled_new (void)
{
GNCSearchReconciled *o = g_object_new(gnc_search_reconciled_get_type (), NULL);
GNCSearchReconciled *o = g_object_new(GNC_TYPE_SEARCH_RECONCILED, NULL);
return o;
}

View File

@ -24,16 +24,16 @@
#include "search-core-type.h"
#include "Query.h" /* for cleared_match_t */
#define GNCSEARCH_RECONCILED(obj) GTK_CHECK_CAST (obj, gnc_search_reconciled_get_type (), GNCSearchReconciled)
#define GNCSEARCH_RECONCILED_CLASS(klass) GTK_CHECK_CLASS_CAST (klass, gnc_search_reconciled_get_type (), GNCSearchReconciledClass)
#define IS_GNCSEARCH_RECONCILED(obj) GTK_CHECK_TYPE (obj, gnc_search_reconciled_get_type ())
#define GNC_TYPE_SEARCH_RECONCILED (gnc_search_reconciled_get_type ())
#define GNCSEARCH_RECONCILED(obj) GTK_CHECK_CAST (obj, GNC_TYPE_SEARCH_RECONCILED, GNCSearchReconciled)
#define GNCSEARCH_RECONCILED_CLASS(klass) GTK_CHECK_CLASS_CAST (klass, GNC_TYPE_SEARCH_RECONCILED, GNCSearchReconciledClass)
#define IS_GNCSEARCH_RECONCILED(obj) GTK_CHECK_TYPE (obj, GNC_TYPE_SEARCH_RECONCILED)
typedef struct _GNCSearchReconciled GNCSearchReconciled;
typedef struct _GNCSearchReconciledClass GNCSearchReconciledClass;
struct _GNCSearchReconciled {
GNCSearchCoreType parent;
struct _GNCSearchReconciledPrivate *priv;
char_match_t how;
cleared_match_t value;

View File

@ -43,12 +43,15 @@ static void gnc_search_string_class_init (GNCSearchStringClass *class);
static void gnc_search_string_init (GNCSearchString *gspaper);
static void gnc_search_string_finalize (GObject *obj);
#define _PRIVATE(x) (((GNCSearchString *)(x))->priv)
typedef struct _GNCSearchStringPrivate GNCSearchStringPrivate;
struct _GNCSearchStringPrivate {
GtkWidget *entry;
};
#define _PRIVATE(o) \
(G_TYPE_INSTANCE_GET_PRIVATE ((o), GNC_TYPE_SEARCH_STRING, GNCSearchStringPrivate))
static GNCSearchCoreTypeClass *parent_class;
guint
@ -95,12 +98,13 @@ gnc_search_string_class_init (GNCSearchStringClass *class)
gnc_search_core_type->get_widget = gncs_get_widget;
gnc_search_core_type->get_predicate = gncs_get_predicate;
gnc_search_core_type->clone = gncs_clone;
g_type_class_add_private(class, sizeof(GNCSearchStringPrivate));
}
static void
gnc_search_string_init (GNCSearchString *o)
{
o->priv = g_malloc0 (sizeof (*o->priv));
o->value = NULL;
o->how = SEARCH_STRING_CONTAINS;
o->ign_case = TRUE;
@ -113,7 +117,6 @@ gnc_search_string_finalize (GObject *obj)
g_assert (IS_GNCSEARCH_STRING (o));
g_free (o->value);
g_free(o->priv);
G_OBJECT_CLASS (parent_class)->finalize(obj);
}
@ -128,7 +131,7 @@ gnc_search_string_finalize (GObject *obj)
GNCSearchString *
gnc_search_string_new (void)
{
GNCSearchString *o = g_object_new(gnc_search_string_get_type (), NULL);
GNCSearchString *o = g_object_new(GNC_TYPE_SEARCH_STRING, NULL);
return o;
}
@ -295,24 +298,28 @@ static void
grab_focus (GNCSearchCoreType *fe)
{
GNCSearchString *fi = (GNCSearchString *)fe;
GNCSearchStringPrivate *priv;
g_return_if_fail (fi);
g_return_if_fail (IS_GNCSEARCH_STRING (fi));
if (fi->priv->entry)
gtk_widget_grab_focus (fi->priv->entry);
priv = _PRIVATE(fi);
if (priv->entry)
gtk_widget_grab_focus (priv->entry);
}
static void
editable_enters (GNCSearchCoreType *fe)
{
GNCSearchString *fi = (GNCSearchString *)fe;
GNCSearchStringPrivate *priv;
g_return_if_fail (fi);
g_return_if_fail (IS_GNCSEARCH_STRING (fi));
if (fi->priv->entry)
gtk_entry_set_activates_default(GTK_ENTRY (fi->priv->entry), TRUE);
priv = _PRIVATE(fi);
if (priv->entry)
gtk_entry_set_activates_default(GTK_ENTRY (priv->entry), TRUE);
}
static GtkWidget *
@ -320,10 +327,12 @@ gncs_get_widget (GNCSearchCoreType *fe)
{
GtkWidget *entry, *toggle, *menu, *box;
GNCSearchString *fi = (GNCSearchString *)fe;
GNCSearchStringPrivate *priv;
g_return_val_if_fail (fi, NULL);
g_return_val_if_fail (IS_GNCSEARCH_STRING (fi), NULL);
priv = _PRIVATE(fi);
box = gtk_hbox_new (FALSE, 3);
/* Build and connect the option menu */
@ -336,7 +345,7 @@ gncs_get_widget (GNCSearchCoreType *fe)
gtk_entry_set_text (GTK_ENTRY (entry), fi->value);
g_signal_connect (G_OBJECT (entry), "changed", G_CALLBACK (entry_changed), fe);
gtk_box_pack_start (GTK_BOX (box), entry, FALSE, FALSE, 3);
fi->priv->entry = entry;
priv->entry = entry;
/* Build and connect the toggle button */
toggle = gtk_toggle_button_new_with_label (_("Case Insensitive?"));

View File

@ -23,9 +23,10 @@
#include "search-core-type.h"
#define GNCSEARCH_STRING(obj) GTK_CHECK_CAST (obj, gnc_search_string_get_type (), GNCSearchString)
#define GNCSEARCH_STRING_CLASS(klass) GTK_CHECK_CLASS_CAST (klass, gnc_search_string_get_type (), GNCSearchStringClass)
#define IS_GNCSEARCH_STRING(obj) GTK_CHECK_TYPE (obj, gnc_search_string_get_type ())
#define GNC_TYPE_SEARCH_STRING (gnc_search_string_get_type ())
#define GNCSEARCH_STRING(obj) GTK_CHECK_CAST (obj, GNC_TYPE_SEARCH_STRING, GNCSearchString)
#define GNCSEARCH_STRING_CLASS(klass) GTK_CHECK_CLASS_CAST (klass, GNC_TYPE_SEARCH_STRING, GNCSearchStringClass)
#define IS_GNCSEARCH_STRING(obj) GTK_CHECK_TYPE (obj, GNC_TYPE_SEARCH_STRING)
typedef struct _GNCSearchString GNCSearchString;
typedef struct _GNCSearchStringClass GNCSearchStringClass;
@ -39,7 +40,6 @@ typedef enum _search_string_how {
struct _GNCSearchString {
GNCSearchCoreType parent;
struct _GNCSearchStringPrivate *priv;
GNCSearchString_Type how;
gboolean ign_case;