Blame src/nautilus-canvas-container.h

Packit a189e0
Packit a189e0
/* gnome-canvas-container.h - Canvas container widget.
Packit a189e0
Packit a189e0
   Copyright (C) 1999, 2000 Free Software Foundation
Packit a189e0
   Copyright (C) 2000 Eazel, Inc.
Packit a189e0
Packit a189e0
   The Gnome Library is free software; you can redistribute it and/or
Packit a189e0
   modify it under the terms of the GNU Library General Public License as
Packit a189e0
   published by the Free Software Foundation; either version 2 of the
Packit a189e0
   License, or (at your option) any later version.
Packit a189e0
Packit a189e0
   The Gnome Library is distributed in the hope that it will be useful,
Packit a189e0
   but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit a189e0
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Packit a189e0
   Library General Public License for more details.
Packit a189e0
Packit a189e0
   You should have received a copy of the GNU Library General Public
Packit a189e0
   License along with the Gnome Library; see the file COPYING.LIB.  If not,
Packit a189e0
   see <http://www.gnu.org/licenses/>.
Packit a189e0
Packit a189e0
   Authors: Ettore Perazzoli <ettore@gnu.org>, Darin Adler <darin@bentspoon.com>
Packit a189e0
*/
Packit a189e0
Packit a189e0
#ifndef NAUTILUS_CANVAS_CONTAINER_H
Packit a189e0
#define NAUTILUS_CANVAS_CONTAINER_H
Packit a189e0
Packit a189e0
#include <eel/eel-canvas.h>
Packit a189e0
#include "nautilus-icon-info.h"
Packit a189e0
Packit a189e0
#define NAUTILUS_TYPE_CANVAS_CONTAINER nautilus_canvas_container_get_type()
Packit a189e0
#define NAUTILUS_CANVAS_CONTAINER(obj) \
Packit a189e0
  (G_TYPE_CHECK_INSTANCE_CAST ((obj), NAUTILUS_TYPE_CANVAS_CONTAINER, NautilusCanvasContainer))
Packit a189e0
#define NAUTILUS_CANVAS_CONTAINER_CLASS(klass) \
Packit a189e0
  (G_TYPE_CHECK_CLASS_CAST ((klass), NAUTILUS_TYPE_CANVAS_CONTAINER, NautilusCanvasContainerClass))
Packit a189e0
#define NAUTILUS_IS_CANVAS_CONTAINER(obj) \
Packit a189e0
  (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NAUTILUS_TYPE_CANVAS_CONTAINER))
Packit a189e0
#define NAUTILUS_IS_CANVAS_CONTAINER_CLASS(klass) \
Packit a189e0
  (G_TYPE_CHECK_CLASS_TYPE ((klass), NAUTILUS_TYPE_CANVAS_CONTAINER))
Packit a189e0
#define NAUTILUS_CANVAS_CONTAINER_GET_CLASS(obj) \
Packit a189e0
  (G_TYPE_INSTANCE_GET_CLASS ((obj), NAUTILUS_TYPE_CANVAS_CONTAINER, NautilusCanvasContainerClass))
Packit a189e0
Packit a189e0
Packit a189e0
#define NAUTILUS_CANVAS_ICON_DATA(pointer) \
Packit a189e0
	((NautilusCanvasIconData *) (pointer))
Packit a189e0
Packit a189e0
typedef struct NautilusCanvasIconData NautilusCanvasIconData;
Packit a189e0
Packit a189e0
typedef void (* NautilusCanvasCallback) (NautilusCanvasIconData *icon_data,
Packit a189e0
					 gpointer callback_data);
