@Override public void mouseClicked(MouseEvent e) { if (e.getSource() == filesTable) { if (e.getClickCount() == 2 && e.getModifiersEx() == 0) { // the modifiers test is to prevent absurd clicks like "b1, b3" registering as // double-clicks. if (filesTable.getSelectedRow() >= 0) { FileSystemEntry clicked = fs.getEntryForRow(filesTable.convertRowIndexToModel(filesTable.getSelectedRow())); if (clicked.isDirectory()) { // Go into the directory: TreePath pathToClicked = clicked.getPath(); browseTree.setSelectionPath(pathToClicked); browseTree.scrollPathToVisible(pathToClicked); browseTree.setSelectionPath( pathToClicked); // the first one may have expanded the node and changed the // selection, so ensure the node we want is actually selected. } else { downloadToDirectory(Arrays.asList(new FileSystemEntry[] {clicked}), null, null); frame.setStatusHint( new StatusHint( frame.gui.util.getImage("tick"), clicked.getName() + " queued for download!")); } } } } if (e.getSource() == browseTree) { // remove a search if they clicked on the searches icon. if (lastOnIcon && lastInspectedFSE instanceof FileSystemEntry && ((FileSystemEntry) lastInspectedFSE).isSearch()) { fs.removeSearch((FileSystemEntry) lastInspectedFSE); lastInspectedFSE = null; // doesn't exist anymore. lastOnIcon = false; mouseMoved( new MouseEvent( browseTree, 0, System.currentTimeMillis(), 0, e.getX(), e.getY(), 0, false)); // simulate the mouse moving to update status bar and icons. } // remove all searches if the clicked the searchroot: if (lastInspectedFSE == fs.getSearchRoot()) { fs.removeAllSearches(); } } }
@Override public Component getTableCellRendererComponent( JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); FileSystemEntry fse = fs.getEntryForRow(filesTable.convertRowIndexToModel(row)); if (fse.isLoadingNode) { setIcon(spinner.getSpinner()); } else { if (fse.isDirectory()) { if (fse.isSearch()) { setIcon(search); } else { setIcon(dir); } } else { setIcon(frame.gui.util.getIconForType(frame.gui.util.guessType(value.toString()))); } } return this; }
void setTableStatusHint() { if (browseTree.getSelectionPath() == null) { return; } if (!(browseTree.getSelectionPath().getLastPathComponent() instanceof FileSystemEntry)) return; FileSystemEntry fse = ((FileSystemEntry) browseTree.getSelectionPath().getLastPathComponent()); int[] selected = filesTable.getSelectedRows(); if (selected == null || selected.length == 0) { if (fse.getFiles() != null) frame.setStatusHint( "Directories: " + fse.getChildCount() + ", Files: " + fse.getFiles().size() + ", Total size: " + Util.niceSize(fse.getSize())); } else { long size = 0; int dirs = 0; int files = 0; for (int i : selected) { FileSystemEntry current = fs.getEntryForRow(filesTable.convertRowIndexToModel(i)); size += current.getSize(); if (current.isDirectory()) dirs++; else files++; } frame.setStatusHint( "(selection) Directories: " + dirs + ", Files: " + files + ", Total size: " + Util.niceSize(size)); } }