1 /* -*- Mode: C; tab-width: 3; indent-tabs-mode: nil; c-basic-offset: 3 -*- */ 2 3 /* 4 * gimv_elist.c - a set of clist and edit area widget. 5 * Copyright (C) 2001-2002 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 3S30, Boston, MA 02111-1307, USA. 20 * 21 * $Id: gimv_elist.h,v 1.4 2004/03/07 11:53:30 makeinu Exp $ 22 */ 23 24 25 #ifndef __GIMV_ELIST_H__ 26 #define __GIMV_ELIST_H__ 27 28 #ifdef HAVE_CONFIG_H 29 # include <config.h> 30 #endif /* HAVE_CONFIG_H */ 31 32 #include <gtk/gtk.h> 33 #include "gtk2-compat.h" 34 35 #define GIMV_ELIST(obj) GTK_CHECK_CAST (obj, gimv_elist_get_type (), GimvEList) 36 #define GIMV_ELIST_CLASS(klass) GTK_CHECK_CLASS_CAST (klass, gimv_elist_get_type, GimvEListClass) 37 #define GIMV_IS_ELIST(obj) GTK_CHECK_TYPE (obj, gimv_elist_get_type ()) 38 39 40 typedef struct GimvEList_Tag GimvEList; 41 typedef struct GimvEListClass_Tag GimvEListClass; 42 43 typedef struct GimvEListColumnFuncTable_Tag GimvEListColumnFuncTable; 44 45 46 typedef enum { 47 GIMV_ELIST_EDIT_AREA_VALUE_INITIALIZED = 1 << 0, 48 GIMV_ELIST_EDIT_AREA_VALUE_CHANGED = 1 << 1, 49 } GimvEListEditAreaFlags; 50 51 52 typedef enum { 53 GIMV_ELIST_CONFIRM_CANNOT_NEW = 1 << 0, 54 GIMV_ELIST_CONFIRM_CANNOT_ADD = 1 << 1, 55 GIMV_ELIST_CONFIRM_CANNOT_CHANGE = 1 << 2, 56 GIMV_ELIST_CONFIRM_CANNOT_DELETE = 1 << 3 57 } GimvEListConfirmFlags; 58 59 60 typedef enum { 61 GIMV_ELIST_ACTION_RESET, 62 GIMV_ELIST_ACTION_ADD, 63 GIMV_ELIST_ACTION_CHANGE, 64 GIMV_ELIST_ACTION_DELETE, 65 GIMV_ELIST_ACTION_SET_SENSITIVE, 66 } GimvEListActionType; 67 68 69 typedef void (*GimvEListSetDataFn) (GimvEList *editlist, 70 GtkWidget *widget, 71 gint row, /* -1 if no item is selected */ 72 gint col, 73 const gchar *text,/* NULL if no item is selected */ 74 gpointer coldata); 75 typedef gchar *(*GimvEListGetDataFn) (GimvEList *editlist, 76 GimvEListActionType type, 77 GtkWidget *widget, 78 gpointer coldata); 79 typedef void (*GimvEListResetFn) (GimvEList *editlist, 80 GtkWidget *widget, 81 gpointer coldata); 82 typedef gboolean (*GimvEListGetRowDataFn) (GimvEList *editlist, 83 GimvEListActionType type, 84 gpointer *rowdata, 85 GtkDestroyNotify *destroy_fn); 86 87 88 struct GimvEList_Tag { 89 GtkVBox parent; 90 91 /* public (read only) */ 92 GtkWidget *clist; 93 94 GtkWidget *new_button; 95 GtkWidget *add_button; 96 GtkWidget *change_button; 97 GtkWidget *del_button; 98 GtkWidget *up_button; 99 GtkWidget *down_button; 100 101 GtkWidget *edit_area; 102 GtkWidget *move_button_area; 103 GtkWidget *action_button_area; 104 105 /* private */ 106 gint max_row; 107 gint columns; 108 gint rows; 109 gint selected; 110 gint dest_row; 111 112 GimvEListEditAreaFlags edit_area_flags; 113 GimvEListColumnFuncTable **column_func_tables; 114 GimvEListGetRowDataFn get_rowdata_fn; 115 116 #if (GTK_MAJOR_VERSION >= 2) 117 GHashTable *rowdata_table; 118 GHashTable *rowdata_destroy_fn_table; 119 #endif /* (GTK_MAJOR_VERSION >= 2) */ 120 }; 121 122 123 struct GimvEListClass_Tag { 124 GtkVBoxClass parent_class; 125 126 void (*list_updated) (GimvEList *editlist); 127 void (*edit_area_set_data) (GimvEList *editlist); 128 void (*action_confirm) (GimvEList *editlist, 129 GimvEListActionType action_type, 130 gint selected_row, 131 GimvEListConfirmFlags *flags); 132 }; 133 134 135 struct GimvEListColumnFuncTable_Tag { 136 GtkWidget *widget; 137 gpointer coldata; 138 GtkDestroyNotify destroy_fn; 139 140 /* will be called when an item is selected (or unselected) */ 141 GimvEListSetDataFn set_data_fn; 142 143 /* will be called when an action button is pressed */ 144 GimvEListGetDataFn get_data_fn; 145 GimvEListResetFn reset_fn; 146 }; 147 148 149 GtkType gimv_elist_get_type (void); 150 GtkWidget *gimv_elist_new (gint colnum); 151 GtkWidget *gimv_elist_new_with_titles (gint colnum, 152 gchar *titles[]); 153 void gimv_elist_set_column_title_visible 154 (GimvEList *editlist, 155 gboolean visible); 156 void gimv_elist_set_reorderable (GimvEList *editlist, 157 gboolean reorderble); 158 gboolean gimv_elist_get_reorderable (GimvEList *editlist); 159 void gimv_elist_set_auto_sort (GimvEList *editlist, 160 gint column); 161 gint gimv_elist_append_row (GimvEList *editlist, 162 gchar *data[]); 163 void gimv_elist_remove_row (GimvEList *editlist, 164 gint row); 165 gint gimv_elist_get_n_rows (GimvEList *editlist); 166 gint gimv_elist_get_selected_row (GimvEList *editlist); 167 gchar **gimv_elist_get_row_text (GimvEList *editlist, 168 gint row); 169 gchar *gimv_elist_get_cell_text (GimvEList *ditlist, 170 gint row, 171 gint col); 172 #if 0 173 void gimv_elist_set_row_text (GimvEList *ditlist, 174 gint row, 175 gchar *data[]); 176 void gimv_elist_set_cell_text (GimvEList *ditlist, 177 gint row, 178 gint col, 179 gchar *data); 180 #endif 181 void gimv_elist_set_row_data (GimvEList *editlist, 182 gint row, 183 gpointer data); 184 void gimv_elist_set_row_data_full (GimvEList *editlist, 185 gint row, 186 gpointer data, 187 GtkDestroyNotify destroy_fn); 188 gpointer gimv_elist_get_row_data (GimvEList *editlist, 189 gint row); 190 void gimv_elist_unselect_all (GimvEList *editlist); 191 void gimv_elist_set_max_row (GimvEList *editlist, 192 gint rownum); 193 void gimv_elist_set_column_funcs (GimvEList *editlist, 194 GtkWidget *widget, 195 gint column, 196 GimvEListSetDataFn set_data_fn, 197 GimvEListGetDataFn get_data_fn, 198 GimvEListResetFn reset_fn, 199 gpointer coldata, 200 GtkDestroyNotify destroy_fn); 201 void gimv_elist_set_get_row_data_func (GimvEList *editlist, 202 GimvEListGetRowDataFn get_rowdata_func); 203 void gimv_elist_edit_area_set_value_changed 204 (GimvEList *editlist); 205 GimvEListConfirmFlags gimv_elist_action_confirm 206 (GimvEList *editlist, 207 GimvEListActionType type); 208 void gimv_elist_set_action_button_sensitive 209 (GimvEList *editlist); 210 211 212 /* entry */ 213 GtkWidget *gimv_elist_create_entry (GimvEList *editlist, 214 gint column, 215 const gchar *init_string, 216 gboolean allow_empty); 217 218 /* file name entry */ 219 /* 220 GtkWidget *gimv_elist_create_file_entry (GimvEList *editlist, 221 gint column, 222 const gchar *init_string, 223 gboolean allow_empty) 224 */ 225 226 /* combo */ 227 /* 228 GtkWidget *gimv_elist_create_combo (GimvEList *editlist, 229 gint column); 230 */ 231 232 /* check button */ 233 GtkWidget *gimv_elist_create_check_button (GimvEList *editlist, 234 gint column, 235 const gchar *label, 236 gboolean init_value, 237 const gchar *true_string, 238 const gchar *false_string); 239 240 /* spinner */ 241 /* 242 GtkWidget *gimv_elist_create_spinner (GimvEList *editlist, 243 gint column, 244 gfloat init_val, 245 gflost min, gloat max, 246 gboolean set_as_integer); 247 */ 248 249 #endif /* __GIMV_ELIST_H__ */ 250