Packit a189e0
Packit a189e0
typedef struct {
Packit a189e0
	int x;
Packit a189e0
	int y;
Packit a189e0
	double scale;
Packit a189e0
} NautilusCanvasPosition;
Packit a189e0
Packit a189e0
#define	NAUTILUS_CANVAS_CONTAINER_TYPESELECT_FLUSH_DELAY 1000000
Packit a189e0
Packit a189e0
typedef struct NautilusCanvasContainerDetails NautilusCanvasContainerDetails;
Packit a189e0
Packit a189e0
typedef struct {
Packit a189e0
	EelCanvas canvas;
Packit a189e0
	NautilusCanvasContainerDetails *details;
Packit a189e0
} NautilusCanvasContainer;
Packit a189e0
Packit a189e0
typedef struct {
Packit a189e0
	EelCanvasClass parent_slot;
Packit a189e0
Packit a189e0
	/* Operations on the container. */
Packit a189e0
	int          (* button_press) 	          (NautilusCanvasContainer *container,
Packit a189e0
						   GdkEventButton *event);
Packit a189e0
	void         (* context_click_background) (NautilusCanvasContainer *container,
Packit a189e0
						   GdkEventButton *event);
Packit a189e0
	void         (* middle_click) 		  (NautilusCanvasContainer *container,
Packit a189e0
						   GdkEventButton *event);
Packit a189e0
Packit a189e0
	/* Operations on icons. */
Packit a189e0
	void         (* activate)	  	  (NautilusCanvasContainer *container,
Packit a189e0
						   NautilusCanvasIconData *data);
Packit a189e0
	void         (* activate_alternate)       (NautilusCanvasContainer *container,
Packit a189e0
						   NautilusCanvasIconData *data);
Packit a189e0
	void         (* activate_previewer)       (NautilusCanvasContainer *container,
Packit a189e0
						   GList *files,
Packit a189e0
						   GArray *locations);
Packit a189e0
	void         (* context_click_selection)  (NautilusCanvasContainer *container,
Packit a189e0
						   GdkEventButton *event);
Packit a189e0
	void	     (* move_copy_items)	  (NautilusCanvasContainer *container,
Packit a189e0
						   const GList *item_uris,
Packit a189e0
						   const char *target_uri,
Packit a189e0
						   GdkDragAction action,
Packit a189e0
						   int x,
Packit a189e0
						   int y);
Packit a189e0
	void	     (* handle_netscape_url)	  (NautilusCanvasContainer *container,
Packit a189e0
						   const char *url,
Packit a189e0
						   const char *target_uri,
Packit a189e0
						   GdkDragAction action,
Packit a189e0
						   int x,
Packit a189e0
						   int y);
Packit a189e0
	void	     (* handle_uri_list)    	  (NautilusCanvasContainer *container,
Packit a189e0
						   const char *uri_list,
Packit a189e0
						   const char *target_uri,
Packit a189e0
						   GdkDragAction action,
Packit a189e0
						   int x,
Packit a189e0
						   int y);
Packit a189e0
	void	     (* handle_text)		  (NautilusCanvasContainer *container,
Packit a189e0
						   const char *text,
Packit a189e0
						   const char *target_uri,
Packit a189e0
						   GdkDragAction action,
Packit a189e0
						   int x,
Packit a189e0
						   int y);
Packit a189e0
	void	     (* handle_raw)		  (NautilusCanvasContainer *container,
Packit a189e0
						   char *raw_data,
Packit a189e0
						   int length,
Packit a189e0
						   const char *target_uri,
Packit a189e0
						   const char *direct_save_uri,
Packit a189e0
						   GdkDragAction action,
Packit a189e0
						   int x,
Packit a189e0
						   int y);
Packit a189e0
	void	     (* handle_hover)		  (NautilusCanvasContainer *container,
Packit a189e0
						   const char *target_uri);
Packit a189e0
Packit a189e0
	/* Queries on the container for subclass/client.
Packit a189e0
	 * These must be implemented. The default "do nothing" is not good enough.
Packit a189e0
	 */
Packit a189e0
	char *	     (* get_container_uri)	  (NautilusCanvasContainer *container);
Packit a189e0
Packit a189e0
	/* Queries on icons for subclass/client.
Packit a189e0
	 * These must be implemented. The default "do nothing" is not
Packit a189e0
	 * good enough, these are _not_ signals.
Packit a189e0
	 */
Packit a189e0
	NautilusIconInfo *(* get_icon_images)     (NautilusCanvasContainer *container,
Packit a189e0
						     NautilusCanvasIconData *data,
Packit a189e0
						     int canvas_size,
Packit a189e0
						     gboolean for_drag_accept);
Packit a189e0
	void         (* get_icon_text)            (NautilusCanvasContainer *container,
Packit a189e0
						     NautilusCanvasIconData *data,
Packit a189e0
						     char **editable_text,
Packit a189e0
						     char **additional_text,
Packit a189e0
						     gboolean include_invisible);
Packit a189e0
	char *       (* get_icon_description)     (NautilusCanvasContainer *container,
Packit a189e0
						     NautilusCanvasIconData *data);
Packit a189e0
	int          (* compare_icons)            (NautilusCanvasContainer *container,
Packit a189e0
						     NautilusCanvasIconData *canvas_a,
Packit a189e0
						     NautilusCanvasIconData *canvas_b);
Packit a189e0
	int          (* compare_icons_by_name)    (NautilusCanvasContainer *container,
Packit a189e0
						     NautilusCanvasIconData *canvas_a,
Packit a189e0
						     NautilusCanvasIconData *canvas_b);
Packit a189e0
	void         (* prioritize_thumbnailing)  (NautilusCanvasContainer *container,
Packit a189e0
						   NautilusCanvasIconData *data);
Packit a189e0
Packit a189e0
	/* Queries on icons for subclass/client.
Packit a189e0
	 * These must be implemented => These are signals !
Packit a189e0
	 * The default "do nothing" is not good enough.
Packit a189e0
	 */
Packit a189e0
	gboolean     (* can_accept_item)	  (NautilusCanvasContainer *container,
Packit a189e0
						   NautilusCanvasIconData *target, 
Packit a189e0
						   const char *item_uri);
Packit a189e0
	gboolean     (* get_stored_icon_position) (NautilusCanvasContainer *container,
Packit a189e0
						     NautilusCanvasIconData *data,
Packit a189e0
						     NautilusCanvasPosition *position);
Packit a189e0
	char *       (* get_icon_uri)             (NautilusCanvasContainer *container,
Packit a189e0
						     NautilusCanvasIconData *data);
Packit a189e0
	char *       (* get_icon_activation_uri)  (NautilusCanvasContainer *container,
Packit a189e0
						     NautilusCanvasIconData *data);
Packit a189e0
	char *       (* get_icon_drop_target_uri) (NautilusCanvasContainer *container,
Packit a189e0
						     NautilusCanvasIconData *data);
Packit a189e0
Packit a189e0
	/* If canvas data is NULL, the layout timestamp of the container should be retrieved.
Packit a189e0
	 * That is the time when the container displayed a fully loaded directory with
Packit a189e0
	 * all canvas positions assigned.
Packit a189e0
	 *
Packit a189e0
	 * If canvas data is not NULL, the position timestamp of the canvas should be retrieved.
Packit a189e0
	 * That is the time when the file (i.e. canvas data payload) was last displayed in a
Packit a189e0
	 * fully loaded directory with all canvas positions assigned.
Packit a189e0
	 */
Packit a189e0
	gboolean     (* get_stored_layout_timestamp) (NautilusCanvasContainer *container,
Packit a189e0
						      NautilusCanvasIconData *data,
Packit a189e0
						      time_t *time);
Packit a189e0
	/* If canvas data is NULL, the layout timestamp of the container should be stored.
Packit a189e0
	 * If canvas data is not NULL, the position timestamp of the container should be stored.
Packit a189e0
	 */
Packit a189e0
	gboolean     (* store_layout_timestamp) (NautilusCanvasContainer *container,
Packit a189e0
						 NautilusCanvasIconData *data,
Packit a189e0
						 const time_t *time);
Packit a189e0
Packit a189e0
	/* Notifications for the whole container. */
Packit a189e0
	void	     (* band_select_started)	  (NautilusCanvasContainer *container);
Packit a189e0
	void	     (* band_select_ended)	  (NautilusCanvasContainer *container);
Packit a189e0
	void         (* selection_changed) 	  (NautilusCanvasContainer *container);
Packit a189e0
	void         (* layout_changed)           (NautilusCanvasContainer *container);
Packit a189e0
Packit a189e0
	/* Notifications for icons. */
Packit a189e0
	void         (* icon_position_changed)    (NautilusCanvasContainer *container,
Packit a189e0
						     NautilusCanvasIconData *data,
Packit a189e0
						     const NautilusCanvasPosition *position);
Packit a189e0
	int	     (* preview)		  (NautilusCanvasContainer *container,
Packit a189e0
						   NautilusCanvasIconData *data,
Packit a189e0
						   gboolean start_flag);
Packit a189e0
        void         (* icon_added)               (NautilusCanvasContainer *container,
Packit a189e0
						     NautilusCanvasIconData *data);
Packit a189e0
        void         (* icon_removed)             (NautilusCanvasContainer *container,
Packit a189e0
						     NautilusCanvasIconData *data);
Packit a189e0
        void         (* cleared)                  (NautilusCanvasContainer *container);
Packit a189e0
	gboolean     (* start_interactive_search) (NautilusCanvasContainer *container);
Packit a189e0
} NautilusCanvasContainerClass;
Packit a189e0
Packit a189e0
/* GtkObject */
Packit a189e0
GType             nautilus_canvas_container_get_type                      (void);
Packit a189e0
GtkWidget *       nautilus_canvas_container_new                           (void);
Packit a189e0
Packit a189e0
Packit a189e0
/* adding, removing, and managing icons */
Packit a189e0
void              nautilus_canvas_container_clear                         (NautilusCanvasContainer  *view);
Packit a189e0
gboolean          nautilus_canvas_container_add                           (NautilusCanvasContainer  *view,
Packit a189e0
									   NautilusCanvasIconData       *data);
