gtkclist.h 20.4 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
/* GTK - The GIMP Toolkit
 * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball, Josh MacDonald
 * Copyright (C) 1997-1998 Jay Painter <jpaint@serv.net><jpaint@gimp.org>
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Library General Public
 * License as published by the Free Software Foundation; either
 * version 2 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Library General Public License for more details.
 *
 * You should have received a copy of the GNU Library General Public
16 17 18
 * License along with this library; if not, write to the
 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
 * Boston, MA 02111-1307, USA.
19 20 21 22 23 24 25 26 27 28 29
 */
#ifndef __GTK_CLIST_H__
#define __GTK_CLIST_H__

#include <gdk/gdk.h>
#include <gtk/gtksignal.h>
#include <gtk/gtkalignment.h>
#include <gtk/gtklabel.h>
#include <gtk/gtkbutton.h>
#include <gtk/gtkhscrollbar.h>
#include <gtk/gtkvscrollbar.h>
30
#include <gtk/gtkenums.h>
31 32

#ifdef __cplusplus
Tim Janik's avatar
Tim Janik committed
33 34
extern "C" {
#endif /* __cplusplus */
35 36 37 38

/* clist flags */
enum                    
{
39 40 41 42 43 44 45 46 47 48
  GTK_CLIST_FROZEN              = 1 << 0,
  GTK_CLIST_IN_DRAG             = 1 << 1,
  GTK_CLIST_DRAG_SELECTION      = 1 << 2,
  GTK_CLIST_ROW_HEIGHT_SET      = 1 << 3,
  GTK_CLIST_SHOW_TITLES         = 1 << 4,
  GTK_CLIST_CONSTRUCTED	        = 1 << 5,
  GTK_CLIST_CHILD_HAS_FOCUS     = 1 << 6,
  GTK_CLIST_ADD_MODE            = 1 << 7,
  GTK_CLIST_AUTO_SORT           = 1 << 8,
  GTK_CLIST_AUTO_RESIZE_BLOCKED = 1 << 9
49 50 51 52 53 54 55 56 57 58 59 60
}; 

/* cell types */
typedef enum
{
  GTK_CELL_EMPTY,
  GTK_CELL_TEXT,
  GTK_CELL_PIXMAP,
  GTK_CELL_PIXTEXT,
  GTK_CELL_WIDGET
} GtkCellType;

61 62 63 64 65
#define GTK_TYPE_CLIST            (gtk_clist_get_type ())
#define GTK_CLIST(obj)            (GTK_CHECK_CAST ((obj), GTK_TYPE_CLIST, GtkCList))
#define GTK_CLIST_CLASS(klass)    (GTK_CHECK_CLASS_CAST ((klass), GTK_TYPE_CLIST, GtkCListClass))
#define GTK_IS_CLIST(obj)         (GTK_CHECK_TYPE ((obj), GTK_TYPE_CLIST))
#define GTK_IS_CLIST_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), GTK_TYPE_CLIST))
66

67 68 69
#define GTK_CLIST_FLAGS(clist)             (GTK_CLIST (clist)->flags)
#define GTK_CLIST_SET_FLAG(clist,flag)     (GTK_CLIST_FLAGS (clist) |= (GTK_ ## flag))
#define GTK_CLIST_UNSET_FLAG(clist,flag)   (GTK_CLIST_FLAGS (clist) &= ~(GTK_ ## flag))
70

71 72 73 74 75
#define GTK_CLIST_FROZEN(clist)            (GTK_CLIST_FLAGS (clist) & GTK_CLIST_FROZEN)
#define GTK_CLIST_IN_DRAG(clist)           (GTK_CLIST_FLAGS (clist) & GTK_CLIST_IN_DRAG)
#define GTK_CLIST_ROW_HEIGHT_SET(clist)    (GTK_CLIST_FLAGS (clist) & GTK_CLIST_ROW_HEIGHT_SET)
#define GTK_CLIST_SHOW_TITLES(clist)       (GTK_CLIST_FLAGS (clist) & GTK_CLIST_SHOW_TITLES)
#define GTK_CLIST_CONSTRUCTED(clist)       (GTK_CLIST_FLAGS (clist) & GTK_CLIST_CONSTRUCTED)
76 77 78
#define GTK_CLIST_CHILD_HAS_FOCUS(clist)   (GTK_CLIST_FLAGS (clist) & GTK_CLIST_CHILD_HAS_FOCUS)
#define GTK_CLIST_DRAG_SELECTION(clist)    (GTK_CLIST_FLAGS (clist) & GTK_CLIST_DRAG_SELECTION)
#define GTK_CLIST_ADD_MODE(clist)          (GTK_CLIST_FLAGS (clist) & GTK_CLIST_ADD_MODE)
Stefan Jeske's avatar
Stefan Jeske committed
79
#define GTK_CLIST_AUTO_SORT(clist)         (GTK_CLIST_FLAGS (clist) & GTK_CLIST_AUTO_SORT)
80
#define GTK_CLIST_AUTO_RESIZE_BLOCKED(clist) (GTK_CLIST_FLAGS (clist) & GTK_CLIST_AUTO_RESIZE_BLOCKED)
81 82

#define GTK_CLIST_ROW(_glist_) ((GtkCListRow *)((_glist_)->data))
83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100

/* pointer casting for cells */
#define GTK_CELL_TEXT(cell)     (((GtkCellText *) &(cell)))
#define GTK_CELL_PIXMAP(cell)   (((GtkCellPixmap *) &(cell)))
#define GTK_CELL_PIXTEXT(cell)  (((GtkCellPixText *) &(cell)))
#define GTK_CELL_WIDGET(cell)   (((GtkCellWidget *) &(cell)))

typedef struct _GtkCList GtkCList;
typedef struct _GtkCListClass GtkCListClass;
typedef struct _GtkCListColumn GtkCListColumn;
typedef struct _GtkCListRow GtkCListRow;

typedef struct _GtkCell GtkCell;
typedef struct _GtkCellText GtkCellText;
typedef struct _GtkCellPixmap GtkCellPixmap;
typedef struct _GtkCellPixText GtkCellPixText;
typedef struct _GtkCellWidget GtkCellWidget;

Stefan Jeske's avatar
Stefan Jeske committed
101 102 103 104
typedef gint (*GtkCListCompareFunc) (GtkCList     *clist,
				     gconstpointer ptr1,
				     gconstpointer ptr2);

105 106 107 108
struct _GtkCList
{
  GtkContainer container;
  
109
  guint16 flags;
Tim Janik's avatar
Tim Janik committed
110
  
111 112 113
  /* mem chunks */
  GMemChunk *row_mem_chunk;
  GMemChunk *cell_mem_chunk;
Tim Janik's avatar
Tim Janik committed
114
  
115 116 117
  /* allocation rectangle after the conatiner_border_width
   * and the width of the shadow border */
  GdkRectangle internal_allocation;
Tim Janik's avatar
Tim Janik committed
118
  
119 120 121 122 123 124 125 126 127 128 129 130 131 132 133
  /* rows */
  gint rows;
  gint row_center_offset;
  gint row_height;
  GList *row_list;
  GList *row_list_end;
  
  /* columns */
  gint columns;
  GdkRectangle column_title_area;
  GdkWindow *title_window;
  
  /* dynamicly allocated array of column structures */
  GtkCListColumn *column;
  
134
  /*the scrolling window and it's height and width to
135 136 137 138 139 140 141 142 143 144 145 146 147 148
   * make things a little speedier */
  GdkWindow *clist_window;
  gint clist_window_width;
  gint clist_window_height;
  
  /* offsets for scrolling */
  gint hoffset;
  gint voffset;
  
  /* border shadow style */
  GtkShadowType shadow_type;
  
  /* the list's selection mode (gtkenums.h) */
  GtkSelectionMode selection_mode;
Tim Janik's avatar
Tim Janik committed
149
  
150 151
  /* list of selected rows */
  GList *selection;
152
  GList *selection_end;
Tim Janik's avatar
Tim Janik committed
153
  
154 155 156
  GList *undo_selection;
  GList *undo_unselection;
  gint undo_anchor;
Tim Janik's avatar
Tim Janik committed
157
  
158
  /* scroll adjustments */
159 160
  GtkAdjustment *hadjustment;
  GtkAdjustment *vadjustment;
Tim Janik's avatar
Tim Janik committed
161
  
162
  /* xor GC for the vertical drag line */
163
  GdkGC *xor_gc;
Tim Janik's avatar
Tim Janik committed
164
  
165 166 167
  /* gc for drawing unselected cells */
  GdkGC *fg_gc;
  GdkGC *bg_gc;
Tim Janik's avatar
Tim Janik committed
168
  
169 170
  /* cursor used to indicate dragging */
  GdkCursor *cursor_drag;
Tim Janik's avatar
Tim Janik committed
171
  
172 173
  /* the current x-pixel location of the xor-drag line */
  gint x_drag;
Tim Janik's avatar
Tim Janik committed
174
  
175 176
  /* focus handling */
  gint focus_row;
Tim Janik's avatar
Tim Janik committed
177
  
178 179 180 181 182 183
  /* dragging the selection */
  gint anchor;
  GtkStateType anchor_state;
  gint drag_pos;
  gint htimer;
  gint vtimer;
Tim Janik's avatar
Tim Janik committed
184
  
Stefan Jeske's avatar
Stefan Jeske committed
185 186 187
  GtkSortType sort_type;
  GtkCListCompareFunc compare;
  gint sort_column;
188 189 190 191 192 193
};

struct _GtkCListClass
{
  GtkContainerClass parent_class;
  
194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254
  void   (*select_row)          (GtkCList       *clist,
				 gint            row,
				 gint            column,
				 GdkEvent       *event);
  void   (*unselect_row)        (GtkCList       *clist,
				 gint            row,
				 gint            column,
				 GdkEvent       *event);
  void   (*click_column)        (GtkCList       *clist,
				 gint            column);
  void   (*resize_column)       (GtkCList       *clist,
				 gint            column,
                                 gint            width);
  void   (*toggle_focus_row)    (GtkCList       *clist);
  void   (*select_all)          (GtkCList       *clist);
  void   (*unselect_all)        (GtkCList       *clist);
  void   (*undo_selection)      (GtkCList       *clist);
  void   (*start_selection)     (GtkCList       *clist);
  void   (*end_selection)       (GtkCList       *clist);
  void   (*extend_selection)    (GtkCList       *clist,
				 GtkScrollType   scroll_type,
				 gfloat          position,
				 gboolean        auto_start_selection);
  void   (*scroll_horizontal)   (GtkCList       *clist,
				 GtkScrollType   scroll_type,
				 gfloat          position);
  void   (*scroll_vertical)     (GtkCList       *clist,
				 GtkScrollType   scroll_type,
				 gfloat          position);
  void   (*toggle_add_mode)     (GtkCList       *clist);
  void   (*abort_column_resize) (GtkCList       *clist);
  void   (*resync_selection)    (GtkCList       *clist,
				 GdkEvent       *event);
  GList* (*selection_find)      (GtkCList       *clist,
				 gint            row_number,
				 GList          *row_list_element);
  void   (*draw_row)            (GtkCList       *clist,
				 GdkRectangle   *area,
				 gint            row,
				 GtkCListRow    *clist_row);
  void   (*clear)               (GtkCList       *clist);
  void   (*fake_unselect_all)   (GtkCList       *clist,
				 gint            row);
  void   (*sort_list)           (GtkCList       *clist);
  gint   (*insert_row)          (GtkCList       *clist,
				 gint            row,
				 gchar          *text[]);
  void   (*remove_row)          (GtkCList       *clist,
				 gint            row);
  void   (*set_cell_contents)   (GtkCList       *clist,
				 GtkCListRow    *clist_row,
				 gint            column,
				 GtkCellType     type,
				 const gchar    *text,
				 guint8          spacing,
				 GdkPixmap      *pixmap,
				 GdkBitmap      *mask);
  void   (*cell_size_request)   (GtkCList       *clist,
				 GtkCListRow    *clist_row,
				 gint            column,
				 GtkRequisition *requisition);
255 256 257 258 259 260 261 262
};

struct _GtkCListColumn
{
  gchar *title;
  GdkRectangle area;
  
  GtkWidget *button;
263
  GdkWindow *window;
Tim Janik's avatar
Tim Janik committed
264
  
265
  gint width;
266 267
  gint min_width;
  gint max_width;
268
  GtkJustification justification;
Tim Janik's avatar
Tim Janik committed
269
  
270 271 272 273
  guint visible     : 1;  
  guint width_set   : 1;
  guint resizeable  : 1;
  guint auto_resize : 1;
274 275 276 277 278 279
};

struct _GtkCListRow
{
  GtkCell *cell;
  GtkStateType state;
Tim Janik's avatar
Tim Janik committed
280
  
281 282
  GdkColor foreground;
  GdkColor background;
Tim Janik's avatar
Tim Janik committed
283
  
284 285
  GtkStyle *style;

286
  gpointer data;
287
  GtkDestroyNotify destroy;
Tim Janik's avatar
Tim Janik committed
288
  
289 290 291
  guint fg_set     : 1;
  guint bg_set     : 1;
  guint selectable : 1;
292 293 294 295 296 297 298
};

/* Cell Structures */
struct _GtkCellText
{
  GtkCellType type;
  
299 300
  gint16 vertical;
  gint16 horizontal;
301
  
302 303
  GtkStyle *style;

304 305 306 307 308 309 310
  gchar *text;
};

struct _GtkCellPixmap
{
  GtkCellType type;
  
311 312
  gint16 vertical;
  gint16 horizontal;
313
  
314 315
  GtkStyle *style;

316 317 318 319 320 321 322 323
  GdkPixmap *pixmap;
  GdkBitmap *mask;
};

struct _GtkCellPixText
{
  GtkCellType type;
  
324 325
  gint16 vertical;
  gint16 horizontal;
326
  
327 328
  GtkStyle *style;

329 330 331 332 333 334 335 336 337 338
  gchar *text;
  guint8 spacing;
  GdkPixmap *pixmap;
  GdkBitmap *mask;
};

struct _GtkCellWidget
{
  GtkCellType type;
  
339 340
  gint16 vertical;
  gint16 horizontal;
341
  
342 343
  GtkStyle *style;

344 345 346 347 348 349
  GtkWidget *widget;
};

struct _GtkCell
{
  GtkCellType type;
Tim Janik's avatar
Tim Janik committed
350
  
351 352
  gint16 vertical;
  gint16 horizontal;
Tim Janik's avatar
Tim Janik committed
353
  
354 355
  GtkStyle *style;

356 357
  union {
    gchar *text;
Tim Janik's avatar
Tim Janik committed
358
    
359 360 361 362
    struct {
      GdkPixmap *pixmap;
      GdkBitmap *mask;
    } pm;
Tim Janik's avatar
Tim Janik committed
363
    
364 365 366 367 368 369
    struct {
      gchar *text;
      guint8 spacing;
      GdkPixmap *pixmap;
      GdkBitmap *mask;
    } pt;
Tim Janik's avatar
Tim Janik committed
370
    
371 372 373 374
    GtkWidget *widget;
  } u;
};

375
GtkType gtk_clist_get_type (void);
376

377
/* constructers useful for gtk-- wrappers */
Tim Janik's avatar
Tim Janik committed
378 379
void gtk_clist_construct (GtkCList *clist,
			  gint      columns,
380
			  gchar    *titles[]);
381

382
/* create a new GtkCList */
383 384
GtkWidget* gtk_clist_new             (gint   columns);
GtkWidget* gtk_clist_new_with_titles (gint   columns,
Tim Janik's avatar
Tim Janik committed
385
				      gchar *titles[]);
386

387 388 389 390 391 392 393 394 395
/* set adjustments of clist */
void gtk_clist_set_hadjustment (GtkCList      *clist,
				GtkAdjustment *adjustment);
void gtk_clist_set_vadjustment (GtkCList      *clist,
				GtkAdjustment *adjustment);

/* get adjustments of clist */
GtkAdjustment* gtk_clist_get_hadjustment (GtkCList *clist);
GtkAdjustment* gtk_clist_get_vadjustment (GtkCList *clist);
396

397 398 399 400
/* set the border style of the clist */
void gtk_clist_set_shadow_type (GtkCList      *clist,
				GtkShadowType  type);

401
/* set the clist's selection mode */
402 403
void gtk_clist_set_selection_mode (GtkCList         *clist,
				   GtkSelectionMode  mode);
404

405 406 407
/* freeze all visual updates of the list, and then thaw the list after
 * you have made a number of changes and the updates wil occure in a
 * more efficent mannor than if you made them on a unfrozen list
Tim Janik's avatar
Tim Janik committed
408 409 410
 */
void gtk_clist_freeze (GtkCList *clist);
void gtk_clist_thaw   (GtkCList *clist);
411

412
/* show and hide the column title buttons */
Tim Janik's avatar
Tim Janik committed
413 414
void gtk_clist_column_titles_show (GtkCList *clist);
void gtk_clist_column_titles_hide (GtkCList *clist);
415

Jay Painter's avatar
Jay Painter committed
416 417
/* set the column title to be a active title (responds to button presses, 
 * prelights, and grabs keyboard focus), or passive where it acts as just
Tim Janik's avatar
Tim Janik committed
418 419 420 421 422 423 424 425
 * a title
 */
void gtk_clist_column_title_active   (GtkCList *clist,
				      gint      column);
void gtk_clist_column_title_passive  (GtkCList *clist,
				      gint      column);
void gtk_clist_column_titles_active  (GtkCList *clist);
void gtk_clist_column_titles_passive (GtkCList *clist);
Jay Painter's avatar
Jay Painter committed
426

427
/* set the title in the column title button */
Tim Janik's avatar
Tim Janik committed
428 429 430
void gtk_clist_set_column_title (GtkCList    *clist,
				 gint         column,
				 const gchar *title);
431

432 433 434 435
/* returns the title of column. Returns NULL if title is not set */
gchar * gtk_clist_get_column_title (GtkCList *clist,
				    gint      column);

436
/* set a widget instead of a title for the column title button */
Tim Janik's avatar
Tim Janik committed
437 438 439
void gtk_clist_set_column_widget (GtkCList  *clist,
				  gint       column,
				  GtkWidget *widget);
440

441 442 443 444
/* returns the column widget */
GtkWidget * gtk_clist_get_column_widget (GtkCList *clist,
					 gint      column);

445
/* set the justification on a column */
446 447 448 449 450 451 452 453 454 455 456 457 458
void gtk_clist_set_column_justification (GtkCList         *clist,
					 gint              column,
					 GtkJustification  justification);

/* set visibility of a column */
void gtk_clist_set_column_visibility (GtkCList *clist,
				      gint      column,
				      gboolean  visible);

/* enable/disable column resize operations by mouse */
void gtk_clist_set_column_resizeable (GtkCList *clist,
				      gint      column,
				      gboolean  resizeable);
459

460 461 462 463 464 465 466 467 468
/* resize column automatically to its optimal width */
void gtk_clist_set_column_auto_resize (GtkCList *clist,
				       gint      column,
				       gboolean  auto_resize);

/* return the optimal column width, i.e. maximum of all cell widths */
gint gtk_clist_optimal_column_width (GtkCList *clist,
				     gint      column);

469 470
/* set the pixel width of a column; this is a necessary step in
 * creating a CList because otherwise the column width is chozen from
Tim Janik's avatar
Tim Janik committed
471 472 473 474 475
 * the width of the column title, which will never be right
 */
void gtk_clist_set_column_width (GtkCList *clist,
				 gint      column,
				 gint      width);
476

477 478 479 480 481 482 483 484
/* set column minimum/maximum width. min/max_width < 0 => no restriction */
void gtk_clist_set_column_min_width (GtkCList *clist,
				     gint      column,
				     gint      min_width);
void gtk_clist_set_column_max_width (GtkCList *clist,
				     gint      column,
				     gint      max_width);

Tim Janik's avatar
Tim Janik committed
485 486 487 488 489
/* change the height of the rows, the default is the hight
 * of the current font
 */
void gtk_clist_set_row_height (GtkCList *clist,
			       gint      height);
490

491 492 493 494
/* scroll the viewing area of the list to the given column and row;
 * row_align and col_align are between 0-1 representing the location the
 * row should appear on the screnn, 0.0 being top or left, 1.0 being
 * bottom or right; if row or column is -1 then then there is no change
Tim Janik's avatar
Tim Janik committed
495 496 497 498 499 500
 */
void gtk_clist_moveto (GtkCList *clist,
		       gint      row,
		       gint      column,
		       gfloat    row_align,
		       gfloat    col_align);
501

502
/* returns whether the row is visible */
Tim Janik's avatar
Tim Janik committed
503 504
GtkVisibility gtk_clist_row_is_visible (GtkCList *clist,
					gint      row);
505

506
/* returns the cell type */
Tim Janik's avatar
Tim Janik committed
507 508 509
GtkCellType gtk_clist_get_cell_type (GtkCList *clist,
				     gint      row,
				     gint      column);
510

511
/* sets a given cell's text, replacing it's current contents */
Tim Janik's avatar
Tim Janik committed
512 513 514 515
void gtk_clist_set_text (GtkCList    *clist,
			 gint         row,
			 gint         column,
			 const gchar *text);
516

517
/* for the "get" functions, any of the return pointer can be
Tim Janik's avatar
Tim Janik committed
518 519
 * NULL if you are not interested
 */
520 521 522 523
gint gtk_clist_get_text (GtkCList  *clist,
			 gint       row,
			 gint       column,
			 gchar    **text);
524

525
/* sets a given cell's pixmap, replacing it's current contents */
Tim Janik's avatar
Tim Janik committed
526 527 528 529 530 531 532 533 534 535 536
void gtk_clist_set_pixmap (GtkCList  *clist,
			   gint       row,
			   gint       column,
			   GdkPixmap *pixmap,
			   GdkBitmap *mask);

gint gtk_clist_get_pixmap (GtkCList   *clist,
			   gint        row,
			   gint        column,
			   GdkPixmap **pixmap,
			   GdkBitmap **mask);
537

538
/* sets a given cell's pixmap and text, replacing it's current contents */
Tim Janik's avatar
Tim Janik committed
539 540 541 542 543 544 545 546
void gtk_clist_set_pixtext (GtkCList    *clist,
			    gint         row,
			    gint         column,
			    const gchar *text,
			    guint8       spacing,
			    GdkPixmap   *pixmap,
			    GdkBitmap   *mask);

547 548 549 550 551 552 553
gint gtk_clist_get_pixtext (GtkCList   *clist,
			    gint        row,
			    gint        column,
			    gchar     **text,
			    guint8     *spacing,
			    GdkPixmap **pixmap,
			    GdkBitmap **mask);
554

555
/* sets the foreground color of a row, the colar must already
Tim Janik's avatar
Tim Janik committed
556 557 558 559 560
 * be allocated
 */
void gtk_clist_set_foreground (GtkCList *clist,
			       gint      row,
			       GdkColor *color);
561 562

/* sets the background color of a row, the colar must already
Tim Janik's avatar
Tim Janik committed
563 564 565 566 567
 * be allocated
 */
void gtk_clist_set_background (GtkCList *clist,
			       gint      row,
			       GdkColor *color);
568

569 570
/* set / get cell styles */
void gtk_clist_set_cell_style (GtkCList *clist,
571 572
			       gint      row,
			       gint      column,
573 574 575
			       GtkStyle *style);

GtkStyle *gtk_clist_get_cell_style (GtkCList *clist,
576 577
				    gint      row,
				    gint      column);
578 579

void gtk_clist_set_row_style (GtkCList *clist,
580
			      gint      row,
581 582 583
			      GtkStyle *style);

GtkStyle *gtk_clist_get_row_style (GtkCList *clist,
584
				   gint      row);
585

586
/* this sets a horizontal and vertical shift for drawing
587 588
 * the contents of a cell; it can be positive or negitive;
 * this is particulary useful for indenting items in a column
Tim Janik's avatar
Tim Janik committed
589 590 591 592 593 594
 */
void gtk_clist_set_shift (GtkCList *clist,
			  gint      row,
			  gint      column,
			  gint      vertical,
			  gint      horizontal);
595

596 597 598 599 600 601 602
/* set/get selectable flag of a single row */
void gtk_clist_set_selectable (GtkCList *clist,
			       gint      row,
			       gboolean  selectable);
gboolean gtk_clist_get_selectable (GtkCList *clist,
				   gint      row);

603 604
/* prepend/append returns the index of the row you just added,
 * making it easier to append and modify a row
Tim Janik's avatar
Tim Janik committed
605
 */
606 607 608 609
gint gtk_clist_prepend (GtkCList *clist,
		        gchar    *text[]);
gint gtk_clist_append  (GtkCList *clist,
			gchar    *text[]);
610

611 612
/* inserts a row at index row and returns the row where it was
 * actually inserted (may be different from "row" in auto_sort mode)
Tim Janik's avatar
Tim Janik committed
613 614 615 616
 */
gint gtk_clist_insert (GtkCList *clist,
		       gint      row,
		       gchar    *text[]);
617 618

/* removes row at index row */
Tim Janik's avatar
Tim Janik committed
619 620
void gtk_clist_remove (GtkCList *clist,
		       gint      row);
621 622

/* sets a arbitrary data pointer for a given row */
Tim Janik's avatar
Tim Janik committed
623 624 625
void gtk_clist_set_row_data (GtkCList *clist,
			     gint      row,
			     gpointer  data);
626

627
/* sets a data pointer for a given row with destroy notification */
628 629 630 631
void gtk_clist_set_row_data_full (GtkCList         *clist,
			          gint              row,
			          gpointer          data,
				  GtkDestroyNotify  destroy);
632

633
/* returns the data set for a row */
Tim Janik's avatar
Tim Janik committed
634 635
gpointer gtk_clist_get_row_data (GtkCList *clist,
				 gint      row);
636

637
/* givin a data pointer, find the first (and hopefully only!)
Tim Janik's avatar
Tim Janik committed
638 639 640 641
 * row that points to that data, or -1 if none do
 */
gint gtk_clist_find_row_from_data (GtkCList *clist,
				   gpointer  data);
642

643
/* force selection of a row */
Tim Janik's avatar
Tim Janik committed
644 645 646
void gtk_clist_select_row (GtkCList *clist,
			   gint      row,
			   gint      column);
647 648

/* force unselection of a row */
Tim Janik's avatar
Tim Janik committed
649 650 651
void gtk_clist_unselect_row (GtkCList *clist,
			     gint      row,
			     gint      column);
652

653 654 655
/* undo the last select/unselect operation */
void gtk_clist_undo_selection (GtkCList *clist);

656 657
/* clear the entire list -- this is much faster than removing
 * each item with gtk_clist_remove
Tim Janik's avatar
Tim Janik committed
658 659
 */
void gtk_clist_clear (GtkCList *clist);
660

Tim Janik's avatar
Tim Janik committed
661 662 663 664
/* return the row column corresponding to the x and y coordinates,
 * the returned values are only valid if the x and y coordinates
 * are respectively to a window == clist->clist_window
 */
Tim Janik's avatar
Tim Janik committed
665 666 667 668 669
gint gtk_clist_get_selection_info (GtkCList *clist,
			     	   gint      x,
			     	   gint      y,
			     	   gint     *row,
			     	   gint     *column);
670

671 672
/* in multiple or extended mode, select all rows */
void gtk_clist_select_all (GtkCList *clist);
673

674 675
/* in all modes except browse mode, deselect all rows */
void gtk_clist_unselect_all (GtkCList *clist);
676

677
/* swap the position of two rows */
Tim Janik's avatar
Tim Janik committed
678 679 680
void gtk_clist_swap_rows (GtkCList *clist,
			  gint      row1,
			  gint      row2);
681

Stefan Jeske's avatar
Stefan Jeske committed
682 683 684 685 686 687 688 689 690
/* sets a compare function different to the default */
void gtk_clist_set_compare_func (GtkCList            *clist,
				 GtkCListCompareFunc  cmp_func);

/* the column to sort by */
void gtk_clist_set_sort_column (GtkCList *clist,
				gint      column);

/* how to sort : ascending or descending */
691 692
void gtk_clist_set_sort_type (GtkCList    *clist,
			      GtkSortType  sort_type);
Stefan Jeske's avatar
Stefan Jeske committed
693 694 695 696 697 698 699 700

/* sort the list with the current compare function */
void gtk_clist_sort (GtkCList *clist);

/* Automatically sort upon insertion */
void gtk_clist_set_auto_sort (GtkCList *clist,
			      gboolean  auto_sort);

701 702 703 704 705 706 707 708 709 710 711

/* Deprecated methods */

/* Use gtk_clist_set_shadow_type instead. */
void gtk_clist_set_border (GtkCList      *clist,
			   GtkShadowType  border);

/* Completely non-functional */
void gtk_clist_set_policy (GtkCList      *clist,
			   GtkPolicyType  vscrollbar_policy,
			   GtkPolicyType  hscrollbar_policy);
712 713 714 715 716
#ifdef __cplusplus
}
#endif				/* __cplusplus */

#endif				/* __GTK_CLIST_H__ */