/* gnome-canvas-container.h - Canvas container widget. Copyright (C) 1999, 2000 Free Software Foundation Copyright (C) 2000 Eazel, Inc. The Gnome 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. The Gnome 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 License along with the Gnome Library; see the file COPYING.LIB. If not, see . Authors: Ettore Perazzoli , Darin Adler */ #pragma once #include #include "nautilus-types.h" #define NAUTILUS_TYPE_CANVAS_CONTAINER nautilus_canvas_container_get_type() #define NAUTILUS_CANVAS_CONTAINER(obj) \ (G_TYPE_CHECK_INSTANCE_CAST ((obj), NAUTILUS_TYPE_CANVAS_CONTAINER, NautilusCanvasContainer)) #define NAUTILUS_CANVAS_CONTAINER_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST ((klass), NAUTILUS_TYPE_CANVAS_CONTAINER, NautilusCanvasContainerClass)) #define NAUTILUS_IS_CANVAS_CONTAINER(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NAUTILUS_TYPE_CANVAS_CONTAINER)) #define NAUTILUS_IS_CANVAS_CONTAINER_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass), NAUTILUS_TYPE_CANVAS_CONTAINER)) #define NAUTILUS_CANVAS_CONTAINER_GET_CLASS(obj) \ (G_TYPE_INSTANCE_GET_CLASS ((obj), NAUTILUS_TYPE_CANVAS_CONTAINER, NautilusCanvasContainerClass)) #define NAUTILUS_CANVAS_ICON_DATA(pointer) \ ((NautilusCanvasIconData *) (pointer)) typedef struct NautilusCanvasIconData NautilusCanvasIconData; typedef void (* NautilusCanvasCallback) (NautilusCanvasIconData *icon_data, gpointer callback_data); typedef struct { int x; int y; double scale; } NautilusCanvasPosition; #define NAUTILUS_CANVAS_CONTAINER_TYPESELECT_FLUSH_DELAY 1000000 typedef struct _NautilusCanvasContainer NautilusCanvasContainer; typedef struct NautilusCanvasContainerDetails NautilusCanvasContainerDetails; struct _NautilusCanvasContainer { EelCanvas canvas; NautilusCanvasContainerDetails *details; }; G_DEFINE_AUTOPTR_CLEANUP_FUNC (NautilusCanvasContainer, g_object_unref) typedef struct { EelCanvasClass parent_slot; /* Operations on the container. */ int (* button_press) (NautilusCanvasContainer *container, GdkEventButton *event); void (* context_click_background) (NautilusCanvasContainer *container, GdkEventButton *event); void (* middle_click) (NautilusCanvasContainer *container, GdkEventButton *event); /* Operations on icons. */ void (* activate) (NautilusCanvasContainer *container, NautilusCanvasIconData *data); void (* activate_alternate) (NautilusCanvasContainer *container, NautilusCanvasIconData *data); void (* activate_previewer) (NautilusCanvasContainer *container, GList *files, GArray *locations); void (* context_click_selection) (NautilusCanvasContainer *container, GdkEventButton *event); void (* move_copy_items) (NautilusCanvasContainer *container, const GList *item_uris, const char *target_uri, GdkDragAction action, int x, int y); void (* handle_netscape_url) (NautilusCanvasContainer *container, const char *url, const char *target_uri, GdkDragAction action, int x, int y); void (* handle_uri_list) (NautilusCanvasContainer *container, const char *uri_list, const char *target_uri, GdkDragAction action, int x, int y); void (* handle_text) (NautilusCanvasContainer *container, const char *text, const char *target_uri, GdkDragAction action, int x, int y); void (* handle_raw) (NautilusCanvasContainer *container, char *raw_data, int length, const char *target_uri, const char *direct_save_uri, GdkDragAction action, int x, int y); void (* handle_hover) (NautilusCanvasContainer *container, const char *target_uri); /* Queries on the container for subclass/client. * These must be implemented. The default "do nothing" is not good enough. */ char * (* get_container_uri) (NautilusCanvasContainer *container); /* Queries on icons for subclass/client. * These must be implemented. The default "do nothing" is not * good enough, these are _not_ signals. */ NautilusIconInfo *(* get_icon_images) (NautilusCanvasContainer *container, NautilusCanvasIconData *data, int canvas_size, gboolean for_drag_accept); void (* get_icon_text) (NautilusCanvasContainer *container, NautilusCanvasIconData *data, char **editable_text, char **additional_text, gboolean include_invisible); char * (* get_icon_description) (NautilusCanvasContainer *container, NautilusCanvasIconData *data); int (* compare_icons) (NautilusCanvasContainer *container, NautilusCanvasIconData *canvas_a, NautilusCanvasIconData *canvas_b); int (* compare_icons_by_name) (NautilusCanvasContainer *container, NautilusCanvasIconData *canvas_a, NautilusCanvasIconData *canvas_b); void (* prioritize_thumbnailing) (NautilusCanvasContainer *container, NautilusCanvasIconData *data); /* Queries on icons for subclass/client. * These must be implemented => These are signals ! * The default "do nothing" is not good enough. */ gboolean (* get_stored_icon_position) (NautilusCanvasContainer *container, NautilusCanvasIconData *data, NautilusCanvasPosition *position); char * (* get_icon_uri) (NautilusCanvasContainer *container, NautilusCanvasIconData *data); char * (* get_icon_activation_uri) (NautilusCanvasContainer *container, NautilusCanvasIconData *data); char * (* get_icon_drop_target_uri) (NautilusCanvasContainer *container, NautilusCanvasIconData *data); /* If canvas data is NULL, the layout timestamp of the container should be retrieved. * That is the time when the container displayed a fully loaded directory with * all canvas positions assigned. * * If canvas data is not NULL, the position timestamp of the canvas should be retrieved. * That is the time when the file (i.e. canvas data payload) was last displayed in a * fully loaded directory with all canvas positions assigned. */ gboolean (* get_stored_layout_timestamp) (NautilusCanvasContainer *container, NautilusCanvasIconData *data, time_t *time); /* If canvas data is NULL, the layout timestamp of the container should be stored. * If canvas data is not NULL, the position timestamp of the container should be stored. */ gboolean (* store_layout_timestamp) (NautilusCanvasContainer *container, NautilusCanvasIconData *data, const time_t *time); /* Notifications for the whole container. */ void (* band_select_started) (NautilusCanvasContainer *container); void (* band_select_ended) (NautilusCanvasContainer *container); void (* selection_changed) (NautilusCanvasContainer *container); void (* layout_changed) (NautilusCanvasContainer *container); /* Notifications for icons. */ void (* icon_position_changed) (NautilusCanvasContainer *container, NautilusCanvasIconData *data, const NautilusCanvasPosition *position); int (* preview) (NautilusCanvasContainer *container, NautilusCanvasIconData *data, gboolean start_flag); void (* icon_added) (NautilusCanvasContainer *container, NautilusCanvasIconData *data); void (* icon_removed) (NautilusCanvasContainer *container, NautilusCanvasIconData *data); void (* cleared) (NautilusCanvasContainer *container); gboolean (* start_interactive_search) (NautilusCanvasContainer *container); } NautilusCanvasContainerClass; /* GtkObject */ GType nautilus_canvas_container_get_type (void); GtkWidget * nautilus_canvas_container_new (void); /* adding, removing, and managing icons */ void nautilus_canvas_container_clear (NautilusCanvasContainer *view); gboolean nautilus_canvas_container_add (NautilusCanvasContainer *view, NautilusCanvasIconData *data); void nautilus_canvas_container_layout_now (NautilusCanvasContainer *container); gboolean nautilus_canvas_container_remove (NautilusCanvasContainer *view, NautilusCanvasIconData *data); void nautilus_canvas_container_for_each (NautilusCanvasContainer *view, NautilusCanvasCallback callback, gpointer callback_data); void nautilus_canvas_container_request_update (NautilusCanvasContainer *view, NautilusCanvasIconData *data); void nautilus_canvas_container_request_update_all (NautilusCanvasContainer *container); void nautilus_canvas_container_reveal (NautilusCanvasContainer *container, NautilusCanvasIconData *data); gboolean nautilus_canvas_container_is_empty (NautilusCanvasContainer *container); NautilusCanvasIconData *nautilus_canvas_container_get_first_visible_icon (NautilusCanvasContainer *container); NautilusCanvasIconData *nautilus_canvas_container_get_focused_icon (NautilusCanvasContainer *container); GdkRectangle *nautilus_canvas_container_get_icon_bounding_box (NautilusCanvasContainer *container, NautilusCanvasIconData *data); void nautilus_canvas_container_scroll_to_canvas (NautilusCanvasContainer *container, NautilusCanvasIconData *data); void nautilus_canvas_container_begin_loading (NautilusCanvasContainer *container); void nautilus_canvas_container_end_loading (NautilusCanvasContainer *container, gboolean all_icons_added); void nautilus_canvas_container_sort (NautilusCanvasContainer *container); void nautilus_canvas_container_freeze_icon_positions (NautilusCanvasContainer *container); int nautilus_canvas_container_get_max_layout_lines (NautilusCanvasContainer *container); int nautilus_canvas_container_get_max_layout_lines_for_pango (NautilusCanvasContainer *container); void nautilus_canvas_container_set_highlighted_for_clipboard (NautilusCanvasContainer *container, GList *clipboard_canvas_data); /* operations on all icons */ void nautilus_canvas_container_unselect_all (NautilusCanvasContainer *view); void nautilus_canvas_container_select_all (NautilusCanvasContainer *view); void nautilus_canvas_container_select_first (NautilusCanvasContainer *view); void nautilus_canvas_container_preview_selection_event (NautilusCanvasContainer *view, GtkDirectionType direction); /* operations on the selection */ GList * nautilus_canvas_container_get_selection (NautilusCanvasContainer *view); void nautilus_canvas_container_invert_selection (NautilusCanvasContainer *view); void nautilus_canvas_container_set_selection (NautilusCanvasContainer *view, GList *selection); GArray * nautilus_canvas_container_get_selected_icon_locations (NautilusCanvasContainer *view); /* options */ NautilusCanvasZoomLevel nautilus_canvas_container_get_zoom_level (NautilusCanvasContainer *view); void nautilus_canvas_container_set_zoom_level (NautilusCanvasContainer *view, int new_zoom_level); void nautilus_canvas_container_set_single_click_mode (NautilusCanvasContainer *container, gboolean single_click_mode); void nautilus_canvas_container_enable_linger_selection (NautilusCanvasContainer *view, gboolean enable); void nautilus_canvas_container_set_font (NautilusCanvasContainer *container, const char *font); void nautilus_canvas_container_set_margins (NautilusCanvasContainer *container, int left_margin, int right_margin, int top_margin, int bottom_margin); char* nautilus_canvas_container_get_icon_description (NautilusCanvasContainer *container, NautilusCanvasIconData *data); gboolean nautilus_canvas_container_is_layout_rtl (NautilusCanvasContainer *container); gboolean nautilus_canvas_container_get_store_layout_timestamps (NautilusCanvasContainer *container); void nautilus_canvas_container_widget_to_file_operation_position (NautilusCanvasContainer *container, GdkPoint *position); guint nautilus_canvas_container_get_icon_size_for_zoom_level (NautilusCanvasZoomLevel zoom_level); #define CANVAS_WIDTH(container,allocation) (allocation.width \ / EEL_CANVAS (container)->pixels_per_unit) #define CANVAS_HEIGHT(container,allocation) (allocation.height \ / EEL_CANVAS (container)->pixels_per_unit)