### Eclipse Workspace Patch 1.0 #P org.eclipse.ecf.presence.ui Index: src/org/eclipse/ecf/presence/ui/chatroom/ChatRoomManagerView.java =================================================================== RCS file: /cvsroot/technology/org.eclipse.ecf/plugins/org.eclipse.ecf.presence.ui/src/org/eclipse/ecf/presence/ui/chatroom/ChatRoomManagerView.java,v retrieving revision 1.15 diff -u -r1.15 ChatRoomManagerView.java --- src/org/eclipse/ecf/presence/ui/chatroom/ChatRoomManagerView.java 24 Jul 2007 15:23:09 -0000 1.15 +++ src/org/eclipse/ecf/presence/ui/chatroom/ChatRoomManagerView.java 24 Jul 2007 23:14:12 -0000 @@ -85,7 +85,9 @@ import org.eclipse.swt.layout.GridData; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Display; +import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.List; +import org.eclipse.swt.widgets.Listener; import org.eclipse.swt.widgets.Menu; import org.eclipse.swt.widgets.ScrollBar; import org.eclipse.swt.widgets.Text; @@ -213,8 +215,25 @@ fullChat.setLayout(new FillLayout()); Composite memberComp = new Composite(fullChat, SWT.NONE); memberComp.setLayout(new FillLayout()); - listViewer = new ListViewer(memberComp, SWT.BORDER - | SWT.V_SCROLL | SWT.H_SCROLL); + List list = new List(memberComp, SWT.BORDER + | SWT.V_SCROLL | SWT.H_SCROLL | SWT.MULTI); + list.addListener(SWT.MenuDetect, new Listener() { + public void handleEvent(Event e) { + if (e.button == 3) { + List list = (List) e.widget; + + int index = list.getTopIndex() + (e.y / list.getItemHeight()); + + if (index < list.getItemCount()) { + if (! list.isSelected(index)) { + list.deselectAll(); + list.select(index); + } + } + } + } + }); + listViewer = new ListViewer(list); listViewer.setSorter(new ViewerSorter()); Composite rightComp = new Composite(fullChat, SWT.NONE); rightComp.setLayout(new FillLayout()); @@ -343,7 +362,12 @@ } private void hookParticipantsContextMenu() { - MenuManager menuMgr = new MenuManager(); + MenuManager menuMgr = new MenuManager(); + menuMgr.addMenuListener(new IMenuListener() { + public void menuAboutToShow(IMenuManager manager) { + manager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS)); + } + }); menuMgr.setRemoveAllWhenShown(true); List list = (List) listViewer.getControl(); Menu menu = menuMgr.createContextMenu(list); #P org.eclipse.ecf.provider.irc.ui Index: src/org/eclipse/ecf/internal/irc/ui/actions/WhoisAction.java =================================================================== RCS file: /cvsroot/technology/org.eclipse.ecf/plugins/org.eclipse.ecf.provider.irc.ui/src/org/eclipse/ecf/internal/irc/ui/actions/WhoisAction.java,v retrieving revision 1.1 diff -u -r1.1 WhoisAction.java --- src/org/eclipse/ecf/internal/irc/ui/actions/WhoisAction.java 24 Jul 2007 15:25:19 -0000 1.1 +++ src/org/eclipse/ecf/internal/irc/ui/actions/WhoisAction.java 24 Jul 2007 23:14:14 -0000 @@ -12,7 +12,7 @@ public class WhoisAction extends AbstractActionDelegate { - protected String getMessage() { - return "/whois "+getUsername(); //$NON-NLS-1$ + protected String getMessage(String username) { + return "/whois "+username; //$NON-NLS-1$ } } Index: src/org/eclipse/ecf/internal/irc/ui/actions/DevoiceAction.java =================================================================== RCS file: /cvsroot/technology/org.eclipse.ecf/plugins/org.eclipse.ecf.provider.irc.ui/src/org/eclipse/ecf/internal/irc/ui/actions/DevoiceAction.java,v retrieving revision 1.1 diff -u -r1.1 DevoiceAction.java --- src/org/eclipse/ecf/internal/irc/ui/actions/DevoiceAction.java 24 Jul 2007 15:25:19 -0000 1.1 +++ src/org/eclipse/ecf/internal/irc/ui/actions/DevoiceAction.java 24 Jul 2007 23:14:14 -0000 @@ -12,7 +12,7 @@ public class DevoiceAction extends AbstractActionDelegate { - protected String getMessage() { - return "/mode -v "+getUsername(); //$NON-NLS-1$ + protected String getMessage(String username) { + return "/mode -v "+username; //$NON-NLS-1$ } } Index: src/org/eclipse/ecf/internal/irc/ui/actions/VoiceAction.java =================================================================== RCS file: /cvsroot/technology/org.eclipse.ecf/plugins/org.eclipse.ecf.provider.irc.ui/src/org/eclipse/ecf/internal/irc/ui/actions/VoiceAction.java,v retrieving revision 1.1 diff -u -r1.1 VoiceAction.java --- src/org/eclipse/ecf/internal/irc/ui/actions/VoiceAction.java 24 Jul 2007 15:25:19 -0000 1.1 +++ src/org/eclipse/ecf/internal/irc/ui/actions/VoiceAction.java 24 Jul 2007 23:14:14 -0000 @@ -12,7 +12,7 @@ public class VoiceAction extends AbstractActionDelegate { - protected String getMessage() { - return "/mode +v "+getUsername(); //$NON-NLS-1$ + protected String getMessage(String username) { + return "/mode +v "+username; //$NON-NLS-1$ } } Index: src/org/eclipse/ecf/internal/irc/ui/actions/OpAction.java =================================================================== RCS file: /cvsroot/technology/org.eclipse.ecf/plugins/org.eclipse.ecf.provider.irc.ui/src/org/eclipse/ecf/internal/irc/ui/actions/OpAction.java,v retrieving revision 1.1 diff -u -r1.1 OpAction.java --- src/org/eclipse/ecf/internal/irc/ui/actions/OpAction.java 24 Jul 2007 15:25:19 -0000 1.1 +++ src/org/eclipse/ecf/internal/irc/ui/actions/OpAction.java 24 Jul 2007 23:14:14 -0000 @@ -12,7 +12,7 @@ public class OpAction extends AbstractActionDelegate { - protected String getMessage() { - return "/op "+getUsername(); //$NON-NLS-1$ + protected String getMessage(String username) { + return "/op "+username; //$NON-NLS-1$ } } Index: src/org/eclipse/ecf/internal/irc/ui/actions/KickAction.java =================================================================== RCS file: /cvsroot/technology/org.eclipse.ecf/plugins/org.eclipse.ecf.provider.irc.ui/src/org/eclipse/ecf/internal/irc/ui/actions/KickAction.java,v retrieving revision 1.1 diff -u -r1.1 KickAction.java --- src/org/eclipse/ecf/internal/irc/ui/actions/KickAction.java 24 Jul 2007 15:25:19 -0000 1.1 +++ src/org/eclipse/ecf/internal/irc/ui/actions/KickAction.java 24 Jul 2007 23:14:14 -0000 @@ -12,7 +12,7 @@ public class KickAction extends AbstractActionDelegate { - protected String getMessage() { - return "/kick "+getUsername(); //$NON-NLS-1$ + protected String getMessage(String username) { + return "/kick "+username; //$NON-NLS-1$ } } Index: src/org/eclipse/ecf/internal/irc/ui/actions/DeopAction.java =================================================================== RCS file: /cvsroot/technology/org.eclipse.ecf/plugins/org.eclipse.ecf.provider.irc.ui/src/org/eclipse/ecf/internal/irc/ui/actions/DeopAction.java,v retrieving revision 1.1 diff -u -r1.1 DeopAction.java --- src/org/eclipse/ecf/internal/irc/ui/actions/DeopAction.java 24 Jul 2007 15:25:19 -0000 1.1 +++ src/org/eclipse/ecf/internal/irc/ui/actions/DeopAction.java 24 Jul 2007 23:14:14 -0000 @@ -12,7 +12,7 @@ public class DeopAction extends AbstractActionDelegate { - protected String getMessage() { - return "/dop "+getUsername(); //$NON-NLS-1$ + protected String getMessage(String username) { + return "/dop "+username; //$NON-NLS-1$ } } Index: src/org/eclipse/ecf/internal/irc/ui/actions/BanAction.java =================================================================== RCS file: /cvsroot/technology/org.eclipse.ecf/plugins/org.eclipse.ecf.provider.irc.ui/src/org/eclipse/ecf/internal/irc/ui/actions/BanAction.java,v retrieving revision 1.1 diff -u -r1.1 BanAction.java --- src/org/eclipse/ecf/internal/irc/ui/actions/BanAction.java 24 Jul 2007 15:25:19 -0000 1.1 +++ src/org/eclipse/ecf/internal/irc/ui/actions/BanAction.java 24 Jul 2007 23:14:14 -0000 @@ -13,7 +13,7 @@ public class BanAction extends AbstractActionDelegate { - protected String getMessage() { - return "/ban "+getUsername(); //$NON-NLS-1$ + protected String getMessage(String username) { + return "/ban "+username; //$NON-NLS-1$ } } Index: src/org/eclipse/ecf/internal/irc/ui/actions/AbstractActionDelegate.java =================================================================== RCS file: /cvsroot/technology/org.eclipse.ecf/plugins/org.eclipse.ecf.provider.irc.ui/src/org/eclipse/ecf/internal/irc/ui/actions/AbstractActionDelegate.java,v retrieving revision 1.1 diff -u -r1.1 AbstractActionDelegate.java --- src/org/eclipse/ecf/internal/irc/ui/actions/AbstractActionDelegate.java 24 Jul 2007 15:25:19 -0000 1.1 +++ src/org/eclipse/ecf/internal/irc/ui/actions/AbstractActionDelegate.java 24 Jul 2007 23:14:14 -0000 @@ -10,6 +10,8 @@ ******************************************************************************/ package org.eclipse.ecf.internal.irc.ui.actions; +import java.util.Iterator; + import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.eclipse.ecf.core.user.IUser; @@ -26,38 +28,34 @@ abstract public class AbstractActionDelegate implements IViewActionDelegate { - private IUser user; - private String username; + private IStructuredSelection selection; private IChatRoomContainer chatRoomContainer; public AbstractActionDelegate() { super(); } - protected abstract String getMessage(); + protected abstract String getMessage(String username); - protected String getUsername() { - if (username != null) { - return username; - } - - if (user != null) { - username = user.getName(); - if (username.startsWith("@")) { //$NON-NLS-1$ - username = username.substring(1); - } - return username; + protected String getUsername(IUser user) { + String username = user.getName(); + if (username.startsWith("@")) { //$NON-NLS-1$ + username = username.substring(1); } - - return null; + return username; } public void run(IAction action) { - if ((chatRoomContainer == null) || (user == null)) { + if ((chatRoomContainer == null) || (selection == null)) { return; } try { - chatRoomContainer.getChatRoomMessageSender().sendMessage(getMessage()); //$NON-NLS-1$ + Iterator iterator = selection.iterator(); + while (iterator.hasNext()) { + IUser user = (IUser) iterator.next(); + String message = getMessage(getUsername(user)); + chatRoomContainer.getChatRoomMessageSender().sendMessage(message); + } } catch (ECFException e) { StatusManager.getManager().handle(new Status(IStatus.ERROR, Activator.PLUGIN_ID, e.getMessage(), e)); } @@ -68,7 +66,7 @@ return; } - user = (IUser) ((IStructuredSelection) selection).getFirstElement(); + this.selection = (IStructuredSelection) selection; } public void init(IViewPart view) {