diff options
| author | slewis | 2005-04-12 22:53:14 +0000 |
|---|---|---|
| committer | slewis | 2005-04-12 22:53:14 +0000 |
| commit | 7dbb59afa4852d655b454fc0804855599ab7596d (patch) | |
| tree | 96403df1b3739b19b2b9e46a99ff1b170ddccd70 | |
| parent | b9040b87747acea2673f5e03f5e784bdb3000bed (diff) | |
| download | org.eclipse.ecf-7dbb59afa4852d655b454fc0804855599ab7596d.tar.gz org.eclipse.ecf-7dbb59afa4852d655b454fc0804855599ab7596d.tar.xz org.eclipse.ecf-7dbb59afa4852d655b454fc0804855599ab7596d.zip | |
Added addgroup and addbuddy and support functions to RosterView
| -rw-r--r-- | framework/bundles/org.eclipse.ecf.ui/icons/enabled/addgroup.gif | bin | 0 -> 318 bytes | |||
| -rw-r--r-- | framework/bundles/org.eclipse.ecf.ui/icons/enabled/message.gif | bin | 0 -> 173 bytes | |||
| -rw-r--r-- | framework/bundles/org.eclipse.ecf.ui/src/org/eclipse/ecf/ui/dialogs/SendAuthorizeRequest.java | 37 | ||||
| -rw-r--r-- | framework/bundles/org.eclipse.ecf.ui/src/org/eclipse/ecf/ui/views/RosterView.java | 193 |
4 files changed, 213 insertions, 17 deletions
diff --git a/framework/bundles/org.eclipse.ecf.ui/icons/enabled/addgroup.gif b/framework/bundles/org.eclipse.ecf.ui/icons/enabled/addgroup.gif Binary files differnew file mode 100644 index 000000000..252d7ebcb --- /dev/null +++ b/framework/bundles/org.eclipse.ecf.ui/icons/enabled/addgroup.gif diff --git a/framework/bundles/org.eclipse.ecf.ui/icons/enabled/message.gif b/framework/bundles/org.eclipse.ecf.ui/icons/enabled/message.gif Binary files differnew file mode 100644 index 000000000..b949ac948 --- /dev/null +++ b/framework/bundles/org.eclipse.ecf.ui/icons/enabled/message.gif diff --git a/framework/bundles/org.eclipse.ecf.ui/src/org/eclipse/ecf/ui/dialogs/SendAuthorizeRequest.java b/framework/bundles/org.eclipse.ecf.ui/src/org/eclipse/ecf/ui/dialogs/SendAuthorizeRequest.java new file mode 100644 index 000000000..36c2cd8d5 --- /dev/null +++ b/framework/bundles/org.eclipse.ecf.ui/src/org/eclipse/ecf/ui/dialogs/SendAuthorizeRequest.java @@ -0,0 +1,37 @@ +package org.eclipse.ecf.ui.dialogs; + +import org.eclipse.jface.dialogs.Dialog; +import org.eclipse.jface.dialogs.IDialogConstants; +import org.eclipse.swt.graphics.Point; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Control; +import org.eclipse.swt.widgets.Shell; + +public class SendAuthorizeRequest extends Dialog { + + public SendAuthorizeRequest(Shell parentShell) { + super(parentShell); + } + + protected Control createDialogArea(Composite parent) { + Composite container = (Composite) super.createDialogArea(parent); + // + return container; + } + + protected void createButtonsForButtonBar(Composite parent) { + createButton(parent, IDialogConstants.OK_ID, IDialogConstants.OK_LABEL, + true); + createButton(parent, IDialogConstants.CANCEL_ID, + IDialogConstants.CANCEL_LABEL, false); + } + + protected Point getInitialSize() { + return new Point(500, 375); + } + protected void configureShell(Shell newShell) { + super.configureShell(newShell); + newShell.setText("Send Subscribe Request"); + } + +} diff --git a/framework/bundles/org.eclipse.ecf.ui/src/org/eclipse/ecf/ui/views/RosterView.java b/framework/bundles/org.eclipse.ecf.ui/src/org/eclipse/ecf/ui/views/RosterView.java index fd56ce8ee..4dee7e952 100644 --- a/framework/bundles/org.eclipse.ecf.ui/src/org/eclipse/ecf/ui/views/RosterView.java +++ b/framework/bundles/org.eclipse.ecf.ui/src/org/eclipse/ecf/ui/views/RosterView.java @@ -16,6 +16,7 @@ import java.util.ArrayList; import java.util.Date; import java.util.Hashtable; import java.util.Iterator; +import java.util.List; import java.util.Map; import org.eclipse.core.runtime.IAdaptable; import org.eclipse.core.runtime.Path; @@ -37,6 +38,7 @@ import org.eclipse.jface.action.IMenuManager; import org.eclipse.jface.action.IToolBarManager; import org.eclipse.jface.action.MenuManager; import org.eclipse.jface.action.Separator; +import org.eclipse.jface.dialogs.IInputValidator; import org.eclipse.jface.dialogs.InputDialog; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.resource.ImageDescriptor; @@ -65,13 +67,18 @@ import org.eclipse.ui.part.ViewPart; public class RosterView extends ViewPart implements IPresenceListener, IMessageListener { public static final String DISCONNECT_ICON_DISABLED = "icons/disabled/terminate_co.gif"; public static final String DISCONNECT_ICON_ENABLED = "icons/enabled/terminate_co.gif"; - + + public static final String INSTANT_MESSAGE_ICON = "icons/enabled/message.gif"; + public static final String ADDGROUP_ICON = "icons/enabled/addgroup.gif"; + protected static final int TREE_EXPANSION_LEVELS = 2; private TreeViewer viewer; private Action chatAction; private Action selectedChatAction; private Action selectedDoubleClickAction; private Action disconnectAction; + private Action addGroupAction; + protected IUser localUser; protected ITextInputHandler textInputHandler; protected Hashtable chatThreads = new Hashtable(); @@ -295,7 +302,20 @@ public class RosterView extends ViewPart implements IPresenceListener, IMessageL } return null; } - + public String[] getAllGroupNames() { + TreeObject [] objs = root.getChildren(); + String [] groups = null; + if (objs != null) { + List l = new ArrayList(); + for(int i=0; i < objs.length; i++) { + TreeObject o = objs[i]; + if (o instanceof TreeGroup) { + l.add(((TreeGroup)o).getName()); + } + } + return (String []) l.toArray(new String[] {}); + } else return new String[0]; + } public TreeBuddy findBuddy(TreeParent parent, IRosterEntry entry) { TreeObject [] objs = parent.getChildren(); if (objs == null) return null; @@ -349,6 +369,34 @@ public class RosterView extends ViewPart implements IPresenceListener, IMessageL } } } + + public void addGroup(String name) { + if (name == null) return; + addGroup(root,name); + } + public void addGroup(TreeParent parent, String name) { + TreeGroup oldgrp = findGroup(parent,name); + if (oldgrp != null) { + // If the name is already there, then skip + return; + } + // Group not there...add it + TreeGroup newgrp = new TreeGroup(name); + parent.addChild(newgrp); + } + public void removeGroup(TreeParent parent, String name) { + TreeGroup oldgrp = findGroup(parent,name); + if (oldgrp == null) { + // if not there, simply return + return; + } + // Else it is there...and we remove it + parent.removeChild(oldgrp); + } + public void removeGroup(String name) { + if (name == null) return; + removeGroup(root,name); + } public void addEntry(IRosterEntry entry) { addEntry(root, entry); } @@ -385,7 +433,9 @@ public class RosterView extends ViewPart implements IPresenceListener, IMessageL image = registry.get(UiPluginConstants.DECORATION_USER_INACTIVE); } } - } + } else if (obj instanceof TreeGroup) { + image = PlatformUI.getWorkbench().getSharedImages().getImage(ISharedImages.IMG_OBJ_ELEMENT); + } return image; } } @@ -445,24 +495,53 @@ public class RosterView extends ViewPart implements IPresenceListener, IMessageL } private void fillLocalPullDown(IMenuManager manager) { + manager.add(addGroupAction); + manager.add(new Separator()); manager.add(chatAction); manager.add(new Separator()); manager.add(disconnectAction); } private void fillContextMenu(IMenuManager manager) { - TreeObject treeObject = getSelectedTreeObject(); + final TreeObject treeObject = getSelectedTreeObject(); final ID targetID = treeObject.getUserID(); if (treeObject != null) { - selectedChatAction = new Action() { - public void run() { - openChatWindowForTarget(targetID); - } - }; - selectedChatAction.setText("Send IM to "+treeObject.getUserID().getName()); - selectedChatAction.setImageDescriptor(PlatformUI.getWorkbench().getSharedImages() - .getImageDescriptor(ISharedImages.IMG_OBJS_INFO_TSK)); - manager.add(selectedChatAction); + if (treeObject instanceof TreeBuddy) { + final TreeBuddy tb = (TreeBuddy) treeObject; + selectedChatAction = new Action() { + public void run() { + openChatWindowForTarget(targetID); + } + }; + selectedChatAction.setText("Send IM to "+treeObject.getUserID().getName()); + selectedChatAction.setImageDescriptor(ImageDescriptor.createFromURL( + UiPlugin.getDefault().find(new Path(INSTANT_MESSAGE_ICON)))); + manager.add(selectedChatAction); + + TreeObject parent = treeObject.getParent(); + if (parent != null && parent instanceof TreeGroup) { + final TreeGroup treeGroup = (TreeGroup) parent; + Action removeUserAction = new Action() { + public void run() { + removeUserFromGroup(tb,treeGroup); + } + }; + removeUserAction.setText("Remove "+treeObject.getName()+" from "+treeGroup.getName()); + manager.add(removeUserAction); + } + } else if (treeObject instanceof TreeGroup) { + final TreeGroup treeGroup = (TreeGroup) treeObject; + final String groupName = treeGroup.getName(); + Action addUserAction = new Action() { + public void run() { + addUserToGroup(groupName); + } + }; + addUserAction.setText("Add buddy to "+treeObject.getName()+" group"); + addUserAction.setImageDescriptor(ImageDescriptor.createFromURL( + UiPlugin.getDefault().find(new Path(ADDGROUP_ICON)))); + manager.add(addUserAction); + } } manager.add(new Separator()); @@ -470,6 +549,15 @@ public class RosterView extends ViewPart implements IPresenceListener, IMessageL manager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS)); } + protected void addUserToGroup(String groupName) { + // XXX TODO + System.out.println("adding user to group "+groupName); + } + + protected void removeUserFromGroup(TreeBuddy buddy, TreeGroup group) { + // XXX TODO + System.out.println("removing user "+buddy.getName()+ " from group "+group); + } protected TreeObject getSelectedTreeObject() { ISelection selection = viewer.getSelection(); Object obj = ((IStructuredSelection) selection) @@ -478,6 +566,8 @@ public class RosterView extends ViewPart implements IPresenceListener, IMessageL return treeObject; } private void fillLocalToolBar(IToolBarManager manager) { + manager.add(addGroupAction); + manager.add(new Separator()); manager.add(chatAction); manager.add(new Separator()); manager.add(disconnectAction); @@ -512,8 +602,8 @@ public class RosterView extends ViewPart implements IPresenceListener, IMessageL }; chatAction.setText("Send Instant Message..."); chatAction.setToolTipText("Send Instant Message"); - chatAction.setImageDescriptor(PlatformUI.getWorkbench().getSharedImages() - .getImageDescriptor(ISharedImages.IMG_OBJS_INFO_TSK)); + chatAction.setImageDescriptor(ImageDescriptor.createFromURL( + UiPlugin.getDefault().find(new Path(INSTANT_MESSAGE_ICON)))); chatAction.setEnabled(false); selectedDoubleClickAction = new Action() { public void run() { @@ -527,6 +617,8 @@ public class RosterView extends ViewPart implements IPresenceListener, IMessageL if (textInputHandler != null) { textInputHandler.disconnect(); chatAction.setEnabled(false); + addGroupAction.setEnabled(false); + disconnectAction.setEnabled(false); this.setEnabled(false); } } @@ -537,7 +629,41 @@ public class RosterView extends ViewPart implements IPresenceListener, IMessageL disconnectAction.setImageDescriptor(ImageDescriptor.createFromURL( UiPlugin.getDefault().find(new Path(DISCONNECT_ICON_ENABLED)))); disconnectAction.setDisabledImageDescriptor(ImageDescriptor.createFromURL( - UiPlugin.getDefault().find(new Path(DISCONNECT_ICON_DISABLED)))); + UiPlugin.getDefault().find(new Path(DISCONNECT_ICON_DISABLED)))); + + + addGroupAction = new Action() { + public void run() { + // handle add group operation here + String defaultNewGroupName = "New Group"; + InputDialog input = new InputDialog(viewer.getControl().getShell(),"Add Group","Please enter the name of the group to be added",defaultNewGroupName,new IInputValidator() { + + public String isValid(String newText) { + if (newText == null || newText.length() == 0) { + return "New group name cannot be empty"; + } else { + String [] groupNames = getGroupNames(); + for(int i=0; i < groupNames.length; i++) { + if (groupNames[i].equals(newText)) { + return "A group named '"+newText+"' already exists. Please choose another name"; + } + } + } + return null; + } + + }); + input.open(); + String result = input.getValue(); + // Now add the group + addGroup(result); + } + }; + addGroupAction.setText("Add Group..."); + addGroupAction.setToolTipText("Add group to list"); + addGroupAction.setEnabled(false); + addGroupAction.setImageDescriptor(ImageDescriptor.createFromURL( + UiPlugin.getDefault().find(new Path(ADDGROUP_ICON)))); } @@ -675,6 +801,7 @@ public class RosterView extends ViewPart implements IPresenceListener, IMessageL groupID = groupManager; disconnectAction.setEnabled(true); chatAction.setEnabled(true); + addGroupAction.setEnabled(true); } } @@ -709,7 +836,39 @@ public class RosterView extends ViewPart implements IPresenceListener, IMessageL refreshView(); } } - + + public String[] getGroupNames() { + ViewContentProvider vcp = (ViewContentProvider) viewer + .getContentProvider(); + if (vcp != null) { + return vcp.getAllGroupNames(); + } else return new String[0]; + } + public String getSelectedGroupName() { + TreeObject to = getSelectedTreeObject(); + if (to == null) return null; + if (to instanceof TreeGroup) { + TreeGroup tg = (TreeGroup) to; + return tg.getName(); + } + return null; + } + public void addGroup(String name) { + ViewContentProvider vcp = (ViewContentProvider) viewer + .getContentProvider(); + if (vcp != null) { + vcp.addGroup(name); + refreshView(); + } + } + public void removeGroup(String name) { + ViewContentProvider vcp = (ViewContentProvider) viewer + .getContentProvider(); + if (vcp != null) { + vcp.removeGroup(name); + refreshView(); + } + } protected void handleGroupManagerDeparted() { removeAllRosterEntries(); disposeAllChatWindows("Disconnected from server. Chat is inactive"); |