Packit a189e0
void              nautilus_canvas_container_layout_now                    (NautilusCanvasContainer *container);
Packit a189e0
gboolean          nautilus_canvas_container_remove                        (NautilusCanvasContainer  *view,
Packit a189e0
									   NautilusCanvasIconData       *data);
Packit a189e0
void              nautilus_canvas_container_for_each                      (NautilusCanvasContainer  *view,
Packit a189e0
									   NautilusCanvasCallback    callback,
Packit a189e0
									   gpointer                callback_data);
Packit a189e0
void              nautilus_canvas_container_request_update                (NautilusCanvasContainer  *view,
Packit a189e0
									   NautilusCanvasIconData       *data);
Packit a189e0
void              nautilus_canvas_container_request_update_all            (NautilusCanvasContainer  *container);
Packit a189e0
void              nautilus_canvas_container_reveal                        (NautilusCanvasContainer  *container,
Packit a189e0
									   NautilusCanvasIconData       *data);
Packit a189e0
gboolean          nautilus_canvas_container_is_empty                      (NautilusCanvasContainer  *container);
Packit a189e0
NautilusCanvasIconData *nautilus_canvas_container_get_first_visible_icon        (NautilusCanvasContainer  *container);
Packit a189e0
NautilusCanvasIconData *nautilus_canvas_container_get_focused_icon              (NautilusCanvasContainer  *container);
Packit a189e0
GdkRectangle      *nautilus_canvas_container_get_icon_bounding_box          (NautilusCanvasContainer  *container,
Packit a189e0
									     NautilusCanvasIconData       *data);
