Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorslewis2005-04-12 22:53:14 +0000
committerslewis2005-04-12 22:53:14 +0000
commit7dbb59afa4852d655b454fc0804855599ab7596d (patch)
tree96403df1b3739b19b2b9e46a99ff1b170ddccd70
parentb9040b87747acea2673f5e03f5e784bdb3000bed (diff)
downloadorg.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.gifbin0 -> 318 bytes
-rw-r--r--framework/bundles/org.eclipse.ecf.ui/icons/enabled/message.gifbin0 -> 173 bytes
-rw-r--r--framework/bundles/org.eclipse.ecf.ui/src/org/eclipse/ecf/ui/dialogs/SendAuthorizeRequest.java37
-rw-r--r--framework/bundles/org.eclipse.ecf.ui/src/org/eclipse/ecf/ui/views/RosterView.java193
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
new file mode 100644
index 000000000..252d7ebcb
--- /dev/null
+++ b/framework/bundles/org.eclipse.ecf.ui/icons/enabled/addgroup.gif
Binary files differ
diff --git a/framework/bundles/org.eclipse.ecf.ui/icons/enabled/message.gif b/framework/bundles/org.eclipse.ecf.ui/icons/enabled/message.gif
new file mode 100644
index 000000000..b949ac948
--- /dev/null
+++ b/framework/bundles/org.eclipse.ecf.ui/icons/enabled/message.gif
Binary files differ
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");

Back to the top