Changeset e33fc286262f
- Timestamp:
- 11/18/08 01:39:05 (7 weeks ago)
- Branch:
- trunk
- Files:
-
- 6 modified
-
com/view-albums.cc (modified) (2 diffs)
-
include/mpx/com/view-albums.hh (modified) (1 diff)
-
sources/radio/source-radio.cc (modified) (4 diffs)
-
sources/radio/source-radio.hh (modified) (1 diff)
-
sources/radio/streams-shoutcast.cc (modified) (6 diffs)
-
sources/radio/streams-shoutcast.hh (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
com/view-albums.cc
r969 r1016 395 395 AlbumsTreeStore->set_sort_column(0, Gtk::SORT_ASCENDING); 396 396 397 m_DiscDefault_Pixbuf = 398 Gdk::Pixbuf::create_from_file( 399 build_filename( 400 DATA_DIR, 401 build_filename("images","disc.png") 402 ) 403 )->scale_simple(90,90,Gdk::INTERP_BILINEAR); 404 405 m_DiscDefault = Util::cairo_image_surface_from_pixbuf(m_DiscDefault_Pixbuf->scale_simple(90,90,Gdk::INTERP_BILINEAR)); 397 m_DiscDefault_DND = IconTheme::get_default()->load_icon("gnome-dev-cdrom-audio", 128); 398 m_DiscDefault = Util::cairo_image_surface_from_pixbuf(m_DiscDefault_DND->scale_simple(90,90,Gdk::INTERP_BILINEAR)); 406 399 407 400 std::vector<TargetEntry> Entries; … … 565 558 } 566 559 567 drag_source_set_icon(m_DiscDefault_ Pixbuf->scale_simple(128,128,Gdk::INTERP_BILINEAR));560 drag_source_set_icon(m_DiscDefault_DND->scale_simple(128,128,Gdk::INTERP_BILINEAR)); 568 561 } 569 562 else -
include/mpx/com/view-albums.hh
r963 r1016 218 218 219 219 Cairo::RefPtr<Cairo::ImageSurface> m_DiscDefault; 220 Glib::RefPtr<Gdk::Pixbuf> m_DiscDefault_ Pixbuf;220 Glib::RefPtr<Gdk::Pixbuf> m_DiscDefault_DND; 221 221 Glib::RefPtr<Gdk::Pixbuf> m_Emblem[N_EMS]; 222 222 Glib::RefPtr<Gdk::Pixbuf> m_Stars[N_STARS]; -
sources/radio/source-radio.cc
r954 r1016 50 50 using namespace Gtk; 51 51 52 #define RADIO_ACTION_UPDATE_LIST "radio-action-update-list"53 54 52 namespace 55 53 { 56 enum Page 57 { 58 PAGE_SHOUTCAST, 59 PAGE_ICECAST, 60 }; 54 enum Page 55 { 56 PAGE_SHOUTCAST, 57 PAGE_ICECAST, 58 }; 59 60 const char RADIO_ACTION_UPDATE_XIPH[] = "radio-action-update-xiph"; 61 const char RADIO_ACTION_UPDATE_SHOUT[] = "radio-action-update-shout"; 62 61 63 62 64 char const * ui_source = … … 66 68 " <placeholder name='placeholder-source'>" 67 69 " <menu action='menu-source-radio'>" 68 " <menuitem action='radio-action-update-list'/>" 70 " <menuitem action='radio-action-update-xiph'/>" 71 " <menuitem action='radio-action-update-shout'/>" 69 72 " </menu>" 70 73 " </placeholder>" … … 163 166 164 167 m_ui_manager = ui_manager; 168 165 169 m_actions = ActionGroup::create ("Actions_Radio"); 166 m_actions->add (Action::create ("menu-source-radio", _("Radio"))); 167 168 m_actions->add (Action::create (RADIO_ACTION_UPDATE_LIST, 169 Gtk::Stock::REFRESH, 170 _("Update Icecast List")), 171 (sigc::mem_fun (*this, &Radio::on_update_list))); 170 171 m_actions->add (Action::create( 172 "menu-source-radio", 173 _("Radio") 174 )); 175 176 m_actions->add (Action::create( 177 RADIO_ACTION_UPDATE_XIPH, 178 Gtk::Stock::REFRESH, 179 _("Icecast: Update List")), 180 sigc::mem_fun( 181 *m_icecast_list, 182 &RadioDirectory::Icecast::refresh 183 )); 184 185 m_actions->add (Action::create( 186 RADIO_ACTION_UPDATE_SHOUT, 187 Gtk::Stock::REFRESH, 188 _("SHOUTcast: Update List")), 189 sigc::mem_fun( 190 *m_shoutcast_base, 191 &RadioDirectory::Shoutcast::refresh 192 )); 193 172 194 173 195 m_ui_manager->insert_action_group (m_actions); … … 209 231 m_Caps = Caps (m_Caps & ~C_CAN_PLAY); 210 232 Signals.Caps.emit (m_Caps); 211 }212 213 void214 Radio::on_update_list ()215 {216 if( m_notebook_radio->get_current_page() == 1)217 {218 m_notebook_icecast->set_current_page(1);219 m_icecast_list->refresh();220 }221 233 } 222 234 -
sources/radio/source-radio.hh
r839 r1016 94 94 95 95 void 96 on_update_list ();97 98 void99 96 on_set_notebook_page (); 100 97 -
sources/radio/streams-shoutcast.cc
r811 r1016 63 63 { 64 64 Data.Cache = g_hash_table_new_full (g_str_hash,g_str_equal,GDestroyNotify(g_free),GDestroyNotify(xmlFreeDoc)); 65 build_genre_list ();66 }67 68 Shoutcast::~Shoutcast ()69 {70 g_hash_table_destroy (Data.Cache);71 }72 73 SignalListUpdated&74 Shoutcast::signal_list_updated ()75 {76 return Signals.ListUpdated;77 }78 79 SignalStartStop&80 Shoutcast::signal_start ()81 {82 return Signals.Start;83 }84 85 SignalStartStop&86 Shoutcast::signal_stop ()87 {88 return Signals.Stop;89 }90 91 void92 Shoutcast::genre_cell_data_func (CellRenderer *cell,93 TreeModel::iterator const& iter)94 {95 CellRendererText *cell_text = reinterpret_cast<CellRendererText *>(cell);96 ustring genre = (*iter)[columns.name];97 98 if (g_hash_table_lookup (Data.Cache, genre.c_str()))99 cell_text->property_markup () = ((boost::format ("<b>%s</b>")) % std::string(Markup::escape_text(genre))).str();100 else101 cell_text->property_markup () = Markup::escape_text (genre);102 }103 104 void105 Shoutcast::build_genre_list ()106 {107 xmlDocPtr doc;108 xmlXPathObjectPtr xpathobj;109 xmlNodeSetPtr nv;110 111 MPX::URI u ((boost::format ("http://%s/%s") % SHOUTCAST_HOST % SHOUTCAST_PATH).str());112 Soup::RequestSyncRefP request = Soup::RequestSync::create (ustring (u));113 guint code = request->run ();114 if (code != 200) return;115 116 std::string data = request->get_data();117 doc = xmlParseMemory ((const char*)(data.c_str()), data.size());118 if (!doc) return;119 120 xpathobj = xpath_query (doc, BAD_CAST "//genre", NULL);121 nv = xpathobj->nodesetval;122 65 123 66 CellRendererText *cell; … … 126 69 get_column (0)->set_resizable (false); 127 70 get_column (0)->set_sizing (TREE_VIEW_COLUMN_AUTOSIZE); 128 129 71 Data.Genres = ListStore::create (columns); 72 set_model (Data.Genres); 73 get_column (0)->set_cell_data_func (*cell, sigc::mem_fun (this, &MPX::RadioDirectory::Shoutcast::Shoutcast::genre_cell_data_func)); 74 get_selection()->set_mode (SELECTION_BROWSE); 75 get_selection()->signal_changed().connect (sigc::mem_fun (this, &MPX::RadioDirectory::Shoutcast::Shoutcast::refresh_wrapper)); 76 77 refresh (); 78 } 79 80 Shoutcast::~Shoutcast () 81 { 82 g_hash_table_destroy (Data.Cache); 83 } 84 85 SignalListUpdated& 86 Shoutcast::signal_list_updated () 87 { 88 return Signals.ListUpdated; 89 } 90 91 SignalStartStop& 92 Shoutcast::signal_start () 93 { 94 return Signals.Start; 95 } 96 97 SignalStartStop& 98 Shoutcast::signal_stop () 99 { 100 return Signals.Stop; 101 } 102 103 void 104 Shoutcast::genre_cell_data_func (CellRenderer *cell, 105 TreeModel::iterator const& iter) 106 { 107 CellRendererText *cell_text = reinterpret_cast<CellRendererText *>(cell); 108 ustring genre = (*iter)[columns.name]; 109 110 if (g_hash_table_lookup (Data.Cache, genre.c_str())) 111 cell_text->property_markup () = ((boost::format ("<b>%s</b>")) % std::string(Markup::escape_text(genre))).str(); 112 else 113 cell_text->property_markup () = Markup::escape_text (genre); 114 } 115 116 void 117 Shoutcast::refresh () 118 { 119 xmlDocPtr doc; 120 xmlXPathObjectPtr xpathobj; 121 xmlNodeSetPtr nv; 122 123 MPX::URI u ((boost::format ("http://%s/%s") % SHOUTCAST_HOST % SHOUTCAST_PATH).str()); 124 Soup::RequestSyncRefP request = Soup::RequestSync::create (ustring (u)); 125 guint code = request->run (); 126 if (code != 200) return; 127 128 std::string data = request->get_data(); 129 doc = xmlParseMemory ((const char*)(data.c_str()), data.size()); 130 if (!doc) return; 131 132 xpathobj = xpath_query (doc, BAD_CAST "//genre", NULL); 133 nv = xpathobj->nodesetval; 134 135 Data.Genres->clear(); 130 136 (*Data.Genres->append())[columns.name] = "Top500"; 131 137 (*Data.Genres->append())[columns.name] = _(CUSTOM_SEARCH); … … 136 142 g_free (prop); 137 143 } 138 139 set_model (Data.Genres);140 141 get_column (0)->set_cell_data_func (*cell, sigc::mem_fun (this, &MPX::RadioDirectory::Shoutcast::Shoutcast::genre_cell_data_func));142 get_selection()->set_mode (SELECTION_BROWSE);143 get_selection()->signal_changed().connect (sigc::mem_fun (this, &MPX::RadioDirectory::Shoutcast::Shoutcast::refresh_wrapper));144 144 145 145 xmlXPathFreeObject (xpathobj); … … 159 159 { 160 160 Data.CurrentIter = iter; 161 re fresh (0); // FIXME: Use an enum here that says something161 rebuild_list(false); 162 162 } 163 163 else … … 263 263 264 264 void 265 Shoutcast::re fresh(bool force)265 Shoutcast::rebuild_list (bool force) 266 266 { 267 267 if (!get_selection()->count_selected_rows()) … … 299 299 if (g_hash_table_lookup (Data.Cache, genre.c_str())) 300 300 { 301 re fresh (1);301 rebuild_list(true); 302 302 } 303 303 } -
sources/radio/streams-shoutcast.hh
r997 r1016 72 72 virtual ~Shoutcast (); 73 73 74 void refresh (bool force = false);74 void refresh (); 75 75 76 76 SignalListUpdated& … … 92 92 93 93 void genre_cell_data_func (Gtk::CellRenderer *cell, Gtk::TreeIter const& iter); 94 void build_genre_list ();95 94 void refresh_wrapper (); 96 95 void refresh_parse_and_emit_updated (xmlDocPtr doc); 97 96 void refresh_callback (char const* data, guint size, guint code, std::string const& genre); 97 void rebuild_list (bool force = false); 98 98 99 99 struct DataT
