2008-07-26 [colin] 3.5.0cvs35
[claws.git] / src / gtk / gtksctree.h
1 /* Mail Summary tree widget for Sylpheed */
2
3 #ifndef __GTK_SCTREE_H__
4 #define __GTK_SCTREE_H__
5
6 #include <gtk/gtk.h>
7 #include <gtk/gtkclist.h>
8 #include <gtk/gtkctree.h>
9
10 /* This code is based on "gtkflist.{h,c}" from mc-4.5.42 .*/
11
12 #define TYPE_GTK_SCTREE                 (gtk_sctree_get_type ())
13 #define GTK_SCTREE(obj)                 (GTK_CHECK_CAST ((obj), TYPE_GTK_SCTREE, GtkSCTree))
14 #define GTK_SCTREE_CLASS(klass)         (GTK_CHECK_CLASS_CAST ((klass), TYPE_GTK_SCTREE, GtkSCTreeClass))
15 #define GTK_IS_SCTREE(obj)              (GTK_CHECK_TYPE ((obj), TYPE_GTK_SCTREE))
16 #define GTK_IS_SCTREE_CLASS(klass)      (GTK_CHECK_CLASS_TYPE ((klass), TYPE_GTK_SCTREE))
17
18
19 typedef struct _GtkSCTree GtkSCTree;
20 typedef struct _GtkSCTreeClass GtkSCTreeClass;
21
22 struct _GtkSCTree {
23         GtkCTree ctree;
24
25         /* The anchor row for range selections */
26         GtkCTreeNode *anchor_row;
27
28         /* Mouse button and position saved on button press */
29         gint dnd_press_button;
30         gint dnd_press_x, dnd_press_y;
31
32         /* Delayed selection information */
33         gint dnd_select_pending;
34         guint dnd_select_pending_state;
35         gint dnd_select_pending_row;
36         gint selecting_range;
37         gboolean sorting;
38
39         /* (dis)allow fancy color stripes */
40         gboolean show_stripes;
41         GtkTooltips *tips;
42         gboolean always_expand_recursively;
43         gboolean force_additive_sel;
44         gboolean *use_markup;
45 };
46
47 struct _GtkSCTreeClass {
48         GtkCTreeClass parent_class;
49     
50         /* Signal: invoke the popup menu for rows */
51         void (* row_popup_menu) (GtkSCTree *sctree, GdkEventButton *event);
52     
53         /* Signal: invoke the popup menu for empty areas */
54         void (* empty_popup_menu) (GtkSCTree *sctree, GdkEventButton *event);
55
56         /* Signal: open the file in the selected row */
57         void (* open_row) (GtkSCTree *sctree);
58
59         /* Signal: initiate a drag and drop operation */
60         void (* start_drag) (GtkSCTree *sctree, gint button, GdkEvent *event);
61 };
62
63
64 GType gtk_sctree_get_type (void);
65
66 GtkWidget *gtk_sctree_new_with_titles   (gint            columns, 
67                                          gint            tree_column, 
68                                          gchar          *titles[]);
69 void gtk_sctree_select                  (GtkSCTree      *sctree,
70                                          GtkCTreeNode   *node);
71 void gtk_sctree_select_with_state       (GtkSCTree      *sctree,
72                                          GtkCTreeNode   *node,
73                                          int             state);
74 void gtk_sctree_unselect_all            (GtkSCTree      *sctree);
75
76 void gtk_sctree_set_anchor_row          (GtkSCTree      *sctree,
77                                          GtkCTreeNode   *node);
78
79 void gtk_sctree_remove_node             (GtkSCTree      *sctree,
80                                          GtkCTreeNode   *node);
81
82 void gtk_sctree_set_stripes(GtkSCTree  *sctree, gboolean show_stripes);
83 void gtk_sctree_set_recursive_expand(GtkSCTree  *sctree, gboolean rec_exp);
84
85 /***********************************************************
86  *             Tree sorting functions                      *
87  ***********************************************************/
88
89 void gtk_sctree_sort_node (GtkCTree *ctree, GtkCTreeNode *node);
90
91 void gtk_sctree_sort_recursive (GtkCTree *ctree, GtkCTreeNode *node);
92
93 GtkCTreeNode* gtk_sctree_insert_node        (GtkCTree *ctree,
94                                              GtkCTreeNode *parent,
95                                              GtkCTreeNode *sibling,
96                                              gchar *text[],
97                                              guint8 spacing,
98                                              GdkPixmap *pixmap_closed,
99                                              GdkBitmap *mask_closed,
100                                              GdkPixmap *pixmap_opened,
101                                              GdkBitmap *mask_opened,
102                                              gboolean is_leaf,
103                                              gboolean expanded);
104 void        gtk_sctree_set_node_info        (GtkCTree *ctree,
105                                              GtkCTreeNode *node,
106                                              const gchar *text,
107                                              guint8 spacing,
108                                              GdkPixmap *pixmap_closed,
109                                              GdkBitmap *mask_closed,
110                                              GdkPixmap *pixmap_opened,
111                                              GdkBitmap *mask_opened,
112                                              gboolean is_leaf,
113                                              gboolean expanded);
114 GtkCTreeNode *
115 gtk_sctree_insert_gnode                     (GtkCTree          *ctree,
116                                              GtkCTreeNode      *parent,
117                                              GtkCTreeNode      *sibling,
118                                              GNode             *gnode,
119                                              GtkCTreeGNodeFunc  func,
120                                              gpointer           data);
121
122 void gtk_sctree_set_column_tooltip          (GtkSCTree          *sctree,
123                                              int                 column,
124                                              const gchar        *tip);
125 void gtk_sctree_set_use_markup              (GtkSCTree          *sctree,
126                                              int                 column,
127                                              gboolean            markup);
128 gboolean
129 gtk_sctree_is_hot_spot (GtkSCTree *ctree, 
130                        gint      x, 
131                        gint      y);
132 #endif /* __GTK_SCTREE_H__ */