35
35
private BeatBox.MediaKeyListener mkl;
36
36
public BeatBox.SearchSuggester search_suggester;
38
private HashMap<int, Device> welcome_screen_keys;
40
38
private bool queriedlastfm; // whether or not we have queried last fm for the current media info
41
39
private bool media_considered_played; // whether or not we have updated last played and added to already played list
42
40
private bool added_to_play_count; // whether or not we have added one to play count on playing media
50
48
private VBox verticalBox;
51
49
public Notebook mainViews { get; private set; }
52
private Granite.Widgets.Welcome welcomeScreen;
53
50
public DrawingArea videoArea { get; private set; }
54
51
public HPaned sourcesToMedias { get; private set; } //allows for draggable
55
52
public HPaned mediasToInfo { get; private set; } // media info pane
98
95
lm = new BeatBox.LibraryManager(settings, this, args);
101
welcome_screen_keys = new HashMap<int, Device>();
102
98
mkl = new MediaKeyListener(lm, this);
104
100
#if HAVE_INDICATE
123
119
this.lm.medias_removed.connect(medias_removed);
124
120
this.lm.media_played.connect(media_played);
125
121
this.lm.playback_stopped.connect(playback_stopped);
126
this.lm.device_manager.device_added.connect(device_added);
127
this.lm.device_manager.device_removed.connect(device_removed);
129
123
this.destroy.connect (on_quit);
180
174
contentBox = new VBox(false, 0);
181
175
mainViews = new Notebook ();
182
176
videoArea = new DrawingArea();
183
welcomeScreen = new Granite.Widgets.Welcome(_("Get Some Tunes"), _("BeatBox can't seem to find your music."));
185
178
sideTree = new SideTreeView(lm, this);
186
179
sideTreeScroll = new ScrolledWindow(null, null);
314
307
topControls.insert(searchFieldBin, -1);
315
308
topControls.insert(app.create_appmenu(settingsMenu), -1);
317
contentBox.pack_start(welcomeScreen, true, true, 0);
319
var music_folder_icon = Icons.MUSIC_FOLDER.render (IconSize.DIALOG, null);
320
welcomeScreen.append_with_pixbuf(music_folder_icon, _("Locate"), _("Change your music folder."));
322
310
// Hide notebook tabs and border
323
311
mainViews.show_tabs = false;
324
312
mainViews.show_border = false;
349
337
/* Connect events to functions */
350
welcomeScreen.activated.connect(welcomeScreenActivated);
351
338
previousButton.clicked.connect(previousClicked);
352
339
playButton.clicked.connect(playClicked);
353
340
nextButton.clicked.connect(nextClicked);
418
405
ViewWrapper view_wrapper;
420
if(hint != ViewWrapper.Hint.SIMILAR)
407
if(hint == ViewWrapper.Hint.MUSIC)
408
view_wrapper = new MusicViewWrapper(this, media, tvs, id);
409
else if(hint == ViewWrapper.Hint.PODCAST)
410
view_wrapper = new PodcastViewWrapper(this, media, tvs, id);
411
else if(hint == ViewWrapper.Hint.STATION)
412
view_wrapper = new StationViewWrapper(this, media, tvs, id);
413
else if(hint == ViewWrapper.Hint.SIMILAR)
414
view_wrapper = new SimilarViewWrapper(this, media, tvs, id);
421
416
view_wrapper = new ViewWrapper (this, media, tvs, id);
423
view_wrapper = new SimilarViewWrapper(this, media, tvs, id);
425
418
sideTree.add_item (view_wrapper, view_name);
591
584
* This is handled more carefully inside each ViewWrapper object.
593
586
public void update_sensitivities() {
594
// FIXME: TopDisplay's internal widgets and WelcomeScreen sensitivities shouldn't be set here
596
587
if(!initializationFinished)
599
590
bool folderSet = (lm.settings.getMusicFolder() != "");
600
591
bool haveMedias = lm.media_count() > 0;
601
bool haveSongs = lm.song_ids().size > 0;
602
592
bool doingOps = lm.doing_file_operations();
603
593
bool mediaActive = lm.media_active;
604
594
bool showMore = lm.settings.getMoreVisible();
606
596
bool showingMediaList = (get_current_view_wrapper () is ViewWrapper);
607
597
bool songsInList = showingMediaList ? (get_current_view_wrapper () as ViewWrapper).have_media : false;
608
bool showingMusicList = sideTree.convertToChild(sideTree.getSelectedIter()) == sideTree.library_music_iter;
609
bool showMainViews = (haveSongs || (haveMedias && !showingMusicList));
611
599
fileSetMusicFolder.set_sensitive(!doingOps);
612
600
fileImportMusic.set_sensitive(!doingOps && folderSet);
626
614
previousButton.set_sensitive(mediaActive || songsInList);
627
615
playButton.set_sensitive(mediaActive || songsInList);
628
616
nextButton.set_sensitive(mediaActive || songsInList);
630
mainViews.set_visible(true);
631
welcomeScreen.set_visible(false); // FIXME
633
welcomeScreen.set_item_sensitivity(0, !doingOps);
634
foreach(int key in welcome_screen_keys.keys)
635
welcomeScreen.set_item_sensitivity(key, !doingOps);
637
statusBar.set_visible(showMainViews && showingMediaList);
639
infoPanel.set_visible(showMainViews && showMore && mediaActive);
640
infoPanelChooser.set_visible(showMainViews && mediaActive);
618
infoPanel.set_visible(songsInList && showMore && mediaActive);
619
infoPanelChooser.set_visible(songsInList && mediaActive);
642
621
// hide playlists when media list is empty
643
622
sideTree.setVisibility(sideTree.playlists_iter, haveMedias);
1008
987
//now notify user
1010
if (Notify.is_initted ()) {
989
if (Notify.is_initted () && new_medias.size > 0) {
1011
990
notification.close();
1012
992
notification.update(_("Import Complete"), _("BeatBox has imported your library."), "beatbox");
1013
993
notification.set_image_from_pixbuf(Icons.BEATBOX.render (Gtk.IconSize.DIALOG));
1014
996
notification.set_timeout (Notify.EXPIRES_DEFAULT);
1015
notification.set_urgency (Notify.Urgency.NORMAL);
1016
notification.show();
1019
999
catch(GLib.Error err) {
1164
1144
statusBar.set_total_time (total_seconds);
1167
public void welcomeScreenActivated(int index) {
1169
if(!lm.doing_file_operations()) {
1171
var file_chooser = new FileChooserDialog (_("Choose Music Folder"), this,
1172
FileChooserAction.SELECT_FOLDER,
1173
Gtk.Stock.CANCEL, ResponseType.CANCEL,
1174
Gtk.Stock.OPEN, ResponseType.ACCEPT);
1175
file_chooser.set_local_only(true);
1176
if (file_chooser.run () == ResponseType.ACCEPT) {
1177
folder = file_chooser.get_filename();
1179
file_chooser.destroy ();
1181
if(folder != "" && (folder != settings.getMusicFolder() || lm.media_count() == 0)) {
1182
setMusicFolder(folder);
1187
if(lm.doing_file_operations())
1190
Device d = welcome_screen_keys.get(index);
1192
if(d.getContentType() == "cdrom") {
1193
sideTree.expandItem(sideTree.convertToFilter(sideTree.devices_iter), true);
1194
sideTree.setSelectedIter(sideTree.convertToFilter(sideTree.devices_cdrom_iter));
1195
sideTree.sideListSelectionChange();
1197
var to_transfer = new LinkedList<int>();
1198
foreach(int i in d.get_medias())
1201
d.transfer_to_library(to_transfer);
1204
// ask the user if they want to import medias from device that they don't have in their library (if any)
1205
if(lm.settings.getMusicFolder() != "") {
1206
var externals = new LinkedList<int>();
1207
foreach(var i in d.get_medias()) {
1208
if(lm.media_from_id(i).isTemporary)
1212
TransferFromDeviceDialog tfdd = new TransferFromDeviceDialog(this, d, externals);
1219
1147
void repeatChooserOptionChanged(int val) {
1221
1149
lm.set_repeat_mode(LibraryManager.Repeat.OFF);
1297
1225
dialog.destroy();
1300
/* device stuff for welcome screen */
1301
public void device_added(Device d) {
1302
// add option to import in welcome screen
1303
string secondary = (d.getContentType() == "cdrom") ? _("Import songs from audio CD") : _("Import media from device");
1304
int key = welcomeScreen.append_with_image( new Image.from_gicon(d.get_icon(), Gtk.IconSize.DIALOG), d.getDisplayName(), secondary);
1305
welcome_screen_keys.set(key, d);
1308
public void device_removed(Device d) {
1309
// remove option to import from welcome screen
1311
foreach(int i in welcome_screen_keys.keys) {
1312
if(welcome_screen_keys.get(i) == d) {
1319
welcome_screen_keys.unset(key);
1320
welcomeScreen.remove_item(key);