diff options
Diffstat (limited to 'libcaja-private/caja-icon-container.h')
-rw-r--r-- | libcaja-private/caja-icon-container.h | 371 |
1 files changed, 371 insertions, 0 deletions
diff --git a/libcaja-private/caja-icon-container.h b/libcaja-private/caja-icon-container.h new file mode 100644 index 00000000..10472878 --- /dev/null +++ b/libcaja-private/caja-icon-container.h @@ -0,0 +1,371 @@ +/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */ + +/* mate-icon-container.h - Icon container widget. + + Copyright (C) 1999, 2000 Free Software Foundation + Copyright (C) 2000 Eazel, Inc. + + The Mate 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 Mate 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 Mate Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. + + Authors: Ettore Perazzoli <[email protected]>, Darin Adler <[email protected]> +*/ + +#ifndef CAJA_ICON_CONTAINER_H +#define CAJA_ICON_CONTAINER_H + +#include <eel/eel-canvas.h> +#include <libcaja-private/caja-icon-info.h> + +#define CAJA_TYPE_ICON_CONTAINER caja_icon_container_get_type() +#define CAJA_ICON_CONTAINER(obj) \ + (G_TYPE_CHECK_INSTANCE_CAST ((obj), CAJA_TYPE_ICON_CONTAINER, CajaIconContainer)) +#define CAJA_ICON_CONTAINER_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_CAST ((klass), CAJA_TYPE_ICON_CONTAINER, CajaIconContainerClass)) +#define CAJA_IS_ICON_CONTAINER(obj) \ + (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CAJA_TYPE_ICON_CONTAINER)) +#define CAJA_IS_ICON_CONTAINER_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_TYPE ((klass), CAJA_TYPE_ICON_CONTAINER)) +#define CAJA_ICON_CONTAINER_GET_CLASS(obj) \ + (G_TYPE_INSTANCE_GET_CLASS ((obj), CAJA_TYPE_ICON_CONTAINER, CajaIconContainerClass)) + + +#define CAJA_ICON_CONTAINER_ICON_DATA(pointer) \ + ((CajaIconData *) (pointer)) + +typedef struct CajaIconData CajaIconData; + +typedef void (* CajaIconCallback) (CajaIconData *icon_data, + gpointer callback_data); + +typedef struct +{ + int x; + int y; + double scale; +} CajaIconPosition; + +typedef enum +{ + CAJA_ICON_LAYOUT_L_R_T_B, + CAJA_ICON_LAYOUT_R_L_T_B, + CAJA_ICON_LAYOUT_T_B_L_R, + CAJA_ICON_LAYOUT_T_B_R_L +} CajaIconLayoutMode; + +typedef enum +{ + CAJA_ICON_LABEL_POSITION_UNDER, + CAJA_ICON_LABEL_POSITION_BESIDE +} CajaIconLabelPosition; + +#define CAJA_ICON_CONTAINER_TYPESELECT_FLUSH_DELAY 1000000 + +typedef struct CajaIconContainerDetails CajaIconContainerDetails; + +typedef struct +{ + EelCanvas canvas; + CajaIconContainerDetails *details; +} CajaIconContainer; + +typedef struct +{ + EelCanvasClass parent_slot; + + /* Operations on the container. */ + int (* button_press) (CajaIconContainer *container, + GdkEventButton *event); + void (* context_click_background) (CajaIconContainer *container, + GdkEventButton *event); + void (* middle_click) (CajaIconContainer *container, + GdkEventButton *event); + + /* Operations on icons. */ + void (* activate) (CajaIconContainer *container, + CajaIconData *data); + void (* activate_alternate) (CajaIconContainer *container, + CajaIconData *data); + void (* context_click_selection) (CajaIconContainer *container, + GdkEventButton *event); + void (* move_copy_items) (CajaIconContainer *container, + const GList *item_uris, + GdkPoint *relative_item_points, + const char *target_uri, + GdkDragAction action, + int x, + int y); + void (* handle_netscape_url) (CajaIconContainer *container, + const char *url, + const char *target_uri, + GdkDragAction action, + int x, + int y); + void (* handle_uri_list) (CajaIconContainer *container, + const char *uri_list, + const char *target_uri, + GdkDragAction action, + int x, + int y); + void (* handle_text) (CajaIconContainer *container, + const char *text, + const char *target_uri, + GdkDragAction action, + int x, + int y); + void (* handle_raw) (CajaIconContainer *container, + char *raw_data, + int length, + const char *target_uri, + const char *direct_save_uri, + GdkDragAction action, + int x, + int y); + + /* Queries on the container for subclass/client. + * These must be implemented. The default "do nothing" is not good enough. + */ + char * (* get_container_uri) (CajaIconContainer *container); + + /* Queries on icons for subclass/client. + * These must be implemented. The default "do nothing" is not + * good enough, these are _not_ signals. + */ + CajaIconInfo *(* get_icon_images) (CajaIconContainer *container, + CajaIconData *data, + int icon_size, + GList **emblem_pixbufs, + char **embedded_text, + gboolean for_drag_accept, + gboolean need_large_embeddded_text, + gboolean *embedded_text_needs_loading, + gboolean *has_window_open); + void (* get_icon_text) (CajaIconContainer *container, + CajaIconData *data, + char **editable_text, + char **additional_text, + gboolean include_invisible); + char * (* get_icon_description) (CajaIconContainer *container, + CajaIconData *data); + int (* compare_icons) (CajaIconContainer *container, + CajaIconData *icon_a, + CajaIconData *icon_b); + int (* compare_icons_by_name) (CajaIconContainer *container, + CajaIconData *icon_a, + CajaIconData *icon_b); + void (* freeze_updates) (CajaIconContainer *container); + void (* unfreeze_updates) (CajaIconContainer *container); + void (* start_monitor_top_left) (CajaIconContainer *container, + CajaIconData *data, + gconstpointer client, + gboolean large_text); + void (* stop_monitor_top_left) (CajaIconContainer *container, + CajaIconData *data, + gconstpointer client); + void (* prioritize_thumbnailing) (CajaIconContainer *container, + CajaIconData *data); + + /* Queries on icons for subclass/client. + * These must be implemented => These are signals ! + * The default "do nothing" is not good enough. + */ + gboolean (* can_accept_item) (CajaIconContainer *container, + CajaIconData *target, + const char *item_uri); + gboolean (* get_stored_icon_position) (CajaIconContainer *container, + CajaIconData *data, + CajaIconPosition *position); + char * (* get_icon_uri) (CajaIconContainer *container, + CajaIconData *data); + char * (* get_icon_drop_target_uri) (CajaIconContainer *container, + CajaIconData *data); + + /* If icon 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 icon positions assigned. + * + * If icon data is not NULL, the position timestamp of the icon should be retrieved. + * That is the time when the file (i.e. icon data payload) was last displayed in a + * fully loaded directory with all icon positions assigned. + */ + gboolean (* get_stored_layout_timestamp) (CajaIconContainer *container, + CajaIconData *data, + time_t *time); + /* If icon data is NULL, the layout timestamp of the container should be stored. + * If icon data is not NULL, the position timestamp of the container should be stored. + */ + gboolean (* store_layout_timestamp) (CajaIconContainer *container, + CajaIconData *data, + const time_t *time); + + /* Notifications for the whole container. */ + void (* band_select_started) (CajaIconContainer *container); + void (* band_select_ended) (CajaIconContainer *container); + void (* selection_changed) (CajaIconContainer *container); + void (* layout_changed) (CajaIconContainer *container); + + /* Notifications for icons. */ + void (* icon_position_changed) (CajaIconContainer *container, + CajaIconData *data, + const CajaIconPosition *position); + void (* icon_text_changed) (CajaIconContainer *container, + CajaIconData *data, + const char *text); + void (* renaming_icon) (CajaIconContainer *container, + GtkWidget *renaming_widget); + void (* icon_stretch_started) (CajaIconContainer *container, + CajaIconData *data); + void (* icon_stretch_ended) (CajaIconContainer *container, + CajaIconData *data); + int (* preview) (CajaIconContainer *container, + CajaIconData *data, + gboolean start_flag); + void (* icon_added) (CajaIconContainer *container, + CajaIconData *data); + void (* icon_removed) (CajaIconContainer *container, + CajaIconData *data); + void (* cleared) (CajaIconContainer *container); + gboolean (* start_interactive_search) (CajaIconContainer *container); +} CajaIconContainerClass; + +/* GtkObject */ +GType caja_icon_container_get_type (void); +GtkWidget * caja_icon_container_new (void); + + +/* adding, removing, and managing icons */ +void caja_icon_container_clear (CajaIconContainer *view); +gboolean caja_icon_container_add (CajaIconContainer *view, + CajaIconData *data); +void caja_icon_container_layout_now (CajaIconContainer *container); +gboolean caja_icon_container_remove (CajaIconContainer *view, + CajaIconData *data); +void caja_icon_container_for_each (CajaIconContainer *view, + CajaIconCallback callback, + gpointer callback_data); +void caja_icon_container_request_update (CajaIconContainer *view, + CajaIconData *data); +void caja_icon_container_request_update_all (CajaIconContainer *container); +void caja_icon_container_reveal (CajaIconContainer *container, + CajaIconData *data); +gboolean caja_icon_container_is_empty (CajaIconContainer *container); +CajaIconData *caja_icon_container_get_first_visible_icon (CajaIconContainer *container); +void caja_icon_container_scroll_to_icon (CajaIconContainer *container, + CajaIconData *data); + +void caja_icon_container_begin_loading (CajaIconContainer *container); +void caja_icon_container_end_loading (CajaIconContainer *container, + gboolean all_icons_added); + +/* control the layout */ +gboolean caja_icon_container_is_auto_layout (CajaIconContainer *container); +void caja_icon_container_set_auto_layout (CajaIconContainer *container, + gboolean auto_layout); +gboolean caja_icon_container_is_tighter_layout (CajaIconContainer *container); +void caja_icon_container_set_tighter_layout (CajaIconContainer *container, + gboolean tighter_layout); + +gboolean caja_icon_container_is_keep_aligned (CajaIconContainer *container); +void caja_icon_container_set_keep_aligned (CajaIconContainer *container, + gboolean keep_aligned); +void caja_icon_container_set_layout_mode (CajaIconContainer *container, + CajaIconLayoutMode mode); +void caja_icon_container_set_label_position (CajaIconContainer *container, + CajaIconLabelPosition pos); +void caja_icon_container_sort (CajaIconContainer *container); +void caja_icon_container_freeze_icon_positions (CajaIconContainer *container); + +int caja_icon_container_get_max_layout_lines (CajaIconContainer *container); +int caja_icon_container_get_max_layout_lines_for_pango (CajaIconContainer *container); + +void caja_icon_container_set_highlighted_for_clipboard (CajaIconContainer *container, + GList *clipboard_icon_data); + +/* operations on all icons */ +void caja_icon_container_unselect_all (CajaIconContainer *view); +void caja_icon_container_select_all (CajaIconContainer *view); + + +/* operations on the selection */ +GList * caja_icon_container_get_selection (CajaIconContainer *view); +void caja_icon_container_invert_selection (CajaIconContainer *view); +void caja_icon_container_set_selection (CajaIconContainer *view, + GList *selection); +GArray * caja_icon_container_get_selected_icon_locations (CajaIconContainer *view); +gboolean caja_icon_container_has_stretch_handles (CajaIconContainer *container); +gboolean caja_icon_container_is_stretched (CajaIconContainer *container); +void caja_icon_container_show_stretch_handles (CajaIconContainer *container); +void caja_icon_container_unstretch (CajaIconContainer *container); +void caja_icon_container_start_renaming_selected_item (CajaIconContainer *container, + gboolean select_all); + +/* options */ +CajaZoomLevel caja_icon_container_get_zoom_level (CajaIconContainer *view); +void caja_icon_container_set_zoom_level (CajaIconContainer *view, + int new_zoom_level); +void caja_icon_container_set_single_click_mode (CajaIconContainer *container, + gboolean single_click_mode); +void caja_icon_container_enable_linger_selection (CajaIconContainer *view, + gboolean enable); +gboolean caja_icon_container_get_is_fixed_size (CajaIconContainer *container); +void caja_icon_container_set_is_fixed_size (CajaIconContainer *container, + gboolean is_fixed_size); +gboolean caja_icon_container_get_is_desktop (CajaIconContainer *container); +void caja_icon_container_set_is_desktop (CajaIconContainer *container, + gboolean is_desktop); +void caja_icon_container_reset_scroll_region (CajaIconContainer *container); +void caja_icon_container_set_font (CajaIconContainer *container, + const char *font); +void caja_icon_container_set_font_size_table (CajaIconContainer *container, + const int font_size_table[CAJA_ZOOM_LEVEL_LARGEST + 1]); +void caja_icon_container_set_margins (CajaIconContainer *container, + int left_margin, + int right_margin, + int top_margin, + int bottom_margin); +void caja_icon_container_set_use_drop_shadows (CajaIconContainer *container, + gboolean use_drop_shadows); +char* caja_icon_container_get_icon_description (CajaIconContainer *container, + CajaIconData *data); +gboolean caja_icon_container_get_allow_moves (CajaIconContainer *container); +void caja_icon_container_set_allow_moves (CajaIconContainer *container, + gboolean allow_moves); +void caja_icon_container_set_forced_icon_size (CajaIconContainer *container, + int forced_icon_size); +void caja_icon_container_set_all_columns_same_width (CajaIconContainer *container, + gboolean all_columns_same_width); + +gboolean caja_icon_container_is_layout_rtl (CajaIconContainer *container); +gboolean caja_icon_container_is_layout_vertical (CajaIconContainer *container); + +gboolean caja_icon_container_get_store_layout_timestamps (CajaIconContainer *container); +void caja_icon_container_set_store_layout_timestamps (CajaIconContainer *container, + gboolean store_layout); + +void caja_icon_container_widget_to_file_operation_position (CajaIconContainer *container, + GdkPoint *position); + + +#define CANVAS_WIDTH(container,allocation) ((allocation.width \ + - container->details->left_margin \ + - container->details->right_margin) \ + / EEL_CANVAS (container)->pixels_per_unit) + +#define CANVAS_HEIGHT(container,allocation) ((allocation.height \ + - container->details->top_margin \ + - container->details->bottom_margin) \ + / EEL_CANVAS (container)->pixels_per_unit) + +#endif /* CAJA_ICON_CONTAINER_H */ |