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