improved queue
This commit is contained in:
parent
93abc7185c
commit
7143c36ca3
@ -71,6 +71,13 @@ public class FileOperationQueue {
|
||||
startNextTask();
|
||||
}
|
||||
|
||||
public void cancelAll() {
|
||||
for (QueuedTask task : tasks) {
|
||||
task.cancel();
|
||||
}
|
||||
notifyListeners();
|
||||
}
|
||||
|
||||
public void addListener(Consumer<List<QueuedTask>> listener) {
|
||||
listeners.add(listener);
|
||||
}
|
||||
|
||||
@ -6,7 +6,11 @@ import cz.kamma.kfmanager.service.FileOperationQueue.QueuedTask;
|
||||
import javax.swing.*;
|
||||
import javax.swing.table.AbstractTableModel;
|
||||
import javax.swing.table.DefaultTableCellRenderer;
|
||||
import javax.swing.table.TableCellEditor;
|
||||
import javax.swing.table.TableCellRenderer;
|
||||
import java.awt.*;
|
||||
import java.awt.event.ActionEvent;
|
||||
import java.awt.event.ActionListener;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@ -36,6 +40,12 @@ public class OperationQueueDialog extends JDialog {
|
||||
|
||||
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);
|
||||
add(scrollPane, BorderLayout.CENTER);
|
||||
|
||||
@ -43,9 +53,13 @@ public class OperationQueueDialog extends JDialog {
|
||||
JButton closeButton = new JButton("Close");
|
||||
closeButton.addActionListener(e -> setVisible(false));
|
||||
|
||||
JButton cancelAllButton = new JButton("Cancel All");
|
||||
cancelAllButton.addActionListener(e -> FileOperationQueue.getInstance().cancelAll());
|
||||
|
||||
JButton clearButton = new JButton("Clear Completed");
|
||||
clearButton.addActionListener(e -> FileOperationQueue.getInstance().clearCompleted());
|
||||
|
||||
buttonPanel.add(cancelAllButton);
|
||||
buttonPanel.add(clearButton);
|
||||
buttonPanel.add(closeButton);
|
||||
add(buttonPanel, BorderLayout.SOUTH);
|
||||
@ -60,7 +74,7 @@ public class OperationQueueDialog extends JDialog {
|
||||
|
||||
private class TaskTableModel extends AbstractTableModel {
|
||||
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) {
|
||||
this.tasks = tasks;
|
||||
@ -74,6 +88,11 @@ public class OperationQueueDialog extends JDialog {
|
||||
@Override
|
||||
public String getColumnName(int column) { return columns[column]; }
|
||||
|
||||
@Override
|
||||
public boolean isCellEditable(int rowIndex, int columnIndex) {
|
||||
return columnIndex == 4;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object getValueAt(int rowIndex, int columnIndex) {
|
||||
QueuedTask task = tasks.get(rowIndex);
|
||||
@ -82,11 +101,54 @@ public class OperationQueueDialog extends JDialog {
|
||||
case 1: return task.getStatus().toString();
|
||||
case 2: return task; // For progress renderer
|
||||
case 3: return task.getCurrentFile();
|
||||
case 4: return "X";
|
||||
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 final JProgressBar progressBar = new JProgressBar(0, 100);
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user