Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKen J. Aguilar2012-02-22 17:04:35 +0000
committerAndrew M Finkbeiner2013-01-16 00:06:53 +0000
commit8531288b1ab5a98b5ee407121fb29f457c9d1b82 (patch)
tree5c15d680bea4265c73c9d6e0afaa88d8186669d0
parent09300c12dac829d2828f14785dbcc11bda346d97 (diff)
downloadorg.eclipse.ote-8531288b1ab5a98b5ee407121fb29f457c9d1b82.tar.gz
org.eclipse.ote-8531288b1ab5a98b5ee407121fb29f457c9d1b82.tar.xz
org.eclipse.ote-8531288b1ab5a98b5ee407121fb29f457c9d1b82.zip
refinement: Improve element viewer column removal and display performance
-rw-r--r--plugins/lba.ote.ui.eviewer/src/lba/ote/ui/eviewer/Activator.java92
-rw-r--r--plugins/lba.ote.ui.eviewer/src/lba/ote/ui/eviewer/action/AddElementAction.java3
-rw-r--r--plugins/lba.ote.ui.eviewer/src/lba/ote/ui/eviewer/action/ElementLabelProvider.java32
-rw-r--r--plugins/lba.ote.ui.eviewer/src/lba/ote/ui/eviewer/action/RemoveColumnAction.java9
-rw-r--r--plugins/lba.ote.ui.eviewer/src/lba/ote/ui/eviewer/action/SetActiveColumnAction.java2
-rw-r--r--plugins/lba.ote.ui.eviewer/src/lba/ote/ui/eviewer/view/ElementColumn.java9
-rw-r--r--plugins/lba.ote.ui.eviewer/src/lba/ote/ui/eviewer/view/ElementContentProvider.java59
-rw-r--r--plugins/lba.ote.ui.eviewer/src/lba/ote/ui/eviewer/view/ElementViewer.java19
-rw-r--r--plugins/lba.ote.ui.eviewer/src/lba/ote/ui/eviewer/view/SubscriptionDetails.java1
9 files changed, 129 insertions, 97 deletions
diff --git a/plugins/lba.ote.ui.eviewer/src/lba/ote/ui/eviewer/Activator.java b/plugins/lba.ote.ui.eviewer/src/lba/ote/ui/eviewer/Activator.java
index 2332b198c..3138e4953 100644
--- a/plugins/lba.ote.ui.eviewer/src/lba/ote/ui/eviewer/Activator.java
+++ b/plugins/lba.ote.ui.eviewer/src/lba/ote/ui/eviewer/Activator.java
@@ -1,6 +1,7 @@
package lba.ote.ui.eviewer;
import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.jface.resource.ImageRegistry;
import org.eclipse.ui.plugin.AbstractUIPlugin;
import org.osgi.framework.BundleContext;
@@ -8,45 +9,54 @@ import org.osgi.framework.BundleContext;
* The activator class controls the plug-in life cycle
*/
public class Activator extends AbstractUIPlugin {
- public static final String PLUGIN_ID = "lba.ote.ui.eviewer";
- private static Activator plugin;
-
- private BundleContext context;
-
- @Override
- public void start(BundleContext context) throws Exception {
- super.start(context);
- plugin = this;
- this.context = context;
- }
-
- @Override
- public void stop(BundleContext context) throws Exception {
- plugin = null;
- super.stop(context);
- this.context = null;
- }
-
- /**
- * Returns the shared instance
- *
- * @return the shared instance
- */
- public static Activator getDefault() {
- return plugin;
- }
-
- /**
- * Returns an image descriptor for the image file at the given plug-in relative path
- *
- * @param path the path
- * @return the image descriptor
- */
- public static ImageDescriptor getImageDescriptor(String path) {
- return imageDescriptorFromPlugin(PLUGIN_ID, path);
- }
-
- BundleContext getBundleContext() {
- return context;
- }
+ public static final String PLUGIN_ID = "lba.ote.ui.eviewer";
+ private static Activator plugin;
+
+ private BundleContext context;
+
+ @Override
+ public void start(BundleContext context) throws Exception {
+ super.start(context);
+ plugin = this;
+ this.context = context;
+ }
+
+ @Override
+ public void stop(BundleContext context) throws Exception {
+ plugin = null;
+ super.stop(context);
+ this.context = null;
+ }
+
+ /**
+ * Returns the shared instance
+ *
+ * @return the shared instance
+ */
+ public static Activator getDefault() {
+ return plugin;
+ }
+
+ /**
+ * Returns an image descriptor for the image file at the given plug-in relative path
+ *
+ * @param path the path
+ * @return the image descriptor
+ */
+ public static ImageDescriptor getImageDescriptor(String path) {
+ return imageDescriptorFromPlugin(PLUGIN_ID, path);
+ }
+
+
+
+ @Override
+ protected void initializeImageRegistry(ImageRegistry reg) {
+ reg.put("ACTIVE_PNG", getImageDescriptor("icons/active.png"));
+ reg.put("INACTIVE_PNG", getImageDescriptor("icons/inactive.png"));
+
+ }
+
+ BundleContext getBundleContext() {
+ return context;
+ }
}
diff --git a/plugins/lba.ote.ui.eviewer/src/lba/ote/ui/eviewer/action/AddElementAction.java b/plugins/lba.ote.ui.eviewer/src/lba/ote/ui/eviewer/action/AddElementAction.java
index 9aa5906b0..c2f0662f2 100644
--- a/plugins/lba.ote.ui.eviewer/src/lba/ote/ui/eviewer/action/AddElementAction.java
+++ b/plugins/lba.ote.ui.eviewer/src/lba/ote/ui/eviewer/action/AddElementAction.java
@@ -6,8 +6,10 @@
package lba.ote.ui.eviewer.action;
import java.util.logging.Level;
+
import lba.ote.ui.eviewer.Activator;
import lba.ote.ui.eviewer.view.ElementContentProvider;
+
import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.dialogs.MessageDialog;
@@ -44,6 +46,7 @@ public class AddElementAction extends Action {
MessageElementSelectionDialog msgElementSelectionDialog =
new MessageElementSelectionDialog(shell, msgClassName, null);
msgElementSelectionDialog.setMultipleSelection(true);
+ msgElementSelectionDialog.setIgnoreCase(true);
msgElementSelectionDialog.open();
result = msgElementSelectionDialog.getResult();
if (result != null) {
diff --git a/plugins/lba.ote.ui.eviewer/src/lba/ote/ui/eviewer/action/ElementLabelProvider.java b/plugins/lba.ote.ui.eviewer/src/lba/ote/ui/eviewer/action/ElementLabelProvider.java
index ecb33c8a1..dd14f5dcc 100644
--- a/plugins/lba.ote.ui.eviewer/src/lba/ote/ui/eviewer/action/ElementLabelProvider.java
+++ b/plugins/lba.ote.ui.eviewer/src/lba/ote/ui/eviewer/action/ElementLabelProvider.java
@@ -3,36 +3,12 @@ package lba.ote.ui.eviewer.action;
import lba.ote.ui.eviewer.Activator;
import lba.ote.ui.eviewer.view.ElementColumn;
-import org.eclipse.jface.viewers.ILabelProvider;
-import org.eclipse.jface.viewers.ILabelProviderListener;
+import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.swt.graphics.Image;
-final class ElementLabelProvider implements ILabelProvider {
- final Image activeImg = Activator.getImageDescriptor("icons/active.png").createImage();
- final Image inactive = Activator.getImageDescriptor("icons/inactive.png").createImage();
-
- @Override
- public void removeListener(ILabelProviderListener listener) {
- // do nothing
-
- }
-
- @Override
- public boolean isLabelProperty(Object element, String property) {
- return false;
- }
-
- @Override
- public void dispose() {
- activeImg.dispose();
- inactive.dispose();
- }
-
- @Override
- public void addListener(ILabelProviderListener listener) {
- // do nothing
-
- }
+final class ElementLabelProvider extends LabelProvider {
+ final Image activeImg = Activator.getDefault().getImageRegistry().get("ACTIVE_PNG");
+ final Image inactive = Activator.getDefault().getImageRegistry().get("INACTIVE_PNG");
@Override
public String getText(Object element) {
diff --git a/plugins/lba.ote.ui.eviewer/src/lba/ote/ui/eviewer/action/RemoveColumnAction.java b/plugins/lba.ote.ui.eviewer/src/lba/ote/ui/eviewer/action/RemoveColumnAction.java
index 3485310c9..bac389d56 100644
--- a/plugins/lba.ote.ui.eviewer/src/lba/ote/ui/eviewer/action/RemoveColumnAction.java
+++ b/plugins/lba.ote.ui.eviewer/src/lba/ote/ui/eviewer/action/RemoveColumnAction.java
@@ -5,6 +5,8 @@
*/
package lba.ote.ui.eviewer.action;
+import java.util.HashSet;
+
import lba.ote.ui.eviewer.view.ElementColumn;
import lba.ote.ui.eviewer.view.ElementContentProvider;
@@ -32,13 +34,16 @@ public class RemoveColumnAction extends Action {
dialog.setTitle("Remove Columns");
dialog.setMessage("Select one or more columns to remove");
dialog.setEmptySelectionMessage("no columns selected");
+ dialog.setIgnoreCase(true);
dialog.setMultipleSelection(true);
dialog.open();
Object[] selection = dialog.getResult();
if (selection != null) {
- for (Object item : selection) {
- elementContentProvider.removeColumn((ElementColumn)item);
+ HashSet<ElementColumn> removed = new HashSet<ElementColumn>();
+ for (Object obj : selection) {
+ removed.add((ElementColumn)obj);
}
+ elementContentProvider.removeColumn(removed);
}
}
diff --git a/plugins/lba.ote.ui.eviewer/src/lba/ote/ui/eviewer/action/SetActiveColumnAction.java b/plugins/lba.ote.ui.eviewer/src/lba/ote/ui/eviewer/action/SetActiveColumnAction.java
index 8b9a13b12..8975342b3 100644
--- a/plugins/lba.ote.ui.eviewer/src/lba/ote/ui/eviewer/action/SetActiveColumnAction.java
+++ b/plugins/lba.ote.ui.eviewer/src/lba/ote/ui/eviewer/action/SetActiveColumnAction.java
@@ -10,6 +10,7 @@ import java.util.HashSet;
import java.util.LinkedList;
import java.util.List;
+import lba.ote.ui.eviewer.Activator;
import lba.ote.ui.eviewer.view.ElementColumn;
import lba.ote.ui.eviewer.view.ElementContentProvider;
@@ -29,6 +30,7 @@ public class SetActiveColumnAction extends Action {
public SetActiveColumnAction(ElementContentProvider elementContentProvider) {
super("Set Active columns");
this.elementContentProvider = elementContentProvider;
+ setImageDescriptor(Activator.getDefault().getImageRegistry().getDescriptor("ACTIVE_PNG"));
}
@Override
diff --git a/plugins/lba.ote.ui.eviewer/src/lba/ote/ui/eviewer/view/ElementColumn.java b/plugins/lba.ote.ui.eviewer/src/lba/ote/ui/eviewer/view/ElementColumn.java
index 74319d04f..e6fdc2740 100644
--- a/plugins/lba.ote.ui.eviewer/src/lba/ote/ui/eviewer/view/ElementColumn.java
+++ b/plugins/lba.ote.ui.eviewer/src/lba/ote/ui/eviewer/view/ElementColumn.java
@@ -6,6 +6,7 @@
package lba.ote.ui.eviewer.view;
import lba.ote.ui.eviewer.Activator;
+
import org.eclipse.jface.viewers.ColumnLabelProvider;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.TableViewerColumn;
@@ -33,14 +34,16 @@ public class ElementColumn implements ISubscriptionListener {
private boolean active = true;
private volatile Object lastValue = null;
- private final Image activeImg = Activator.getImageDescriptor("icons/active.png").createImage();
- private final Image inactive = Activator.getImageDescriptor("icons/inactive.png").createImage();
+ private final Image activeImg;
+ private final Image inactive;
private final String text;
private volatile int index;
private final TableViewer table;
ElementColumn(TableViewer table, final int index, ElementPath path) {
super();
+ activeImg = Activator.getDefault().getImageRegistry().get("ACTIVE_PNG");
+ inactive = Activator.getDefault().getImageRegistry().get("INACTIVE_PNG");
this.table = table;
this.path = path;
column = new TableViewerColumn(table, SWT.LEFT);
@@ -96,8 +99,6 @@ public class ElementColumn implements ISubscriptionListener {
public void dispose() {
element = null;
- activeImg.dispose();
- inactive.dispose();
column.getColumn().dispose();
}
diff --git a/plugins/lba.ote.ui.eviewer/src/lba/ote/ui/eviewer/view/ElementContentProvider.java b/plugins/lba.ote.ui.eviewer/src/lba/ote/ui/eviewer/view/ElementContentProvider.java
index 2444a535a..f7ae83299 100644
--- a/plugins/lba.ote.ui.eviewer/src/lba/ote/ui/eviewer/view/ElementContentProvider.java
+++ b/plugins/lba.ote.ui.eviewer/src/lba/ote/ui/eviewer/view/ElementContentProvider.java
@@ -34,6 +34,7 @@ import org.eclipse.osee.framework.logging.OseeLog;
import org.eclipse.osee.framework.plugin.core.util.OseeData;
import org.eclipse.osee.ote.client.msg.IOteMessageService;
import org.eclipse.osee.ote.message.ElementPath;
+import org.eclipse.swt.SWT;
import org.eclipse.swt.dnd.Clipboard;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Listener;
@@ -101,8 +102,8 @@ public class ElementContentProvider implements Listener, IStructuredContentProvi
updateInternalFile();
}
}
-
- private void create(ElementPath path) {
+
+ private ElementColumn create(ElementPath path) {
ElementColumn newColumn = new ElementColumn(viewer, elementColumns.size(), path);
SubscriptionDetails details = findDetails(path.getMessageClass());
if (details == null) {
@@ -113,8 +114,9 @@ public class ElementContentProvider implements Listener, IStructuredContentProvi
elementColumns.add(newColumn);
indexAndSortColumns();
newColumn.addMoveListener(this);
+ return newColumn;
}
-
+
private boolean findColumn(ElementPath path) {
String encodedPath = path.encode();
for (ElementColumn column : elementColumns) {
@@ -184,12 +186,12 @@ public class ElementContentProvider implements Listener, IStructuredContentProvi
/**
* @return the autoReveal
*/
- public boolean isAutoReveal() {
+ public boolean isAutoReveal() {
return autoReveal;
}
private void indexAndSortColumns() {
-
+
valueMap = new HashMap<ElementColumn, Integer>();
ColumnSorter sorter = new ColumnSorter(viewer.getTable().getColumnOrder());
for (ElementColumn column : elementColumns) {
@@ -230,6 +232,22 @@ public class ElementContentProvider implements Listener, IStructuredContentProvi
}
}
+ public synchronized void removeColumn(Collection<ElementColumn> columns) {
+
+ elementColumns.removeAll(columns);
+ viewer.getTable().setRedraw(false);
+ for (ElementColumn column : columns) {
+ column.removeMoveListener(this);
+ SubscriptionDetails subscription = findDetails(column.getMessageClassName());
+ if (subscription.removeColumn(column)) {
+ subscription.dispose();
+ subscriptions.remove(subscription);
+ }
+ }
+ indexAndSortColumns();
+ viewer.getTable().setRedraw(true);
+ updateInternalFile();
+ }
private void updateInternalFile() {
try {
saveColumnsToFile(OseeData.getFile(INTERNAL_FILE_NAME));
@@ -253,6 +271,8 @@ public class ElementContentProvider implements Listener, IStructuredContentProvi
}
ElementColumn column = elementColumns.get(i);
writer.write(column.getElementPath().encode());
+ writer.write('=');
+ writer.write(column.isActive() ? "active" : "inactive");
writer.write('\n');
writer.flush();
} finally {
@@ -264,6 +284,7 @@ public class ElementContentProvider implements Listener, IStructuredContentProvi
LinkedList<ElementPath> columnsToAdd = new LinkedList<ElementPath>();
HashSet<ElementPath> inactiveColumns = new HashSet<ElementPath>();
+ viewer.getTable().setRedraw(false);
for (String name : columnNames) {
String[] parts = name.split("=");
ElementPath path = ElementPath.decode(parts[0]);
@@ -274,20 +295,25 @@ public class ElementContentProvider implements Listener, IStructuredContentProvi
}
add(columnsToAdd, false);
- viewer.refresh();
+
for (ElementColumn column : elementColumns) {
if (inactiveColumns.contains(column.getElementPath())) {
column.setActive(false);
}
}
+ viewer.getTable().setRedraw(true);
updateInternalFile();
}
public void loadColumnsFromFile(File file) throws FileNotFoundException, IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(file)));
try {
-
- String[] columnNames = reader.readLine().split(",");
+ String line = reader.readLine();
+ if (line == null) {
+ // empty file
+ return;
+ }
+ String[] columnNames = line.split(",");
loadColumns(columnNames);
} finally {
reader.close();
@@ -367,18 +393,21 @@ public class ElementContentProvider implements Listener, IStructuredContentProvi
* handles the reordering of columns
*/
@Override
- public synchronized void handleEvent(Event event) {
+ public void handleEvent(Event event) {
- if (event.widget.isDisposed()) {
+ if (event.widget.isDisposed() || event.type != SWT.Move) {
return;
}
- indexAndSortColumns();
- LinkedHashSet<String> set = new LinkedHashSet<String>();
- for (ElementColumn c : elementColumns) {
- set.add(c.getElementPath().encode());
+ synchronized (this) {
+ indexAndSortColumns();
+ LinkedHashSet<String> set = new LinkedHashSet<String>();
+ for (ElementColumn c : elementColumns) {
+ set.add(c.getElementPath().encode());
+ }
+
+ updateInternalFile();
}
- updateInternalFile();
}
public TableViewer getViewer() {
diff --git a/plugins/lba.ote.ui.eviewer/src/lba/ote/ui/eviewer/view/ElementViewer.java b/plugins/lba.ote.ui.eviewer/src/lba/ote/ui/eviewer/view/ElementViewer.java
index d4a8c5dcd..9e9356cb2 100644
--- a/plugins/lba.ote.ui.eviewer/src/lba/ote/ui/eviewer/view/ElementViewer.java
+++ b/plugins/lba.ote.ui.eviewer/src/lba/ote/ui/eviewer/view/ElementViewer.java
@@ -52,9 +52,9 @@ public class ElementViewer extends ViewPart {
private AddElementAction addElementAction;
private ClearAllUpdatesAction clearAllUpdatesAction;
private ToggleAutoRevealAction toggleAutoRevealAction;
- private RemoveColumnAction removeColumnMenu;
+ private RemoveColumnAction removeColumnAction;
private CopyAllAction copyAction;
- private SetActiveColumnAction activeColumnMenu;
+ private SetActiveColumnAction activeColumnAction;
private SaveLoadAction saveLoadAction;
private StreamToFileAction streamToFileAction;
private ConfigureColumnsAction configureColumnAction;
@@ -113,8 +113,9 @@ public class ElementViewer extends ViewPart {
private void fillContextMenu(IMenuManager manager) {
manager.add(addElementAction);
manager.add(new Separator());
- manager.add(activeColumnMenu);
- manager.add(removeColumnMenu);
+ manager.add(activeColumnAction);
+
+ manager.add(removeColumnAction);
manager.add(clearAllUpdatesAction);
manager.add(new Separator());
manager.add(copyAction);
@@ -122,6 +123,10 @@ public class ElementViewer extends ViewPart {
// Other plug-ins can contribute there actions here
manager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
+
+ boolean hasColumns = !elementContentProvider.getColumns().isEmpty();
+ activeColumnAction.setEnabled(hasColumns);
+ removeColumnAction.setEnabled(hasColumns);
}
private void fillLocalToolBar(IToolBarManager manager) {
@@ -139,8 +144,8 @@ public class ElementViewer extends ViewPart {
addElementAction.setEnabled(false);
clearAllUpdatesAction = new ClearAllUpdatesAction(elementContentProvider);
toggleAutoRevealAction = new ToggleAutoRevealAction(elementContentProvider);
- activeColumnMenu = new SetActiveColumnAction(elementContentProvider);
- removeColumnMenu = new RemoveColumnAction(elementContentProvider);
+ activeColumnAction = new SetActiveColumnAction(elementContentProvider);
+ removeColumnAction = new RemoveColumnAction(elementContentProvider);
saveLoadAction = new SaveLoadAction(elementContentProvider);
streamToFileAction = new StreamToFileAction(elementContentProvider);
@@ -154,7 +159,7 @@ public class ElementViewer extends ViewPart {
if (event.getProperty() == StreamToFileAction.STREAMING) {
Boolean isStreaming = (Boolean) event.getNewValue();
addElementAction.setEnabled(!isStreaming);
- removeColumnMenu.setEnabled(!isStreaming);
+ removeColumnAction.setEnabled(!isStreaming);
configureColumnAction.setEnabled(!isStreaming);
}
}
diff --git a/plugins/lba.ote.ui.eviewer/src/lba/ote/ui/eviewer/view/SubscriptionDetails.java b/plugins/lba.ote.ui.eviewer/src/lba/ote/ui/eviewer/view/SubscriptionDetails.java
index 081bccc7e..68e9440aa 100644
--- a/plugins/lba.ote.ui.eviewer/src/lba/ote/ui/eviewer/view/SubscriptionDetails.java
+++ b/plugins/lba.ote.ui.eviewer/src/lba/ote/ui/eviewer/view/SubscriptionDetails.java
@@ -8,6 +8,7 @@ package lba.ote.ui.eviewer.view;
import java.util.ArrayList;
import java.util.BitSet;
import java.util.Collection;
+
import org.eclipse.osee.ote.client.msg.core.IMessageSubscription;
import org.eclipse.osee.ote.client.msg.core.ISubscriptionListener;
import org.eclipse.osee.ote.message.Message;

Back to the top