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