a new windowing system!
add: + CameraPanel ; To make life easier for coders + SwingIFrame ; Which is now our main UI component + VideoRecorder ; A helper Class for SwingIFrame to record cameras! changed: / SwingCCTVManager ; changes for the new UI Component deprecation: /-/ AutoGainProcessor ; cause it isnt needed anymore, back then this was needed cause we opened the webcams manually (color wise) --- rattatwinko
This commit is contained in:
@@ -31,22 +31,37 @@ public class SwingCCTVManager {
|
||||
private final JFrame frame;
|
||||
private final JTable deviceTable;
|
||||
private final DefaultTableModel tableModel;
|
||||
private final SwingIFrame IFrame;
|
||||
|
||||
public SwingCCTVManager() {
|
||||
frame = new JFrame("dashboard");
|
||||
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
|
||||
frame.setSize(1000, 600);
|
||||
|
||||
this.IFrame = new SwingIFrame();
|
||||
this.IFrame.show();
|
||||
|
||||
String[] columns = {"Status", "Device Name", "Type", "Resolution", "Address"};
|
||||
tableModel = new DefaultTableModel(columns, 0) {
|
||||
@Override public boolean isCellEditable(int r, int c) { return false; }
|
||||
@Override
|
||||
public boolean isCellEditable(int r, int c) {
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
deviceTable = new JTable(tableModel);
|
||||
|
||||
deviceTable.setRowSelectionAllowed(true);
|
||||
deviceTable.setFocusable(true);
|
||||
deviceTable.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
|
||||
|
||||
setupTableAppearance();
|
||||
|
||||
deviceTable.addMouseListener(new MouseAdapter() {
|
||||
@Override
|
||||
public void mousePressed(MouseEvent e) {
|
||||
deviceTable.requestFocusInWindow();
|
||||
|
||||
if (e.getClickCount() == 2 && deviceTable.getSelectedRow() != -1) {
|
||||
launchSelected();
|
||||
}
|
||||
@@ -74,29 +89,31 @@ public class SwingCCTVManager {
|
||||
}
|
||||
|
||||
private void setupTableAppearance() {
|
||||
deviceTable.getColumnModel().getColumn(0).setMaxWidth(80); // Status column
|
||||
deviceTable.getColumnModel().getColumn(0).setMaxWidth(80);
|
||||
deviceTable.setRowHeight(30);
|
||||
|
||||
// Custom Renderer for Status Colors
|
||||
deviceTable.getColumnModel().getColumn(0).setCellRenderer(new DefaultTableCellRenderer() {
|
||||
@Override
|
||||
public Component getTableCellRendererComponent(JTable t, Object v, boolean s, boolean f, int r, int c) {
|
||||
Component comp = super.getTableCellRendererComponent(t, v, s, f, r, c);
|
||||
if ("ONLINE".equals(v)) comp.setForeground(new Color(0, 150, 0));
|
||||
else comp.setForeground(Color.RED);
|
||||
setHorizontalAlignment(JLabel.CENTER);
|
||||
return comp;
|
||||
}
|
||||
});
|
||||
deviceTable.getColumnModel().getColumn(0)
|
||||
.setCellRenderer(new DefaultTableCellRenderer() {
|
||||
@Override
|
||||
public Component getTableCellRendererComponent(
|
||||
JTable t, Object v, boolean s, boolean f, int r, int c) {
|
||||
|
||||
Component comp = super.getTableCellRendererComponent(t, v, s, f, r, c);
|
||||
setHorizontalAlignment(JLabel.CENTER);
|
||||
comp.setForeground("ONLINE".equals(v)
|
||||
? new Color(0, 150, 0)
|
||||
: Color.RED);
|
||||
return comp;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void startAutoRefresh() {
|
||||
Timer autoRefreshTimer = new Timer(5000, e -> refreshTable());
|
||||
autoRefreshTimer.start();
|
||||
new Timer(5000, e -> refreshTable()).start();
|
||||
}
|
||||
|
||||
private void refreshTable() {
|
||||
int selectedRow = deviceTable.getSelectedRow();
|
||||
int[] selectedRows = deviceTable.getSelectedRows();
|
||||
|
||||
tableModel.setRowCount(0);
|
||||
List<Webcam> webcams = Webcam.getWebcams();
|
||||
@@ -114,14 +131,18 @@ public class SwingCCTVManager {
|
||||
});
|
||||
}
|
||||
|
||||
if (selectedRow != -1 && selectedRow < tableModel.getRowCount()) {
|
||||
deviceTable.setRowSelectionInterval(selectedRow, selectedRow);
|
||||
for (int r : selectedRows) {
|
||||
if (r < tableModel.getRowCount()) {
|
||||
deviceTable.addRowSelectionInterval(r, r);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void showContextMenu(MouseEvent e) {
|
||||
int row = deviceTable.rowAtPoint(e.getPoint());
|
||||
deviceTable.setRowSelectionInterval(row, row);
|
||||
if (row >= 0) {
|
||||
deviceTable.setRowSelectionInterval(row, row);
|
||||
}
|
||||
|
||||
JPopupMenu menu = new JPopupMenu();
|
||||
JMenuItem launch = new JMenuItem("Launch Live Stream");
|
||||
@@ -143,12 +164,16 @@ public class SwingCCTVManager {
|
||||
String name = (String) tableModel.getValueAt(row, 1);
|
||||
Webcam.getWebcams().stream()
|
||||
.filter(w -> w.getName().equals(name))
|
||||
.findFirst().ifPresent(selected -> new Thread(() -> new SwingCameraWindow(selected).open()).start());
|
||||
|
||||
.findFirst()
|
||||
.ifPresent(cam ->
|
||||
new Thread(() -> IFrame.addCameraInternalFrame(cam)).start()
|
||||
);
|
||||
}
|
||||
|
||||
private void deleteSelected() {
|
||||
int row = deviceTable.getSelectedRow();
|
||||
if (row == -1) return;
|
||||
|
||||
String name = (String) tableModel.getValueAt(row, 1);
|
||||
if (name.toLowerCase().contains("usb")) return;
|
||||
|
||||
@@ -160,11 +185,15 @@ public class SwingCCTVManager {
|
||||
private static void loadSavedCameras() {
|
||||
for (CameraConfig config : CameraSettings.load()) {
|
||||
try {
|
||||
IpCamDeviceRegistry.register(config.getName(), config.getUrl(), IpCamMode.PUSH);
|
||||
IpCamDeviceRegistry.register(
|
||||
config.getName(),
|
||||
config.getUrl(),
|
||||
IpCamMode.PUSH
|
||||
);
|
||||
} catch (MalformedURLException e) {
|
||||
JOptionPane.showMessageDialog(
|
||||
null,
|
||||
"Malformed URL\n"+e.getMessage(),
|
||||
"Malformed URL\n" + e.getMessage(),
|
||||
"Malformed URL",
|
||||
JOptionPane.ERROR_MESSAGE
|
||||
);
|
||||
@@ -176,10 +205,16 @@ public class SwingCCTVManager {
|
||||
JPanel p = new JPanel(new GridLayout(2, 2, 5, 5));
|
||||
JTextField n = new JTextField();
|
||||
JTextField u = new JTextField();
|
||||
p.add(new JLabel("Name:")); p.add(n);
|
||||
p.add(new JLabel("URL:")); p.add(u);
|
||||
|
||||
int result = JOptionPane.showConfirmDialog(frame, p, "Register IP Camera", JOptionPane.OK_CANCEL_OPTION);
|
||||
p.add(new JLabel("Name:"));
|
||||
p.add(n);
|
||||
p.add(new JLabel("URL:"));
|
||||
p.add(u);
|
||||
|
||||
int result = JOptionPane.showConfirmDialog(
|
||||
frame, p, "Register IP Camera", JOptionPane.OK_CANCEL_OPTION
|
||||
);
|
||||
|
||||
if (result == JOptionPane.OK_OPTION) {
|
||||
try {
|
||||
IpCamDeviceRegistry.register(n.getText(), u.getText(), IpCamMode.PUSH);
|
||||
@@ -199,4 +234,4 @@ public class SwingCCTVManager {
|
||||
public static void main(String[] args) {
|
||||
SwingUtilities.invokeLater(() -> new SwingCCTVManager().open());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user