Packit a189e0
void              nautilus_canvas_container_scroll_to_canvas                (NautilusCanvasContainer  *container,
Packit a189e0
									     NautilusCanvasIconData       *data);
Packit a189e0
Packit a189e0
void              nautilus_canvas_container_begin_loading                 (NautilusCanvasContainer  *container);
Packit a189e0
void              nautilus_canvas_container_end_loading                   (NautilusCanvasContainer  *container,
Packit a189e0
									   gboolean                all_icons_added);
Packit a189e0
Packit a189e0
void              nautilus_canvas_container_sort                          (NautilusCanvasContainer  *container);
Packit a189e0
void              nautilus_canvas_container_freeze_icon_positions         (NautilusCanvasContainer  *container);
Packit a189e0
Packit a189e0
int               nautilus_canvas_container_get_max_layout_lines           (NautilusCanvasContainer  *container);
Packit a189e0
int               nautilus_canvas_container_get_max_layout_lines_for_pango (NautilusCanvasContainer  *container);
Packit a189e0
Packit a189e0
void              nautilus_canvas_container_set_highlighted_for_clipboard (NautilusCanvasContainer  *container,
Packit a189e0
									   GList                  *clipboard_canvas_data);
Packit a189e0
Packit a189e0
/* operations on all icons */
Packit a189e0
void              nautilus_canvas_container_unselect_all                  (NautilusCanvasContainer  *view);
Packit a189e0
void              nautilus_canvas_container_select_all                    (NautilusCanvasContainer  *view);
Packit a189e0
Packit a189e0
Packit a189e0
void              nautilus_canvas_container_select_first                  (NautilusCanvasContainer  *view);
Packit a189e0
Packit a189e0
Packit a189e0
/* operations on the selection */
Packit a189e0
GList     *       nautilus_canvas_container_get_selection                 (NautilusCanvasContainer  *view);
Packit a189e0
void			  nautilus_canvas_container_invert_selection				(NautilusCanvasContainer  *view);
Packit a189e0
void              nautilus_canvas_container_set_selection                 (NautilusCanvasContainer  *view,
Packit a189e0
									   GList                  *selection);
