feature[ats_ATS328836]: Add some common ui message stuff Change-Id: I3ef39593e50f10063ac074b97e43558cfb80d773
diff --git a/org.eclipse.ote.ui.message.util/META-INF/MANIFEST.MF b/org.eclipse.ote.ui.message.util/META-INF/MANIFEST.MF index 39d86a9..9ac3415 100644 --- a/org.eclipse.ote.ui.message.util/META-INF/MANIFEST.MF +++ b/org.eclipse.ote.ui.message.util/META-INF/MANIFEST.MF
@@ -15,6 +15,7 @@ Export-Package: org.eclipse.ote.ui.message.util Import-Package: org.eclipse.osee.framework.jdk.core.persistence, org.eclipse.osee.framework.plugin.core.util, + org.eclipse.osee.framework.ui.swt, org.eclipse.osee.ote.messaging.dds.service, org.eclipse.ote.message.lookup Bundle-Vendor: Eclipse Open System Engineering Environment
diff --git a/org.eclipse.ote.ui.message.util/build.properties b/org.eclipse.ote.ui.message.util/build.properties index 34d2e4d..c6baffa 100644 --- a/org.eclipse.ote.ui.message.util/build.properties +++ b/org.eclipse.ote.ui.message.util/build.properties
@@ -1,4 +1,5 @@ source.. = src/ output.. = bin/ bin.includes = META-INF/,\ - . + .,\ + icons/
diff --git a/org.eclipse.ote.ui.message.util/icons/add.png b/org.eclipse.ote.ui.message.util/icons/add.png new file mode 100644 index 0000000..5b051f6 --- /dev/null +++ b/org.eclipse.ote.ui.message.util/icons/add.png Binary files differ
diff --git a/org.eclipse.ote.ui.message.util/icons/deleteAll.gif b/org.eclipse.ote.ui.message.util/icons/deleteAll.gif new file mode 100644 index 0000000..28a3785 --- /dev/null +++ b/org.eclipse.ote.ui.message.util/icons/deleteAll.gif Binary files differ
diff --git a/org.eclipse.ote.ui.message.util/icons/remove.png b/org.eclipse.ote.ui.message.util/icons/remove.png new file mode 100644 index 0000000..7fb4e90 --- /dev/null +++ b/org.eclipse.ote.ui.message.util/icons/remove.png Binary files differ
diff --git a/org.eclipse.ote.ui.message.util/src/org/eclipse/ote/ui/message/util/AddMessagesAction.java b/org.eclipse.ote.ui.message.util/src/org/eclipse/ote/ui/message/util/AddMessagesAction.java new file mode 100644 index 0000000..4f53bf3 --- /dev/null +++ b/org.eclipse.ote.ui.message.util/src/org/eclipse/ote/ui/message/util/AddMessagesAction.java
@@ -0,0 +1,56 @@ +/******************************************************************************* + * Copyright (c) 2013 Boeing. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Boeing - initial API and implementation + *******************************************************************************/ +package org.eclipse.ote.ui.message.util; + +import java.util.ArrayList; + +import org.eclipse.jface.action.Action; +import org.eclipse.jface.action.IAction; +import org.eclipse.jface.window.Window; +import org.eclipse.osee.framework.ui.swt.Displays; +import org.eclipse.ote.message.lookup.MessageLookupResult; +import org.eclipse.ote.ui.message.util.MessageSelectionDialog; +import org.eclipse.swt.widgets.Shell; + +/** + * @author Ken J. Aguilar + */ +public class AddMessagesAction extends Action { + + + private final MessageSelectComposite composite; + + public AddMessagesAction(MessageSelectComposite composite) { + super("Select Messages", IAction.AS_PUSH_BUTTON); + setToolTipText("Select messages to append to the list of messages that will be recorded"); + this.composite = composite; + setImageDescriptor(Images.ADD.getImageDescriptor()); + + } + + @Override + public void run() { + Shell shell = Displays.getActiveShell(); + MessageSelectionDialog msgSelectionDialog = new MessageSelectionDialog(shell); + msgSelectionDialog.setMultipleSelection(true); + if (msgSelectionDialog.open() == Window.OK) { + Object[] result = (Object[])msgSelectionDialog.getResult(); + ArrayList<MessageLookupResult> list = new ArrayList<MessageLookupResult>(result.length); + for (Object item : result) { + MessageLookupResult lookupResult = (MessageLookupResult) item; + list.add(lookupResult); + } + composite.addMessages(list); + } + + } + +}
diff --git a/org.eclipse.ote.ui.message.util/src/org/eclipse/ote/ui/message/util/DeleteAllMessagesAction.java b/org.eclipse.ote.ui.message.util/src/org/eclipse/ote/ui/message/util/DeleteAllMessagesAction.java new file mode 100644 index 0000000..b13a3a1 --- /dev/null +++ b/org.eclipse.ote.ui.message.util/src/org/eclipse/ote/ui/message/util/DeleteAllMessagesAction.java
@@ -0,0 +1,20 @@ +package org.eclipse.ote.ui.message.util; + +import org.eclipse.jface.action.Action; +import org.eclipse.jface.action.IAction; + +public class DeleteAllMessagesAction extends Action{ + private final MessageSelectComposite composite; + + public DeleteAllMessagesAction(MessageSelectComposite composite) { + super("Delete All Messages", IAction.AS_PUSH_BUTTON); + setToolTipText("Delete all messages from the recording list"); + this.composite = composite; + setImageDescriptor(Images.DELETE_ALL.getImageDescriptor()); + + } + + public void run() { + composite.deleteAll(); + } +}
diff --git a/org.eclipse.ote.ui.message.util/src/org/eclipse/ote/ui/message/util/DeleteMessagesAction.java b/org.eclipse.ote.ui.message.util/src/org/eclipse/ote/ui/message/util/DeleteMessagesAction.java new file mode 100644 index 0000000..a61f5d9 --- /dev/null +++ b/org.eclipse.ote.ui.message.util/src/org/eclipse/ote/ui/message/util/DeleteMessagesAction.java
@@ -0,0 +1,19 @@ +package org.eclipse.ote.ui.message.util; + +import org.eclipse.jface.action.Action; +import org.eclipse.jface.action.IAction; + +public class DeleteMessagesAction extends Action{ + private final MessageSelectComposite composite; + + public DeleteMessagesAction(MessageSelectComposite composite) { + super("Delete Selected Messages", IAction.AS_PUSH_BUTTON); + setToolTipText("Delete all selected from the recording list"); + setImageDescriptor(Images.DELETE.getImageDescriptor()); + this.composite = composite; + } + + public void run() { + composite.deleteSelection(); + } +}
diff --git a/org.eclipse.ote.ui.message.util/src/org/eclipse/ote/ui/message/util/Images.java b/org.eclipse.ote.ui.message.util/src/org/eclipse/ote/ui/message/util/Images.java new file mode 100644 index 0000000..7904a3b --- /dev/null +++ b/org.eclipse.ote.ui.message.util/src/org/eclipse/ote/ui/message/util/Images.java
@@ -0,0 +1,64 @@ +package org.eclipse.ote.ui.message.util; + +import java.io.IOException; +import java.net.URL; + +import org.eclipse.core.runtime.FileLocator; +import org.eclipse.jface.resource.ImageDescriptor; +import org.eclipse.jface.resource.ImageRegistry; +import org.eclipse.swt.graphics.Image; +import org.osgi.framework.FrameworkUtil; + +public enum Images { + ADD("icons/add.png"), + DELETE_ALL("icons/deleteAll.gif"), + DELETE("icons/remove.png"), + RECORD("icons/record_action.png"); + + private final String path; + + private static ImageRegistry ir = new ImageRegistry(); + /** + * @param path + */ + private Images(String path) { + this.path = path; + } + + /** + * @return the path + */ + public String getPath() { + return path; + } + + public Image getImage() { + Image image = ir.get(path); + if (image == null) { + image = ImageDescriptor.createFromURL(getFile(path)).createImage(); + ir.put(path, image); + } + return image; + } + + public ImageDescriptor getImageDescriptor() { + ImageDescriptor descriptor = ir.getDescriptor(path); + if (descriptor == null) { + descriptor = ImageDescriptor.createFromURL(getFile(path)); + ir.put(path, descriptor); + } + return descriptor; + } + + private static URL getFile(String path) { + URL url = FrameworkUtil.getBundle(Images.class).getEntry(path); + if (url == null) { + return null; + } + try { + return FileLocator.resolve(url); + } catch (IOException e) { + throw new RuntimeException("could not resolve URL from path: " + path, e); + } + } +}
diff --git a/org.eclipse.ote.ui.message.util/src/org/eclipse/ote/ui/message/util/MessageSelectComposite.java b/org.eclipse.ote.ui.message.util/src/org/eclipse/ote/ui/message/util/MessageSelectComposite.java new file mode 100644 index 0000000..5abf523 --- /dev/null +++ b/org.eclipse.ote.ui.message.util/src/org/eclipse/ote/ui/message/util/MessageSelectComposite.java
@@ -0,0 +1,224 @@ +package org.eclipse.ote.ui.message.util; + +import java.util.Arrays; +import java.util.Collection; +import java.util.HashSet; +import java.util.List; + +import org.eclipse.jface.action.ActionContributionItem; +import org.eclipse.jface.action.IMenuListener; +import org.eclipse.jface.action.IMenuManager; +import org.eclipse.jface.action.MenuManager; +import org.eclipse.jface.resource.JFaceResources; +import org.eclipse.jface.viewers.ArrayContentProvider; +import org.eclipse.jface.viewers.IStructuredSelection; +import org.eclipse.jface.viewers.LabelProvider; +import org.eclipse.jface.viewers.TableViewer; +import org.eclipse.osee.framework.ui.swt.Widgets; +import org.eclipse.ote.message.lookup.MessageLookupResult; +import org.eclipse.swt.SWT; +import org.eclipse.swt.layout.FormAttachment; +import org.eclipse.swt.layout.FormData; +import org.eclipse.swt.widgets.Button; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Label; +import org.eclipse.swt.widgets.Menu; + +public class MessageSelectComposite extends Composite{ + + + private final TableViewer viewer; + + private final HashSet<MessageLookupResult> items = new HashSet<MessageLookupResult>(); + + private final AddMessagesAction addMessageAction; + private final DeleteMessagesAction deleteMessageAction; + private final DeleteAllMessagesAction deleteAllMessagesAction; + +// private Button browseBtn; + + public MessageSelectComposite(Composite parent, int style) { + super(parent, style); + Widgets.setFormLayout(this, 5, 5); +// Label label = new Label(this, SWT.RIGHT); +// label.setText("Output File:"); + +// outputFilePathTxt = new Text(this, SWT.SINGLE | SWT.BORDER); +// outputFilePathTxt.addModifyListener(new ModifyListener() { +// +// @Override +// public void modifyText(ModifyEvent e) { +//// updateUiStatus(); +// } +// }); +// browseBtn = new Button(this, SWT.PUSH); +// browseBtn.setText("Browse"); +// browseBtn.addSelectionListener(new SelectionAdapter() { +// +// @Override +// public void widgetSelected(SelectionEvent e) { +// doBrowseForFile(); +// } +// }); + addMessageAction = new AddMessagesAction(this); + deleteMessageAction = new DeleteMessagesAction(this); + deleteAllMessagesAction = new DeleteAllMessagesAction(this); + + Label titleLabel = new Label(this, SWT.LEFT); + titleLabel.setFont(JFaceResources.getFontRegistry().getBold(JFaceResources.DEFAULT_FONT)); + titleLabel.setText("Selected Messages"); + titleLabel.setBackground(getBackground()); + viewer = new TableViewer(this, SWT.BORDER | SWT.MULTI | SWT.V_SCROLL); + viewer.setContentProvider(new ArrayContentProvider()); + viewer.setLabelProvider(new LabelProvider() { + + @Override + public String getText(Object element) { + MessageLookupResult item = (MessageLookupResult) element; + return String.format("%s [%s]", item.getMessageName(), item.getMessageType()); + } + + + }); + + + ActionContributionItem addItem = new ActionContributionItem(addMessageAction); + addItem.fill(this); + Button addButton = (Button)addItem.getWidget(); + + ActionContributionItem delItem = new ActionContributionItem(deleteMessageAction); + delItem.fill(this); + Button delButton = (Button)delItem.getWidget(); + + ActionContributionItem delAllItem = new ActionContributionItem(deleteAllMessagesAction); + delAllItem.fill(this); + Button delAllButton = (Button)delAllItem.getWidget(); + + +// Label statusLabel = new Label(this, SWT.RIGHT); +// statusLabel.setText("Status:"); +// +// statusValueLabel = new Label(this, SWT.LEFT); +// statusValueLabel.setFont(JFaceResources.getFontRegistry().getBold(JFaceResources.DEFAULT_FONT)); + +// Widgets.attachToParent(outputFilePathTxt, SWT.TOP, 0, 5); +// Widgets.attachToControl(label, outputFilePathTxt, SWT.TOP, SWT.CENTER, 0); +// Widgets.attachToControl(browseBtn, outputFilePathTxt, SWT.TOP, SWT.CENTER, 0); +// +// Widgets.attachToParent(label, SWT.LEFT, 0, 0); +// Widgets.attachToControl(outputFilePathTxt, label, SWT.LEFT, SWT.RIGHT, 5); +// Widgets.attachToControl(outputFilePathTxt, browseBtn, SWT.RIGHT, SWT.LEFT, -5); + +// Widgets.attachToParent(browseBtn, SWT.RIGHT, 100, 0); +// +// Widgets.attachToControl(titleLabel, browseBtn, SWT.TOP, SWT.BOTTOM, 5); + Widgets.attachToParent(titleLabel, SWT.LEFT, 0, 0); + Widgets.attachToParent(titleLabel, SWT.RIGHT, 100, 0); + + Widgets.attachToControl(viewer.getControl(), titleLabel, SWT.TOP, SWT.BOTTOM, 0); + Widgets.attachToParent(viewer.getControl(), SWT.LEFT, 0, 0, 400, 600); +// final Object ld = viewer.getControl().getLayoutData(); +// final FormData fd = ld != null ? (FormData) ld : new FormData(); +// fd.bottom = new FormAttachment(100, 100, 0); + + Widgets.attachToParent(viewer.getControl(), SWT.BOTTOM, 100, 0); + + Widgets.attachToParent(addButton, SWT.RIGHT, 100, 0, 400, 600); + Widgets.attachToParent(delButton, SWT.RIGHT, 100, 0, 400, 600); + Widgets.attachToParent(delAllButton, SWT.RIGHT, 100, 0, 400, 600); + + Widgets.attachToControl(viewer.getControl(), addButton, SWT.RIGHT, SWT.LEFT, 0); + Widgets.attachToControl(viewer.getControl(), delButton, SWT.RIGHT, SWT.LEFT, 0); + Widgets.attachToControl(viewer.getControl(), delAllButton, SWT.RIGHT, SWT.LEFT, 0); + + Widgets.attachToControl(addButton, titleLabel, SWT.TOP, SWT.BOTTOM, 0); + Widgets.attachToControl(delButton, addButton, SWT.TOP, SWT.BOTTOM, 0); + Widgets.attachToControl(delAllButton, delButton, SWT.TOP, SWT.BOTTOM, 0); + + hookContextMenu(); + } + + private void hookContextMenu() { + MenuManager menuMgr = new MenuManager("#PopupMenu"); + menuMgr.setRemoveAllWhenShown(true); + menuMgr.addMenuListener(new IMenuListener() { + @Override + public void menuAboutToShow(IMenuManager manager) { + manager.add(addMessageAction); + manager.add(deleteMessageAction); + manager.add(deleteAllMessagesAction); + } + }); + Menu menu = menuMgr.createContextMenu(this.getViewer().getControl()); + this.getViewer().getControl().setMenu(menu); + } + + +// private void doBrowseForFile() { +// FileDialog dialog = new FileDialog(Display.getDefault().getActiveShell(), SWT.SAVE); +// dialog.setFilterExtensions(new String[]{"*.bmr"}); +// dialog.setFilterIndex(0); +// dialog.setOverwrite(false); +// String path = dialog.open(); +// if (path != null) { +// outputFilePathTxt.setText(path); +// } +// } + + TableViewer getViewer() { + return viewer; + } + + void addMessages(Collection<MessageLookupResult> messages) { + items.addAll(messages); + setInput(); + } + + void deleteAll() { + items.clear(); + setInput(); + } + + void deleteSelection() { + items.removeAll(Arrays.asList(((IStructuredSelection)viewer.getSelection()).toArray())); + setInput(); + } + + private void setInput() { + viewer.setInput(items.toArray()); + } + +// private static boolean isValidPath(String string) { +// if (string == null || string.isEmpty()) { +// return false; +// } +// File file = new File(string); +// // check parent directory +// File dir = file.getParentFile(); +// return dir != null && dir.isDirectory() && dir.exists(); +// } + + public AddMessagesAction getAddMessageAction() { + return addMessageAction; + } + + public DeleteMessagesAction getDeleteMessageAction() { + return deleteMessageAction; + } + + public DeleteAllMessagesAction getDeleteAllMessagesAction() { + return deleteAllMessagesAction; + } + + public HashSet<MessageLookupResult> getMessages() { + return items; + } + + public void setMessages(HashSet<MessageLookupResult> messages) { + if(messages != null){ + items.addAll(messages); + setInput(); + } + } + +}