Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorkgilmer2005-09-02 18:47:15 +0000
committerkgilmer2005-09-02 18:47:15 +0000
commit99402961bc36740a3de745200a42259a6049bd76 (patch)
tree6621288bef4a3f87932d1c6b7babcc65710b9e82
parent45cafe24a6fdbdbf2d4ed8849825be1241fed95e (diff)
downloadorg.eclipse.ecf-99402961bc36740a3de745200a42259a6049bd76.tar.gz
org.eclipse.ecf-99402961bc36740a3de745200a42259a6049bd76.tar.xz
org.eclipse.ecf-99402961bc36740a3de745200a42259a6049bd76.zip
Added chat room view and connected it to the SelectRoomDialog.
-rw-r--r--framework/bundles/org.eclipse.ecf.ui/plugin.xml7
-rw-r--r--framework/bundles/org.eclipse.ecf.ui/src/org/eclipse/ecf/ui/dialogs/ChatRoomSelectionDialog.java29
-rw-r--r--framework/bundles/org.eclipse.ecf.ui/src/org/eclipse/ecf/ui/views/ChatRoomView.java74
-rw-r--r--framework/bundles/org.eclipse.ecf.ui/src/org/eclipse/ecf/ui/views/RosterView.java210
4 files changed, 290 insertions, 30 deletions
diff --git a/framework/bundles/org.eclipse.ecf.ui/plugin.xml b/framework/bundles/org.eclipse.ecf.ui/plugin.xml
index c174ddc18..487d2de22 100644
--- a/framework/bundles/org.eclipse.ecf.ui/plugin.xml
+++ b/framework/bundles/org.eclipse.ecf.ui/plugin.xml
@@ -21,5 +21,12 @@
icon="icons/person.gif"
id="org.eclipse.ecf.ui.view.discoveryview"
name="ECF Service Discovery"/>
+ <view
+ allowMultiple="true"
+ category="org.eclipse.ecf.ui.viewcategory"
+ class="org.eclipse.ecf.ui.views.ChatRoomView"
+ icon="icons/person.gif"
+ id="org.eclipse.ecf.ui.views.ChatRoomView"
+ name="Chat Room"/>
</extension>
</plugin>
diff --git a/framework/bundles/org.eclipse.ecf.ui/src/org/eclipse/ecf/ui/dialogs/ChatRoomSelectionDialog.java b/framework/bundles/org.eclipse.ecf.ui/src/org/eclipse/ecf/ui/dialogs/ChatRoomSelectionDialog.java
index 84c84f1e3..d132fbd88 100644
--- a/framework/bundles/org.eclipse.ecf.ui/src/org/eclipse/ecf/ui/dialogs/ChatRoomSelectionDialog.java
+++ b/framework/bundles/org.eclipse.ecf.ui/src/org/eclipse/ecf/ui/dialogs/ChatRoomSelectionDialog.java
@@ -7,11 +7,14 @@ import org.eclipse.ecf.presence.chat.IChatRoomManager;
import org.eclipse.ecf.presence.chat.IRoomInfo;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.dialogs.TitleAreaDialog;
+import org.eclipse.jface.viewers.DoubleClickEvent;
+import org.eclipse.jface.viewers.IDoubleClickListener;
import org.eclipse.jface.viewers.ILabelProviderListener;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.ITableLabelProvider;
import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.swt.SWT;
@@ -26,6 +29,8 @@ import org.eclipse.swt.widgets.TableColumn;
public class ChatRoomSelectionDialog extends TitleAreaDialog {
IChatRoomManager [] managers = null;
+
+ private IRoomInfo selectedRoom = null;
public ChatRoomSelectionDialog(Shell parentShell, IChatRoomManager [] managers) {
super(parentShell);
@@ -87,6 +92,26 @@ public class ChatRoomSelectionDialog extends TitleAreaDialog {
this.setTitle("Chatroom Selection");
this.setMessage("Select a chatroom to enter");
+
+ viewer.addSelectionChangedListener(new ISelectionChangedListener() {
+ public void selectionChanged(SelectionChangedEvent event) {
+ StructuredSelection s = (StructuredSelection) event.getSelection();
+ if (s.getFirstElement() instanceof IRoomInfo) {
+ selectedRoom = (IRoomInfo) s.getFirstElement();
+ }
+ }
+
+ });
+
+ viewer.addDoubleClickListener(new IDoubleClickListener() {
+
+ public void doubleClick(DoubleClickEvent event) {
+ if (selectedRoom != null) {
+ ChatRoomSelectionDialog.this.okPressed();
+ }
+ }
+
+ });
return parent;
}
@@ -167,4 +192,8 @@ public class ChatRoomSelectionDialog extends TitleAreaDialog {
this.getButton(Dialog.OK).setEnabled(false);
return bar;
}
+
+ public IRoomInfo getSelectedRoom() {
+ return selectedRoom;
+ }
}
diff --git a/framework/bundles/org.eclipse.ecf.ui/src/org/eclipse/ecf/ui/views/ChatRoomView.java b/framework/bundles/org.eclipse.ecf.ui/src/org/eclipse/ecf/ui/views/ChatRoomView.java
new file mode 100644
index 000000000..0c79c8da9
--- /dev/null
+++ b/framework/bundles/org.eclipse.ecf.ui/src/org/eclipse/ecf/ui/views/ChatRoomView.java
@@ -0,0 +1,74 @@
+package org.eclipse.ecf.ui.views;
+
+import org.eclipse.ecf.presence.chat.IRoomInfo;
+import org.eclipse.jface.viewers.ListViewer;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.SashForm;
+import org.eclipse.swt.layout.FillLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Text;
+import org.eclipse.ui.IViewSite;
+import org.eclipse.ui.PartInitException;
+import org.eclipse.ui.part.ViewPart;
+
+public class ChatRoomView extends ViewPart {
+ private Composite mainComp = null;
+ private IRoomInfo roomInfo = null;
+ private Text writeText = null;
+ private Text readText = null;
+
+ public void createPartControl(Composite parent) {
+ mainComp = new Composite(parent, SWT.NONE);
+ mainComp.setLayout(new FillLayout());
+
+ SashForm form = new SashForm(mainComp,SWT.HORIZONTAL);
+ form.setLayout(new FillLayout());
+
+
+ Composite memberComp = new Composite(form,SWT.NONE);
+ memberComp.setLayout(new FillLayout());
+ ListViewer memberViewer = new ListViewer(memberComp, SWT.BORDER);
+
+ Composite rightComp = new Composite(form, SWT.NONE);
+ rightComp.setLayout(new FillLayout());
+
+ SashForm rightSash = new SashForm(rightComp, SWT.VERTICAL);
+ rightSash.setLayout(new FillLayout());
+
+
+ Composite readComp = new Composite(rightSash, SWT.NONE);
+ readComp.setLayout(new FillLayout());
+ readText = new Text(readComp, SWT.BORDER);
+ readText.setEditable(false);
+
+ Composite writeComp = new Composite(rightSash, SWT.NONE);
+ writeComp.setLayout(new FillLayout());
+ writeText = new Text(writeComp, SWT.BORDER | SWT.MULTI);
+
+ form.setWeights(new int[] {30, 70});
+ rightSash.setWeights(new int[] {70, 30});
+ }
+
+ public void setFocus() {
+ writeText.setFocus();
+ }
+
+ public IRoomInfo getRoomInfo() {
+ return roomInfo;
+ }
+
+ public void setRoomInfo(IRoomInfo roomInfo) {
+ this.roomInfo = roomInfo;
+ }
+
+ public void initialize() {
+ if (roomInfo == null) {
+ return;
+ }
+
+ this.setPartName(roomInfo.getName());
+
+ //Setup container
+ }
+
+}
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 9d540342a..0881feaa7 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
@@ -64,65 +64,96 @@ import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.ui.IActionBars;
import org.eclipse.ui.ISharedImages;
+import org.eclipse.ui.IViewPart;
import org.eclipse.ui.IWorkbenchActionConstants;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.PartInitException;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.part.ViewPart;
public class RosterView extends ViewPart {
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";
+
public static final String ADDBUDDY_ICON = "icons/enabled/addbuddy.gif";
+
public static final String ADDCHAT_ICON = "icons/enabled/addchat.gif";
-
+
public static final String UNFILED_GROUP_NAME = "Buddies";
+
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 openChatRoomAction;
+
// private Action addGroupAction;
// private Action addBuddyAction;
protected Hashtable chatThreads = new Hashtable();
+
protected Hashtable accounts = new Hashtable();
+
protected void addAccount(UserAccount account) {
if (account == null)
return;
accounts.put(account.getServiceID(), account);
}
+
protected UserAccount getAccount(ID serviceID) {
return (UserAccount) accounts.get(serviceID);
}
+
protected void removeAccount(ID serviceID) {
accounts.remove(serviceID);
}
+
class UserAccount {
ID serviceID;
+
IUser user;
+
ILocalInputHandler inputHandler;
+
IPresenceContainer container;
- public UserAccount(ID serviceID, IUser user, ILocalInputHandler handler, IPresenceContainer container) {
+
+ public UserAccount(ID serviceID, IUser user,
+ ILocalInputHandler handler, IPresenceContainer container) {
this.serviceID = serviceID;
this.user = user;
this.inputHandler = handler;
this.container = container;
}
+
public ID getServiceID() {
return serviceID;
}
+
public IUser getUser() {
return user;
}
+
public ILocalInputHandler getInputHandler() {
return inputHandler;
}
+
public IPresenceContainer getContainer() {
return container;
}
}
+
protected String getUserNameFromID(ID userID) {
if (userID == null)
return "";
@@ -137,6 +168,7 @@ public class RosterView extends ViewPart {
} else
return username;
}
+
public void dispose() {
for (Iterator i = accounts.keySet().iterator(); i.hasNext();) {
ID serviceID = (ID) i.next();
@@ -151,57 +183,75 @@ public class RosterView extends ViewPart {
accounts.clear();
super.dispose();
}
+
class TreeObject implements IAdaptable {
private String name;
+
private TreeParent parent;
+
private ID userID;
+
public TreeObject(String name, ID userID) {
this.name = name;
this.userID = userID;
}
+
public TreeObject(String name) {
this(name, null);
}
+
public String getName() {
return name;
}
+
public void setName(String name) {
this.name = name;
}
+
public ID getUserID() {
return userID;
}
+
public void setParent(TreeParent parent) {
this.parent = parent;
}
+
public TreeParent getParent() {
return parent;
}
+
public String toString() {
return getName();
}
+
public Object getAdapter(Class key) {
return null;
}
}
+
class TreeParent extends TreeObject {
private ArrayList children;
+
public TreeParent(String name) {
super(name);
children = new ArrayList();
}
+
public TreeParent(String name, ID userID) {
super(name, userID);
children = new ArrayList();
}
+
public void addChild(TreeObject child) {
children.add(child);
child.setParent(this);
}
+
public void removeChild(TreeObject child) {
children.remove(child);
child.setParent(null);
}
+
public void removeChildren() {
for (Iterator i = children.iterator(); i.hasNext();) {
TreeObject obj = (TreeObject) i.next();
@@ -209,20 +259,25 @@ public class RosterView extends ViewPart {
}
children.clear();
}
+
public TreeObject[] getChildren() {
return (TreeObject[]) children.toArray(new TreeObject[children
.size()]);
}
+
public boolean hasChildren() {
return children.size() > 0;
}
}
+
class TreeGroup extends TreeParent {
ID svcID;
+
public TreeGroup(ID svcID, String name) {
super(name);
this.svcID = svcID;
}
+
public int getActiveCount() {
TreeObject[] childs = getChildren();
int totCount = 0;
@@ -236,30 +291,39 @@ public class RosterView extends ViewPart {
}
return totCount;
}
+
public int getTotalCount() {
return getChildren().length;
}
+
public ID getServiceID() {
return svcID;
}
}
+
class TreeBuddy extends TreeParent {
IPresence presence = null;
+
ID svcID = null;
+
public TreeBuddy(ID svcID, String name, ID id, IPresence p) {
super(name, id);
this.svcID = svcID;
this.presence = p;
}
+
public IPresence getPresence() {
return presence;
}
+
public void setPresence(IPresence p) {
this.presence = p;
}
+
public ID getServiceID() {
return svcID;
}
+
public boolean isActive() {
IPresence p = getPresence();
if (p == null)
@@ -267,17 +331,23 @@ public class RosterView extends ViewPart {
return presence.getType().equals(IPresence.Type.AVAILABLE);
}
}
+
class ViewContentProvider implements IStructuredContentProvider,
ITreeContentProvider {
private TreeParent invisibleRoot;
+
private TreeParent root;
+
public void inputChanged(Viewer v, Object oldInput, Object newInput) {
}
+
public void dispose() {
}
+
public TreeBuddy findBuddyWithUserID(ID userID) {
return findBuddy(root, userID);
}
+
public Object[] getElements(Object parent) {
if (parent.equals(getViewSite())) {
if (root == null)
@@ -286,23 +356,27 @@ public class RosterView extends ViewPart {
}
return getChildren(parent);
}
+
public Object getParent(Object child) {
if (child instanceof TreeObject) {
return ((TreeObject) child).getParent();
}
return null;
}
+
public Object[] getChildren(Object parent) {
if (parent instanceof TreeParent) {
return ((TreeParent) parent).getChildren();
}
return new Object[0];
}
+
public boolean hasChildren(Object parent) {
if (parent instanceof TreeParent)
return ((TreeParent) parent).hasChildren();
return false;
}
+
public TreeBuddy fillPresence(TreeBuddy obj, IPresence presence) {
obj.setPresence(presence);
obj.removeChildren();
@@ -327,6 +401,7 @@ public class RosterView extends ViewPart {
}
return obj;
}
+
public TreeBuddy createBuddy(TreeBuddy oldBuddy, IRosterEntry entry) {
String name = entry.getName();
if (name == null)
@@ -348,6 +423,7 @@ public class RosterView extends ViewPart {
+ newBuddy.getServiceID().getName()));
return newBuddy;
}
+
public TreeGroup findGroup(TreeParent parent, String name) {
TreeObject[] objs = parent.getChildren();
if (objs != null) {
@@ -359,6 +435,7 @@ public class RosterView extends ViewPart {
}
return null;
}
+
public String[] getAllGroupNames() {
TreeObject[] objs = root.getChildren();
if (objs != null) {
@@ -373,9 +450,11 @@ public class RosterView extends ViewPart {
} else
return new String[0];
}
+
public TreeBuddy findBuddy(TreeParent parent, IRosterEntry entry) {
return findBuddy(parent, entry.getUserID());
}
+
public TreeBuddy findBuddy(TreeParent parent, ID entryID) {
TreeObject[] objs = parent.getChildren();
if (objs == null)
@@ -395,6 +474,7 @@ public class RosterView extends ViewPart {
}
return null;
}
+
public void addEntry(TreeParent parent, IRosterEntry entry) {
TreeBuddy tb = findBuddy(parent, entry);
TreeBuddy newBuddy = createBuddy(tb, entry);
@@ -435,6 +515,7 @@ public class RosterView extends ViewPart {
}
}
}
+
public void replaceEntry(TreeParent parent, IRosterEntry entry) {
TreeBuddy tb = findBuddy(parent, entry);
// If entry already in tree, remove it from current position
@@ -477,11 +558,13 @@ public class RosterView extends ViewPart {
}
}
}
+
public void addGroup(ID svcID, String name) {
if (name == null)
return;
addGroup(svcID, root, name);
}
+
public void addGroup(ID svcID, TreeParent parent, String name) {
TreeGroup oldgrp = findGroup(parent, name);
if (oldgrp != null) {
@@ -492,6 +575,7 @@ public class RosterView extends ViewPart {
TreeGroup newgrp = new TreeGroup(svcID, name);
parent.addChild(newgrp);
}
+
public void removeGroup(TreeParent parent, String name) {
TreeGroup oldgrp = findGroup(parent, name);
if (oldgrp == null) {
@@ -501,20 +585,25 @@ public class RosterView extends ViewPart {
// 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);
}
+
public void replaceEntry(IRosterEntry entry) {
replaceEntry(root, entry);
}
+
public void removeRosterEntry(ID entry) {
removeEntry(root, entry);
}
+
public void removeEntry(TreeParent parent, ID entry) {
TreeBuddy buddy = findBuddy(parent, entry);
if (buddy == null)
@@ -525,6 +614,7 @@ public class RosterView extends ViewPart {
refreshView();
}
}
+
protected void removeChildren(TreeParent parent, ID svcID) {
TreeObject[] childs = parent.getChildren();
for (int i = 0; i < childs.length; i++) {
@@ -546,6 +636,7 @@ public class RosterView extends ViewPart {
}
}
}
+
public void removeAllEntriesForAccount(UserAccount account) {
if (account == null) {
root = null;
@@ -553,12 +644,14 @@ public class RosterView extends ViewPart {
removeChildren(root, account.getServiceID());
}
}
+
private void initialize() {
root = new TreeParent("Buddy List");
invisibleRoot = new TreeParent("");
invisibleRoot.addChild(root);
}
}
+
class ViewLabelProvider extends LabelProvider {
public String getText(Object obj) {
String label = null;
@@ -570,6 +663,7 @@ public class RosterView extends ViewPart {
} else
return obj.toString();
}
+
public Image getImage(Object obj) {
Image image = null; // By default, no image exists for obj, but if
// found to be a specific instance, load from
@@ -593,10 +687,13 @@ public class RosterView extends ViewPart {
return image;
}
}
+
class NameSorter extends ViewerSorter {
}
+
public RosterView() {
}
+
protected void refreshView() {
Display.getDefault().asyncExec(new Runnable() {
public void run() {
@@ -608,9 +705,11 @@ public class RosterView extends ViewPart {
}
});
}
+
protected void expandAll() {
viewer.expandToLevel(TREE_EXPANSION_LEVELS);
}
+
public void createPartControl(Composite parent) {
viewer = new TreeViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL);
viewer.setContentProvider(new ViewContentProvider());
@@ -623,6 +722,7 @@ public class RosterView extends ViewPart {
hookDoubleClickAction();
contributeToActionBars();
}
+
private void hookContextMenu() {
MenuManager menuMgr = new MenuManager("#PopupMenu");
menuMgr.setRemoveAllWhenShown(true);
@@ -635,11 +735,13 @@ public class RosterView extends ViewPart {
viewer.getControl().setMenu(menu);
getSite().registerContextMenu(menuMgr, viewer);
}
+
private void contributeToActionBars() {
IActionBars bars = getViewSite().getActionBars();
fillLocalPullDown(bars.getMenuManager());
fillLocalToolBar(bars.getToolBarManager());
}
+
private void fillLocalPullDown(IMenuManager manager) {
// manager.add(addBuddyAction);
// manager.add(new Separator());
@@ -650,6 +752,7 @@ public class RosterView extends ViewPart {
manager.add(disconnectAction);
manager.add(openChatRoomAction);
}
+
private void fillContextMenu(IMenuManager manager) {
final TreeObject treeObject = getSelectedTreeObject();
final ID targetID = treeObject.getUserID();
@@ -698,25 +801,21 @@ public class RosterView extends ViewPart {
final TreeGroup treeGroup = (TreeGroup) treeObject;
final String groupName = treeGroup.getName();
/*
- Action addUserAction = new Action() {
- public void run() {
- addUserToGroup(treeGroup.getServiceID(), groupName);
- }
- };
-
- addUserAction.setText("Add buddy to " + treeObject.getName()
- + " for account " + treeGroup.getServiceID().getName());
- addUserAction.setImageDescriptor(ImageDescriptor
- .createFromURL(UiPlugin.getDefault().find(
- new Path(ADDBUDDY_ICON))));
- manager.add(addUserAction);
- */
+ * Action addUserAction = new Action() { public void run() {
+ * addUserToGroup(treeGroup.getServiceID(), groupName); } };
+ *
+ * addUserAction.setText("Add buddy to " + treeObject.getName() + "
+ * for account " + treeGroup.getServiceID().getName());
+ * addUserAction.setImageDescriptor(ImageDescriptor
+ * .createFromURL(UiPlugin.getDefault().find( new
+ * Path(ADDBUDDY_ICON)))); manager.add(addUserAction);
+ */
Action removeGroupAction = new Action() {
public void run() {
removeGroup(groupName);
}
};
-
+
String accountName = treeGroup.getServiceID().getName();
removeGroupAction.setText("Remove " + treeObject.getName()
+ " for account " + accountName);
@@ -732,6 +831,7 @@ public class RosterView extends ViewPart {
// Other plug-ins can contribute there actions here
manager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
}
+
protected void openDialogAndSendRequest(ID svcID, String name,
String groupName) {
String[] groupNames = this.getGroupNames();
@@ -756,6 +856,7 @@ public class RosterView extends ViewPart {
inputHandler.sendRosterAdd(user, nickname, sendGroups);
}
}
+
protected void requestAuthFrom(TreeBuddy buddy, TreeGroup tg) {
if (buddy == null)
return;
@@ -764,9 +865,11 @@ public class RosterView extends ViewPart {
String groupName = (tg == null) ? null : tg.getName();
openDialogAndSendRequest(buddy.getServiceID(), name, groupName);
}
+
protected void addUserToGroup(ID serviceID, String groupName) {
openDialogAndSendRequest(serviceID, null, groupName);
}
+
protected void removeUserFromGroup(TreeBuddy buddy, TreeGroup group) {
UserAccount account = getAccount(buddy.getServiceID());
if (account != null) {
@@ -774,12 +877,14 @@ public class RosterView extends ViewPart {
handler.sendRosterRemove(buddy.getUserID());
}
}
+
protected TreeObject getSelectedTreeObject() {
ISelection selection = viewer.getSelection();
Object obj = ((IStructuredSelection) selection).getFirstElement();
TreeObject treeObject = (TreeObject) obj;
return treeObject;
}
+
private void fillLocalToolBar(IToolBarManager manager) {
// manager.add(addBuddyAction);
// manager.add(new Separator());
@@ -790,6 +895,7 @@ public class RosterView extends ViewPart {
manager.add(disconnectAction);
manager.add(openChatRoomAction);
}
+
protected ID inputIMTarget() {
InputDialog dlg = new InputDialog(getSite().getShell(), "Send IM",
"Please enter the XMPP ID of the person you would like to IM",
@@ -812,6 +918,7 @@ public class RosterView extends ViewPart {
}
return null;
}
+
private void makeActions() {
/*
* chatAction = new Action() { public void run() { ID targetID =
@@ -854,16 +961,31 @@ public class RosterView extends ViewPart {
new Path(DISCONNECT_ICON_DISABLED))));
openChatRoomAction = new Action() {
public void run() {
- IChatRoomManager managers[] = new IChatRoomManager[accounts.size()];
+ IChatRoomManager managers[] = new IChatRoomManager[accounts
+ .size()];
int j = 0;
- for(Iterator i=accounts.values().iterator(); i.hasNext(); ) {
+ for (Iterator i = accounts.values().iterator(); i.hasNext();) {
UserAccount ua = (UserAccount) i.next();
managers[j++] = ua.getContainer().getChatRoomManager();
}
ChatRoomSelectionDialog dialog = new ChatRoomSelectionDialog(
- RosterView.this.getViewSite().getShell(), managers);
- dialog.setBlockOnOpen(true);
- dialog.open();
+ RosterView.this.getViewSite().getShell(), managers);
+ dialog.setBlockOnOpen(true);
+ dialog.open();
+
+ IWorkbenchWindow ww = PlatformUI.getWorkbench()
+ .getActiveWorkbenchWindow();
+ IWorkbenchPage wp = ww.getActivePage();
+ try {
+ IViewPart view = wp
+ .showView("org.eclipse.ecf.ui.views.ChatRoomView");
+
+ ((ChatRoomView)view).setRoomInfo(dialog.getSelectedRoom());
+ ((ChatRoomView)view).initialize();
+ } catch (PartInitException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
}
};
openChatRoomAction.setText("Enter Chatroom");
@@ -902,6 +1024,7 @@ public class RosterView extends ViewPart {
* Path(ADDBUDDY_ICON))));
*/
}
+
protected ChatWindow openChatWindowForTarget(ID targetID) {
if (targetID == null)
return null;
@@ -922,6 +1045,7 @@ public class RosterView extends ViewPart {
}
return window;
}
+
protected ChatWindow makeChatWindowForTarget(ID targetID) {
UserAccount account = getAccountForUser(targetID);
if (account == null)
@@ -933,6 +1057,7 @@ public class RosterView extends ViewPart {
chatThreads.put(targetID, window);
return window;
}
+
private void hookDoubleClickAction() {
viewer.addDoubleClickListener(new IDoubleClickListener() {
public void doubleClick(DoubleClickEvent event) {
@@ -940,12 +1065,14 @@ public class RosterView extends ViewPart {
}
});
}
+
/**
* Passing the focus request to the viewer's control.
*/
public void setFocus() {
viewer.getControl().setFocus();
}
+
public void handleRosterEntry(ID groupID, IRosterEntry entry) {
if (entry == null)
return;
@@ -960,10 +1087,12 @@ public class RosterView extends ViewPart {
refreshView();
}
}
+
public void handlePresence(ID groupID, ID userID, IPresence presence) {
IRosterEntry entry = new RosterEntry(groupID, userID, null, presence);
handleRosterEntry(groupID, entry);
}
+
protected UserAccount getAccountForUser(ID userID) {
ViewContentProvider vcp = (ViewContentProvider) viewer
.getContentProvider();
@@ -975,6 +1104,7 @@ public class RosterView extends ViewPart {
UserAccount account = getAccount(buddy.getServiceID());
return account;
}
+
protected ILocalInputHandler getHandlerForUser(ID userID) {
UserAccount account = getAccountForUser(userID);
if (account == null)
@@ -982,6 +1112,7 @@ public class RosterView extends ViewPart {
else
return account.getInputHandler();
}
+
public Object getAdapter(Class clazz) {
if (clazz != null && clazz.equals(ILocalInputHandler.class)) {
return new ILocalInputHandler() {
@@ -992,6 +1123,7 @@ public class RosterView extends ViewPart {
} else
System.err.println("handleTextLine(" + text + ")");
}
+
public void startTyping(ID userID) {
ILocalInputHandler inputHandler = getHandlerForUser(userID);
if (inputHandler != null) {
@@ -999,9 +1131,11 @@ public class RosterView extends ViewPart {
} else
System.err.println("handleStartTyping()");
}
+
public void disconnect() {
disconnect();
}
+
public void updatePresence(ID userID, IPresence presence) {
ILocalInputHandler inputHandler = getHandlerForUser(userID);
if (inputHandler != null) {
@@ -1010,9 +1144,11 @@ public class RosterView extends ViewPart {
System.err.println("updatePresence(" + userID + ","
+ presence + ")");
}
+
public void sendRosterAdd(String user, String name,
String[] groups) {
}
+
public void sendRosterRemove(ID userID) {
ILocalInputHandler inputHandler = getHandlerForUser(userID);
if (inputHandler != null) {
@@ -1028,15 +1164,18 @@ public class RosterView extends ViewPart {
} else
return null;
}
+
protected String getWindowInitText(ID targetID) {
String result = "chat with " + targetID.getName() + " started "
+ getDateAndTime() + "\n\n";
return result;
}
+
protected String getDateAndTime() {
SimpleDateFormat sdf = new SimpleDateFormat("MM:dd hh:mm:ss");
return sdf.format(new Date());
}
+
public void handleMessage(ID groupID, ID fromID, ID toID,
IMessageListener.Type type, String subject, String message) {
ChatWindow window = openChatWindowForTarget(fromID);
@@ -1047,12 +1186,15 @@ public class RosterView extends ViewPart {
+ (new SimpleDateFormat("hh:mm:ss").format(new Date())));
}
}
- public void addAccount(ID account, IUser user, ILocalInputHandler handler, IPresenceContainer container) {
+
+ public void addAccount(ID account, IUser user, ILocalInputHandler handler,
+ IPresenceContainer container) {
if (account != null) {
addAccount(new UserAccount(account, user, handler, container));
setToolbarEnabled(true);
}
}
+
protected void setToolbarEnabled(boolean enabled) {
disconnectAction.setEnabled(enabled);
openChatRoomAction.setEnabled(enabled);
@@ -1060,12 +1202,14 @@ public class RosterView extends ViewPart {
// addGroupAction.setEnabled(enabled);
// addBuddyAction.setEnabled(enabled);
}
+
public void accountDeparted(ID serviceID) {
UserAccount account = getAccount(serviceID);
if (account != null) {
handleAccountDeparted(account);
}
}
+
protected void disposeAllChatWindowsForAccount(UserAccount account,
String status) {
synchronized (chatThreads) {
@@ -1083,6 +1227,7 @@ public class RosterView extends ViewPart {
}
}
}
+
protected void removeAllRosterEntriesForAccount(UserAccount account) {
ViewContentProvider vcp = (ViewContentProvider) viewer
.getContentProvider();
@@ -1091,6 +1236,7 @@ public class RosterView extends ViewPart {
refreshView();
}
}
+
public String[] getGroupNames() {
ViewContentProvider vcp = (ViewContentProvider) viewer
.getContentProvider();
@@ -1099,6 +1245,7 @@ public class RosterView extends ViewPart {
} else
return new String[0];
}
+
public String getSelectedGroupName() {
TreeObject to = getSelectedTreeObject();
if (to == null)
@@ -1109,6 +1256,7 @@ public class RosterView extends ViewPart {
}
return null;
}
+
public void addGroup(ID svcID, String name) {
ViewContentProvider vcp = (ViewContentProvider) viewer
.getContentProvider();
@@ -1117,6 +1265,7 @@ public class RosterView extends ViewPart {
refreshView();
}
}
+
public void removeGroup(String name) {
ViewContentProvider vcp = (ViewContentProvider) viewer
.getContentProvider();
@@ -1125,6 +1274,7 @@ public class RosterView extends ViewPart {
refreshView();
}
}
+
public void removeRosterEntry(ID id) {
ViewContentProvider vcp = (ViewContentProvider) viewer
.getContentProvider();
@@ -1133,6 +1283,7 @@ public class RosterView extends ViewPart {
refreshView();
}
}
+
protected void handleAccountDeparted(UserAccount account) {
removeAllRosterEntriesForAccount(account);
disposeAllChatWindowsForAccount(account,
@@ -1141,6 +1292,7 @@ public class RosterView extends ViewPart {
if (accounts.size() == 0)
setToolbarEnabled(false);
}
+
public void handleSetRosterEntry(ID groupID, IRosterEntry entry) {
if (entry == null)
return;
@@ -1156,13 +1308,11 @@ public class RosterView extends ViewPart {
}
}
/*
- public IPresenceContainer getPresenceContainer() {
- return presenceContainer;
- }
- */
+ * public IPresenceContainer getPresenceContainer() { return
+ * presenceContainer; }
+ */
/*
- public void setPresenceContainer(IPresenceContainer presenceContainer) {
- this.presenceContainer = presenceContainer;
- }
- */
+ * public void setPresenceContainer(IPresenceContainer presenceContainer) {
+ * this.presenceContainer = presenceContainer; }
+ */
} \ No newline at end of file

Back to the top