improved queue
This commit is contained in:
parent
93abc7185c
commit
7143c36ca3
@ -71,6 +71,13 @@ public class FileOperationQueue {
|
|||||||
startNextTask();
|
startNextTask();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void cancelAll() {
|
||||||
|
for (QueuedTask task : tasks) {
|
||||||
|
task.cancel();
|
||||||
|
}
|
||||||
|
notifyListeners();
|
||||||
|
}
|
||||||
|
|
||||||
public void addListener(Consumer<List<QueuedTask>> listener) {
|
public void addListener(Consumer<List<QueuedTask>> listener) {
|
||||||
listeners.add(listener);
|
listeners.add(listener);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -6,7 +6,11 @@ import cz.kamma.kfmanager.service.FileOperationQueue.QueuedTask;
|
|||||||
import javax.swing.*;
|
import javax.swing.*;
|
||||||
import javax.swing.table.AbstractTableModel;
|
import javax.swing.table.AbstractTableModel;
|
||||||
import javax.swing.table.DefaultTableCellRenderer;
|
import javax.swing.table.DefaultTableCellRenderer;
|
||||||
|
import javax.swing.table.TableCellEditor;
|
||||||
|
import javax.swing.table.TableCellRenderer;
|
||||||
import java.awt.*;
|
import java.awt.*;
|
||||||
|
import java.awt.event.ActionEvent;
|
||||||
|
import java.awt.event.ActionListener;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@ -36,6 +40,12 @@ public class OperationQueueDialog extends JDialog {
|
|||||||
|
|
||||||
table.getColumnModel().getColumn(2).setCellRenderer(new ProgressRenderer());
|
table.getColumnModel().getColumn(2).setCellRenderer(new ProgressRenderer());
|
||||||
|
|
||||||
|
ButtonRendererColumn buttonRenderer = new ButtonRendererColumn();
|
||||||
|
table.getColumnModel().getColumn(4).setCellRenderer(buttonRenderer);
|
||||||
|
table.getColumnModel().getColumn(4).setCellEditor(buttonRenderer);
|
||||||
|
table.getColumnModel().getColumn(4).setPreferredWidth(40);
|
||||||
|
table.getColumnModel().getColumn(4).setMaxWidth(50);
|
||||||
|
|
||||||
JScrollPane scrollPane = new JScrollPane(table);
|
JScrollPane scrollPane = new JScrollPane(table);
|
||||||
add(scrollPane, BorderLayout.CENTER);
|
add(scrollPane, BorderLayout.CENTER);
|
||||||
|
|
||||||
@ -43,9 +53,13 @@ public class OperationQueueDialog extends JDialog {
|
|||||||
JButton closeButton = new JButton("Close");
|
JButton closeButton = new JButton("Close");
|
||||||
closeButton.addActionListener(e -> setVisible(false));
|
closeButton.addActionListener(e -> setVisible(false));
|
||||||
|
|
||||||
|
JButton cancelAllButton = new JButton("Cancel All");
|
||||||
|
cancelAllButton.addActionListener(e -> FileOperationQueue.getInstance().cancelAll());
|
||||||
|
|
||||||
JButton clearButton = new JButton("Clear Completed");
|
JButton clearButton = new JButton("Clear Completed");
|
||||||
clearButton.addActionListener(e -> FileOperationQueue.getInstance().clearCompleted());
|
clearButton.addActionListener(e -> FileOperationQueue.getInstance().clearCompleted());
|
||||||
|
|
||||||
|
buttonPanel.add(cancelAllButton);
|
||||||
buttonPanel.add(clearButton);
|
buttonPanel.add(clearButton);
|
||||||
buttonPanel.add(closeButton);
|
buttonPanel.add(closeButton);
|
||||||
add(buttonPanel, BorderLayout.SOUTH);
|
add(buttonPanel, BorderLayout.SOUTH);
|
||||||
@ -60,7 +74,7 @@ public class OperationQueueDialog extends JDialog {
|
|||||||
|
|
||||||
private class TaskTableModel extends AbstractTableModel {
|
private class TaskTableModel extends AbstractTableModel {
|
||||||
private List<QueuedTask> tasks = new ArrayList<>();
|
private List<QueuedTask> tasks = new ArrayList<>();
|
||||||
private final String[] columns = {"Operation", "Status", "Progress", "Active File"};
|
private final String[] columns = {"Operation", "Status", "Progress", "Active File", "Action"};
|
||||||
|
|
||||||
public void setTasks(List<QueuedTask> tasks) {
|
public void setTasks(List<QueuedTask> tasks) {
|
||||||
this.tasks = tasks;
|
this.tasks = tasks;
|
||||||
@ -74,6 +88,11 @@ public class OperationQueueDialog extends JDialog {
|
|||||||
@Override
|
@Override
|
||||||
public String getColumnName(int column) { return columns[column]; }
|
public String getColumnName(int column) { return columns[column]; }
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isCellEditable(int rowIndex, int columnIndex) {
|
||||||
|
return columnIndex == 4;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Object getValueAt(int rowIndex, int columnIndex) {
|
public Object getValueAt(int rowIndex, int columnIndex) {
|
||||||
QueuedTask task = tasks.get(rowIndex);
|
QueuedTask task = tasks.get(rowIndex);
|
||||||
@ -82,11 +101,54 @@ public class OperationQueueDialog extends JDialog {
|
|||||||
case 1: return task.getStatus().toString();
|
case 1: return task.getStatus().toString();
|
||||||
case 2: return task; // For progress renderer
|
case 2: return task; // For progress renderer
|
||||||
case 3: return task.getCurrentFile();
|
case 3: return task.getCurrentFile();
|
||||||
|
case 4: return "X";
|
||||||
default: return null;
|
default: return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private class ButtonRendererColumn extends AbstractCellEditor implements TableCellRenderer, TableCellEditor, ActionListener {
|
||||||
|
private final JButton button;
|
||||||
|
private Object currentValue;
|
||||||
|
|
||||||
|
public ButtonRendererColumn() {
|
||||||
|
button = new JButton();
|
||||||
|
button.addActionListener(this);
|
||||||
|
button.setBorderPainted(false);
|
||||||
|
button.setFocusPainted(false);
|
||||||
|
button.setForeground(Color.RED);
|
||||||
|
button.setFont(button.getFont().deriveFont(Font.BOLD));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
|
||||||
|
button.setText(value == null ? "" : value.toString());
|
||||||
|
return button;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
|
||||||
|
currentValue = value;
|
||||||
|
button.setText(value == null ? "" : value.toString());
|
||||||
|
return button;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Object getCellEditorValue() {
|
||||||
|
return currentValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void actionPerformed(ActionEvent e) {
|
||||||
|
int row = table.convertRowIndexToModel(table.getEditingRow());
|
||||||
|
if (row != -1) {
|
||||||
|
QueuedTask task = model.tasks.get(row);
|
||||||
|
task.cancel();
|
||||||
|
stopCellEditing();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private class ProgressRenderer extends DefaultTableCellRenderer {
|
private class ProgressRenderer extends DefaultTableCellRenderer {
|
||||||
private final JProgressBar progressBar = new JProgressBar(0, 100);
|
private final JProgressBar progressBar = new JProgressBar(0, 100);
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user