aboutsummaryrefslogblamecommitdiffstats
path: root/e-util/e-attachment-view.h
blob: 145b11513ccc9f7d50676aa4fcb3d7038fd88041 (plain) (tree)
1
2
3
4
5
6
7
8
9
10
11
12
13
14













                                                                    
                                                                             





                                                        



                                                                     



                           
                                      






                                                         
                                          
                                  
                                                                  


                                        
                                             

                                        
                                              
                                        
                                                                  



                                                
                                                                  

                                                              

                                        







































                                                                                   







                                   





                             
                           


                           
                                                                    








                                                                        


                                                                        






                                                                        


                                                                             















                                                                        


                                                                        



















                                                                        

                                                                       
















































                                                                             



                                                                        




                                                                          

                                                                        



                                
/*
 * e-attachment-view.h
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2 of the License, or (at your option) version 3.
 *
 * This program 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
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with the program; if not, see <http://www.gnu.org/licenses/>
 *
 *
 * Copyright (C) 1999-2008 Novell, Inc. (www.novell.com)
 *
 */

#if !defined (__E_UTIL_H_INSIDE__) && !defined (LIBEUTIL_COMPILATION)
#error "Only <e-util/e-util.h> should be included directly."
#endif

#ifndef E_ATTACHMENT_VIEW_H
#define E_ATTACHMENT_VIEW_H

#include <gtk/gtk.h>
#include <e-util/e-attachment-store.h>

/* Standard GObject macros */
#define E_TYPE_ATTACHMENT_VIEW \
    (e_attachment_view_get_type ())
#define E_ATTACHMENT_VIEW(obj) \
    (G_TYPE_CHECK_INSTANCE_CAST \
    ((obj), E_TYPE_ATTACHMENT_VIEW, EAttachmentView))
#define E_ATTACHMENT_VIEW_INTERFACE(cls) \
    (G_TYPE_CHECK_CLASS_CAST \
    ((cls), E_TYPE_ATTACHMENT_VIEW, EAttachmentViewInterface))
#define E_IS_ATTACHMENT_VIEW(obj) \
    (G_TYPE_CHECK_INSTANCE_TYPE \
    ((obj), E_TYPE_ATTACHMENT_VIEW))
#define E_IS_ATTACHMENT_VIEW_INTERFACE(cls) \
    (G_TYPE_CHECK_CLASS_TYPE \
    ((cls), E_TYPE_ATTACHMENT_VIEW))
#define E_ATTACHMENT_VIEW_GET_INTERFACE(obj) \
    (G_TYPE_INSTANCE_GET_INTERFACE \
    ((obj), E_TYPE_ATTACHMENT_VIEW, EAttachmentViewInterface))

G_BEGIN_DECLS

typedef struct _EAttachmentView EAttachmentView;
typedef struct _EAttachmentViewInterface EAttachmentViewInterface;
typedef struct _EAttachmentViewPrivate EAttachmentViewPrivate;

struct _EAttachmentViewInterface {
    GTypeInterface parent_interface;

    /* General Methods */
    EAttachmentViewPrivate *
            (*get_private)      (EAttachmentView *view);
    EAttachmentStore *
            (*get_store)        (EAttachmentView *view);

    /* Selection Methods */
    GtkTreePath *   (*get_path_at_pos)  (EAttachmentView *view,
                         gint x,
                         gint y);
    GList *     (*get_selected_paths)   (EAttachmentView *view);
    gboolean    (*path_is_selected) (EAttachmentView *view,
                         GtkTreePath *path);
    void        (*select_path)      (EAttachmentView *view,
                         GtkTreePath *path);
    void        (*unselect_path)    (EAttachmentView *view,
                         GtkTreePath *path);
    void        (*select_all)       (EAttachmentView *view);
    void        (*unselect_all)     (EAttachmentView *view);

    /* Drag and Drop Methods */
    void        (*drag_source_set)  (EAttachmentView *view,
                         GdkModifierType start_button_mask,
                         const GtkTargetEntry *targets,
                         gint n_targets,
                         GdkDragAction actions);
    void        (*drag_dest_set)    (EAttachmentView *view,
                         const GtkTargetEntry *targets,
                         gint n_targets,
                         GdkDragAction actions);
    void        (*drag_source_unset)    (EAttachmentView *view);
    void        (*drag_dest_unset)  (EAttachmentView *view);

    /* Signals */
    void        (*update_actions)   (EAttachmentView *view);
};

struct _EAttachmentViewPrivate {

    /* Drag Destination */
    GtkTargetList *target_list;
    GdkDragAction drag_actions;

    /* Popup Menu Management */
    GtkUIManager *ui_manager;
    guint merge_id;

    /* Multi-DnD State */
    GList *event_list;
    GList *selected;
    gint start_x;
    gint start_y;

    guint dragging : 1;
    guint editable : 1;
};

