forked from j62/ctbrec
Save and restore table states
Save and the restore the table state (sorting and column widths) for the recorded models and the recordings tables
This commit is contained in:
parent
faf6240b45
commit
b869c4a82c
|
@ -6,6 +6,8 @@
|
|||
* Added setting to define the tab the application opens on start
|
||||
* Double-click starts playback of recordings
|
||||
* Refresh of thumbnails can be disabled
|
||||
* Changed settings are saved immediately (including changes of the
|
||||
list of recorded models)
|
||||
|
||||
1.10.0
|
||||
========================
|
||||
|
|
|
@ -155,6 +155,8 @@ public class CamrecApplication extends Application {
|
|||
new Thread() {
|
||||
@Override
|
||||
public void run() {
|
||||
modelsTab.saveState();
|
||||
recordingsTab.saveState();
|
||||
settingsTab.saveConfig();
|
||||
recorder.shutdown();
|
||||
for (Site site : sites) {
|
||||
|
|
|
@ -20,8 +20,10 @@ import java.util.stream.Collectors;
|
|||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import ctbrec.Config;
|
||||
import ctbrec.Model;
|
||||
import ctbrec.Recording;
|
||||
import ctbrec.StringUtil;
|
||||
import ctbrec.recorder.Recorder;
|
||||
import ctbrec.sites.Site;
|
||||
import ctbrec.ui.controls.AutoFillTextField;
|
||||
|
@ -42,6 +44,7 @@ import javafx.scene.control.MenuItem;
|
|||
import javafx.scene.control.ScrollPane;
|
||||
import javafx.scene.control.Tab;
|
||||
import javafx.scene.control.TableColumn;
|
||||
import javafx.scene.control.TableColumn.SortType;
|
||||
import javafx.scene.control.TableView;
|
||||
import javafx.scene.control.Tooltip;
|
||||
import javafx.scene.control.cell.CheckBoxTableCell;
|
||||
|
@ -135,6 +138,16 @@ public class RecordedModelsTab extends Tab implements TabSelectionListener {
|
|||
stopAction();
|
||||
}
|
||||
});
|
||||
table.addEventFilter(KeyEvent.KEY_PRESSED, event -> {
|
||||
if(event.getCode() == KeyCode.S) {
|
||||
for (TableColumn<JavaFxModel, ?> col : table.getSortOrder()) {
|
||||
System.out.println(col.getText());
|
||||
System.out.println(col.getSortType());
|
||||
System.out.println(col.getComparator());
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
scrollPane.setContent(table);
|
||||
|
||||
HBox addModelBox = new HBox(5);
|
||||
|
@ -156,6 +169,8 @@ public class RecordedModelsTab extends Tab implements TabSelectionListener {
|
|||
root.setTop(addModelBox);
|
||||
root.setCenter(scrollPane);
|
||||
setContent(root);
|
||||
|
||||
restoreState();
|
||||
}
|
||||
|
||||
private void addModel(ActionEvent e) {
|
||||
|
@ -223,6 +238,8 @@ public class RecordedModelsTab extends Tab implements TabSelectionListener {
|
|||
iterator.remove();
|
||||
}
|
||||
}
|
||||
|
||||
table.sort();
|
||||
});
|
||||
updateService.setOnFailed((event) -> {
|
||||
LOG.info("Couldn't get list of models from recorder", event.getSource().getException());
|
||||
|
@ -464,5 +481,39 @@ public class RecordedModelsTab extends Tab implements TabSelectionListener {
|
|||
}
|
||||
}.start();
|
||||
}
|
||||
}
|
||||
|
||||
public void saveState() {
|
||||
if(!table.getSortOrder().isEmpty()) {
|
||||
TableColumn<JavaFxModel, ?> col = table.getSortOrder().get(0);
|
||||
Config.getInstance().getSettings().recordedModelsSortColumn = col.getText();
|
||||
Config.getInstance().getSettings().recordedModelsSortType = col.getSortType().toString();
|
||||
}
|
||||
double[] columnWidths = new double[table.getColumns().size()];
|
||||
for (int i = 0; i < columnWidths.length; i++) {
|
||||
columnWidths[i] = table.getColumns().get(i).getWidth();
|
||||
}
|
||||
Config.getInstance().getSettings().recordedModelsColumnWidths = columnWidths;
|
||||
};
|
||||
|
||||
private void restoreState() {
|
||||
String sortCol = Config.getInstance().getSettings().recordedModelsSortColumn;
|
||||
if(StringUtil.isNotBlank(sortCol)) {
|
||||
for (TableColumn<JavaFxModel, ?> col : table.getColumns()) {
|
||||
if(Objects.equals(sortCol, col.getText())) {
|
||||
col.setSortType(SortType.valueOf(Config.getInstance().getSettings().recordedModelsSortType));
|
||||
table.getSortOrder().clear();
|
||||
table.getSortOrder().add(col);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
double[] columnWidths = Config.getInstance().getSettings().recordedModelsColumnWidths;
|
||||
if(columnWidths != null && columnWidths.length == table.getColumns().size()) {
|
||||
for (int i = 0; i < columnWidths.length; i++) {
|
||||
table.getColumns().get(i).setPrefWidth(columnWidths[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -16,6 +16,7 @@ import java.time.format.FormatStyle;
|
|||
import java.util.ArrayList;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.util.concurrent.ExecutorService;
|
||||
import java.util.concurrent.Executors;
|
||||
import java.util.concurrent.ThreadFactory;
|
||||
|
@ -30,6 +31,7 @@ import com.iheartradio.m3u8.PlaylistException;
|
|||
import ctbrec.Config;
|
||||
import ctbrec.Recording;
|
||||
import ctbrec.Recording.STATUS;
|
||||
import ctbrec.StringUtil;
|
||||
import ctbrec.recorder.Recorder;
|
||||
import ctbrec.recorder.download.MergedHlsDownload;
|
||||
import ctbrec.sites.Site;
|
||||
|
@ -50,6 +52,7 @@ import javafx.scene.control.ScrollPane;
|
|||
import javafx.scene.control.Tab;
|
||||
import javafx.scene.control.TableCell;
|
||||
import javafx.scene.control.TableColumn;
|
||||
import javafx.scene.control.TableColumn.SortType;
|
||||
import javafx.scene.control.TableView;
|
||||
import javafx.scene.control.cell.PropertyValueFactory;
|
||||
import javafx.scene.input.ContextMenuEvent;
|
||||
|
@ -180,6 +183,8 @@ public class RecordingsTab extends Tab implements TabSelectionListener {
|
|||
root.setPadding(new Insets(5));
|
||||
root.setCenter(scrollPane);
|
||||
setContent(root);
|
||||
|
||||
restoreState();
|
||||
}
|
||||
|
||||
void initializeUpdateService() {
|
||||
|
@ -537,4 +542,38 @@ public class RecordingsTab extends Tab implements TabSelectionListener {
|
|||
table.setCursor(Cursor.DEFAULT);
|
||||
}
|
||||
}
|
||||
|
||||
public void saveState() {
|
||||
if(!table.getSortOrder().isEmpty()) {
|
||||
TableColumn<JavaFxRecording, ?> col = table.getSortOrder().get(0);
|
||||
Config.getInstance().getSettings().recordingsSortColumn = col.getText();
|
||||
Config.getInstance().getSettings().recordingsSortType = col.getSortType().toString();
|
||||
}
|
||||
double[] columnWidths = new double[table.getColumns().size()];
|
||||
for (int i = 0; i < columnWidths.length; i++) {
|
||||
columnWidths[i] = table.getColumns().get(i).getWidth();
|
||||
}
|
||||
Config.getInstance().getSettings().recordingsColumnWidths = columnWidths;
|
||||
};
|
||||
|
||||
private void restoreState() {
|
||||
String sortCol = Config.getInstance().getSettings().recordingsSortColumn;
|
||||
if(StringUtil.isNotBlank(sortCol)) {
|
||||
for (TableColumn<JavaFxRecording, ?> col : table.getColumns()) {
|
||||
if(Objects.equals(sortCol, col.getText())) {
|
||||
col.setSortType(SortType.valueOf(Config.getInstance().getSettings().recordingsSortType));
|
||||
table.getSortOrder().clear();
|
||||
table.getSortOrder().add(col);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
double[] columnWidths = Config.getInstance().getSettings().recordingsColumnWidths;
|
||||
if(columnWidths != null && columnWidths.length == table.getColumns().size()) {
|
||||
for (int i = 0; i < columnWidths.length; i++) {
|
||||
table.getColumns().get(i).setPrefWidth(columnWidths[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -669,7 +669,9 @@ public class SettingsTab extends Tab implements TabSelectionListener {
|
|||
}
|
||||
|
||||
public void saveConfig() {
|
||||
proxySettingsPane.saveConfig();
|
||||
if(proxySettingsPane != null) {
|
||||
proxySettingsPane.saveConfig();
|
||||
}
|
||||
try {
|
||||
Config.getInstance().save();
|
||||
} catch (IOException e) {
|
||||
|
|
|
@ -75,4 +75,10 @@ public class Settings {
|
|||
public String colorBase = "#FFFFFF";
|
||||
public String colorAccent = "#FFFFFF";
|
||||
public int onlineCheckIntervalInSecs = 60;
|
||||
public String recordedModelsSortColumn = "";
|
||||
public String recordedModelsSortType = "";
|
||||
public double[] recordedModelsColumnWidths = new double[0];
|
||||
public String recordingsSortColumn = "";
|
||||
public String recordingsSortType = "";
|
||||
public double[] recordingsColumnWidths = new double[0];
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue