diff --git a/campcaster/src/modules/widgets/src/TestWindow.cxx b/campcaster/src/modules/widgets/src/TestWindow.cxx index 178634397..7770eee94 100644 --- a/campcaster/src/modules/widgets/src/TestWindow.cxx +++ b/campcaster/src/modules/widgets/src/TestWindow.cxx @@ -101,6 +101,10 @@ TestWindow :: TestWindow (void) throw () modelColumns.textColumn); fillTreeModel(); + glade->get_widget("label1", label); + label->set_label(*getResourceUstring("dropHereText")); + setupDndCallbacks(); + glade->connect_clicked("okButton1", sigc::mem_fun(*this, &TestWindow::onOkButtonClicked)); } @@ -165,6 +169,40 @@ TestWindow :: fillTreeModel (void) throw () Gtk::TreeModel::Row row = *treeModel->append(); row[modelColumns.pixbufColumn] = pixbuf; row[modelColumns.textColumn] = text; + + row = *treeModel->append(); + row[modelColumns.pixbufColumn] = pixbuf; + row[modelColumns.textColumn] = "1"; + + row = *treeModel->append(); + row[modelColumns.pixbufColumn] = pixbuf; + row[modelColumns.textColumn] = "2"; + + row = *treeModel->append(); + row[modelColumns.pixbufColumn] = pixbuf; + row[modelColumns.textColumn] = "3"; + + row = *treeModel->append(); + row[modelColumns.pixbufColumn] = pixbuf; + row[modelColumns.textColumn] = "4"; +} + + +/*------------------------------------------------------------------------------ + * Set up the D'n'D callbacks. + *----------------------------------------------------------------------------*/ +void +TestWindow :: setupDndCallbacks (void) throw () +{ + std::list targets; + targets.push_back(Gtk::TargetEntry("STRING")); + + treeView->drag_source_set(targets); + treeView->signal_drag_data_get().connect(sigc::mem_fun(*this, + &TestWindow::onTreeViewDragDataGet)); + label->drag_dest_set(targets); + label->signal_drag_data_received().connect(sigc::mem_fun(*this, + &TestWindow::onLabelDragDataReceived)); } @@ -211,3 +249,50 @@ TestWindow :: run (void) throw () } +/*------------------------------------------------------------------------------ + * The callback for the start of the drag. + *----------------------------------------------------------------------------*/ +void +TestWindow :: onTreeViewDragDataGet( + const Glib::RefPtr & context, + Gtk::SelectionData & selectionData, + guint info, + guint time) + throw () +{ + Glib::RefPtr selection + = treeView->get_selection(); + Gtk::TreeModel::Row row = *selection->get_selected(); + Glib::ustring dropString = row[modelColumns.textColumn]; + + selectionData.set(selectionData.get_target(), + 8 /* 8 bits format*/, + (const guchar *) dropString.c_str(), + dropString.bytes()); +} + + +/*------------------------------------------------------------------------------ + * The callback for the end of the drag. + *----------------------------------------------------------------------------*/ +void +TestWindow :: onLabelDragDataReceived( + const Glib::RefPtr & context, + int x, + int y, + const Gtk::SelectionData & selectionData, + guint info, + guint time) + throw () +{ + if (selectionData.get_length() >= 0 && selectionData.get_format() == 8) { + Glib::ustring data = selectionData.get_data_as_string(); + label->set_label(data); + + } else { + label->set_label(*getResourceUstring("dropHereText")); + } + + context->drag_finish(false, false, time); +} + diff --git a/campcaster/src/modules/widgets/src/TestWindow.h b/campcaster/src/modules/widgets/src/TestWindow.h index 3332c961a..79ea1fd3f 100644 --- a/campcaster/src/modules/widgets/src/TestWindow.h +++ b/campcaster/src/modules/widgets/src/TestWindow.h @@ -79,13 +79,19 @@ class TestWindow : public LocalizedObject */ void configureBundle (void) throw (); - + /** * Fill the tree model. */ void fillTreeModel (void) throw (); + /** + * Set up the D'n'D callbacks. + */ + void + setupDndCallbacks (void) throw (); + protected: @@ -104,6 +110,11 @@ class TestWindow : public LocalizedObject */ ZebraTreeView * treeView; + /** + * The drop target label. + */ + Gtk::Label * label; + /** * The OK button. */ @@ -165,6 +176,30 @@ class TestWindow : public LocalizedObject virtual bool onDeleteEvent (GdkEventAny * event) throw (); + /** + * The callback for the start of the drag. + */ + virtual void + onTreeViewDragDataGet( + const Glib::RefPtr & context, + Gtk::SelectionData & selectionData, + guint info, + guint time) + throw (); + + /** + * The callback for the end of the drag. + */ + virtual void + onLabelDragDataReceived( + const Glib::RefPtr & context, + int x, + int y, + const Gtk::SelectionData & selectionData, + guint info, + guint time) + throw (); + public: diff --git a/campcaster/src/modules/widgets/var/glade/TestWindow.glade b/campcaster/src/modules/widgets/var/glade/TestWindow.glade index 5e0deeb46..1607b2d1e 100644 --- a/campcaster/src/modules/widgets/var/glade/TestWindow.glade +++ b/campcaster/src/modules/widgets/var/glade/TestWindow.glade @@ -1,10 +1,10 @@ - + 300 - 200 + 300 GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK @@ -35,11 +35,25 @@ True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK True + True + True 1 + + + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + drag target + + + False + False + 2 + + True @@ -60,7 +74,7 @@ False False - 2 + 3 diff --git a/campcaster/src/modules/widgets/var/hu.txt b/campcaster/src/modules/widgets/var/hu.txt index 3a4e67917..066dc5ff3 100644 --- a/campcaster/src/modules/widgets/var/hu.txt +++ b/campcaster/src/modules/widgets/var/hu.txt @@ -12,5 +12,7 @@ hu:table textOne:string { "Egy - megérett a meggy." } textTwo:string { "Kettő - csipkebokor vessző." } textThree:string { "Három - te leszel a párom. " } + + dropHereText:string { "Ide lehet húzni dolgokat." } } diff --git a/campcaster/src/modules/widgets/var/root.txt b/campcaster/src/modules/widgets/var/root.txt index 8a2d08054..f0e429c85 100644 --- a/campcaster/src/modules/widgets/var/root.txt +++ b/campcaster/src/modules/widgets/var/root.txt @@ -12,5 +12,7 @@ root:table textOne:string { "When I was One, I had just begun." } textTwo:string { "When I was Two, I was nearly new." } textThree:string { "When I was Three, I was hardly me." } + + dropHereText:string { "You can drop things here." } }