@FXML void loadSelectedPlaylist() { Playlist p = (Playlist) playlistsView.getSelectionModel().getSelectedItem(); if (p == null) return; tracksView.setPlaceholder(offlinePlaceHolder); Platform.runLater( () -> { List<Track> tracks = p.getTracks(); tracksView.getItems().clear(); for (int i = tracks.size() - 1; i >= 0; i--) { tracksView.getItems().add(tracks.get(i)); } if (findTrack) { Platform.runLater( () -> { tracksView.getSelectionModel().select(currentTrack); tracksView.scrollTo(currentTrack); tracksView.requestFocus(); findTrack = false; }); } else { if (tracksView.getItems().size() > 0) { tracksView.scrollTo(0); } } }); }
void playRandom() { List<Track> tracks = tracksView.getItems(); Random random = new Random(); int size = tracks.size(); int r = random.nextInt(size - 1); tracksView.getSelectionModel().select(r); tracksView.scrollTo(tracksView.getSelectionModel().getSelectedIndex()); Track nextTrack = (Track) tracksView.getSelectionModel().getSelectedItem(); playTrack(nextTrack); }
void playNext() { List<Track> tracks = tracksView.getItems(); int selected = tracksView.getSelectionModel().getSelectedIndex(); int next = selected + 1; if (next >= tracks.size()) { next = 0; } tracksView.getSelectionModel().select(next); tracksView.scrollTo(tracksView.getSelectionModel().getSelectedIndex()); Track nextTrack = (Track) tracksView.getSelectionModel().getSelectedItem(); playTrack(nextTrack); }
private void hideTablesHeaders() { List<Pane> headers = Arrays.asList( (Pane) tracksView.lookup("TableHeaderRow"), (Pane) playlistsView.lookup("TableHeaderRow")); headers.forEach( header -> { header.setMaxHeight(0); header.setMinHeight(0); header.setPrefHeight(0); header.setVisible(false); }); }
void addToPlaylist(List<File> files, Playlist p) { if (interfaceDisabled) return; new Thread( () -> { setInterfaceDisabled(true); int total = files.size(); AtomicInteger current = new AtomicInteger(0); Cache.pushToPlaylist( files, p, (Track t) -> { Platform.runLater( () -> { infoLabel.setText( String.format( res.getString("processed"), current.incrementAndGet(), total, t.getTitle())); if (p == getSelectedPlaylist()) { tracksView.getItems().remove(t); tracksView.getItems().add(0, t); } }); }); setInterfaceDisabled(false); }) .start(); if (p == getSelectedPlaylist()) { Platform.runLater( () -> { loadSelectedPlaylist(); }); } }
@FXML void search() { searching = true; new Thread( () -> { List<Track> tracks = Cache.search(searchText.getText()); tracksView.setPlaceholder(searchPlaceholder); Platform.runLater( () -> { if (tracksView.getItems().size() > 0) { tracksView.scrollTo(0); } tracksView.getItems().clear(); tracksView.getItems().addAll(tracks.toArray()); }); }) .start(); }
void setupTracksContextMenu() { ContextMenu cm = tracksContextMenu; List<MenuItem> items = cm.getItems(); items.clear(); Playlist pl = getSelectedPlaylist(); if (pl == null) { items.add( menuItem( "-> " + res.getString("add_to"), () -> { menuAddToPlaylist(); })); if (rememberedPlaylist != null) { items.add( menuItem( "-> " + String.format( res.getString("add_to_featured"), rememberedPlaylist.getTitle()), () -> { Track t = getSelectedTrack(); if (t != null) { addToPlaylist(t, rememberedPlaylist); } })); } } else { items.add( menuItem( "(+) " + res.getString("add_files"), () -> { FileChooser fileChooser = new FileChooser(); fileChooser.setInitialDirectory(new File(System.getProperty("user.dir"))); fileChooser.setTitle(String.format(res.getString("add_files_to"), pl.getTitle())); fileChooser .getExtensionFilters() .addAll(new FileChooser.ExtensionFilter("MP3", "*.mp3")); List<File> files = fileChooser.showOpenMultipleDialog(null); if (files != null) { addToPlaylist(files, pl); } })); items.add( menuItem( "(+) " + res.getString("add_folder_recursively"), () -> { DirectoryChooser dirChooser = new DirectoryChooser(); dirChooser.setTitle(String.format(res.getString("add_folder_to"), pl.getTitle())); dirChooser.setInitialDirectory(new File(System.getProperty("user.dir"))); File dir = dirChooser.showDialog(null); if (dir == null) return; Collection<File> files = FileUtils.listFiles(dir, new String[] {"mp3"}, true); addToPlaylist(new ArrayList(files), pl); })); items.add(new SeparatorMenuItem()); if (rememberedPlaylist != null) items.add( menuItem( "-> " + String.format( res.getString("add_to_featured"), rememberedPlaylist.getTitle()), () -> { Track t = getSelectedTrack(); if (t != null) addToPlaylist(t, rememberedPlaylist); })); items.add( menuItem( "-> " + res.getString("add_to"), () -> { menuAddToPlaylist(); })); items.add(new SeparatorMenuItem()); items.add( menuItem( "(...) " + res.getString("rename_track"), () -> { renameTrack(); })); items.add(new SeparatorMenuItem()); items.add( menuItem( "(-) " + res.getString("delete_track") + pl.getTitle(), () -> { deleteTrackFromPlaylist(); })); items.add( menuItem( "(-) " + res.getString("delete_dead_items"), () -> { Track t = getSelectedTrack(); if (t == null) { return; } deleteDeadFromOfflinePlaylist(pl); })); } }