Perdon, salio cortado...(es la hora...)
Tengo un código que no me funciona la vdd no tengo la menor idea de que esta
pasando o que moco me estaré mandando.
Si alguien tiene ganas y paciencia y puede mirarlo, agradecería!

La cosa es asi, tengo una calse Drag_Object que tiene el comportamiento
básico para obtener un string cuando ocurre un drag en un EventBox.
En los hijos quiero redefinir la función  std::string obtener_info_drag()
para que cada hijo me de un string diferente.

class Drag_Object: public Gtk::EventBox{

private:
   /*Tipos de datos de drag*/
   std::list<Gtk::TargetEntry> listTargets;

public:

   Drag_Object(BaseObjectType* cobject, const
Glib::RefPtr<Gnome::Glade::Xml>&);

   virtual void on_event_drag_data_get(
       const Glib::RefPtr<Gdk::DragContext>&,
       Gtk::SelectionData& selection_data, guint, guint);

   /*Metodo de obtención de la información de Drag
    * Se redefine en los hijos de donde se realiza el drag*/
   virtual std::string obtener_info_drag() = 0;

   virtual ~Drag_Object(){};

};

Drag_Object::Drag_Object(BaseObjectType* cobject, const
Glib::RefPtr<Gnome::Glade::Xml>&):Gtk::EventBox(cobject){

     this->listTargets.push_back( Gtk::TargetEntry("STRING") );
     this->listTargets.push_back( Gtk::TargetEntry("text/plain") );

     /*Hago que el event box sea una fuente de drag*/
     this->drag_source_set(listTargets);

     /*Conecto la señal de drag con el metodo de obtener la
      * info de drag*/
     this->signal_drag_data_get().connect(sigc::mem_fun(*this,
             &Drag_Object::on_event_drag_data_get));

}

void Drag_Object::on_event_drag_data_get(
       const Glib::RefPtr<Gdk::DragContext>&,
       Gtk::SelectionData& selection_data, guint, guint){

       std::string info = this->obtener_info_drag();
       std::cout<<info<<std::endl;           --------------------->  ACA NO
LLEGA NADA (vacio)!


//       /*Obtengo la informacion de drag*/
//       std::string info;// = *this->obtener_infos_drag();
//
//        /*Devuelvo la informacion de drag al objeto donde se realizo el
Drop*/
//        selection_data.set(selection_data.get_target(), 8 /* 8 bits format
*/,
//          (const guchar*)info.c_str(),
//          info.size() /* largo de la informacion */);

}
------------------------------------------------------------------------------------------------------
CLASE HIJA (la instancio a partir de un get_widget_derived() de liblgademm)

class DerDragSinPlantar: public Drag_Object{

public:

   const static std::string drag_tag;

   DerDragSinPlantar(BaseObjectType* cobject, const
Glib::RefPtr<Gnome::Glade::Xml>& refGlade)
       :Drag_Object(cobject,refGlade){}

   virtual std::string obtener_infos_drag() { return drag_tag; };

   virtual ~DerDragSinPlantar(){}
};

const std::string DerDragSinPlantar::drag_tag = "sin_plantar";

La cuestion es que probe cambiar el std::string que devuelve la funcion por
int (tb por Glib:ustring) para hacerlo mas simple y directamente pincha el
programa cuando hago el drag & drop.
Cualquier sugerencia es bienvenida...
No me parece demasiado complicado, pero hay otras formas mas faciles de
hacerlo....
Ahora....porque no anda!?? jeje

Muchas Gracias!!
sebastian
_______________________________________________
Lista de correo Programacion.
[email protected]
http://listas.fi.uba.ar/mailman/listinfo/programacion

Responder a