#26 Fix sorting of sizeColumn

change rowmodel.size to long instead of preformatting bytes in model add
cellfactory to format strings
master
Wolf Posdorfer 2019-10-06 20:49:41 +02:00
parent 8645eac0c7
commit abb0be6620
2 changed files with 26 additions and 9 deletions

View File

@ -9,19 +9,14 @@ public class NSLRowModel {
private String status;
private File nspFile;
private String nspFileName;
private String nspFileSize;
private long nspFileSize;
private boolean markForUpload;
NSLRowModel(File nspFile, boolean checkBoxValue){
this.nspFile = nspFile;
this.markForUpload = checkBoxValue;
this.nspFileName = nspFile.getName();
if (nspFile.length()/1024.0/1024.0/1024.0 > 1)
this.nspFileSize = String.format("%.2f", nspFile.length()/1024.0/1024.0/1024.0)+" GB";
else if (nspFile.length()/1024.0/1024.0 > 1)
this.nspFileSize = String.format("%.2f", nspFile.length()/1024.0/1024.0)+" MB";
else
this.nspFileSize = String.format("%.2f", nspFile.length()/1024.0)+" kB";
this.nspFileSize = nspFile.length();
this.status = "";
}
// Model methods start
@ -31,7 +26,9 @@ public class NSLRowModel {
public String getNspFileName(){
return nspFileName;
}
public String getNspFileSize() { return nspFileSize; }
public long getNspFileSize() {
return nspFileSize;
}
public boolean isMarkForUpload() {
return markForUpload;
}

View File

@ -53,7 +53,7 @@ public class NSTableViewController implements Initializable {
TableColumn<NSLRowModel, String> statusColumn = new TableColumn<>(resourceBundle.getString("tab1_table_Lbl_Status"));
TableColumn<NSLRowModel, String> fileNameColumn = new TableColumn<>(resourceBundle.getString("tab1_table_Lbl_FileName"));
TableColumn<NSLRowModel, String> fileSizeColumn = new TableColumn<>(resourceBundle.getString("tab1_table_Lbl_Size"));
TableColumn<NSLRowModel, Long> fileSizeColumn = new TableColumn<>(resourceBundle.getString("tab1_table_Lbl_Size"));
TableColumn<NSLRowModel, Boolean> uploadColumn = new TableColumn<>(resourceBundle.getString("tab1_table_Lbl_Upload"));
statusColumn.setEditable(false);
@ -93,6 +93,16 @@ public class NSTableViewController implements Initializable {
});
uploadColumn.setCellFactory(paramFeatures -> new CheckBoxTableCell<>());
fileSizeColumn.setCellFactory(col -> new TableCell<NSLRowModel, Long>() {
@Override
protected void updateItem(Long length, boolean empty) {
if (length == null || empty) {
setText("");
} else {
setText(formatByteSize(length));
}
}
});
table.setRowFactory( // this shit is made to implement context menu. It's such a pain..
nslRowModelTableView -> {
final TableRow<NSLRowModel> row = new TableRow<>();
@ -208,5 +218,15 @@ public class NSTableViewController implements Initializable {
rowsObsLst.removeIf(current -> ! current.getNspFileName().toLowerCase().endsWith("nsp"));
table.refresh();
}
private String formatByteSize(long length) {
final String[] unitNames = { "bytes", "KiB", "MiB", "GiB", "TiB"};
int i;
for (i = 0; length > 1024 && i < unitNames.length - 1; i++) {
length = length / 1024;
}
return String.format("%,d %s", length, unitNames[i]);
}
}