1 /* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */ 2 3 /* mate-icon-container.h - Icon container widget. 4 5 Copyright (C) 1999, 2000 Free Software Foundation 6 Copyright (C) 2000 Eazel, Inc. 7 8 The Mate Library is free software; you can redistribute it and/or 9 modify it under the terms of the GNU Library General Public License as 10 published by the Free Software Foundation; either version 2 of the 11 License, or (at your option) any later version. 12 13 The Mate Library is distributed in the hope that it will be useful, 14 but WITHOUT ANY WARRANTY; without even the implied warranty of 15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 16 Library General Public License for more details. 17 18 You should have received a copy of the GNU Library General Public 19 License along with the Mate Library; see the file COPYING.LIB. If not, 20 write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, 21 Boston, MA 02110-1301, USA. 22 23 Authors: Ettore Perazzoli <ettore@gnu.org>, Darin Adler <darin@bentspoon.com> 24 */ 25 26 #ifndef CAJA_ICON_CONTAINER_H 27 #define CAJA_ICON_CONTAINER_H 28 29 #include <eel/eel-canvas.h> 30 31 #include "caja-icon-info.h" 32 33 #define CAJA_TYPE_ICON_CONTAINER caja_icon_container_get_type() 34 #define CAJA_ICON_CONTAINER(obj) \ 35 (G_TYPE_CHECK_INSTANCE_CAST ((obj), CAJA_TYPE_ICON_CONTAINER, CajaIconContainer)) 36 #define CAJA_ICON_CONTAINER_CLASS(klass) \ 37 (G_TYPE_CHECK_CLASS_CAST ((klass), CAJA_TYPE_ICON_CONTAINER, CajaIconContainerClass)) 38 #define CAJA_IS_ICON_CONTAINER(obj) \ 39 (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CAJA_TYPE_ICON_CONTAINER)) 40 #define CAJA_IS_ICON_CONTAINER_CLASS(klass) \ 41 (G_TYPE_CHECK_CLASS_TYPE ((klass), CAJA_TYPE_ICON_CONTAINER)) 42 #define CAJA_ICON_CONTAINER_GET_CLASS(obj) \ 43 (G_TYPE_INSTANCE_GET_CLASS ((obj), CAJA_TYPE_ICON_CONTAINER, CajaIconContainerClass)) 44 45 46 #define CAJA_ICON_CONTAINER_ICON_DATA(pointer) \ 47 ((CajaIconData *) (pointer)) 48 49 typedef struct CajaIconData CajaIconData; 50 51 typedef void (* CajaIconCallback) (CajaIconData *icon_data, 52 gpointer callback_data); 53 54 typedef struct 55 { 56 int x; 57 int y; 58 double scale; 59 } CajaIconPosition; 60 61 typedef enum 62 { 63 CAJA_ICON_LAYOUT_L_R_T_B, 64 CAJA_ICON_LAYOUT_R_L_T_B, 65 CAJA_ICON_LAYOUT_T_B_L_R, 66 CAJA_ICON_LAYOUT_T_B_R_L 67 } CajaIconLayoutMode; 68 69 typedef enum 70 { 71 CAJA_ICON_LABEL_POSITION_UNDER, 72 CAJA_ICON_LABEL_POSITION_BESIDE 73 } CajaIconLabelPosition; 74 75 #define CAJA_ICON_CONTAINER_TYPESELECT_FLUSH_DELAY 1000000 76 77 typedef struct CajaIconContainerDetails CajaIconContainerDetails; 78 79 typedef struct 80 { 81 EelCanvas canvas; 82 CajaIconContainerDetails *details; 83 } CajaIconContainer; 84 85 typedef struct 86 { 87 EelCanvasClass parent_slot; 88 89 /* Operations on the container. */ 90 int (* button_press) (CajaIconContainer *container, 91 GdkEventButton *event); 92 void (* context_click_background) (CajaIconContainer *container, 93 GdkEventButton *event); 94 void (* middle_click) (CajaIconContainer *container, 95 GdkEventButton *event); 96 97 /* Operations on icons. */ 98 void (* activate) (CajaIconContainer *container, 99 CajaIconData *data); 100 void (* activate_alternate) (CajaIconContainer *container, 101 CajaIconData *data); 102 void (* context_click_selection) (CajaIconContainer *container, 103 GdkEventButton *event); 104 void (* move_copy_items) (CajaIconContainer *container, 105 const GList *item_uris, 106 GdkPoint *relative_item_points, 107 const char *target_uri, 108 GdkDragAction action, 109 int x, 110 int y); 111 void (* handle_netscape_url) (CajaIconContainer *container, 112 const char *url, 113 const char *target_uri, 114 GdkDragAction action, 115 int x, 116 int y); 117 void (* handle_uri_list) (CajaIconContainer *container, 118 const char *uri_list, 119 const char *target_uri, 120 GdkDragAction action, 121 int x, 122 int y); 123 void (* handle_text) (CajaIconContainer *container, 124 const char *text, 125 const char *target_uri, 126 GdkDragAction action, 127 int x, 128 int y); 129 void (* handle_raw) (CajaIconContainer *container, 130 char *raw_data, 131 int length, 132 const char *target_uri, 133 const char *direct_save_uri, 134 GdkDragAction action, 135 int x, 136 int y); 137 138 /* Queries on the container for subclass/client. 139 * These must be implemented. The default "do nothing" is not good enough. 140 */ 141 char * (* get_container_uri) (CajaIconContainer *container); 142 143 /* Queries on icons for subclass/client. 144 * These must be implemented. The default "do nothing" is not 145 * good enough, these are _not_ signals. 146 */ 147 CajaIconInfo *(* get_icon_images) (CajaIconContainer *container, 148 CajaIconData *data, 149 int icon_size, 150 GList **emblem_pixbufs, 151 char **embedded_text, 152 gboolean for_drag_accept, 153 gboolean need_large_embeddded_text, 154 gboolean *embedded_text_needs_loading, 155 gboolean *has_window_open); 156 void (* get_icon_text) (CajaIconContainer *container, 157 CajaIconData *data, 158 char **editable_text, 159 char **additional_text, 160 gboolean include_invisible); 161 char * (* get_icon_description) (CajaIconContainer *container, 162 CajaIconData *data); 163 int (* compare_icons) (CajaIconContainer *container, 164 CajaIconData *icon_a, 165 CajaIconData *icon_b); 166 int (* compare_icons_by_name) (CajaIconContainer *container, 167 CajaIconData *icon_a, 168 CajaIconData *icon_b); 169 void (* freeze_updates) (CajaIconContainer *container); 170 void (* unfreeze_updates) (CajaIconContainer *container); 171 void (* start_monitor_top_left) (CajaIconContainer *container, 172 CajaIconData *data, 173 gconstpointer client, 174 gboolean large_text); 175 void (* stop_monitor_top_left) (CajaIconContainer *container, 176 CajaIconData *data, 177 gconstpointer client); 178 void (* prioritize_thumbnailing) (CajaIconContainer *container, 179 CajaIconData *data); 180 181 /* Queries on icons for subclass/client. 182 * These must be implemented => These are signals ! 183 * The default "do nothing" is not good enough. 184 */ 185 gboolean (* can_accept_item) (CajaIconContainer *container, 186 CajaIconData *target, 187 const char *item_uri); 188 gboolean (* get_stored_icon_position) (CajaIconContainer *container, 189 CajaIconData *data, 190 CajaIconPosition *position); 191 char * (* get_icon_uri) (CajaIconContainer *container, 192 CajaIconData *data); 193 char * (* get_icon_drop_target_uri) (CajaIconContainer *container, 194 CajaIconData *data); 195 196 /* If icon data is NULL, the layout timestamp of the container should be retrieved. 197 * That is the time when the container displayed a fully loaded directory with 198 * all icon positions assigned. 199 * 200 * If icon data is not NULL, the position timestamp of the icon should be retrieved. 201 * That is the time when the file (i.e. icon data payload) was last displayed in a 202 * fully loaded directory with all icon positions assigned. 203 */ 204 gboolean (* get_stored_layout_timestamp) (CajaIconContainer *container, 205 CajaIconData *data, 206 time_t *time); 207 /* If icon data is NULL, the layout timestamp of the container should be stored. 208 * If icon data is not NULL, the position timestamp of the container should be stored. 209 */ 210 gboolean (* store_layout_timestamp) (CajaIconContainer *container, 211 CajaIconData *data, 212 const time_t *time); 213 214 /* Notifications for the whole container. */ 215 void (* band_select_started) (CajaIconContainer *container); 216 void (* band_select_ended) (CajaIconContainer *container); 217 void (* selection_changed) (CajaIconContainer *container); 218 void (* layout_changed) (CajaIconContainer *container); 219 220 /* Notifications for icons. */ 221 void (* icon_position_changed) (CajaIconContainer *container, 222 CajaIconData *data, 223 const CajaIconPosition *position); 224 void (* icon_text_changed) (CajaIconContainer *container, 225 CajaIconData *data, 226 const char *text); 227 void (* renaming_icon) (CajaIconContainer *container, 228 GtkWidget *renaming_widget); 229 void (* icon_stretch_started) (CajaIconContainer *container, 230 CajaIconData *data); 231 void (* icon_stretch_ended) (CajaIconContainer *container, 232 CajaIconData *data); 233 int (* preview) (CajaIconContainer *container, 234 CajaIconData *data, 235 gboolean start_flag); 236 void (* icon_added) (CajaIconContainer *container, 237 CajaIconData *data); 238 void (* icon_removed) (CajaIconContainer *container, 239 CajaIconData *data); 240 void (* cleared) (CajaIconContainer *container); 241 gboolean (* start_interactive_search) (CajaIconContainer *container); 242 } CajaIconContainerClass; 243 244 /* GtkObject */ 245 GType caja_icon_container_get_type (void); 246 GtkWidget * caja_icon_container_new (void); 247 248 249 /* adding, removing, and managing icons */ 250 void caja_icon_container_clear (CajaIconContainer *view); 251 gboolean caja_icon_container_add (CajaIconContainer *view, 252 CajaIconData *data); 253 void caja_icon_container_layout_now (CajaIconContainer *container); 254 gboolean caja_icon_container_remove (CajaIconContainer *view, 255 CajaIconData *data); 256 void caja_icon_container_for_each (CajaIconContainer *view, 257 CajaIconCallback callback, 258 gpointer callback_data); 259 void caja_icon_container_request_update (CajaIconContainer *view, 260 CajaIconData *data); 261 void caja_icon_container_request_update_all (CajaIconContainer *container); 262 void caja_icon_container_reveal (CajaIconContainer *container, 263 CajaIconData *data); 264 gboolean caja_icon_container_is_empty (CajaIconContainer *container); 265 CajaIconData *caja_icon_container_get_first_visible_icon (CajaIconContainer *container); 266 void caja_icon_container_scroll_to_icon (CajaIconContainer *container, 267 CajaIconData *data); 268 269 void caja_icon_container_begin_loading (CajaIconContainer *container); 270 void caja_icon_container_end_loading (CajaIconContainer *container, 271 gboolean all_icons_added); 272 273 /* control the layout */ 274 gboolean caja_icon_container_is_auto_layout (CajaIconContainer *container); 275 void caja_icon_container_set_auto_layout (CajaIconContainer *container, 276 gboolean auto_layout); 277 gboolean caja_icon_container_is_tighter_layout (CajaIconContainer *container); 278 void caja_icon_container_set_tighter_layout (CajaIconContainer *container, 279 gboolean tighter_layout); 280 281 gboolean caja_icon_container_is_keep_aligned (CajaIconContainer *container); 282 void caja_icon_container_set_keep_aligned (CajaIconContainer *container, 283 gboolean keep_aligned); 284 gboolean caja_icon_container_is_lock_icons_position (CajaIconContainer *container); 285 void caja_icon_container_set_lock_icons_position (CajaIconContainer *container, 286 gboolean lock_icons_position); 287 void caja_icon_container_set_layout_mode (CajaIconContainer *container, 288 CajaIconLayoutMode mode); 289 void caja_icon_container_set_label_position (CajaIconContainer *container, 290 CajaIconLabelPosition pos); 291 void caja_icon_container_sort (CajaIconContainer *container); 292 void caja_icon_container_freeze_icon_positions (CajaIconContainer *container); 293 294 int caja_icon_container_get_max_layout_lines (CajaIconContainer *container); 295 int caja_icon_container_get_max_layout_lines_for_pango (CajaIconContainer *container); 296 297 void caja_icon_container_set_highlighted_for_clipboard (CajaIconContainer *container, 298 GList *clipboard_icon_data); 299 300 /* operations on all icons */ 301 void caja_icon_container_unselect_all (CajaIconContainer *view); 302 void caja_icon_container_select_all (CajaIconContainer *view); 303 304 305 /* operations on the selection */ 306 GList * caja_icon_container_get_selection (CajaIconContainer *view); 307 void caja_icon_container_invert_selection (CajaIconContainer *view); 308 void caja_icon_container_set_selection (CajaIconContainer *view, 309 GList *selection); 310 GArray * caja_icon_container_get_selected_icon_locations (CajaIconContainer *view); 311 gboolean caja_icon_container_has_stretch_handles (CajaIconContainer *container); 312 gboolean caja_icon_container_is_stretched (CajaIconContainer *container); 313 void caja_icon_container_show_stretch_handles (CajaIconContainer *container); 314 void caja_icon_container_unstretch (CajaIconContainer *container); 315 void caja_icon_container_start_renaming_selected_item (CajaIconContainer *container, 316 gboolean select_all); 317 318 /* options */ 319 CajaZoomLevel caja_icon_container_get_zoom_level (CajaIconContainer *view); 320 void caja_icon_container_set_zoom_level (CajaIconContainer *view, 321 int new_zoom_level); 322 void caja_icon_container_set_single_click_mode (CajaIconContainer *container, 323 gboolean single_click_mode); 324 void caja_icon_container_enable_linger_selection (CajaIconContainer *view, 325 gboolean enable); 326 gboolean caja_icon_container_get_is_fixed_size (CajaIconContainer *container); 327 void caja_icon_container_set_is_fixed_size (CajaIconContainer *container, 328 gboolean is_fixed_size); 329 gboolean caja_icon_container_get_is_desktop (CajaIconContainer *container); 330 void caja_icon_container_set_is_desktop (CajaIconContainer *container, 331 gboolean is_desktop); 332 void caja_icon_container_reset_scroll_region (CajaIconContainer *container); 333 void caja_icon_container_set_font (CajaIconContainer *container, 334 const char *font); 335 void caja_icon_container_set_font_size_table (CajaIconContainer *container, 336 const int font_size_table[CAJA_ZOOM_LEVEL_LARGEST + 1]); 337 void caja_icon_container_set_margins (CajaIconContainer *container, 338 int left_margin, 339 int right_margin, 340 int top_margin, 341 int bottom_margin); 342 void caja_icon_container_set_use_drop_shadows (CajaIconContainer *container, 343 gboolean use_drop_shadows); 344 char* caja_icon_container_get_icon_description (CajaIconContainer *container, 345 CajaIconData *data); 346 gboolean caja_icon_container_get_allow_moves (CajaIconContainer *container); 347 void caja_icon_container_set_allow_moves (CajaIconContainer *container, 348 gboolean allow_moves); 349 void caja_icon_container_set_forced_icon_size (CajaIconContainer *container, 350 int forced_icon_size); 351 void caja_icon_container_set_all_columns_same_width (CajaIconContainer *container, 352 gboolean all_columns_same_width); 353 354 gboolean caja_icon_container_is_layout_rtl (CajaIconContainer *container); 355 gboolean caja_icon_container_is_layout_vertical (CajaIconContainer *container); 356 357 gboolean caja_icon_container_get_store_layout_timestamps (CajaIconContainer *container); 358 void caja_icon_container_set_store_layout_timestamps (CajaIconContainer *container, 359 gboolean store_layout); 360 361 void caja_icon_container_widget_to_file_operation_position (CajaIconContainer *container, 362 GdkPoint *position); 363 364 365 #define CANVAS_WIDTH(container,allocation) ((allocation.width \ 366 - container->details->left_margin \ 367 - container->details->right_margin) \ 368 / EEL_CANVAS (container)->pixels_per_unit) 369 370 #define CANVAS_HEIGHT(container,allocation) ((allocation.height \ 371 - container->details->top_margin \ 372 - container->details->bottom_margin) \ 373 / EEL_CANVAS (container)->pixels_per_unit) 374 375 #endif /* CAJA_ICON_CONTAINER_H */ 376