~ubuntu-branches/ubuntu/hardy/gnome-commander/hardy

« back to all changes in this revision

Viewing changes to src/libgviewer/scroll-box.c

  • Committer: Bazaar Package Importer
  • Author(s): Michael Vogt
  • Date: 2006-06-13 15:39:48 UTC
  • mfrom: (1.1.1 upstream)
  • Revision ID: james.westby@ubuntu.com-20060613153948-gvrt3mb2ddk5u62o
Tags: 1.2.0-3
added --disable-scrollkeeper on build

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
    LibGViewer - GTK+ File Viewer library 
 
3
    Copyright (C) 2006 Assaf Gordon
 
4
    
 
5
    Part of
 
6
        GNOME Commander - A GNOME based file manager
 
7
        Copyright (C) 2001-2006 Marcus Bjurman
 
8
 
 
9
    This program is free software; you can redistribute it and/or modify
 
10
    it under the terms of the GNU General Public License as published by
 
11
    the Free Software Foundation; either version 2 of the License, or
 
12
    (at your option) any later version.
 
13
 
 
14
    This program is distributed in the hope that it will be useful,
 
15
    but WITHOUT ANY WARRANTY; without even the implied warranty of
 
16
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
17
    GNU General Public License for more details.
 
18
 
 
19
    You should have received a copy of the GNU General Public License
 
20
    along with this program; if not, write to the Free Software
 
21
    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
22
*/
 
23
#include <config.h>
 
24
 
 
25
#include <errno.h>
 
26
#include <unistd.h>
 
27
#include <string.h>
 
28
#include <stdlib.h>
 
29
 
 
30
#include <gtk/gtk.h>
 
31
#include <gtk/gtktable.h>
 
32
 
 
33
 
 
34
#include "scroll-box.h"
 
35
 
 
36
static GtkTableClass *parent_class = NULL ;
 
37
 
 
38
/* Class Private Data */
 
39
struct _ScrollBoxPrivate
 
40
{
 
41
        GtkWidget *hscroll;
 
42
        GtkWidget *vscroll;
 
43
        GtkWidget *client ;
 
44
};
 
45
        
 
46
/* Gtk class related static functions */
 
47
static void scroll_box_init (ScrollBox *w);
 
48
static void scroll_box_class_init (ScrollBoxClass *class);
 
49
 
 
50
static void scroll_box_destroy (GtkObject *widget);
 
51
static gboolean scroll_box_button_press( GtkWidget *widget,GdkEventButton *event, gpointer data );
 
52
        
 
53
/*****************************************
 
54
        public functions
 
55
        (defined in the header file)
 
56
*****************************************/
 
57
GtkType scroll_box_get_type (void)
 
58
{
 
59
        static GtkType type = 0;
 
60
        if (type == 0)  {
 
61
                GTypeInfo info =
 
62
                {
 
63
                        sizeof (ScrollBoxClass),
 
64
                        NULL,
 
65
                        NULL,
 
66
                        (GClassInitFunc) scroll_box_class_init,
 
67
                        NULL,
 
68
                        NULL,
 
69
                        sizeof(ScrollBox),
 
70
                        0,
 
71
                        (GInstanceInitFunc) scroll_box_init
 
72
                };
 
73
                type = g_type_register_static(GTK_TYPE_TABLE, "scrollbox", &info,0);
 
74
        }
 
75
        return type;
 
76
}
 
77
 
 
78
GtkWidget*
 
79
scroll_box_new (void)
 
80
{
 
81
        ScrollBox *w;
 
82
        
 
83
        w = gtk_type_new (scroll_box_get_type ());
 
84
        
 
85
        return GTK_WIDGET (w);
 
86
}
 
87
 
 
88
static void     
 
89
scroll_box_class_init (ScrollBoxClass *class)
 
90
{
 
91
        GtkObjectClass *object_class;
 
92
 
 
93
        object_class = GTK_OBJECT_CLASS (class);
 
94
        parent_class = gtk_type_class(gtk_table_get_type());
 
95
 
 
96
        object_class->destroy = scroll_box_destroy ;
 
97
}
 
98
 
 
99
static void
 
100
scroll_box_init (ScrollBox *w)
 
101
{
 
102
        w->priv = g_new0(ScrollBoxPrivate,1);
 
103
        
 
104
        gtk_table_resize(GTK_TABLE(w), 2, 2);   
 
105
        gtk_table_set_homogeneous(GTK_TABLE(w),FALSE);
 
106
 
 
107
        w->priv->vscroll = gtk_vscrollbar_new (NULL);
 
108
        gtk_widget_show (w->priv->vscroll);
 
109
        gtk_table_attach (GTK_TABLE(w), w->priv->vscroll, 1, 2, 0, 1,
 
110
                (GtkAttachOptions) (GTK_FILL),
 
111
                (GtkAttachOptions) (GTK_FILL), 0, 0);
 
112
        
 
113
        w->priv->hscroll = gtk_hscrollbar_new (NULL);
 
114
        gtk_widget_show (w->priv->hscroll);
 
115
        gtk_table_attach (GTK_TABLE (w), w->priv->hscroll, 0, 1, 1, 2,
 
116
                    (GtkAttachOptions) (GTK_FILL),
 
117
                    (GtkAttachOptions) (GTK_FILL), 0, 0);
 
118
        w->priv->client = NULL ;
 
119
        
 
120
        g_signal_connect(G_OBJECT(w),"button-press-event", G_CALLBACK(scroll_box_button_press), (gpointer)w) ;
 
121
        g_signal_connect(G_OBJECT(w),"destroy-event", G_CALLBACK(scroll_box_destroy), (gpointer)w) ;
 
122
}
 
