GnuCash c935c2f+
Loading...
Searching...
No Matches
search-boolean.c
1/*
2 * Copyright (C) 2002 Derek Atkins
3 *
4 * Authors: Derek Atkins <warlord@MIT.EDU>
5 *
6 * Copyright (c) 2006 David Hampton <hampton@employees.org>
7 *
8 * This program is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU General Public License as
10 * published by the Free Software Foundation; either version 2 of
11 * the License, or (at your option) any later version.
12 *
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 * General Public License for more details.
17 *
18 * You should have received a copy of the GNU General Public
19 * License along with this program; if not, write to the
20 * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
21 * Boston, MA 02110-1301, USA.
22 */
23
24#ifdef HAVE_CONFIG_H
25#include <config.h>
26#endif
27
28#include <gtk/gtk.h>
29#include <glib/gi18n.h>
30
31#include "qof.h"
32
33#include "search-boolean.h"
34#include "search-core-utils.h"
35
36#define d(x)
37
38static void pass_parent (GNCSearchCoreType *fe, gpointer parent);
39static GNCSearchCoreType *gncs_clone(GNCSearchCoreType *fe);
40static gboolean gncs_validate (GNCSearchCoreType *fe);
41static GtkWidget *gncs_get_widget(GNCSearchCoreType *fe);
42static QofQueryPredData* gncs_get_predicate (GNCSearchCoreType *fe);
43
44static void gnc_search_boolean_finalize (GObject *obj);
45
47{
48 GNCSearchCoreType parent_instance;
49
50 gboolean value;
51
52 GtkWindow *parent;
53};
54
55G_DEFINE_TYPE(GNCSearchBoolean, gnc_search_boolean, GNC_TYPE_SEARCH_CORE_TYPE)
56
57static void
58gnc_search_boolean_class_init (GNCSearchBooleanClass *klass)
59{
60 GObjectClass *object_class;
61 GNCSearchCoreTypeClass *gnc_search_core_type = (GNCSearchCoreTypeClass *)klass;
62
63 object_class = G_OBJECT_CLASS (klass);
64
65 object_class->finalize = gnc_search_boolean_finalize;
66
67 /* override methods */
68 gnc_search_core_type->pass_parent = pass_parent;
69 gnc_search_core_type->validate = gncs_validate;
70 gnc_search_core_type->get_widget = gncs_get_widget;
71 gnc_search_core_type->get_predicate = gncs_get_predicate;
72 gnc_search_core_type->clone = gncs_clone;
73}
74
75static void
76gnc_search_boolean_init (GNCSearchBoolean *o)
77{
78 o->value = TRUE;
79}
80
81static void
82gnc_search_boolean_finalize (GObject *obj)
83{
84 GNCSearchBoolean *o = (GNCSearchBoolean *)obj;
85 g_assert (GNC_IS_SEARCH_BOOLEAN (o));
86
87 G_OBJECT_CLASS (gnc_search_boolean_parent_class)->finalize(obj);
88}
89
97GNCSearchBoolean *
98gnc_search_boolean_new (void)
99{
100 GNCSearchBoolean *o = g_object_new(GNC_TYPE_SEARCH_BOOLEAN, NULL);
101 return o;
102}
103
104void
105gnc_search_boolean_set_value (GNCSearchBoolean *fi, gboolean value)
106{
107 g_return_if_fail (fi);
108 g_return_if_fail (GNC_IS_SEARCH_BOOLEAN (fi));
109
110 fi->value = value;
111}
112
113static void
114pass_parent (GNCSearchCoreType *fe, gpointer parent)
115{
116 GNCSearchBoolean *fi = (GNCSearchBoolean *)fe;
117
118 g_return_if_fail (fi);
119 g_return_if_fail (GNC_IS_SEARCH_BOOLEAN (fi));
120
121 fi->parent = GTK_WINDOW(parent);
122}
123
124static gboolean
125gncs_validate (GNCSearchCoreType *fe)
126{
127 GNCSearchBoolean *fi = (GNCSearchBoolean *)fe;
128 gboolean valid = TRUE;
129
130 g_return_val_if_fail (fi, FALSE);
131 g_return_val_if_fail (GNC_IS_SEARCH_BOOLEAN (fi), FALSE);
132
133 /* XXX */
134
135 return valid;
136}
137
138static void
139toggle_changed (GtkToggleButton *button, GNCSearchBoolean *fe)
140{
141 fe->value = gtk_toggle_button_get_active (button);
142}
143
144static GtkWidget *
145gncs_get_widget (GNCSearchCoreType *fe)
146{
147 GtkWidget *toggle, *box;
148 GNCSearchBoolean *fi = (GNCSearchBoolean *)fe;
149
150 g_return_val_if_fail (fi, NULL);
151 g_return_val_if_fail (GNC_IS_SEARCH_BOOLEAN (fi), NULL);
152
153 box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 3);
154 gtk_box_set_homogeneous (GTK_BOX (box), FALSE);
155
156 /* Build and connect the toggle */
157 toggle = gtk_check_button_new ();
158 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), fi->value);
159 g_signal_connect (G_OBJECT (toggle), "toggled", G_CALLBACK (toggle_changed), fe);
160 gtk_box_pack_start (GTK_BOX (box), toggle, FALSE, FALSE, 3);
161
162 /* And return the box */
163 return box;
164}
165
166static QofQueryPredData* gncs_get_predicate (GNCSearchCoreType *fe)
167{
168 GNCSearchBoolean *fi = (GNCSearchBoolean *)fe;
169
170 g_return_val_if_fail (fi, NULL);
171 g_return_val_if_fail (GNC_IS_SEARCH_BOOLEAN (fi), NULL);
172
173 return qof_query_boolean_predicate (QOF_COMPARE_EQUAL, fi->value);
174}
175
176static GNCSearchCoreType *gncs_clone(GNCSearchCoreType *fe)
177{
178 GNCSearchBoolean *se, *fse = (GNCSearchBoolean *)fe;
179
180 g_return_val_if_fail (fse, NULL);
181 g_return_val_if_fail (GNC_IS_SEARCH_BOOLEAN (fse), NULL);
182
183 se = gnc_search_boolean_new ();
184 gnc_search_boolean_set_value (se, fse->value);
185
186 return (GNCSearchCoreType *)se;
187}