GType       e_attachment_view_get_type  (void) G_GNUC_CONST;

void        e_attachment_view_init      (EAttachmentView *view);
void        e_attachment_view_dispose   (EAttachmentView *view);
void        e_attachment_view_finalize  (EAttachmentView *view);

EAttachmentViewPrivate *
        e_attachment_view_get_private   (EAttachmentView *view);
EAttachmentStore *
        e_attachment_view_get_store (EAttachmentView *view);
gboolean    e_attachment_view_get_dragging  (EAttachmentView *view);
void        e_attachment_view_set_dragging  (EAttachmentView *view,
                         gboolean dragging);
gboolean    e_attachment_view_get_editable  (EAttachmentView *view);
void        e_attachment_view_set_editable  (EAttachmentView *view,
                         gboolean editable);
GtkTargetList * e_attachment_view_get_target_list
                        (EAttachmentView *view);
GdkDragAction   e_attachment_view_get_drag_actions
                        (EAttachmentView *view);
void        e_attachment_view_add_drag_actions
                        (EAttachmentView *view,
                         GdkDragAction drag_actions);
GList *     e_attachment_view_get_selected_attachments
                        (EAttachmentView *view);
void        e_attachment_view_open_path (EAttachmentView *view,
                         GtkTreePath *path,
                         GAppInfo *app_info);
void        e_attachment_view_remove_selected
                        (EAttachmentView *view,
                         gboolean select_next);

/* Event Support */
gboolean    e_attachment_view_button_press_event
                        (EAttachmentView *view,
                         GdkEventButton *event);
gboolean    e_attachment_view_button_release_event
                        (EAttachmentView *view,
                         GdkEventButton *event);
gboolean    e_attachment_view_motion_notify_event
                        (EAttachmentView *view,
                         GdkEventMotion *event);
gboolean    e_attachment_view_key_press_event
                        (EAttachmentView *view,
                         GdkEventKey *event);

/* Selection Management */
GtkTreePath *   e_attachment_view_get_path_at_pos
                        (EAttachmentView *view,
                         gint x,
                         gint y);
GList *     e_attachment_view_get_selected_paths
                        (EAttachmentView *view);
gboolean    e_attachment_view_path_is_selected
                        (EAttachmentView *view,
                         GtkTreePath *path);
void        e_attachment_view_select_path   (EAttachmentView *view,
                         GtkTreePath *path);
void        e_attachment_view_unselect_path (EAttachmentView *view,
                         GtkTreePath *path);
void        e_attachment_view_select_all    (EAttachmentView *view);
void        e_attachment_view_unselect_all  (EAttachmentView *view);
void        e_attachment_view_sync_selection
                        (EAttachmentView *view,
                         EAttachmentView *target);

/* Drag Source Support */
void        e_attachment_view_drag_source_set
                        (EAttachmentView *view);
void        e_attachment_view_drag_source_unset
                        (EAttachmentView *view);
void        e_attachment_view_drag_begin    (EAttachmentView *view,
                         GdkDragContext *context);
void        e_attachment_view_drag_end  (EAttachmentView *view,
                         GdkDragContext *context);
void        e_attachment_view_drag_data_get (EAttachmentView *view,
                         GdkDragContext *context,
                         GtkSelectionData *selection,
                         guint info,
                         guint time);

/* Drag Destination Support */
void        e_attachment_view_drag_dest_set (EAttachmentView *view);
void        e_attachment_view_drag_dest_unset
                        (EAttachmentView *view);
gboolean    e_attachment_view_drag_motion   (EAttachmentView *view,
                         GdkDragContext *context,
                         gint x,
                         gint y,
                         guint time);
gboolean    e_attachment_view_drag_drop (EAttachmentView *view,
                         GdkDragContext *context,
                         gint x,
                         gint y,
                         guint time);
void        e_attachment_view_drag_data_received
                        (EAttachmentView *view,
                         GdkDragContext *context,
                         gint x,
                         gint y,
                         GtkSelectionData *selection,
                         guint info,
                         guint time);

/* Popup Menu Management */
GtkAction * e_attachment_view_get_action    (EAttachmentView *view,
                         const gchar *action_name);
GtkActionGroup *e_attachment_view_add_action_group
                        (EAttachmentView *view,
                         const gchar *group_name);
GtkActionGroup *e_attachment_view_get_action_group
                        (EAttachmentView *view,
                         const gchar *group_name);
GtkWidget * e_attachment_view_get_popup_menu
                        (EAttachmentView *view);
GtkUIManager *  e_attachment_view_get_ui_manager
                        (EAttachmentView *view);
void        e_attachment_view_show_popup_menu
                        (EAttachmentView *view,
                         GdkEventButton *event,
                         GtkMenuPositionFunc func,
                         gpointer user_data);
void        e_attachment_view_update_actions
                        (EAttachmentView *view);

G_END_DECLS

#endif /* E_ATTACHMENT_VIEW_H */