diff options
author | Ken J. Aguilar | 2012-02-22 17:04:35 +0000 |
---|---|---|
committer | Andrew M Finkbeiner | 2013-01-16 00:06:53 +0000 |
commit | 8531288b1ab5a98b5ee407121fb29f457c9d1b82 (patch) | |
tree | 5c15d680bea4265c73c9d6e0afaa88d8186669d0 | |
parent | 09300c12dac829d2828f14785dbcc11bda346d97 (diff) | |
download | org.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
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; |