From ff9ce1d205d7f622fabd89a223d63962fa687505 Mon Sep 17 00:00:00 2001 From: 0xb00bface <0xboobface@gmail.com> Date: Sun, 12 Sep 2021 15:00:08 +0200 Subject: [PATCH] Add cell factory for resolution to render n/a and unknown values properly --- .../java/ctbrec/ui/tabs/RecordingsTab.java | 111 ++++++++---------- 1 file changed, 52 insertions(+), 59 deletions(-) diff --git a/client/src/main/java/ctbrec/ui/tabs/RecordingsTab.java b/client/src/main/java/ctbrec/ui/tabs/RecordingsTab.java index 9bbac023..f636d2ff 100644 --- a/client/src/main/java/ctbrec/ui/tabs/RecordingsTab.java +++ b/client/src/main/java/ctbrec/ui/tabs/RecordingsTab.java @@ -1,53 +1,16 @@ package ctbrec.ui.tabs; -import static ctbrec.Recording.State.*; -import static javafx.scene.control.ButtonType.*; - -import java.io.File; -import java.io.FileNotFoundException; -import java.io.IOException; -import java.net.URL; -import java.nio.file.NoSuchFileException; -import java.security.InvalidKeyException; -import java.security.NoSuchAlgorithmException; -import java.text.DecimalFormat; -import java.time.Instant; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.Objects; -import java.util.Optional; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; -import java.util.concurrent.TimeUnit; -import java.util.concurrent.locks.Lock; -import java.util.concurrent.locks.ReentrantLock; -import java.util.stream.Collectors; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import ctbrec.Config; -import ctbrec.GlobalThreadPool; -import ctbrec.Model; -import ctbrec.Recording; +import ctbrec.*; import ctbrec.Recording.State; -import ctbrec.RecordingDownload; -import ctbrec.StringUtil; import ctbrec.event.EventBusHolder; import ctbrec.event.RecordingStateChangedEvent; import ctbrec.io.UrlUtil; import ctbrec.recorder.ProgressListener; import ctbrec.recorder.Recorder; import ctbrec.recorder.RecordingPinnedException; +import ctbrec.recorder.download.StreamSource; import ctbrec.recorder.postprocessing.PostProcessingContext; -import ctbrec.ui.AutosizeAlert; -import ctbrec.ui.CamrecApplication; -import ctbrec.ui.DesktopIntegration; -import ctbrec.ui.FileDownload; -import ctbrec.ui.JavaFxRecording; -import ctbrec.ui.Player; -import ctbrec.ui.ShutdownListener; +import ctbrec.ui.*; import ctbrec.ui.action.PauseAction; import ctbrec.ui.action.PlayAction; import ctbrec.ui.action.StopRecordingAction; @@ -71,23 +34,8 @@ import javafx.geometry.Insets; import javafx.scene.Cursor; import javafx.scene.Node; import javafx.scene.control.Alert.AlertType; -import javafx.scene.control.ButtonType; -import javafx.scene.control.ContextMenu; -import javafx.scene.control.Label; -import javafx.scene.control.Menu; -import javafx.scene.control.MenuItem; -import javafx.scene.control.ProgressBar; -import javafx.scene.control.ScrollPane; -import javafx.scene.control.SelectionMode; -import javafx.scene.control.Tab; -import javafx.scene.control.TableCell; -import javafx.scene.control.TableColumn; -import javafx.scene.control.Tooltip; -import javafx.scene.input.ContextMenuEvent; -import javafx.scene.input.KeyCode; -import javafx.scene.input.KeyEvent; -import javafx.scene.input.MouseButton; -import javafx.scene.input.MouseEvent; +import javafx.scene.control.*; +import javafx.scene.input.*; import javafx.scene.layout.BorderPane; import javafx.scene.layout.FlowPane; import javafx.scene.layout.HBox; @@ -95,6 +43,29 @@ import javafx.scene.layout.StackPane; import javafx.scene.text.Font; import javafx.stage.FileChooser; import javafx.util.Duration; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.File; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.net.URL; +import java.nio.file.NoSuchFileException; +import java.security.InvalidKeyException; +import java.security.NoSuchAlgorithmException; +import java.text.DecimalFormat; +import java.time.Instant; +import java.util.*; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.locks.Lock; +import java.util.concurrent.locks.ReentrantLock; +import java.util.stream.Collectors; + +import static ctbrec.Recording.State.*; +import static javafx.scene.control.ButtonType.NO; +import static javafx.scene.control.ButtonType.YES; public class RecordingsTab extends Tab implements TabSelectionListener, ShutdownListener { private static final String ERROR_WHILE_DOWNLOADING_RECORDING = "Error while downloading recording"; @@ -172,12 +143,12 @@ public class RecordingsTab extends Tab implements TabSelectionListener, Shutdown size.setStyle("-fx-alignment: CENTER-RIGHT;"); size.setPrefWidth(100); size.setCellValueFactory(cdf -> cdf.getValue().getSizeProperty()); - size.setCellFactory(param -> createSizeCell()); + size.setCellFactory(tc -> createSizeCell()); TableColumn resolution = new TableColumn<>("Resolution"); resolution.setId("resolution"); - resolution.setStyle("-fx-alignment: CENTER-RIGHT;"); resolution.setPrefWidth(100); resolution.setCellValueFactory(cdf -> new SimpleIntegerProperty(cdf.getValue().getSelectedResolution())); + resolution.setCellFactory(tc -> createResolutionCell()); TableColumn notes = new TableColumn<>("Notes"); notes.setId("notes"); notes.setPrefWidth(400); @@ -246,6 +217,28 @@ public class RecordingsTab extends Tab implements TabSelectionListener, Shutdown }; } + private TableCell createResolutionCell() { + return new TableCell<>() { + @Override + protected void updateItem(Number resolution, boolean empty) { + if (empty || resolution == null) { + setText(null); + setStyle(null); + } else { + String text = String.valueOf(resolution); + if (resolution.intValue() <= 0) { + text = "n/a"; + } + if (resolution.intValue() == StreamSource.UNKNOWN) { + text = "unknown"; + } + setStyle("-fx-alignment: CENTER-RIGHT;"); + setText(text); + } + } + }; + } + private void onContextMenuRequested(ContextMenuEvent event) { List recordings = table.getSelectionModel().getSelectedItems(); if (recordings != null && !recordings.isEmpty()) {