remove all gtk3 conditionals
[claws.git] / src / gtk / gtkcmclist.h
1 /* GTK - The GIMP Toolkit
2  * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball, Josh MacDonald
3  * Copyright (C) 1997-1998 Jay Painter <jpaint@serv.net><jpaint@gimp.org>
4  *
5  * This library is free software; you can redistribute it and/or
6  * modify it under the terms of the GNU Lesser General Public
7  * License as published by the Free Software Foundation; either
8  * version 2 of the License, or (at your option) any later version.
9  *
10  * This library is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13  * Lesser General Public License for more details.
14  *
15  * You should have received a copy of the GNU Lesser General Public
16  * License along with this library; if not, write to the
17  * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
18  * Boston, MA 02111-1307, USA.
19  */
20
21 /*
22  * Modified by the GTK+ Team and others 1997-2000.  See the AUTHORS
23  * file for a list of people on the GTK+ Team.  See the ChangeLog
24  * files for a list of changes.  These files are distributed with
25  * GTK+ at ftp://ftp.gtk.org/pub/gtk/. 
26  */
27
28 #ifndef __GTK_CMCLIST_H__
29 #define __GTK_CMCLIST_H__
30
31 #include <gdk/gdk.h>
32 #include <gtk/gtk.h>
33
34
35 G_BEGIN_DECLS
36
37 /* clist flags */
38 enum {
39   GTK_CMCLIST_IN_DRAG             = 1 <<  0,
40   GTK_CMCLIST_ROW_HEIGHT_SET      = 1 <<  1,
41   GTK_CMCLIST_SHOW_TITLES         = 1 <<  2,
42   /* Unused */
43   GTK_CMCLIST_ADD_MODE            = 1 <<  4,
44   GTK_CMCLIST_AUTO_SORT           = 1 <<  5,
45   GTK_CMCLIST_AUTO_RESIZE_BLOCKED = 1 <<  6,
46   GTK_CMCLIST_REORDERABLE         = 1 <<  7,
47   GTK_CMCLIST_USE_DRAG_ICONS      = 1 <<  8,
48   GTK_CMCLIST_DRAW_DRAG_LINE      = 1 <<  9,
49   GTK_CMCLIST_DRAW_DRAG_RECT      = 1 << 10
50 }; 
51
52 /* cell types */
53 typedef enum
54 {
55   GTK_CMCELL_EMPTY,
56   GTK_CMCELL_TEXT,
57   GTK_CMCELL_PIXBUF,
58   GTK_CMCELL_PIXTEXT,
59   GTK_CMCELL_WIDGET
60 } GtkCMCellType;
61
62 typedef enum
63 {
64   GTK_CMCLIST_DRAG_NONE,
65   GTK_CMCLIST_DRAG_BEFORE,
66   GTK_CMCLIST_DRAG_INTO,
67   GTK_CMCLIST_DRAG_AFTER
68 } GtkCMCListDragPos;
69
70 typedef enum
71 {
72   GTK_CMBUTTON_IGNORED = 0,
73   GTK_CMBUTTON_SELECTS = 1 << 0,
74   GTK_CMBUTTON_DRAGS   = 1 << 1,
75   GTK_CMBUTTON_EXPANDS = 1 << 2
76 } GtkCMButtonAction;
77
78 #define GTK_TYPE_CMCLIST            (gtk_cmclist_get_type ())
79 #define GTK_CMCLIST(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_CMCLIST, GtkCMCList))
80 #define GTK_CMCLIST_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), GTK_TYPE_CMCLIST, GtkCMCListClass))
81 #define GTK_IS_CMCLIST(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_CMCLIST))
82 #define GTK_IS_CMCLIST_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_CMCLIST))
83 #define GTK_CMCLIST_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_CMCLIST, GtkCMCListClass))
84
85
86 #define GTK_CMCLIST_FLAGS(clist)             (GTK_CMCLIST (clist)->flags)
87 #define GTK_CMCLIST_SET_FLAG(clist,flag)     (GTK_CMCLIST_FLAGS (clist) |= (GTK_ ## flag))
88 #define GTK_CMCLIST_UNSET_FLAG(clist,flag)   (GTK_CMCLIST_FLAGS (clist) &= ~(GTK_ ## flag))
89
90 #define GTK_CMCLIST_IN_DRAG(clist)           (GTK_CMCLIST_FLAGS (clist) & GTK_CMCLIST_IN_DRAG)
91 #define GTK_CMCLIST_ROW_HEIGHT_SET(clist)    (GTK_CMCLIST_FLAGS (clist) & GTK_CMCLIST_ROW_HEIGHT_SET)
92 #define GTK_CMCLIST_SHOW_TITLES(clist)       (GTK_CMCLIST_FLAGS (clist) & GTK_CMCLIST_SHOW_TITLES)
93 #define GTK_CMCLIST_ADD_MODE(clist)          (GTK_CMCLIST_FLAGS (clist) & GTK_CMCLIST_ADD_MODE)
94 #define GTK_CMCLIST_AUTO_SORT(clist)         (GTK_CMCLIST_FLAGS (clist) & GTK_CMCLIST_AUTO_SORT)
95 #define GTK_CMCLIST_AUTO_RESIZE_BLOCKED(clist) (GTK_CMCLIST_FLAGS (clist) & GTK_CMCLIST_AUTO_RESIZE_BLOCKED)
96 #define GTK_CMCLIST_REORDERABLE(clist)       (GTK_CMCLIST_FLAGS (clist) & GTK_CMCLIST_REORDERABLE)
97 #define GTK_CMCLIST_USE_DRAG_ICONS(clist)    (GTK_CMCLIST_FLAGS (clist) & GTK_CMCLIST_USE_DRAG_ICONS)
98 #define GTK_CMCLIST_DRAW_DRAG_LINE(clist)    (GTK_CMCLIST_FLAGS (clist) & GTK_CMCLIST_DRAW_DRAG_LINE)
99 #define GTK_CMCLIST_DRAW_DRAG_RECT(clist)    (GTK_CMCLIST_FLAGS (clist) & GTK_CMCLIST_DRAW_DRAG_RECT)
100
101 #define GTK_CMCLIST_ROW(_glist_) ((GtkCMCListRow *)((_glist_)->data))
102
103 /* pointer casting for cells */
104 #define GTK_CMCELL_TEXT(cell)     (((GtkCMCellText *) &(cell)))
105 #define GTK_CMCELL_PIXBUF(cell)   (((GtkCMCellPixbuf *) &(cell)))
106 #define GTK_CMCELL_PIXTEXT(cell)  (((GtkCMCellPixText *) &(cell)))
107 #define GTK_CMCELL_WIDGET(cell)   (((GtkCMCellWidget *) &(cell)))
108
109 typedef struct _GtkCMCList GtkCMCList;
110 typedef struct _GtkCMCListClass GtkCMCListClass;
111 typedef struct _GtkCMCListColumn GtkCMCListColumn;
112 typedef struct _GtkCMCListRow GtkCMCListRow;
113
114 typedef struct _GtkCMCell GtkCMCell;
115 typedef struct _GtkCMCellText GtkCMCellText;
116 typedef struct _GtkCMCellPixbuf GtkCMCellPixbuf;
117 typedef struct _GtkCMCellPixText GtkCMCellPixText;
118 typedef struct _GtkCMCellWidget GtkCMCellWidget;
119
120 typedef gint (*GtkCMCListCompareFunc) (GtkCMCList     *clist,
121                                      gconstpointer ptr1,
122                                      gconstpointer ptr2);
123
124 typedef struct _GtkCMCListCellInfo GtkCMCListCellInfo;
125 typedef struct _GtkCMCListDestInfo GtkCMCListDestInfo;
126
127 struct _GtkCMCListCellInfo
128 {
129   gint row;
130   gint column;
131 };
132
133 struct _GtkCMCListDestInfo
134 {
135   GtkCMCListCellInfo cell;
136   GtkCMCListDragPos  insert_pos;
137 };
138
139 struct _GtkCMCList
140 {
141   GtkContainer container;
142   
143   guint16 flags;
144   
145   gpointer reserved1;
146   gpointer reserved2;
147   guint freeze_count;
148   
149   /* allocation rectangle after the conatiner_border_width
150    * and the width of the shadow border */
151   GdkRectangle internal_allocation;
152   
153   /* rows */
154   gint rows;
155   gint row_height;
156   GList *row_list;
157   GList *row_list_end;
158   
159   /* columns */
160   gint columns;
161   GdkRectangle column_title_area;
162   GdkWindow *title_window;
163   
164   /* dynamicly allocated array of column structures */
165   GtkCMCListColumn *column;
166   
167   /* the scrolling window and its height and width to
168    * make things a little speedier */
169   GdkWindow *clist_window;
170   gint clist_window_width;
171   gint clist_window_height;
172   
173   /* offsets for scrolling */
174   gint hoffset;
175   gint voffset;
176   
177   /* border shadow style */
178   GtkShadowType shadow_type;
179   
180   /* the list's selection mode (gtkenums.h) */
181   GtkSelectionMode selection_mode;
182   
183   /* list of selected rows */
184   GList *selection;
185   GList *selection_end;
186   
187   GList *undo_selection;
188   GList *undo_unselection;
189   gint undo_anchor;
190   
191   /* mouse buttons */
192   guint8 button_actions[5];
193
194   guint8 drag_button;
195
196   /* dnd */
197   GtkCMCListCellInfo click_cell;
198
199   /* scroll adjustments */
200   GtkAdjustment *hadjustment;
201   GtkAdjustment *vadjustment;
202   
203   gint dash_mode;
204   
205   /* cursor used to indicate dragging */
206   GdkCursor *cursor_drag;
207   
208   /* the current x-pixel location of the xor-drag line */
209   gint x_drag;
210   
211   /* focus handling */
212   gint focus_row;
213
214   gint focus_header_column;
215   
216   /* dragging the selection */
217   gint anchor;
218   GtkStateType anchor_state;
219   gint drag_pos;
220   gint htimer;
221   gint vtimer;
222   
223   GtkSortType sort_type;
224   GtkCMCListCompareFunc compare;
225   gint sort_column;
226
227   gint drag_highlight_row;
228   GtkCMCListDragPos drag_highlight_pos;
229 };
230
231 struct _GtkCMCListClass
232 {
233   GtkContainerClass parent_class;
234   
235   void  (*set_scroll_adjustments) (GtkCMCList       *clist,
236                                    GtkAdjustment  *hadjustment,
237                                    GtkAdjustment  *vadjustment);
238   void   (*refresh)             (GtkCMCList       *clist);
239   void   (*select_row)          (GtkCMCList       *clist,
240                                  gint            row,
241                                  gint            column,
242                                  GdkEvent       *event);
243   void   (*unselect_row)        (GtkCMCList       *clist,
244                                  gint            row,
245                                  gint            column,
246                                  GdkEvent       *event);
247   void   (*row_move)            (GtkCMCList       *clist,
248                                  gint            source_row,
249                                  gint            dest_row);
250   void   (*click_column)        (GtkCMCList       *clist,
251                                  gint            column);
252   void   (*resize_column)       (GtkCMCList       *clist,
253                                  gint            column,
254                                  gint            width);
255   void   (*toggle_focus_row)    (GtkCMCList       *clist);
256   void   (*select_all)          (GtkCMCList       *clist);
257   void   (*unselect_all)        (GtkCMCList       *clist);
258   void   (*undo_selection)      (GtkCMCList       *clist);
259   void   (*start_selection)     (GtkCMCList       *clist);
260   void   (*end_selection)       (GtkCMCList       *clist);
261   void   (*extend_selection)    (GtkCMCList       *clist,
262                                  GtkScrollType   scroll_type,
263                                  gfloat          position,
264                                  gboolean        auto_start_selection);
265   void   (*scroll_horizontal)   (GtkCMCList       *clist,
266                                  GtkScrollType   scroll_type,
267                                  gfloat          position);
268   void   (*scroll_vertical)     (GtkCMCList       *clist,
269                                  GtkScrollType   scroll_type,
270                                  gfloat          position);
271   void   (*toggle_add_mode)     (GtkCMCList       *clist);
272   void   (*abort_column_resize) (GtkCMCList       *clist);
273   void   (*resync_selection)    (GtkCMCList       *clist,
274                                  GdkEvent       *event);
275   GList* (*selection_find)      (GtkCMCList       *clist,
276                                  gint            row_number,
277                                  GList          *row_list_element);
278   void   (*draw_row)            (GtkCMCList       *clist,
279                                  GdkRectangle   *area,
280                                  gint            row,
281                                  GtkCMCListRow    *clist_row);
282   void   (*clear)               (GtkCMCList       *clist);
283   void   (*fake_unselect_all)   (GtkCMCList       *clist,
284                                  gint            row);
285   void   (*sort_list)           (GtkCMCList       *clist);
286   gint   (*insert_row)          (GtkCMCList       *clist,
287                                  gint            row,
288                                  gchar          *text[]);
289   void   (*remove_row)          (GtkCMCList       *clist,
290                                  gint            row);
291   void   (*set_cell_contents)   (GtkCMCList       *clist,
292                                  GtkCMCListRow    *clist_row,
293                                  gint            column,
294                                  GtkCMCellType     type,
295                                  const gchar    *text,
296                                  guint8          spacing,
297                                  GdkPixbuf      *pixbuf);
298   void   (*cell_size_request)   (GtkCMCList       *clist,
299                                  GtkCMCListRow    *clist_row,
300                                  gint            column,
301                                  GtkRequisition *requisition);
302
303 };
304
305 struct _GtkCMCListColumn
306 {
307   gchar *title;
308   GdkRectangle area;
309   
310   GtkWidget *button;
311   GdkWindow *window;
312   
313   gint width;
314   gint min_width;
315   gint max_width;
316   GtkJustification justification;
317   
318   guint visible        : 1;  
319   guint width_set      : 1;
320   guint resizeable     : 1;
321   guint auto_resize    : 1;
322   guint button_passive : 1;
323 };
324
325 struct _GtkCMCListRow
326 {
327   GtkCMCell *cell;
328   GtkStateType state;
329   
330   GdkColor foreground;
331   GdkColor background;
332   
333   GtkStyle *style;
334
335   gpointer data;
336   GDestroyNotify destroy;
337   
338   guint fg_set     : 1;
339   guint bg_set     : 1;
340   guint selectable : 1;
341 };
342
343 /* Cell Structures */
344 struct _GtkCMCellText
345 {
346   GtkCMCellType type;
347   
348   gint16 vertical;
349   gint16 horizontal;
350   
351   GtkStyle *style;
352
353   gchar *text;
354 };
355
356 struct _GtkCMCellPixbuf
357 {
358   GtkCMCellType type;
359   
360   gint16 vertical;
361   gint16 horizontal;
362   
363   GtkStyle *style;
364
365   GdkPixbuf *pixbuf;
366 };
367
368 struct _GtkCMCellPixText
369 {
370   GtkCMCellType type;
371   
372   gint16 vertical;
373   gint16 horizontal;
374   
375   GtkStyle *style;
376
377   gchar *text;
378   guint8 spacing;
379   GdkPixbuf *pixbuf;
380 };
381
382 struct _GtkCMCellWidget
383 {
384   GtkCMCellType type;
385   
386   gint16 vertical;
387   gint16 horizontal;
388   
389   GtkStyle *style;
390
391   GtkWidget *widget;
392 };
393
394 struct _GtkCMCell
395 {
396   GtkCMCellType type;
397   
398   gint16 vertical;
399   gint16 horizontal;
400   
401   GtkStyle *style;
402
403   union {
404     gchar *text;
405     
406     struct {
407       GdkPixbuf *pixbuf;
408     } pm;
409     
410     struct {
411       gchar *text;
412       guint8 spacing;
413       GdkPixbuf *pixbuf;
414     } pt;
415     
416     GtkWidget *widget;
417   } u;
418 };
419
420 GType gtk_cmclist_get_type (void);
421
422 /* create a new GtkCMCList */
423 GtkWidget* gtk_cmclist_new             (gint   columns);
424 GtkWidget* gtk_cmclist_new_with_titles (gint   columns,
425                                       gchar *titles[]);
426
427 /* set adjustments of clist */
428 void gtk_cmclist_set_hadjustment (GtkCMCList      *clist,
429                                 GtkAdjustment *adjustment);
430 void gtk_cmclist_set_vadjustment (GtkCMCList      *clist,
431                                 GtkAdjustment *adjustment);
432
433 /* get adjustments of clist */
434 GtkAdjustment* gtk_cmclist_get_hadjustment (GtkCMCList *clist);
435 GtkAdjustment* gtk_cmclist_get_vadjustment (GtkCMCList *clist);
436
437 /* set the border style of the clist */
438 void gtk_cmclist_set_shadow_type (GtkCMCList      *clist,
439                                 GtkShadowType  type);
440
441 /* set the clist's selection mode */
442 void gtk_cmclist_set_selection_mode (GtkCMCList         *clist,
443                                    GtkSelectionMode  mode);
444
445 /* enable clists reorder ability */
446 void gtk_cmclist_set_reorderable (GtkCMCList *clist,
447                                 gboolean  reorderable);
448 void gtk_cmclist_set_use_drag_icons (GtkCMCList *clist,
449                                    gboolean  use_icons);
450 void gtk_cmclist_set_button_actions (GtkCMCList *clist,
451                                    guint     button,
452                                    guint8    button_actions);
453
454 /* freeze all visual updates of the list, and then thaw the list after
455  * you have made a number of changes and the updates wil occure in a
456  * more efficent mannor than if you made them on a unfrozen list
457  */
458 void gtk_cmclist_freeze (GtkCMCList *clist);
459 void gtk_cmclist_thaw   (GtkCMCList *clist);
460
461 /* show and hide the column title buttons */
462 void gtk_cmclist_column_titles_show (GtkCMCList *clist);
463 void gtk_cmclist_column_titles_hide (GtkCMCList *clist);
464
465 /* set the column title to be a active title (responds to button presses, 
466  * prelights, and grabs keyboard focus), or passive where it acts as just
467  * a title
468  */
469 void gtk_cmclist_column_title_active   (GtkCMCList *clist,
470                                       gint      column);
471 void gtk_cmclist_column_title_passive  (GtkCMCList *clist,
472                                       gint      column);
473 void gtk_cmclist_column_titles_active  (GtkCMCList *clist);
474 void gtk_cmclist_column_titles_passive (GtkCMCList *clist);
475
476 /* set the title in the column title button */
477 void gtk_cmclist_set_column_title (GtkCMCList    *clist,
478                                  gint         column,
479                                  const gchar *title);
480
481 /* returns the title of column. Returns NULL if title is not set */
482 gchar * gtk_cmclist_get_column_title (GtkCMCList *clist,
483                                     gint      column);
484
485 /* set a widget instead of a title for the column title button */
486 void gtk_cmclist_set_column_widget (GtkCMCList  *clist,
487                                   gint       column,
488                                   GtkWidget *widget);
489
490 /* returns the column widget */
491 GtkWidget * gtk_cmclist_get_column_widget (GtkCMCList *clist,
492                                          gint      column);
493
494 /* set the justification on a column */
495 void gtk_cmclist_set_column_justification (GtkCMCList         *clist,
496                                          gint              column,
497                                          GtkJustification  justification);
498
499 /* set visibility of a column */
500 void gtk_cmclist_set_column_visibility (GtkCMCList *clist,
501                                       gint      column,
502                                       gboolean  visible);
503
504 /* enable/disable column resize operations by mouse */
505 void gtk_cmclist_set_column_resizeable (GtkCMCList *clist,
506                                       gint      column,
507                                       gboolean  resizeable);
508
509 /* resize column automatically to its optimal width */
510 void gtk_cmclist_set_column_auto_resize (GtkCMCList *clist,
511                                        gint      column,
512                                        gboolean  auto_resize);
513
514 gint gtk_cmclist_columns_autosize (GtkCMCList *clist);
515
516 /* return the optimal column width, i.e. maximum of all cell widths */
517 gint gtk_cmclist_optimal_column_width (GtkCMCList *clist,
518                                      gint      column);
519
520 /* set the pixel width of a column; this is a necessary step in
521  * creating a CList because otherwise the column width is chozen from
522  * the width of the column title, which will never be right
523  */
524 void gtk_cmclist_set_column_width (GtkCMCList *clist,
525                                  gint      column,
526                                  gint      width);
527
528 /* set column minimum/maximum width. min/max_width < 0 => no restriction */
529 void gtk_cmclist_set_column_min_width (GtkCMCList *clist,
530                                      gint      column,
531                                      gint      min_width);
532 void gtk_cmclist_set_column_max_width (GtkCMCList *clist,
533                                      gint      column,
534                                      gint      max_width);
535
536 /* change the height of the rows, the default (height=0) is
537  * the hight of the current font.
538  */
539 void gtk_cmclist_set_row_height (GtkCMCList *clist,
540                                guint     height);
541
542 /* scroll the viewing area of the list to the given column and row;
543  * row_align and col_align are between 0-1 representing the location the
544  * row should appear on the screnn, 0.0 being top or left, 1.0 being
545  * bottom or right; if row or column is -1 then then there is no change
546  */
547 void gtk_cmclist_moveto (GtkCMCList *clist,
548                        gint      row,
549                        gint      column,
550                        gfloat    row_align,
551                        gfloat    col_align);
552
553 /* returns whether the row is visible */
554 GtkVisibility gtk_cmclist_row_is_visible (GtkCMCList *clist,
555                                         gint      row);
556
557 /* returns whether the row is above or below current viewport */
558 gboolean gtk_cmclist_row_is_above_viewport (GtkCMCList *clist,
559                                         gint row);
560 gboolean gtk_cmclist_row_is_below_viewport (GtkCMCList *clist,
561                                         gint row);
562
563 /* returns the cell type */
564 GtkCMCellType gtk_cmclist_get_cell_type (GtkCMCList *clist,
565                                      gint      row,
566                                      gint      column);
567
568 /* sets a given cell's text, replacing its current contents */
569 void gtk_cmclist_set_text (GtkCMCList    *clist,
570                          gint         row,
571                          gint         column,
572                          const gchar *text);
573
574 /* for the "get" functions, any of the return pointer can be
575  * NULL if you are not interested
576  */
577 gint gtk_cmclist_get_text (GtkCMCList  *clist,
578                          gint       row,
579                          gint       column,
580                          gchar    **text);
581
582 /* sets a given cell's pixbuf, replacing its current contents */
583 void gtk_cmclist_set_pixbuf (GtkCMCList  *clist,
584                            gint       row,
585                            gint       column,
586                            GdkPixbuf *pixbuf);
587
588 gint gtk_cmclist_get_pixbuf (GtkCMCList   *clist,
589                            gint        row,
590                            gint        column,
591                            GdkPixbuf **pixbuf);
592
593 /* sets a given cell's pixbuf and text, replacing its current contents */
594 void gtk_cmclist_set_pixtext (GtkCMCList    *clist,
595                             gint         row,
596                             gint         column,
597                             const gchar *text,
598                             guint8       spacing,
599                             GdkPixbuf   *pixbuf);
600
601 gint gtk_cmclist_get_pixtext (GtkCMCList   *clist,
602                             gint        row,
603                             gint        column,
604                             gchar     **text,
605                             guint8     *spacing,
606                             GdkPixbuf **pixbuf);
607
608 /* sets the foreground color of a row, the color must already
609  * be allocated
610  */
611 void gtk_cmclist_set_foreground (GtkCMCList       *clist,
612                                gint            row,
613                                const GdkColor *color);
614
615 /* sets the background color of a row, the color must already
616  * be allocated
617  */
618 void gtk_cmclist_set_background (GtkCMCList       *clist,
619                                gint            row,
620                                const GdkColor *color);
621
622 /* set / get cell styles */
623 void gtk_cmclist_set_cell_style (GtkCMCList *clist,
624                                gint      row,
625                                gint      column,
626                                GtkStyle *style);
627
628 GtkStyle *gtk_cmclist_get_cell_style (GtkCMCList *clist,
629                                     gint      row,
630                                     gint      column);
631
632 void gtk_cmclist_set_row_style (GtkCMCList *clist,
633                               gint      row,
634                               GtkStyle *style);
635
636 GtkStyle *gtk_cmclist_get_row_style (GtkCMCList *clist,
637                                    gint      row);
638
639 /* this sets a horizontal and vertical shift for drawing
640  * the contents of a cell; it can be positive or negitive;
641  * this is particulary useful for indenting items in a column
642  */
643 void gtk_cmclist_set_shift (GtkCMCList *clist,
644                           gint      row,
645                           gint      column,
646                           gint      vertical,
647                           gint      horizontal);
648
649 /* set/get selectable flag of a single row */
650 void gtk_cmclist_set_selectable (GtkCMCList *clist,
651                                gint      row,
652                                gboolean  selectable);
653 gboolean gtk_cmclist_get_selectable (GtkCMCList *clist,
654                                    gint      row);
655
656 /* prepend/append returns the index of the row you just added,
657  * making it easier to append and modify a row
658  */
659 gint gtk_cmclist_prepend (GtkCMCList    *clist,
660                         gchar       *text[]);
661 gint gtk_cmclist_append  (GtkCMCList    *clist,
662                         gchar       *text[]);
663
664 /* inserts a row at index row and returns the row where it was
665  * actually inserted (may be different from "row" in auto_sort mode)
666  */
667 gint gtk_cmclist_insert (GtkCMCList    *clist,
668                        gint         row,
669                        gchar       *text[]);
670
671 /* removes row at index row */
672 void gtk_cmclist_remove (GtkCMCList *clist,
673                        gint      row);
674
675 /* sets a arbitrary data pointer for a given row */
676 void gtk_cmclist_set_row_data (GtkCMCList *clist,
677                              gint      row,
678                              gpointer  data);
679
680 /* sets a data pointer for a given row with destroy notification */
681 void gtk_cmclist_set_row_data_full (GtkCMCList         *clist,
682                                   gint              row,
683                                   gpointer          data,
684                                   GDestroyNotify  destroy);
685
686 /* returns the data set for a row */
687 gpointer gtk_cmclist_get_row_data (GtkCMCList *clist,
688                                  gint      row);
689
690 /* givin a data pointer, find the first (and hopefully only!)
691  * row that points to that data, or -1 if none do
692  */
693 gint gtk_cmclist_find_row_from_data (GtkCMCList *clist,
694                                    gpointer  data);
695
696 /* force selection of a row */
697 void gtk_cmclist_select_row (GtkCMCList *clist,
698                            gint      row,
699                            gint      column);
700
701 /* force unselection of a row */
702 void gtk_cmclist_unselect_row (GtkCMCList *clist,
703                              gint      row,
704                              gint      column);
705
706 /* undo the last select/unselect operation */
707 void gtk_cmclist_undo_selection (GtkCMCList *clist);
708
709 /* clear the entire list -- this is much faster than removing
710  * each item with gtk_cmclist_remove
711  */
712 void gtk_cmclist_clear (GtkCMCList *clist);
713
714 /* return the row column corresponding to the x and y coordinates,
715  * the returned values are only valid if the x and y coordinates
716  * are respectively to a window == clist->clist_window
717  */
718 gint gtk_cmclist_get_selection_info (GtkCMCList *clist,
719                                    gint      x,
720                                    gint      y,
721                                    gint     *row,
722                                    gint     *column);
723
724 /* in multiple or extended mode, select all rows */
725 void gtk_cmclist_select_all (GtkCMCList *clist);
726
727 /* in all modes except browse mode, deselect all rows */
728 void gtk_cmclist_unselect_all (GtkCMCList *clist);
729
730 /* swap the position of two rows */
731 void gtk_cmclist_swap_rows (GtkCMCList *clist,
732                           gint      row1,
733                           gint      row2);
734
735 /* move row from source_row position to dest_row position */
736 void gtk_cmclist_row_move (GtkCMCList *clist,
737                          gint      source_row,
738                          gint      dest_row);
739
740 /* sets a compare function different to the default */
741 void gtk_cmclist_set_compare_func (GtkCMCList            *clist,
742                                  GtkCMCListCompareFunc  cmp_func);
743
744 /* the column to sort by */
745 void gtk_cmclist_set_sort_column (GtkCMCList *clist,
746                                 gint      column);
747
748 /* how to sort : ascending or descending */
749 void gtk_cmclist_set_sort_type (GtkCMCList    *clist,
750                               GtkSortType  sort_type);
751
752 /* sort the list with the current compare function */
753 void gtk_cmclist_sort (GtkCMCList *clist);
754
755 /* Automatically sort upon insertion */
756 void gtk_cmclist_set_auto_sort (GtkCMCList *clist,
757                               gboolean  auto_sort);
758
759 /* Private function for clist, ctree */
760
761 PangoLayout *_gtk_cmclist_create_cell_layout (GtkCMCList       *clist,
762                                             GtkCMCListRow    *clist_row,
763                                             gint            column);
764
765
766 G_END_DECLS
767
768
769 #endif                          /* __GTK_CMCLIST_H__ */