From bdb8db1c19de923183517b8743c8ddf9ef5ab9a2 Mon Sep 17 00:00:00 2001 From: fgerlits <fgerlits@cfc7b370-4200-0410-a6e3-cb6bdb053afe> Date: Tue, 23 Oct 2007 16:26:27 +0000 Subject: [PATCH] implemented d'n'd in the Live Mode window --- .../gLiveSupport/src/LiveModeWindow.cxx | 67 ++++++++++---- .../gLiveSupport/src/LiveModeWindow.h | 89 +++++++++++-------- .../gLiveSupport/src/ScratchpadWindow.cxx | 2 +- .../gLiveSupport/src/ScratchpadWindow.h | 18 ++-- .../var/glade/LiveModeWindow.glade | 3 +- 5 files changed, 113 insertions(+), 66 deletions(-) diff --git a/campcaster/src/products/gLiveSupport/src/LiveModeWindow.cxx b/campcaster/src/products/gLiveSupport/src/LiveModeWindow.cxx index e41d78fac..a778ffb71 100644 --- a/campcaster/src/products/gLiveSupport/src/LiveModeWindow.cxx +++ b/campcaster/src/products/gLiveSupport/src/LiveModeWindow.cxx @@ -92,6 +92,11 @@ LiveModeWindow :: LiveModeWindow (Gtk::ToggleButton * windowOpenerButton) treeView->appendLineNumberColumn("", 2 /* offset */, 50); treeView->appendColumn("", modelColumns.infoColumn, 200); + treeModel = Gtk::ListStore::create(modelColumns); + treeView->set_model(treeModel); + treeView->connectModelSignals(treeModel); + setupDndCallbacks(); + treeView->signal_button_press_event().connect(sigc::mem_fun(*this, &LiveModeWindow::onEntryClicked), false /* call this first */); @@ -99,14 +104,9 @@ LiveModeWindow :: LiveModeWindow (Gtk::ToggleButton * windowOpenerButton) &LiveModeWindow::onDoubleClick)); treeView->signalTreeModelChanged().connect(sigc::mem_fun(*this, &LiveModeWindow::onTreeModelChanged)); - treeView->signal_key_press_event().connect(sigc::mem_fun(*this, &LiveModeWindow::onKeyPressed)); - treeModel = Gtk::ListStore::create(modelColumns); - treeView->set_model(treeModel); - treeView->connectModelSignals(treeModel); - glade->get_widget("cueLabel1", cueLabel); cueLabel->set_label(*getResourceUstring("cuePlayerLabel")); cuePlayer.reset(new CuePlayer(this, @@ -133,7 +133,6 @@ void LiveModeWindow :: addItem(Ptr<Playable>::Ref playable) throw () { addItem(treeModel->append(), playable); - onTreeModelChanged(); } @@ -141,7 +140,7 @@ LiveModeWindow :: addItem(Ptr<Playable>::Ref playable) throw () * Add a new item as the given row in the Live Mode Window. *----------------------------------------------------------------------------*/ void -LiveModeWindow :: addItem(Gtk::TreeModel::iterator iter, +LiveModeWindow :: addItem(Gtk::TreeIter iter, Ptr<Playable>::Ref playable) throw () { @@ -182,7 +181,8 @@ LiveModeWindow :: addItem(Gtk::TreeModel::iterator iter, infoString->append("</span>"); row[modelColumns.infoColumn] = *infoString; - gLiveSupport->runMainLoop(); + + onTreeModelChanged(); } @@ -206,6 +206,27 @@ LiveModeWindow :: addItem(Ptr<const UniqueId>::Ref id) } +/*------------------------------------------------------------------------------ + * Add an item to the Live Mode window at the given position, by ID. + *----------------------------------------------------------------------------*/ +void +LiveModeWindow :: addItem(Gtk::TreeIter iter, + Ptr<const UniqueId>::Ref id) + throw () +{ + Ptr<Playable>::Ref playable; + try { + playable = gLiveSupport->acquirePlayable(id); + } catch (XmlRpcException &e) { + std::cerr << "could not acquire playable in LiveModeWindow: " + << e.what() << std::endl; + return; + } + + addItem(iter, playable); +} + + /*------------------------------------------------------------------------------ * "Pop" the first item from the top of the Live Mode Window. *----------------------------------------------------------------------------*/ @@ -217,7 +238,7 @@ LiveModeWindow :: popTop(void) throw () return playable; // return a 0 pointer if auto is set to off } - Gtk::TreeModel::iterator iter = treeModel->children().begin(); + Gtk::TreeIter iter = treeModel->children().begin(); if (iter) { playable = (*iter)[modelColumns.playableColumn]; treeModel->erase(iter); @@ -493,11 +514,11 @@ LiveModeWindow :: onUploadToHub(void) throw () void LiveModeWindow :: refreshPlaylist(Ptr<Playlist>::Ref playlist) throw () { - for (Gtk::TreeModel::iterator iter = treeModel->children().begin(); - iter != treeModel->children().end(); ++iter) { + for (Gtk::TreeIter iter = treeModel->children().begin(); + iter != treeModel->children().end(); ++iter) { Ptr<Playable>::Ref currentItem = (*iter)[modelColumns.playableColumn]; if (*currentItem->getId() == *playlist->getId()) { - addItem(iter, playlist); + addItem(iter, currentItem); } } } @@ -601,16 +622,15 @@ LiveModeWindow :: onRemoveMenuOption(void) throw () std::vector<Gtk::TreePath> selectedPaths = selection->get_selected_rows(); - std::vector<Gtk::TreeModel::iterator> selectedIters; + std::vector<Gtk::TreeIter> selectedIters; for (std::vector<Gtk::TreePath>::iterator pathIt = selectedPaths.begin(); pathIt != selectedPaths.end(); ++pathIt) { selectedIters.push_back(treeModel->get_iter(*pathIt)); } - Gtk::TreeModel::iterator newSelection; - for (std::vector<Gtk::TreeModel::iterator>::iterator - iterIt = selectedIters.begin(); + Gtk::TreeIter newSelection; + for (std::vector<Gtk::TreeIter>::iterator iterIt = selectedIters.begin(); iterIt != selectedIters.end(); ++iterIt) { newSelection = *iterIt; @@ -637,18 +657,17 @@ LiveModeWindow :: onTreeModelChanged(void) throw () return; } - Gtk::TreeModel::iterator iter = treeModel->children().begin(); + Gtk::TreeIter iter = treeModel->children().begin(); if (iter) { Ptr<Playable>::Ref playable = (*iter)[modelColumns.playableColumn]; if (playable) { - if (!savedTopPlayable || savedTopPlayable && + if (!savedTopPlayable || *savedTopPlayable->getId() != *playable->getId()) { gLiveSupport->preload(playable); } savedTopPlayable = playable; } - } } @@ -744,3 +763,13 @@ LiveModeWindow :: hide(void) throw () GuiWindow::hide(); } + +/*------------------------------------------------------------------------------ + * The name of the window for the d'n'd methods. + *----------------------------------------------------------------------------*/ +Glib::ustring +LiveModeWindow :: getWindowNameForDnd (void) throw () +{ + return bundleName; +} + diff --git a/campcaster/src/products/gLiveSupport/src/LiveModeWindow.h b/campcaster/src/products/gLiveSupport/src/LiveModeWindow.h index 8e2544544..5a34503d0 100644 --- a/campcaster/src/products/gLiveSupport/src/LiveModeWindow.h +++ b/campcaster/src/products/gLiveSupport/src/LiveModeWindow.h @@ -42,16 +42,19 @@ #include <string> +#include "GuiWindow.h" +#include "ContentsStorable.h" +#include "DndMethods.h" + #include "LiveSupport/Core/Ptr.h" #include "LiveSupport/Widgets/PlayableTreeModelColumnRecord.h" #include "LiveSupport/Widgets/ZebraTreeView.h" -#include "GuiWindow.h" -#include "ContentsStorable.h" #include "CuePlayer.h" #include "GLiveSupport.h" #include "ExportPlaylistWindow.h" #include "SchedulePlaylistWindow.h" + namespace LiveSupport { namespace GLiveSupport { @@ -74,7 +77,8 @@ using namespace LiveSupport::Widgets; * @version $Revision$ */ class LiveModeWindow : public GuiWindow, - public ContentsStorable + public ContentsStorable, + public DndMethods { private: @@ -146,28 +150,6 @@ class LiveModeWindow : public GuiWindow, Ptr<Gtk::Menu>::Ref constructPlaylistContextMenu(void) throw (); - /** - * Return the topmost selected row. - * Sets selectedPaths and selectedIter; does not increment it. - * - * @return the first selected playable item. - */ - Ptr<Playable>::Ref - getFirstSelectedPlayable(void) throw (); - - /** - * Used to iterate over the selected rows. - * Can only be called after onEntryClicked() has set the selectedPaths - * and selectedIter variables. - * Returns a 0 pointer if nothing is selected or we have reached the - * end of the list of selected rows. - * Increments selectedIter after reading it. - * - * @return the next selected playable item. - */ - Ptr<Playable>::Ref - getNextSelectedPlayable(void) throw (); - /** * Check whether exactly one row is selected. * @@ -211,16 +193,6 @@ class LiveModeWindow : public GuiWindow, */ ModelColumns modelColumns; - /** - * The main container in the window. - */ - Gtk::VBox vBox; - - /** - * A scrolled window, so that the list can be scrolled. - */ - Gtk::ScrolledWindow scrolledWindow; - /** * The tree view, now only showing rows. */ @@ -333,6 +305,51 @@ class LiveModeWindow : public GuiWindow, virtual void onTreeModelChanged(void) throw (); + /** + * The tree view we want to implement d'n'd on. + */ + virtual Gtk::TreeView * + getTreeViewForDnd (void) throw () + { + return treeView; + } + + /** + * The name of the window for the d'n'd methods. + */ + virtual Glib::ustring + getWindowNameForDnd (void) throw (); + + /** + * Return the topmost selected row. + * Sets selectedPaths and selectedIter; does not increment it. + * + * @return the first selected playable item. + */ + virtual Ptr<Playable>::Ref + getFirstSelectedPlayable (void) throw (); + + /** + * Used to iterate over the selected rows. + * Reset to the first row by onEntryClicked(). + * Returns a 0 pointer if nothing is selected or we have reached + * the end of the list of selected rows. + * + * @return the next selected playable item. + */ + virtual Ptr<Playable>::Ref + getNextSelectedPlayable (void) throw (); + + /** + * Add an item to the d'n'd tree view at the given position. + * + * @param iter the iterator pointing to the row to be filled in. + * @param id the ID of the item to add. + */ + virtual void + addItem (Gtk::TreeIter iter, + Ptr<const UniqueId>::Ref id) throw (); + public: @@ -368,7 +385,7 @@ class LiveModeWindow : public GuiWindow, * @param playable the playable object to be added. */ void - addItem(Gtk::TreeModel::iterator iter, + addItem(Gtk::TreeIter iter, Ptr<Playable>::Ref playable) throw (); /** diff --git a/campcaster/src/products/gLiveSupport/src/ScratchpadWindow.cxx b/campcaster/src/products/gLiveSupport/src/ScratchpadWindow.cxx index ef087614f..6b7c0614b 100644 --- a/campcaster/src/products/gLiveSupport/src/ScratchpadWindow.cxx +++ b/campcaster/src/products/gLiveSupport/src/ScratchpadWindow.cxx @@ -99,6 +99,7 @@ ScratchpadWindow :: ScratchpadWindow ( treeModel = Gtk::ListStore::create(modelColumns); treeView->set_model(treeModel); treeView->connectModelSignals(treeModel); + setupDndCallbacks(); // register the signal handlers for treeview treeView->signal_button_press_event().connect(sigc::mem_fun(*this, @@ -108,7 +109,6 @@ ScratchpadWindow :: ScratchpadWindow ( &ScratchpadWindow::onDoubleClick)); treeView->signal_key_press_event().connect(sigc::mem_fun(*this, &ScratchpadWindow::onKeyPressed)); - setupDndCallbacks(); // create the cue player widget cuePlayer.reset(new CuePlayer(this, diff --git a/campcaster/src/products/gLiveSupport/src/ScratchpadWindow.h b/campcaster/src/products/gLiveSupport/src/ScratchpadWindow.h index 49627ca6f..0eae1372b 100644 --- a/campcaster/src/products/gLiveSupport/src/ScratchpadWindow.h +++ b/campcaster/src/products/gLiveSupport/src/ScratchpadWindow.h @@ -42,16 +42,16 @@ #include <string> +#include "GuiWindow.h" +#include "ContentsStorable.h" +#include "DndMethods.h" + #include "LiveSupport/Core/Ptr.h" #include "LiveSupport/Widgets/PlayableTreeModelColumnRecord.h" #include "LiveSupport/Widgets/ZebraTreeView.h" #include "CuePlayer.h" -#include "ContentsStorable.h" #include "ExportPlaylistWindow.h" #include "SchedulePlaylistWindow.h" -#include "DndMethods.h" - -#include "GuiWindow.h" namespace LiveSupport { @@ -310,7 +310,7 @@ class ScratchpadWindow : public GuiWindow, * @return the first selected playable item. */ virtual Ptr<Playable>::Ref - getFirstSelectedPlayable(void) throw (); + getFirstSelectedPlayable (void) throw (); /** * Used to iterate over the selected rows. @@ -321,17 +321,17 @@ class ScratchpadWindow : public GuiWindow, * @return the next selected playable item. */ virtual Ptr<Playable>::Ref - getNextSelectedPlayable(void) throw (); + getNextSelectedPlayable (void) throw (); /** - * Add an item to the Scratchpad at the given position. + * Add an item to the d'n'd tree view at the given position. * * @param iter the iterator pointing to the row to be filled in. * @param id the ID of the item to add. */ virtual void - addItem(Gtk::TreeIter iter, - Ptr<const UniqueId>::Ref id) throw (); + addItem (Gtk::TreeIter iter, + Ptr<const UniqueId>::Ref id) throw (); public: diff --git a/campcaster/src/products/gLiveSupport/var/glade/LiveModeWindow.glade b/campcaster/src/products/gLiveSupport/var/glade/LiveModeWindow.glade index 7e970113f..f919a89b3 100644 --- a/campcaster/src/products/gLiveSupport/var/glade/LiveModeWindow.glade +++ b/campcaster/src/products/gLiveSupport/var/glade/LiveModeWindow.glade @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8" standalone="no"?> <!DOCTYPE glade-interface SYSTEM "glade-2.0.dtd"> -<!--Generated with glade3 3.2.0 on Tue Aug 21 16:11:34 2007 by fgerlits@desktop--> +<!--Generated with glade3 3.2.0 on Tue Oct 23 17:22:43 2007 by fgerlits@desktop--> <glade-interface> <widget class="GtkWindow" id="mainWindow1"> <property name="width_request">400</property> @@ -128,6 +128,7 @@ <property name="headers_visible">False</property> <property name="reorderable">True</property> <property name="rules_hint">True</property> + <property name="search_column">1</property> </widget> </child> </widget>