1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129
   |  
#include <stdlib.h>
#include <gtk/gtk.h>
#include <gtk/gtkbbox.h>
#include <string.h>
#include "fonction.h"
#include "fonction_dnd.h"
 
 
// fonction dnd
static gboolean cb_drag_drop( GtkWidget      *icon,
              GdkDragContext *context,
              gint            x,
              gint            y,
              guint           time,
              gpointer        data )
{
    GdkAtom target_type;
    g_print( "Detection du drop sur  %s\n", gtk_widget_get_name( icon ) );
 
    target_type = GDK_POINTER_TO_ATOM( context->targets->data );
    gtk_drag_get_data( icon, context, target_type, time );
 
    return( TRUE );
}
int main (int argc, char **argv)
{
 
 //afficher_contenu_dosssier(".");
/// Initialisation de GTK+ */
gtk_init (&argc, &argv);
 
   ///variables
 
 // Box conteneur
      GtkWidget *v_box_0 = gtk_vbox_new (FALSE, 0);
      GtkWidget *h_box_1 = gtk_hbox_new (FALSE, 0);
      GtkWidget *p_window =  gtk_window_new (GTK_WINDOW_TOPLEVEL);
 
 
    // liste des entrées pour le Dnd
     static GtkTargetEntry *target = NULL;
 
    if( ! target )
    {
        target = g_slice_new(GtkTargetEntry);
        target->target = "InternalTarget";
        target->flags  = GTK_TARGET_SAME_APP;
        target->info   = 0;
    }
 
 
/// Image sélectionnée et propriétés
  GtkWidget *v_box_image = gtk_vbox_new (FALSE, 0);
 
      Image_struc_cb* image_st;image_st = g_malloc(sizeof(Image_struc_cb));
      image_st->pBox=gtk_hbox_new (FALSE, 0);
 
 
      gtk_box_pack_start(GTK_BOX(h_box_1), v_box_image, FALSE, FALSE, 0);
      gtk_box_pack_end(GTK_BOX(v_box_0), h_box_1, TRUE, TRUE, 20);
 
 
  ///liste d'images
  GtkWidget *v_box_bibli = gtk_vbox_new (FALSE, 0);
  GtkWidget *scrolled_window=gtk_scrolled_window_new (NULL, NULL);
  gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),GTK_POLICY_NEVER,  GTK_POLICY_AUTOMATIC);
  gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolled_window),GTK_SHADOW_IN);
  GtkWidget *icon_view=gtk_icon_view_new_with_model (afficher_contenu_dosssier ("./mes_images"));
 
/// ///Configuration du drag and drop
 
GtkWidget *v_box_for_image = gtk_vbox_new (FALSE, 0);
 
 
ajoute_image_dnd(v_box_for_image,"./image1.jpg");
ajoute_image_dnd(v_box_for_image,"./image2.png");
 
 
 
 
/* DnD setup */
    gtk_icon_view_enable_model_drag_source( GTK_ICON_VIEW( icon_view ),
                                            GDK_BUTTON1_MASK, target, 1,
                                            GDK_ACTION_MOVE );
    gtk_icon_view_enable_model_drag_dest( GTK_ICON_VIEW( icon_view ), target, 1,
                                          GDK_ACTION_MOVE );
 
    g_signal_connect( G_OBJECT( icon_view ), "drag-drop",     G_CALLBACK( cb_drag_drop ), NULL );
 
 
 
  gtk_container_add (GTK_CONTAINER (scrolled_window), icon_view);
  gtk_box_pack_start(GTK_BOX(v_box_bibli), scrolled_window, TRUE, TRUE, 0);
    gtk_box_pack_start(GTK_BOX(h_box_1), v_box_for_image, TRUE, TRUE, 0);
  gtk_box_pack_end(GTK_BOX(h_box_1), v_box_bibli, TRUE, TRUE, 0);
 
 
  gtk_icon_view_set_text_column (GTK_ICON_VIEW (icon_view), COL_DISPLAY_NAME);
  gtk_icon_view_set_pixbuf_column (GTK_ICON_VIEW (icon_view), COL_PIXBUF);
  gtk_icon_view_set_selection_mode (GTK_ICON_VIEW (icon_view), GTK_SELECTION_MULTIPLE);
  gtk_icon_view_set_item_width (GTK_ICON_VIEW(icon_view),100);// taille du texte
 
 
                                        // Ajout des box et conteneur
gtk_container_add (GTK_CONTAINER (p_window), v_box_0);
 
 
/// Creation de la fenetre principale de notre application */
g_signal_connect (G_OBJECT (p_window), "destroy", gtk_main_quit, NULL);
gtk_window_set_position (GTK_WINDOW (p_window), GTK_WIN_POS_CENTER);
//gtk_widget_size_allocate(p_window,20);
 
 
            /// Creation du bouton "Quitter" */
            {
            GtkWidget *p_button = NULL;
            p_button = gtk_button_new_from_stock (GTK_STOCK_QUIT);
            g_signal_connect (G_OBJECT (p_button), "clicked", gtk_main_quit, NULL);
            gtk_box_pack_start (GTK_BOX (v_box_0), p_button, FALSE, FALSE, 0);
            }
 
/// Affichage de la fenetre principale
gtk_widget_show_all (p_window);
/// Lancement de la boucle principale
gtk_main ();
return 0;
 
} | 
Partager