ActiveInstructionChangedListener moved to Machine and updated
[Mograsim.git] / plugins / net.mograsim.plugin.core / src / net / mograsim / plugin / tables / mi / RowHighlighter.java
index 17b2cd2..03cb37c 100644 (file)
@@ -1,19 +1,18 @@
 package net.mograsim.plugin.tables.mi;
 
 import java.util.Optional;
-import java.util.concurrent.atomic.AtomicBoolean;
 
-import org.eclipse.swt.widgets.Display;
 import org.eclipse.swt.widgets.Table;
 
 import net.mograsim.plugin.tables.LazyTableViewer;
+import net.mograsim.plugin.util.SingleSWTRequest;
 
 public class RowHighlighter
 {
-       private int highlighted = -1, toHighlight;
+       private int highlighted = -1;
        private LazyTableViewer viewer;
-       private AtomicBoolean waiting = new AtomicBoolean();
        private ColorProvider cProv;
+       private SingleSWTRequest requester = new SingleSWTRequest();
 
        public RowHighlighter(LazyTableViewer viewer, ColorProvider cProv)
        {
@@ -23,23 +22,11 @@ public class RowHighlighter
 
        public void highlight(int row)
        {
-               synchronized (waiting)
+               requester.request(() ->
                {
-                       toHighlight = row;
-                       if (!waiting.get())
-                       {
-                               waiting.set(true);
-                               Display.getDefault().asyncExec(() ->
-                               {
-                                       synchronized (waiting)
-                                       {
-                                               waiting.set(false);
-                                               if (!viewer.getTable().isDisposed())
-                                                       innerHighlight(toHighlight);
-                                       }
-                               });
-                       }
-               }
+                       if (!viewer.getTable().isDisposed())
+                               innerHighlight(row);
+               });
        }
 
        private void innerHighlight(int row)
@@ -50,10 +37,10 @@ public class RowHighlighter
                {
                        table.showItem(table.getItem(Math.min(table.getItemCount(), row + 2)));
                        table.showItem(table.getItem(row));
-                       Optional.of(table.getItem(row).getData()).ifPresent(d -> viewer.update(d, null));
+                       Optional.ofNullable(table.getItem(row).getData()).ifPresent(d -> viewer.update(d, null));
                }
                if (highlighted != -1)
-                       Optional.of(table.getItem(highlighted).getData()).ifPresent(d -> viewer.update(d, null));
+                       Optional.ofNullable(table.getItem(highlighted).getData()).ifPresent(d -> viewer.update(d, null));
                highlighted = row;
        }
 }