Add cell factory for resolution to render n/a and unknown values properly

This commit is contained in:
0xb00bface 2021-09-12 15:00:08 +02:00
parent e8f653bcdd
commit ff9ce1d205
1 changed files with 52 additions and 59 deletions

View File

@ -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<JavaFxRecording, Number> 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<JavaFxRecording, String> notes = new TableColumn<>("Notes");
notes.setId("notes");
notes.setPrefWidth(400);
@ -246,6 +217,28 @@ public class RecordingsTab extends Tab implements TabSelectionListener, Shutdown
};
}
private TableCell<JavaFxRecording, Number> 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<JavaFxRecording> recordings = table.getSelectionModel().getSelectedItems();
if (recordings != null && !recordings.isEmpty()) {