diff options
| author | slewis | 2005-02-22 07:22:24 +0000 |
|---|---|---|
| committer | slewis | 2005-02-22 07:22:24 +0000 |
| commit | e95d37de37bb9d16ca3cc8f43b500299abb4edfb (patch) | |
| tree | ebe646b7dfd517734953ba779e7d864ac23f309d | |
| parent | 7118eb889e62cef81564369d7efaabbb2219f071 (diff) | |
| download | org.eclipse.ecf-e95d37de37bb9d16ca3cc8f43b500299abb4edfb.tar.gz org.eclipse.ecf-e95d37de37bb9d16ca3cc8f43b500299abb4edfb.tar.xz org.eclipse.ecf-e95d37de37bb9d16ca3cc8f43b500299abb4edfb.zip | |
Fixes for bugs. Added disconnect operation to RosterView. Added hUI andling of server disconnect
4 files changed, 84 insertions, 11 deletions
diff --git a/framework/bundles/org.eclipse.ecf.ui/src/org/eclipse/ecf/ui/views/ChatWindow.java b/framework/bundles/org.eclipse.ecf.ui/src/org/eclipse/ecf/ui/views/ChatWindow.java index 878ec2927..809b4565a 100644 --- a/framework/bundles/org.eclipse.ecf.ui/src/org/eclipse/ecf/ui/views/ChatWindow.java +++ b/framework/bundles/org.eclipse.ecf.ui/src/org/eclipse/ecf/ui/views/ChatWindow.java @@ -55,6 +55,9 @@ public class ChatWindow extends ApplicationWindow implements IMessageViewer { protected IUser localUser; protected IUser remoteUser; + protected boolean disposed = false; + protected Thread flashThread = null; + protected IUser getLocalUser() { return localUser; } @@ -165,7 +168,8 @@ public class ChatWindow extends ApplicationWindow implements IMessageViewer { blank = new Image(newShell.getDisplay(), data); flash = new Flash(newShell.getDisplay()); - new Thread(flash).start(); + flashThread = new Thread(flash); + flashThread.start(); newShell.addDisposeListener(new DisposeListener() { public void widgetDisposed(DisposeEvent e) { @@ -288,6 +292,24 @@ public class ChatWindow extends ApplicationWindow implements IMessageViewer { } } + public void setDisposed(final String message) { + Display.getDefault().syncExec(new Runnable() { + public void run() { + disposed = true; + if (flashThread != null) { + flashThread.interrupt(); + flashThread = null; + } + if (chat != null) { + chat.setDisposed(); + } + if (!getShell().isDisposed()) { + getShell().setText(getShell().getText()+" (inactive)"); + } + setStatus(message); + } + }); + } public void openAndFlash() { Display.getDefault().syncExec(new Runnable() { public void run() { @@ -304,8 +326,15 @@ public class ChatWindow extends ApplicationWindow implements IMessageViewer { * @see org.eclipse.jface.window.Window#handleShellCloseEvent() */ protected void handleShellCloseEvent() { - if (!getShell().isDisposed()) - getShell().setVisible(false); + if (!getShell().isDisposed()) { + if (!disposed) { + chat.dispose(); + chat = null; + getShell().dispose(); + } else { + getShell().setVisible(false); + } + } } /* (non-Javadoc) @@ -314,7 +343,7 @@ public class ChatWindow extends ApplicationWindow implements IMessageViewer { public void showMessage(final ID fromID, ID toID, Type type, String subject, final String message) { Display.getDefault().syncExec(new Runnable() { public void run() { - if (chat != null) { + if (!disposed && chat != null) { chat.appendText(new ChatLine(message,getRemoteUser())); } } diff --git a/framework/bundles/org.eclipse.ecf.ui/src/org/eclipse/ecf/ui/views/ITextInputHandler.java b/framework/bundles/org.eclipse.ecf.ui/src/org/eclipse/ecf/ui/views/ITextInputHandler.java index 4dd1901f5..da73ed518 100644 --- a/framework/bundles/org.eclipse.ecf.ui/src/org/eclipse/ecf/ui/views/ITextInputHandler.java +++ b/framework/bundles/org.eclipse.ecf.ui/src/org/eclipse/ecf/ui/views/ITextInputHandler.java @@ -5,4 +5,5 @@ import org.eclipse.ecf.core.identity.ID; public interface ITextInputHandler { public void handleTextLine(ID userID, String text); public void handleStartTyping(ID userID); + public void disconnect(); } 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 6a23a030c..4a0018eca 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 @@ -285,7 +285,9 @@ public class RosterView extends ViewPart implements ILocalUserSettable, grp = addEntriesToGroup(grp, group); root.addChild(grp); } - + public void removeAllEntries() { + root = null; + } private void initialize() { root = new TreeParent("Buddy List"); /* @@ -400,7 +402,7 @@ public class RosterView extends ViewPart implements ILocalUserSettable, private void fillLocalToolBar(IToolBarManager manager) { manager.add(chatAction); manager.add(new Separator()); - //manager.add(disconnectAction); + manager.add(disconnectAction); } protected ID inputIMTarget() { @@ -422,6 +424,7 @@ public class RosterView extends ViewPart implements ILocalUserSettable, } return null; } + private void makeActions() { chatAction = new Action() { public void run() { @@ -432,6 +435,7 @@ public class RosterView extends ViewPart implements ILocalUserSettable, chatAction.setText("Send Instant Message..."); chatAction.setImageDescriptor(PlatformUI.getWorkbench().getSharedImages() .getImageDescriptor(ISharedImages.IMG_OBJS_INFO_TSK)); + chatAction.setEnabled(false); selectedDoubleClickAction = new Action() { public void run() { TreeObject treeObject = getSelectedTreeObject(); @@ -441,12 +445,16 @@ public class RosterView extends ViewPart implements ILocalUserSettable, }; disconnectAction = new Action() { public void run() { - // XXX disconnect from server and dispose everything here - showMessage("Disconnecting"); + if (textInputHandler != null) { + textInputHandler.disconnect(); + chatAction.setEnabled(false); + this.setEnabled(false); + } } }; disconnectAction.setText("Disconnect"); - disconnectAction.setToolTipText("Disconnect from server"); + disconnectAction.setToolTipText("Disconnect from server "+((groupID==null)?"<disconnected>":groupID.getName())); + disconnectAction.setEnabled(false); } @@ -552,6 +560,12 @@ public class RosterView extends ViewPart implements ILocalUserSettable, } else System.out.println("handleStartTyping()"); } + public void disconnect() { + if (textInputHandler != null) { + textInputHandler.disconnect(); + } else + System.out.println("disconnect()"); + } }; } else if (clazz.equals(ILocalUserSettable.class)) { return this; @@ -598,7 +612,11 @@ public class RosterView extends ViewPart implements ILocalUserSettable, * @see org.eclipse.ecf.ui.views.ILocalUserSettable#setGroup(org.eclipse.ecf.core.identity.ID) */ public void setGroup(ID groupManager) { - groupID = groupManager; + if (groupManager != null) { + groupID = groupManager; + disconnectAction.setEnabled(true); + chatAction.setEnabled(true); + } } /* (non-Javadoc) @@ -612,8 +630,30 @@ public class RosterView extends ViewPart implements ILocalUserSettable, } } + protected void disposeAllChatWindows(String status) { + synchronized (chatThreads) { + for(Iterator i=chatThreads.values().iterator(); i.hasNext(); ) { + ChatWindow window = (ChatWindow) i.next(); + window.setDisposed(status); + } + chatThreads.clear(); + } + } + + protected void removeAllRosterEntries() { + ViewContentProvider vcp = (ViewContentProvider) viewer + .getContentProvider(); + if (vcp != null) { + vcp.removeAllEntries(); + refreshView(); + } + } + protected void handleGroupManagerDeparted() { - // XXX TODO -- this should indicate visually that the server/group manager departed + removeAllRosterEntries(); + disposeAllChatWindows("Disconnected from server. Chat is inactive"); + chatAction.setEnabled(false); + disconnectAction.setEnabled(false); } }
\ No newline at end of file diff --git a/framework/bundles/org.eclipse.ecf.ui/src/org/eclipse/ecf/ui/views/TextChatComposite.java b/framework/bundles/org.eclipse.ecf.ui/src/org/eclipse/ecf/ui/views/TextChatComposite.java index 07e3e7cc8..33a34c250 100644 --- a/framework/bundles/org.eclipse.ecf.ui/src/org/eclipse/ecf/ui/views/TextChatComposite.java +++ b/framework/bundles/org.eclipse.ecf.ui/src/org/eclipse/ecf/ui/views/TextChatComposite.java @@ -388,6 +388,9 @@ public class TextChatComposite extends Composite { super.dispose(); } + protected void setDisposed() { + textinput.setEnabled(false); + } protected void checkSubclass() { } } |
