1 /* -*- Mode: C; tab-width: 3; indent-tabs-mode: nil; c-basic-offset: 3 -*- */
2 
3 /*
4  * GImageView
5  * Copyright (C) 2001 Takuro Ashie
6  *
7  * This program is free software; you can redistribute it and/or modify
8  * it under the terms of the GNU General Public License as published by
9  * the Free Software Foundation; either version 2 of the License, or
10  * (at your option) any later version.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with this program; if not, write to the Free Software
19  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
20  *
21  * $Id: gimv_paned.h,v 1.2 2003/06/13 09:43:32 makeinu Exp $
22  */
23 
24 /*
25  * These codes are taken from gThumb.
26  * gThumb code Copyright (C) 2001 The Free Software Foundation, Inc.
27  * gThumb author: Paolo Bacchilega
28  */
29 
30 #ifndef __GIMV_PANED_H__
31 #define __GIMV_PANED_H__
32 
33 #ifdef HAVE_CONFIG_H
34 #  include "config.h"
35 #endif
36 
37 #include <gdk/gdk.h>
38 #include <gtk/gtkcontainer.h>
39 
40 
41 #ifdef __cplusplus
42 extern "C" {
43 #endif /* __cplusplus */
44 
45 
46 #ifndef USE_NORMAL_PANED
47 
48 #define GIMV_TYPE_PANED                  (gimv_paned_get_type ())
49 #define GIMV_PANED(obj)                  (GTK_CHECK_CAST ((obj), GIMV_TYPE_PANED, GimvPaned))
50 #define GIMV_PANED_CLASS(klass)          (GTK_CHECK_CLASS_CAST ((klass), GIMV_TYPE_PANED, GimvPanedClass))
51 #define GIMV_IS_PANED(obj)               (GTK_CHECK_TYPE ((obj), GIMV_TYPE_PANED))
52 #define GIMV_IS_PANED_CLASS(klass)       (GTK_CHECK_CLASS_TYPE ((klass), GIMV_TYPE_PANED))
53 
54 typedef struct _GimvPaned       GimvPaned;
55 typedef struct _GimvPanedClass  GimvPanedClass;
56 
57 struct _GimvPaned
58 {
59    GtkContainer container;
60 
61    GtkWidget *child1;
62    GtkWidget *child2;
63 
64    GdkWindow *handle;
65    GdkGC *xor_gc;
66 
67    /*< public >*/
68    guint16 gutter_size;
69 
70    /*< private >*/
71    gint child1_size;
72    gint last_allocation;
73    gint min_position;
74    gint max_position;
75 
76    guint position_set : 1;
77    guint in_drag : 1;
78    guint child1_shrink : 1;
79    guint child1_resize : 1;
80    guint child2_shrink : 1;
81    guint child2_resize : 1;
82 
83    gint16 handle_xpos;
84    gint16 handle_ypos;
85 
86    /* whether it is an horizontal or a vertical paned. */
87    guint horizontal : 1;
88 
89    /* minimal sizes for child1 and child2. (default value : 0) */
90    gint child1_minsize;
91    gint child2_minsize;
92 
93    /* whether the minimal size option is enabled or not. */
94    guint child1_use_minsize : 1;
95    guint child2_use_minsize : 1;
96 
97    /* stores what child is hiden, if any:
98     * 0   : no child collapsed.
99     * 1,2 : index of the collapsed child. */
100    guint child_hidden : 2;
101 };
102 
103 struct _GimvPanedClass
104 {
105    GtkContainerClass parent_class;
106 
107    void (*xor_line) (GimvPaned *);
108 };
109 
110 
111 GtkType gimv_paned_get_type        (void);
112 void    gimv_paned_add1            (GimvPaned *paned,
113                                     GtkWidget *child);
114 void    gimv_paned_add2            (GimvPaned *paned,
115                                     GtkWidget *child);
116 void    gimv_paned_pack1           (GimvPaned *paned,
117                                     GtkWidget *child,
118                                     gboolean   resize,
119                                     gboolean   shrink);
120 void    gimv_paned_pack2           (GimvPaned *paned,
121                                     GtkWidget *child,
122                                     gboolean   resize,
123                                     gboolean   shrink);
124 void    gimv_paned_set_position    (GimvPaned *paned,
125                                     gint       position);
126 gint    gimv_paned_get_position    (GimvPaned *paned);
127 
128 void    gimv_paned_set_gutter_size (GimvPaned *paned,
129                                     guint16    size);
130 
131 void    gimv_paned_xor_line        (GimvPaned *paned);
132 
133 /* Set a minimal size for a child. Unset the collapse option if setted. */
134 void    gimv_paned_child1_use_minsize     (GimvPaned *paned,
135                                            gboolean   use_minsize,
136                                            gint       minsize);
137 void    gimv_paned_child2_use_minsize     (GimvPaned *paned,
138                                            gboolean   use_minsize,
139                                            gint       minsize);
140 
141 void    gimv_paned_hide_child1            (GimvPaned *paned);
142 void    gimv_paned_hide_child2            (GimvPaned *paned);
143 void    gimv_paned_split                  (GimvPaned *paned);
144 guint   gimv_paned_which_hidden           (GimvPaned *paned);
145 
146 /* Internal function */
147 void    gimv_paned_compute_position (GimvPaned *paned,
148                                      gint       allocation,
149                                      gint       child1_req,
150                                      gint       child2_req);
151 
152 #define gray50_width 2
153 #define gray50_height 2
154 extern char gray50_bits[];
155 
156 #else /* USE_NORMAL_PANED */
157 
158 #include <gtk/gtkpaned.h>
159 
160 #define GimvPaned GtkPaned
161 #define GIMV_TYPE_PANED                      GTK_TYPE_PANED
162 #define GIMV_PANED(paned)                    GTK_PANED(paned)
163 #define GIMV_IS_PANED(obj)                   GTK_IS_PANED(paned)
164 #define GIMV_IS_PANED_CLASS(klass)           GTK_IS_PANED_CLASS(paned)
165 #define gimv_paned_add1(paned, widget)       gtk_paned_add1(paned, widget)
166 #define gimv_paned_add2(paned, widget)       gtk_paned_add2(paned, widget)
167 #define gimv_paned_set_position(paned, size) gtk_paned_set_position(paned, size)
168 #define gimv_paned_get_position(paned)       gtk_paned_get_position(paned)
169 #define gimv_paned_split(paned) \
170 { \
171    gtk_widget_show (paned->child1); \
172    gtk_widget_show (paned->child2); \
173 }
174 #define gimv_paned_hide_child1(paned)        gtk_widget_hide (paned->child1)
175 #define gimv_paned_hide_child2(paned)        gtk_widget_hide (paned->child2)
176 
177 guint gimv_paned_which_hidden (GimvPaned *paned);
178 
179 #endif /* USE_NORMAL_PANED */
180 
181 
182 #ifdef __cplusplus
183 }
184 #endif /* __cplusplus */
185 
186 
187 #endif /* __GIMV_PANED_H__ */
188