123
 
 
124
static void
 
125
scroll_box_destroy (GtkObject *widget)
 
126
{
 
127
        ScrollBox *w;
 
128
        
 
129
        g_return_if_fail (widget!= NULL);
 
130
        g_return_if_fail (IS_SCROLL_BOX (widget));
 
131
        
 
132
        w = SCROLL_BOX (widget);
 
133
        
 
134
        if (w->priv) {
 
135
                if (w->priv->client)
 
136
                        g_object_unref(G_OBJECT(w->priv->client)) ;
 
137
                w->priv->client=NULL ;
 
138
                
 
139
                g_free(w->priv);
 
140
                w->priv = NULL;
 
141
        }
 
142
 
 
143
        if (GTK_OBJECT_CLASS (parent_class)->destroy)
 
144
                (* GTK_OBJECT_CLASS (parent_class)->destroy)(widget);
 
145
}
 
146
 
 
147
GtkRange* scroll_box_get_v_range(ScrollBox *obj)
 
148
{
 
149
        g_return_val_if_fail (obj!= NULL, FALSE);
 
150
        g_return_val_if_fail (IS_SCROLL_BOX (obj), FALSE);
 
151
        
 
152
        return GTK_RANGE(obj->priv->vscroll);
 
153
}
 
154
 
 
155
 
 
156
static gboolean scroll_box_button_press( GtkWidget *widget, GdkEventButton *event, gpointer data)
 
157
{
 
158
        ScrollBox *w;
 
159
        
 
160
        g_return_val_if_fail (widget != NULL, FALSE);
 
161
        g_return_val_if_fail (IS_SCROLL_BOX (widget), FALSE);
 
162
        g_return_val_if_fail (event != NULL, FALSE);
 
163
        
 
164
        w = SCROLL_BOX (widget);
 
165
        
 
166
        return FALSE;
 
167
}
 
168
 
 
169
void scroll_box_set_client ( ScrollBox *obj, GtkWidget* client)
 
170
{
 
171
        g_return_if_fail (obj != NULL);
 
172
        g_return_if_fail (IS_SCROLL_BOX (obj));
 
173
        
 
174
        if (obj->priv->client) {
 
175
                if (obj->priv->client)
 
176
                        g_object_unref(G_OBJECT(obj->priv->client)) ;
 
177
                obj->priv->client=NULL ;
 
178
        }
 
179
        
 
180
        g_return_if_fail(client!=NULL);
 
181
        g_object_ref(G_OBJECT(client));
 
182
        gtk_widget_show(client);
 
183
        obj->priv->client = client ;
 
184
        gtk_table_attach (GTK_TABLE (obj), client , 0, 1, 0, 1,
 
185
                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
 
186
                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), 0, 0);
 
187
}
 
188
 
 
189
GtkWidget*     scroll_box_get_client ( ScrollBox *obj )
 
190
{
 
191
        g_return_val_if_fail (obj!= NULL, NULL);
 
192
        g_return_val_if_fail (IS_SCROLL_BOX (obj), NULL);
 
193
        
 
194
        return obj->priv->client;
 
195
}
 
196
 
 
197
void scroll_box_set_h_adjustment (ScrollBox *obj, GtkAdjustment *adjustment)
 
198
{
 
199
        g_return_if_fail (obj != NULL);
 
200
        g_return_if_fail (IS_SCROLL_BOX(obj));
 
201
        
 
202
        gtk_range_set_adjustment(GTK_RANGE(obj->priv->hscroll), adjustment);
 
203
}
 
204
 
 
205
void scroll_box_set_v_adjustment (ScrollBox *obj, GtkAdjustment *adjustment)
 
206
{
 
207
        g_return_if_fail (obj != NULL);
 
208
        g_return_if_fail (IS_SCROLL_BOX(obj));
 
209
        
 
210
        gtk_range_set_adjustment(GTK_RANGE(obj->priv->vscroll), adjustment);
 
211
}
 
212
 
 
213
GtkAdjustment* scroll_box_get_h_adjustment (ScrollBox *obj)
 
214
{
 
215
        g_return_val_if_fail (obj != NULL,NULL);
 
216
        g_return_val_if_fail (IS_SCROLL_BOX(obj),NULL);
 
217
        
 
218
        return gtk_range_get_adjustment(GTK_RANGE(obj->priv->hscroll));
 
219
}
 
220
 
 
221
GtkAdjustment* scroll_box_get_v_adjustment (ScrollBox *obj)
 
222
{
 
223
        g_return_val_if_fail (obj != NULL,NULL);
 
224
        g_return_val_if_fail (IS_SCROLL_BOX(obj),NULL);
 
225
        
 
226
        return gtk_range_get_adjustment(GTK_RANGE(obj->priv->vscroll));
 
227
}