1 /* -*- Mode: C; indent-tabs-mode: f; c-basic-offset: 4; tab-width: 4 -*- */ 2 3 /* gnome-icon-container.h - Icon container widget. 4 5 Copyright (C) 1999, 2000 Free Software Foundation 6 Copyright (C) 2000 Eazel, Inc. 7 8 The Gnome 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 Gnome 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 Gnome Library; see the file COPYING.LIB. If not, 20 write to the Free Software Foundation, Inc., 51 Franklin Street - Suite 500, 21 Boston, MA 02110-1335, USA. 22 23 Authors: Ettore Perazzoli <ettore@gnu.org>, Darin Adler <darin@bentspoon.com> 24 */ 25 26 #ifndef NEMO_ICON_CONTAINER_H 27 #define NEMO_ICON_CONTAINER_H 28 29 #include <eel/eel-canvas.h> 30 #include <libnemo-private/nemo-icon-info.h> 31 #include <libnemo-private/nemo-icon.h> 32 33 #define NEMO_TYPE_ICON_CONTAINER nemo_icon_container_get_type() 34 #define NEMO_ICON_CONTAINER(obj) \ 35 (G_TYPE_CHECK_INSTANCE_CAST ((obj), NEMO_TYPE_ICON_CONTAINER, NemoIconContainer)) 36 #define NEMO_ICON_CONTAINER_CLASS(klass) \ 37 (G_TYPE_CHECK_CLASS_CAST ((klass), NEMO_TYPE_ICON_CONTAINER, NemoIconContainerClass)) 38 #define NEMO_IS_ICON_CONTAINER(obj) \ 39 (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NEMO_TYPE_ICON_CONTAINER)) 40 #define NEMO_IS_ICON_CONTAINER_CLASS(klass) \ 41 (G_TYPE_CHECK_CLASS_TYPE ((klass), NEMO_TYPE_ICON_CONTAINER)) 42 #define NEMO_ICON_CONTAINER_GET_CLASS(obj) \ 43 (G_TYPE_INSTANCE_GET_CLASS ((obj), NEMO_TYPE_ICON_CONTAINER, NemoIconContainerClass)) 44 45 /* Initial unpositioned icon value */ 46 #define ICON_UNPOSITIONED_VALUE -1 47 48 typedef struct { 49 int x; 50 int y; 51 double scale; 52 int monitor; 53 } NemoIconPosition; 54 55 typedef enum { 56 NEMO_ICON_LAYOUT_L_R_T_B, 57 NEMO_ICON_LAYOUT_R_L_T_B, 58 NEMO_ICON_LAYOUT_T_B_L_R, 59 NEMO_ICON_LAYOUT_T_B_R_L 60 } NemoIconLayoutMode; 61 62 typedef enum { 63 NEMO_ICON_LABEL_POSITION_UNDER, 64 NEMO_ICON_LABEL_POSITION_BESIDE 65 } NemoIconLabelPosition; 66 67 #define NEMO_ICON_CONTAINER_TYPESELECT_FLUSH_DELAY 1000000 68 69 typedef struct NemoIconContainerDetails NemoIconContainerDetails; 70 71 typedef struct { 72 EelCanvas canvas; 73 NemoIconContainerDetails *details; 74 } NemoIconContainer; 75 76 typedef struct { 77 EelCanvasClass parent_slot; 78 gboolean is_grid_container; 79 80 /* Operations on the container. */ 81 int (* button_press) (NemoIconContainer *container, 82 GdkEventButton *event); 83 void (* context_click_background) (NemoIconContainer *container, 84 GdkEventButton *event); 85 void (* middle_click) (NemoIconContainer *container, 86 GdkEventButton *event); 87 88 /* Operations on icons. */ 89 void (* activate) (NemoIconContainer *container, 90 NemoIconData *data); 91 void (* activate_alternate) (NemoIconContainer *container, 92 NemoIconData *data); 93 void (* activate_previewer) (NemoIconContainer *container, 94 GList *files, 95 GArray *locations); 96 void (* context_click_selection) (NemoIconContainer *container, 97 GdkEventButton *event); 98 void (* move_copy_items) (NemoIconContainer *container, 99 const GList *item_uris, 100 GdkPoint *relative_item_points, 101 const char *target_uri, 102 GdkDragAction action, 103 int x, 104 int y); 105 void (* handle_netscape_url) (NemoIconContainer *container, 106 const char *url, 107 const char *target_uri, 108 GdkDragAction action, 109 int x, 110 int y); 111 void (* handle_uri_list) (NemoIconContainer *container, 112 const char *uri_list, 113 const char *target_uri, 114 GdkDragAction action, 115 int x, 116 int y); 117 void (* handle_text) (NemoIconContainer *container, 118 const char *text, 119 const char *target_uri, 120 GdkDragAction action, 121 int x, 122 int y); 123 void (* handle_raw) (NemoIconContainer *container, 124 char *raw_data, 125 int length, 126 const char *target_uri, 127 const char *direct_save_uri, 128 GdkDragAction action, 129 int x, 130 int y); 131 132 /* Queries on the container for subclass/client. 133 * These must be implemented. The default "do nothing" is not good enough. 134 */ 135 char * (* get_container_uri) (NemoIconContainer *container); 136 137 /* Queries on icons for subclass/client. 138 * These must be implemented. The default "do nothing" is not 139 * good enough, these are _not_ signals. 140 */ 141 NemoIconInfo *(* get_icon_images) (NemoIconContainer *container, 142 NemoIconData *data, 143 int icon_size, 144 gboolean for_drag_accept, 145 gboolean *has_window_open, 146 gboolean visible); 147 void (* get_icon_text) (NemoIconContainer *container, 148 NemoIconData *data, 149 char **editable_text, 150 char **additional_text, 151 gboolean *pinned, 152 gboolean *fav_unavailable, 153 gboolean include_invisible); 154 void (* update_icon) (NemoIconContainer *container, 155 NemoIcon *icon, 156 gboolean visible); 157 char * (* get_icon_description) (NemoIconContainer *container, 158 NemoIconData *data); 159 int (* compare_icons) (NemoIconContainer *container, 160 NemoIconData *icon_a, 161 NemoIconData *icon_b); 162 void (* freeze_updates) (NemoIconContainer *container); 163 void (* unfreeze_updates) (NemoIconContainer *container); 164 165 void (* prioritize_thumbnailing) (NemoIconContainer *container, 166 NemoIconData *data); 167 gint (* get_max_layout_lines_for_pango) (NemoIconContainer *container); 168 gint (* get_max_layout_lines) (NemoIconContainer *container); 169 gint (* get_additional_text_line_count) (NemoIconContainer *container); 170 171 /* Queries on icons for subclass/client. 172 * These must be implemented => These are signals ! 173 * The default "do nothing" is not good enough. 174 */ 175 gboolean (* can_accept_item) (NemoIconContainer *container, 176 NemoIconData *target, 177 const char *item_uri); 178 char * (* get_icon_uri) (NemoIconContainer *container, 179 NemoIconData *data); 180 char * (* get_icon_drop_target_uri) (NemoIconContainer *container, 181 NemoIconData *data); 182 183 /* If icon data is NULL, the layout timestamp of the container should be retrieved. 184 * That is the time when the container displayed a fully loaded directory with 185 * all icon positions assigned. 186 * 187 * If icon data is not NULL, the position timestamp of the icon should be retrieved. 188 * That is the time when the file (i.e. icon data payload) was last displayed in a 189 * fully loaded directory with all icon positions assigned. 190 */ 191 gboolean (* get_stored_layout_timestamp) (NemoIconContainer *container, 192 NemoIconData *data, 193 time_t *time); 194 /* If icon data is NULL, the layout timestamp of the container should be stored. 195 * If icon data is not NULL, the position timestamp of the container should be stored. 196 */ 197 gboolean (* store_layout_timestamp) (NemoIconContainer *container, 198 NemoIconData *data, 199 const time_t *time); 200 201 void (*lay_down_icons) (NemoIconContainer *container, GList *icons, double start_y); 202 void (*icon_set_position) (NemoIconContainer *container, NemoIcon *icon, double x, double y); 203 void (*move_icon) (NemoIconContainer *container, NemoIcon *icon, int x, int y, 204 double scale, gboolean raise, gboolean snap, gboolean update_position); 205 void (*align_icons) (NemoIconContainer *container); 206 void (*finish_adding_new_icons) (NemoIconContainer *container); 207 void (*reload_icon_positions) (NemoIconContainer *container); 208 void (*icon_get_bounding_box) (NemoIcon *icon, 209 int *x1_return, int *y1_return, 210 int *x2_return, int *y2_return, 211 NemoIconCanvasItemBoundsUsage usage); 212 void (*set_zoom_level) (NemoIconContainer *container, gint new_level); 213 /* Notifications for the whole container. */ 214 void (* band_select_started) (NemoIconContainer *container); 215 void (* band_select_ended) (NemoIconContainer *container); 216 void (* selection_changed) (NemoIconContainer *container); 217 void (* layout_changed) (NemoIconContainer *container); 218 219 /* Notifications for icons. */ 220 void (* icon_position_changed) (NemoIconContainer *container, 221 NemoIconData *data, 222 const NemoIconPosition *position); 223 void (* icon_rename_started) (NemoIconContainer *container, 224 GtkWidget *renaming_widget); 225 void (* icon_rename_ended) (NemoIconContainer *container, 226 NemoIconData *data, 227 const char *text); 228 void (* icon_stretch_started) (NemoIconContainer *container, 229 NemoIconData *data); 230 void (* icon_stretch_ended) (NemoIconContainer *container, 231 NemoIconData *data); 232 int (* preview) (NemoIconContainer *container, 233 NemoIconData *data, 234 gboolean start_flag); 235 void (* icon_added) (NemoIconContainer *container, 236 NemoIconData *data); 237 void (* icon_removed) (NemoIconContainer *container, 238 NemoIconData *data); 239 void (* cleared) (NemoIconContainer *container); 240 gboolean (* start_interactive_search) (NemoIconContainer *container); 241 } NemoIconContainerClass; 242 243 /* GtkObject */ 244 GType nemo_icon_container_get_type (void); 245 GtkWidget * nemo_icon_container_new (void); 246 247 248 /* adding, removing, and managing icons */ 249 void nemo_icon_container_clear (NemoIconContainer *view); 250 gboolean nemo_icon_container_icon_is_new_for_monitor (NemoIconContainer *container, 251 NemoIcon *icon, 252 gint current_monitor); 253 gboolean nemo_icon_container_add (NemoIconContainer *view, 254 NemoIconData *data); 255 void nemo_icon_container_layout_now (NemoIconContainer *container); 256 gboolean nemo_icon_container_remove (NemoIconContainer *view, 257 NemoIconData *data); 258 void nemo_icon_container_for_each (NemoIconContainer *view, 259 NemoIconCallback callback, 260 gpointer callback_data); 261 void nemo_icon_container_request_update (NemoIconContainer *view, 262 NemoIconData *data); 263 void nemo_icon_container_invalidate_labels (NemoIconContainer *container); 264 void nemo_icon_container_request_update_all (NemoIconContainer *container); 265 void nemo_icon_container_reveal (NemoIconContainer *container, 266 NemoIconData *data); 267 gboolean nemo_icon_container_is_empty (NemoIconContainer *container); 268 NemoIconData *nemo_icon_container_get_first_visible_icon (NemoIconContainer *container); 269 void nemo_icon_container_scroll_to_icon (NemoIconContainer *container, 270 NemoIconData *data); 271 272 void nemo_icon_container_begin_loading (NemoIconContainer *container); 273 void nemo_icon_container_end_loading (NemoIconContainer *container, 274 gboolean all_icons_added); 275 276 /* control the layout */ 277 gboolean nemo_icon_container_is_auto_layout (NemoIconContainer *container); 278 void nemo_icon_container_set_auto_layout (NemoIconContainer *container, 279 gboolean auto_layout); 280 281 gboolean nemo_icon_container_is_keep_aligned (NemoIconContainer *container); 282 void nemo_icon_container_set_keep_aligned (NemoIconContainer *container, 283 gboolean keep_aligned); 284 void nemo_icon_container_set_layout_mode (NemoIconContainer *container, 285 NemoIconLayoutMode mode); 286 void nemo_icon_container_set_horizontal_layout (NemoIconContainer *container, 287 gboolean horizontal); 288 gboolean nemo_icon_container_get_horizontal_layout (NemoIconContainer *container); 289 void nemo_icon_container_set_grid_adjusts (NemoIconContainer *container, 290 gint h_adjust, 291 gint v_adjust); 292 293 void nemo_icon_container_set_label_position (NemoIconContainer *container, 294 NemoIconLabelPosition pos); 295 void nemo_icon_container_sort (NemoIconContainer *container); 296 void nemo_icon_container_freeze_icon_positions (NemoIconContainer *container); 297 298 gint nemo_icon_container_get_max_layout_lines (NemoIconContainer *container); 299 gint nemo_icon_container_get_max_layout_lines_for_pango (NemoIconContainer *container); 300 301 void nemo_icon_container_set_highlighted_for_clipboard (NemoIconContainer *container, 302 GList *clipboard_icon_data); 303 304 /* operations on all icons */ 305 void nemo_icon_container_unselect_all (NemoIconContainer *view); 306 void nemo_icon_container_select_all (NemoIconContainer *view); 307 308 309 /* operations on the selection */ 310 void nemo_icon_container_update_selection (NemoIconContainer *container); 311 GList * nemo_icon_container_get_selection (NemoIconContainer *view); 312 GList * nemo_icon_container_peek_selection (NemoIconContainer *view); 313 gint nemo_icon_container_get_selection_count (NemoIconContainer *container); 314 void nemo_icon_container_invert_selection (NemoIconContainer *view); 315 void nemo_icon_container_set_selection (NemoIconContainer *view, 316 GList *selection); 317 GArray * nemo_icon_container_get_selected_icon_locations (NemoIconContainer *view); 318 gboolean nemo_icon_container_has_stretch_handles (NemoIconContainer *container); 319 gboolean nemo_icon_container_is_stretched (NemoIconContainer *container); 320 void nemo_icon_container_show_stretch_handles (NemoIconContainer *container); 321 void nemo_icon_container_unstretch (NemoIconContainer *container); 322 void nemo_icon_container_start_renaming_selected_item (NemoIconContainer *container, 323 gboolean select_all); 324 /* options */ 325 NemoZoomLevel nemo_icon_container_get_zoom_level (NemoIconContainer *view); 326 void nemo_icon_container_set_zoom_level (NemoIconContainer *view, 327 int new_zoom_level); 328 void nemo_icon_container_set_single_click_mode (NemoIconContainer *container, 329 gboolean single_click_mode); 330 void nemo_icon_container_set_click_to_rename_enabled (NemoIconContainer *container, 331 gboolean enabled); 332 void nemo_icon_container_enable_linger_selection (NemoIconContainer *view, 333 gboolean enable); 334 gboolean nemo_icon_container_get_is_fixed_size (NemoIconContainer *container); 335 void nemo_icon_container_set_is_fixed_size (NemoIconContainer *container, 336 gboolean is_fixed_size); 337 gboolean nemo_icon_container_get_is_desktop (NemoIconContainer *container); 338 void nemo_icon_container_set_is_desktop (NemoIconContainer *container, 339 gboolean is_desktop); 340 gboolean nemo_icon_container_get_show_desktop_tooltips (NemoIconContainer *container); 341 void nemo_icon_container_set_show_desktop_tooltips (NemoIconContainer *container, 342 gboolean show_tooltips); 343 void nemo_icon_container_reset_scroll_region (NemoIconContainer *container); 344 void nemo_icon_container_set_font (NemoIconContainer *container, 345 const char *font); 346 void nemo_icon_container_set_font_size_table (NemoIconContainer *container, 347 const int font_size_table[NEMO_ZOOM_LEVEL_LARGEST + 1]); 348 void nemo_icon_container_set_margins (NemoIconContainer *container, 349 int left_margin, 350 int right_margin, 351 int top_margin, 352 int bottom_margin); 353 void nemo_icon_container_set_use_drop_shadows (NemoIconContainer *container, 354 gboolean use_drop_shadows); 355 char* nemo_icon_container_get_icon_description (NemoIconContainer *container, 356 NemoIconData *data); 357 gboolean nemo_icon_container_get_allow_moves (NemoIconContainer *container); 358 void nemo_icon_container_set_allow_moves (NemoIconContainer *container, 359 gboolean allow_moves); 360 void nemo_icon_container_set_forced_icon_size (NemoIconContainer *container, 361 int forced_icon_size); 362 void nemo_icon_container_set_all_columns_same_width (NemoIconContainer *container, 363 gboolean all_columns_same_width); 364 365 gboolean nemo_icon_container_is_layout_rtl (NemoIconContainer *container); 366 gboolean nemo_icon_container_is_layout_vertical (NemoIconContainer *container); 367 368 gboolean nemo_icon_container_get_store_layout_timestamps (NemoIconContainer *container); 369 void nemo_icon_container_set_store_layout_timestamps (NemoIconContainer *container, 370 gboolean store_layout); 371 372 void nemo_icon_container_widget_to_file_operation_position (NemoIconContainer *container, 373 GdkPoint *position); 374 375 void nemo_icon_container_setup_tooltip_preference_callback (NemoIconContainer *container); 376 void nemo_icon_container_update_tooltip_text (NemoIconContainer *container, 377 NemoIconCanvasItem *item); 378 gint nemo_icon_container_get_additional_text_line_count (NemoIconContainer *container); 379 void nemo_icon_container_set_ok_to_load_deferred_attrs (NemoIconContainer *container, 380 gboolean ok); 381 #endif /* NEMO_ICON_CONTAINER_H */ 382