use custom renderer and comparator for download progress
This commit is contained in:
@@ -131,18 +131,7 @@ class MainFrameView {
|
|||||||
tableModel(list: model.downloads) {
|
tableModel(list: model.downloads) {
|
||||||
closureColumn(header: "Name", preferredWidth: 300, type: String, read : {row -> row.downloader.file.getName()})
|
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: "Status", preferredWidth: 50, type: String, read : {row -> row.downloader.getCurrentState().toString()})
|
||||||
closureColumn(header: "Progress", preferredWidth: 70, type: String, read: { row ->
|
closureColumn(header: "Progress", preferredWidth: 70, type: Downloader, read: { row -> row.downloader })
|
||||||
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: "Sources", preferredWidth : 10, type: Integer, read : {row -> row.downloader.activeWorkers()})
|
closureColumn(header: "Sources", preferredWidth : 10, type: Integer, read : {row -> row.downloader.activeWorkers()})
|
||||||
closureColumn(header: "Speed", preferredWidth: 50, type:String, read :{row ->
|
closureColumn(header: "Speed", preferredWidth: 50, type:String, read :{row ->
|
||||||
DataHelper.formatSize2Decimal(row.downloader.speed(), false) + "B/sec"
|
DataHelper.formatSize2Decimal(row.downloader.speed(), false) + "B/sec"
|
||||||
@@ -418,9 +407,11 @@ class MainFrameView {
|
|||||||
def centerRenderer = new DefaultTableCellRenderer()
|
def centerRenderer = new DefaultTableCellRenderer()
|
||||||
centerRenderer.setHorizontalAlignment(JLabel.CENTER)
|
centerRenderer.setHorizontalAlignment(JLabel.CENTER)
|
||||||
downloadsTable.setDefaultRenderer(Integer.class, centerRenderer)
|
downloadsTable.setDefaultRenderer(Integer.class, centerRenderer)
|
||||||
|
downloadsTable.setDefaultRenderer(Downloader.class, new DownloadProgressRenderer())
|
||||||
|
|
||||||
downloadsTable.rowSorter.addRowSorterListener({evt -> lastDownloadSortEvent = evt})
|
downloadsTable.rowSorter.addRowSorterListener({evt -> lastDownloadSortEvent = evt})
|
||||||
downloadsTable.rowSorter.setSortsOnUpdates(true)
|
downloadsTable.rowSorter.setSortsOnUpdates(true)
|
||||||
|
downloadsTable.rowSorter.setComparator(2, new DownloaderComparator())
|
||||||
|
|
||||||
downloadsTable.addMouseListener(new MouseAdapter() {
|
downloadsTable.addMouseListener(new MouseAdapter() {
|
||||||
@Override
|
@Override
|
||||||
|
@@ -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
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@@ -0,0 +1,13 @@
|
|||||||
|
package com.muwire.gui
|
||||||
|
|
||||||
|
import com.muwire.core.download.Downloader
|
||||||
|
|
||||||
|
class DownloaderComparator implements Comparator<Downloader>{
|
||||||
|
|
||||||
|
@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);
|
||||||
|
}
|
||||||
|
}
|
Reference in New Issue
Block a user