diff --git a/gui/griffon-app/views/com/muwire/gui/MainFrameView.groovy b/gui/griffon-app/views/com/muwire/gui/MainFrameView.groovy index 8b7dae83..b936ccca 100644 --- a/gui/griffon-app/views/com/muwire/gui/MainFrameView.groovy +++ b/gui/griffon-app/views/com/muwire/gui/MainFrameView.groovy @@ -131,18 +131,7 @@ class MainFrameView { tableModel(list: model.downloads) { closureColumn(header: "Name", preferredWidth: 300, type: String, read : {row -> row.downloader.file.getName()}) closureColumn(header: "Status", preferredWidth: 50, type: String, read : {row -> row.downloader.getCurrentState().toString()}) - closureColumn(header: "Progress", preferredWidth: 70, type: String, read: { row -> - int pieces = row.downloader.nPieces - int done = row.downloader.donePieces() - int percent = -1 - if ( row.downloader.nPieces != 0 ) { - percent = (done * 100) / pieces - } - long size = row.downloader.pieceSize - size *= pieces - String totalSize = DataHelper.formatSize2Decimal(size, false) + "B" - String.format("%02d", percent) + "% of ${totalSize} ($done/$pieces pcs)".toString() - }) + closureColumn(header: "Progress", preferredWidth: 70, type: Downloader, read: { row -> row.downloader }) closureColumn(header: "Sources", preferredWidth : 10, type: Integer, read : {row -> row.downloader.activeWorkers()}) closureColumn(header: "Speed", preferredWidth: 50, type:String, read :{row -> DataHelper.formatSize2Decimal(row.downloader.speed(), false) + "B/sec" @@ -418,9 +407,11 @@ class MainFrameView { def centerRenderer = new DefaultTableCellRenderer() centerRenderer.setHorizontalAlignment(JLabel.CENTER) downloadsTable.setDefaultRenderer(Integer.class, centerRenderer) + downloadsTable.setDefaultRenderer(Downloader.class, new DownloadProgressRenderer()) downloadsTable.rowSorter.addRowSorterListener({evt -> lastDownloadSortEvent = evt}) downloadsTable.rowSorter.setSortsOnUpdates(true) + downloadsTable.rowSorter.setComparator(2, new DownloaderComparator()) downloadsTable.addMouseListener(new MouseAdapter() { @Override diff --git a/gui/src/main/groovy/com/muwire/gui/DownloadProgressRenderer.groovy b/gui/src/main/groovy/com/muwire/gui/DownloadProgressRenderer.groovy new file mode 100644 index 00000000..b9e5fdb5 --- /dev/null +++ b/gui/src/main/groovy/com/muwire/gui/DownloadProgressRenderer.groovy @@ -0,0 +1,40 @@ +package com.muwire.gui + +import javax.swing.JComponent +import javax.swing.JLabel +import javax.swing.JTable +import javax.swing.table.DefaultTableCellRenderer + +import com.muwire.core.download.Downloader + +import net.i2p.data.DataHelper + +class DownloadProgressRenderer extends DefaultTableCellRenderer { + DownloadProgressRenderer() { + setHorizontalAlignment(JLabel.CENTER) + } + + @Override + JComponent getTableCellRendererComponent(JTable table, Object value, + boolean isSelected, boolean hasFocus, int row, int column) { + Downloader d = (Downloader) value + int pieces = d.nPieces + int done = d.donePieces() + int percent = -1 + if (pieces != 0) + percent = (int)(done * 100.0 / pieces) + long size = d.pieceSize * pieces + String totalSize = DataHelper.formatSize2Decimal(size, false) + "B" + setText(String.format("%2d", percent) + "% of ${totalSize} ($done/$pieces pcs)".toString()) + + if (isSelected) { + setForeground(table.getSelectionForeground()) + setBackground(table.getSelectionBackground()) + } else { + setForeground(table.getForeground()) + setBackground(table.getBackground()) + } + this + } + +} diff --git a/gui/src/main/groovy/com/muwire/gui/DownloaderComparator.groovy b/gui/src/main/groovy/com/muwire/gui/DownloaderComparator.groovy new file mode 100644 index 00000000..278a0d57 --- /dev/null +++ b/gui/src/main/groovy/com/muwire/gui/DownloaderComparator.groovy @@ -0,0 +1,13 @@ +package com.muwire.gui + +import com.muwire.core.download.Downloader + +class DownloaderComparator implements Comparator{ + + @Override + public int compare(Downloader o1, Downloader o2) { + double d1 = o1.donePieces() * 1.0 / o1.nPieces + double d2 = o2.donePieces() * 1.0 / o2.nPieces + return Double.compare(d1, d2); + } +}