Packit a189e0
GArray    *       nautilus_canvas_container_get_selected_icon_locations   (NautilusCanvasContainer  *view);
Packit a189e0
Packit a189e0
/* options */
Packit a189e0
NautilusCanvasZoomLevel nautilus_canvas_container_get_zoom_level                (NautilusCanvasContainer  *view);
Packit a189e0
void              nautilus_canvas_container_set_zoom_level                (NautilusCanvasContainer  *view,
Packit a189e0
									   int                     new_zoom_level);
Packit a189e0
void              nautilus_canvas_container_set_single_click_mode         (NautilusCanvasContainer  *container,
Packit a189e0
									   gboolean                single_click_mode);
Packit a189e0
void              nautilus_canvas_container_enable_linger_selection       (NautilusCanvasContainer  *view,
Packit a189e0
									   gboolean                enable);
Packit a189e0
void              nautilus_canvas_container_reset_scroll_region           (NautilusCanvasContainer  *container);
Packit a189e0
void              nautilus_canvas_container_set_font                      (NautilusCanvasContainer  *container,
Packit a189e0
									   const char             *font); 
Packit a189e0
void              nautilus_canvas_container_set_margins                   (NautilusCanvasContainer  *container,
Packit a189e0
									   int                     left_margin,
Packit a189e0
									   int                     right_margin,
Packit a189e0
									   int                     top_margin,
Packit a189e0
									   int                     bottom_margin);
Packit a189e0
char*             nautilus_canvas_container_get_icon_description          (NautilusCanvasContainer  *container,
Packit a189e0
									     NautilusCanvasIconData       *data);
Packit a189e0
Packit a189e0
gboolean	  nautilus_canvas_container_is_layout_rtl			(NautilusCanvasContainer  *container);
Packit a189e0
Packit a189e0
gboolean          nautilus_canvas_container_get_store_layout_timestamps   (NautilusCanvasContainer  *container);
Packit a189e0
Packit a189e0
void              nautilus_canvas_container_widget_to_file_operation_position (NautilusCanvasContainer *container,
Packit a189e0
									       GdkPoint              *position);
Packit a189e0
guint             nautilus_canvas_container_get_icon_size_for_zoom_level (NautilusCanvasZoomLevel zoom_level);
Packit a189e0
Packit a189e0
#define CANVAS_WIDTH(container,allocation) (allocation.width		\
Packit a189e0
					    /  EEL_CANVAS (container)->pixels_per_unit)
Packit a189e0
Packit a189e0
#define CANVAS_HEIGHT(container,allocation) (allocation.height		\
Packit a189e0
					     / EEL_CANVAS (container)->pixels_per_unit)
Packit a189e0
Packit a189e0
#endif /* NAUTILUS_CANVAS_CONTAINER_H */