Browse Source

fixes issue 2585; fixes issue 2584

tags/0.6.3m1rc1
Gregory Holmes 15 years ago
parent
commit
2931346d13
1 changed files with 29 additions and 17 deletions
  1. 29
    17
      src/com/dmdirc/addons/ui_swing/dialogs/error/ErrorListDialog.java

+ 29
- 17
src/com/dmdirc/addons/ui_swing/dialogs/error/ErrorListDialog.java View File

@@ -32,6 +32,7 @@ import java.awt.Dimension;
32 32
 import java.awt.event.ActionEvent;
33 33
 import java.awt.event.ActionListener;
34 34
 
35
+import java.util.concurrent.atomic.AtomicInteger;
35 36
 import javax.swing.JButton;
36 37
 import javax.swing.JPanel;
37 38
 import javax.swing.JScrollPane;
@@ -71,7 +72,7 @@ public final class ErrorListDialog extends StandardDialog implements
71 72
     /** Delete all button. */
72 73
     private JButton deleteAllButton;
73 74
     /** Selected row. */
74
-    private int selectedRow = -1;
75
+    private final AtomicInteger selectedRow = new AtomicInteger(-1);
75 76
     /** Row being deleted. */
76 77
     private boolean rowBeingDeleted = false;
77 78
 
@@ -91,7 +92,7 @@ public final class ErrorListDialog extends StandardDialog implements
91 92
         layoutComponents();
92 93
         initListeners();
93 94
 
94
-        selectedRow = table.getSelectedRow();
95
+        selectedRow.set(table.getSelectedRow());
95 96
 
96 97
         pack();
97 98
     }
@@ -184,11 +185,14 @@ public final class ErrorListDialog extends StandardDialog implements
184 185
                 deleteButton.setEnabled(false);
185 186
                 sendButton.setEnabled(false);
186 187
             }
187
-            if (rowBeingDeleted) {
188
-                table.getSelectionModel().setSelectionInterval(selectedRow, selectedRow);
189
-                rowBeingDeleted = false;
188
+            synchronized (selectedRow) {
189
+                if (rowBeingDeleted) {
190
+                    table.getSelectionModel().setSelectionInterval(selectedRow.
191
+                            get(), selectedRow.get());
192
+                    rowBeingDeleted = false;
193
+                }
194
+                selectedRow.set(localRow);
190 195
             }
191
-            selectedRow = localRow;
192 196
         }
193 197
     }
194 198
 
@@ -202,14 +206,16 @@ public final class ErrorListDialog extends StandardDialog implements
202 206
         if (e.getSource() == getCancelButton()) {
203 207
             setVisible(false);
204 208
         } else if (e.getSource() == deleteButton) {
205
-            synchronized (tableModel) {
209
+            synchronized (selectedRow) {
206 210
                 ErrorManager.getErrorManager().deleteError(tableModel.getError(
207
-                        table.getRowSorter().convertRowIndexToModel(selectedRow)));
211
+                        table.getRowSorter().convertRowIndexToModel(
212
+                        table.getSelectedRow())));
208 213
             }
209 214
         } else if (e.getSource() == sendButton) {
210
-            synchronized (tableModel) {
215
+            synchronized (selectedRow) {
211 216
                 ErrorManager.getErrorManager().sendError(tableModel.getError(
212
-                        table.getRowSorter().convertRowIndexToModel(selectedRow)));
217
+                        table.getRowSorter().convertRowIndexToModel(
218
+                        table.getSelectedRow())));
213 219
             }
214 220
         } else if (e.getSource() == deleteAllButton) {
215 221
             ErrorManager.getErrorManager().deleteAll();
@@ -225,16 +231,22 @@ public final class ErrorListDialog extends StandardDialog implements
225 231
     public void tableChanged(final TableModelEvent e) {
226 232
         switch (e.getType()) {
227 233
             case TableModelEvent.DELETE:
228
-                if (selectedRow >= tableModel.getRowCount()) {
229
-                    selectedRow = tableModel.getRowCount() - 1;
234
+                synchronized (selectedRow) {
235
+                    if (selectedRow.get() >= tableModel.getRowCount()) {
236
+                        selectedRow.set(tableModel.getRowCount() - 1);
237
+                    }
238
+                    table.getSelectionModel().setSelectionInterval(selectedRow.
239
+                            get(),
240
+                            selectedRow.get());
241
+                    rowBeingDeleted = true;
230 242
                 }
231
-                table.getSelectionModel().setSelectionInterval(selectedRow,
232
-                        selectedRow);
233
-                rowBeingDeleted = true;
234 243
                 break;
235 244
             case TableModelEvent.INSERT:
236
-                table.getSelectionModel().setSelectionInterval(selectedRow,
237
-                        selectedRow);
245
+                synchronized (selectedRow) {
246
+                    table.getSelectionModel().setSelectionInterval(selectedRow.
247
+                            get(),
248
+                            selectedRow.get());
249
+                }
238 250
                 break;
239 251
             case TableModelEvent.UPDATE:
240 252
                 final int errorRow = e.getFirstRow();

Loading…
Cancel
Save