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
|
* Added setting to define the tab the application opens on start
|
||||||
* Double-click starts playback of recordings
|
* Double-click starts playback of recordings
|
||||||
* Refresh of thumbnails can be disabled
|
* Refresh of thumbnails can be disabled
|
||||||
|
* Changed settings are saved immediately (including changes of the
|
||||||
|
list of recorded models)
|
||||||
|
|
||||||
1.10.0
|
1.10.0
|
||||||
========================
|
========================
|
||||||
|
|
|
@ -155,6 +155,8 @@ public class CamrecApplication extends Application {
|
||||||
new Thread() {
|
new Thread() {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
|
modelsTab.saveState();
|
||||||
|
recordingsTab.saveState();
|
||||||
settingsTab.saveConfig();
|
settingsTab.saveConfig();
|
||||||
recorder.shutdown();
|
recorder.shutdown();
|
||||||
for (Site site : sites) {
|
for (Site site : sites) {
|
||||||
|
|
|
@ -20,8 +20,10 @@ import java.util.stream.Collectors;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
import ctbrec.Config;
|
||||||
import ctbrec.Model;
|
import ctbrec.Model;
|
||||||
import ctbrec.Recording;
|
import ctbrec.Recording;
|
||||||
|
import ctbrec.StringUtil;
|
||||||
import ctbrec.recorder.Recorder;
|
import ctbrec.recorder.Recorder;
|
||||||
import ctbrec.sites.Site;
|
import ctbrec.sites.Site;
|
||||||
import ctbrec.ui.controls.AutoFillTextField;
|
import ctbrec.ui.controls.AutoFillTextField;
|
||||||
|
@ -42,6 +44,7 @@ import javafx.scene.control.MenuItem;
|
||||||
import javafx.scene.control.ScrollPane;
|
import javafx.scene.control.ScrollPane;
|
||||||
import javafx.scene.control.Tab;
|
import javafx.scene.control.Tab;
|
||||||
import javafx.scene.control.TableColumn;
|
import javafx.scene.control.TableColumn;
|
||||||
|
import javafx.scene.control.TableColumn.SortType;
|
||||||
import javafx.scene.control.TableView;
|
import javafx.scene.control.TableView;
|
||||||
import javafx.scene.control.Tooltip;
|
import javafx.scene.control.Tooltip;
|
||||||
import javafx.scene.control.cell.CheckBoxTableCell;
|
import javafx.scene.control.cell.CheckBoxTableCell;
|
||||||
|
@ -135,6 +138,16 @@ public class RecordedModelsTab extends Tab implements TabSelectionListener {
|
||||||
stopAction();
|
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);
|
scrollPane.setContent(table);
|
||||||
|
|
||||||
HBox addModelBox = new HBox(5);
|
HBox addModelBox = new HBox(5);
|
||||||
|
@ -156,6 +169,8 @@ public class RecordedModelsTab extends Tab implements TabSelectionListener {
|
||||||
root.setTop(addModelBox);
|
root.setTop(addModelBox);
|
||||||
root.setCenter(scrollPane);
|
root.setCenter(scrollPane);
|
||||||
setContent(root);
|
setContent(root);
|
||||||
|
|
||||||
|
restoreState();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void addModel(ActionEvent e) {
|
private void addModel(ActionEvent e) {
|
||||||
|
@ -223,6 +238,8 @@ public class RecordedModelsTab extends Tab implements TabSelectionListener {
|
||||||
iterator.remove();
|
iterator.remove();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
table.sort();
|
||||||
});
|
});
|
||||||
updateService.setOnFailed((event) -> {
|
updateService.setOnFailed((event) -> {
|
||||||
LOG.info("Couldn't get list of models from recorder", event.getSource().getException());
|
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();
|
}.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.ArrayList;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Objects;
|
||||||
import java.util.concurrent.ExecutorService;
|
import java.util.concurrent.ExecutorService;
|
||||||
import java.util.concurrent.Executors;
|
import java.util.concurrent.Executors;
|
||||||
import java.util.concurrent.ThreadFactory;
|
import java.util.concurrent.ThreadFactory;
|
||||||
|
@ -30,6 +31,7 @@ import com.iheartradio.m3u8.PlaylistException;
|
||||||
import ctbrec.Config;
|
import ctbrec.Config;
|
||||||
import ctbrec.Recording;
|
import ctbrec.Recording;
|
||||||
import ctbrec.Recording.STATUS;
|
import ctbrec.Recording.STATUS;
|
||||||
|
import ctbrec.StringUtil;
|
||||||
import ctbrec.recorder.Recorder;
|
import ctbrec.recorder.Recorder;
|
||||||
import ctbrec.recorder.download.MergedHlsDownload;
|
import ctbrec.recorder.download.MergedHlsDownload;
|
||||||
import ctbrec.sites.Site;
|
import ctbrec.sites.Site;
|
||||||
|
@ -50,6 +52,7 @@ import javafx.scene.control.ScrollPane;
|
||||||
import javafx.scene.control.Tab;
|
import javafx.scene.control.Tab;
|
||||||
import javafx.scene.control.TableCell;
|
import javafx.scene.control.TableCell;
|
||||||
import javafx.scene.control.TableColumn;
|
import javafx.scene.control.TableColumn;
|
||||||
|
import javafx.scene.control.TableColumn.SortType;
|
||||||
import javafx.scene.control.TableView;
|
import javafx.scene.control.TableView;
|
||||||
import javafx.scene.control.cell.PropertyValueFactory;
|
import javafx.scene.control.cell.PropertyValueFactory;
|
||||||
import javafx.scene.input.ContextMenuEvent;
|
import javafx.scene.input.ContextMenuEvent;
|
||||||
|
@ -180,6 +183,8 @@ public class RecordingsTab extends Tab implements TabSelectionListener {
|
||||||
root.setPadding(new Insets(5));
|
root.setPadding(new Insets(5));
|
||||||
root.setCenter(scrollPane);
|
root.setCenter(scrollPane);
|
||||||
setContent(root);
|
setContent(root);
|
||||||
|
|
||||||
|
restoreState();
|
||||||
}
|
}
|
||||||
|
|
||||||
void initializeUpdateService() {
|
void initializeUpdateService() {
|
||||||
|
@ -537,4 +542,38 @@ public class RecordingsTab extends Tab implements TabSelectionListener {
|
||||||
table.setCursor(Cursor.DEFAULT);
|
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() {
|
public void saveConfig() {
|
||||||
proxySettingsPane.saveConfig();
|
if(proxySettingsPane != null) {
|
||||||
|
proxySettingsPane.saveConfig();
|
||||||
|
}
|
||||||
try {
|
try {
|
||||||
Config.getInstance().save();
|
Config.getInstance().save();
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
|
|
|
@ -75,4 +75,10 @@ public class Settings {
|
||||||
public String colorBase = "#FFFFFF";
|
public String colorBase = "#FFFFFF";
|
||||||
public String colorAccent = "#FFFFFF";
|
public String colorAccent = "#FFFFFF";
|
||||||
public int onlineCheckIntervalInSecs = 60;
|
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