Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorslewis2005-02-22 07:22:24 +0000
committerslewis2005-02-22 07:22:24 +0000
commite95d37de37bb9d16ca3cc8f43b500299abb4edfb (patch)
treeebe646b7dfd517734953ba779e7d864ac23f309d
parent7118eb889e62cef81564369d7efaabbb2219f071 (diff)
downloadorg.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
-rw-r--r--framework/bundles/org.eclipse.ecf.ui/src/org/eclipse/ecf/ui/views/ChatWindow.java37
-rw-r--r--framework/bundles/org.eclipse.ecf.ui/src/org/eclipse/ecf/ui/views/ITextInputHandler.java1
-rw-r--r--framework/bundles/org.eclipse.ecf.ui/src/org/eclipse/ecf/ui/views/RosterView.java54
-rw-r--r--framework/bundles/org.eclipse.ecf.ui/src/org/eclipse/ecf/ui/views/TextChatComposite.java3
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() {
}
}

Back to the top