📄 receivesystemmessageshell.java
字号:
return qq;
}
/* (non-Javadoc)
* @see org.eclipse.swt.events.ShellListener#shellClosed(org.eclipse.swt.events.ShellEvent)
*/
public void shellClosed(ShellEvent e) {
main.getClient().removeQQListener(this);
}
/**
* 是当前窗口激活
*/
public void setActive() {
shell.setActive();
}
/**
* 代理方法,设置窗口的最小化状态
* @param b
*/
public void setMinimized(boolean b) {
shell.setMinimized(b);
}
/**
* 设置要显示的系统消息
* @param in
*/
public void setSystemMessage(BasicInPacket in) {
if(in instanceof SystemNotificationPacket) {
SystemNotificationPacket packet = (SystemNotificationPacket)in;
setSystemMessage(packet.type, 0, packet.from, packet.message, (byte)0, true);
} else if(in instanceof ReceiveIMPacket) {
ReceiveIMPacket packet = (ReceiveIMPacket)in;
if(packet.header.type == QQ.QQ_RECV_IM_SYS_MESSAGE)
setSystemMessage(packet.header.type, 0, 10000, packet.sysMessage, (byte)0, false);
else
setSystemMessage(packet.header.type, packet.header.sender, packet.sender, packet.message, packet.clusterType, true);
}
}
/**
* 设置要显示的系统消息
* @param type 消息的类型,可能取很多值,不光可能是系统通知,也可能是群通知
* @param clusterId 群内部ID,如果不是群通知消息,这个参数无意义,可以任意值
* @param sender 发送者的QQ号
* @param message 消息内容
* @param clusterType 群类型,如果不是群通知消息,这个参数无意义,可以任意值
* @param prefix false表示不要从资源文件中读取字符串,直接使用message的值
*/
public void setSystemMessage(char type, int clusterId, int sender, String message, byte clusterType, boolean prefix) {
String senderStr = String.valueOf(sender);
String clusterIdStr = String.valueOf(clusterId);
setQQ(sender);
this.sender = sender;
btnApprove.setVisible(false);
btnReject.setVisible(false);
btnAdd.setVisible(false);
btnAddStranger.setVisible(false);
switch(type) {
case QQ.QQ_MSG_SYS_BEING_ADDED:
setNick(senderStr);
btnAdd.setVisible(true);
if(prefix)
textMsg.setText(LumaQQ.getString("receive.system.message.addme", new Object[] { senderStr }));
else
textMsg.setText(message);
break;
case QQ.QQ_MSG_SYS_ADD_FRIEND_REQUEST:
setNick(senderStr);
btnApprove.setVisible(true);
btnReject.setVisible(true);
btnAdd.setVisible(true);
if(prefix)
textMsg.setText(LumaQQ.getString("receive.system.message.request", new Object[] { senderStr, message }));
else
textMsg.setText(message);
break;
case QQ.QQ_MSG_SYS_ADD_FRIEND_APPROVED:
setNick(senderStr);
if(prefix)
textMsg.setText(LumaQQ.getString("receive.system.message.approved", new Object[] { senderStr }));
else
textMsg.setText(message);
break;
case QQ.QQ_MSG_SYS_ADD_FRIEND_REJECTED:
setNick(senderStr);
btnAddStranger.setVisible(true);
if(prefix)
textMsg.setText(LumaQQ.getString("receive.system.message.rejected", new Object[] { senderStr, message }));
else
textMsg.setText(message);
break;
case QQ.QQ_RECV_IM_ADDED_TO_CLUSTER:
case QQ.QQ_RECV_IM_CREATE_CLUSTER:
setNick(clusterIdStr);
isCluster = true;
setQQ(clusterId);
if(prefix) {
if(clusterType == QQ.QQ_CLUSTER_TYPE_PERMANENT)
textMsg.setText(LumaQQ.getString("cluster.message.permanent.cluster.created", new Object[] { clusterIdStr, senderStr }));
else
textMsg.setText(LumaQQ.getString("cluster.message.temporary.cluster.created", new Object[] { clusterIdStr, senderStr }));
} else
textMsg.setText(message);
break;
case QQ.QQ_RECV_IM_DELETED_FROM_CLUSTER:
setNick(clusterIdStr);
isCluster = true;
setQQ(clusterId);
if(prefix) {
if(sender == main.getMyModel().getQQ())
textMsg.setText(LumaQQ.getString("cluster.message.removed", new Object[] { clusterIdStr }));
else
textMsg.setText(LumaQQ.getString("cluster.message.exit", new Object[] { senderStr, clusterIdStr }));
} else
textMsg.setText(message);
break;
case QQ.QQ_RECV_IM_REQUEST_JOIN_CLUSTER:
setNick(clusterIdStr);
isCluster = true;
setQQ(clusterId);
btnApprove.setVisible(true);
btnReject.setVisible(true);
if(prefix)
textMsg.setText(LumaQQ.getString("cluster.message.request", new Object[] { senderStr, clusterIdStr, message }));
else
textMsg.setText(message);
break;
case QQ.QQ_RECV_IM_APPROVE_JOIN_CLUSTER:
setNick(clusterIdStr);
isCluster = true;
setQQ(clusterId);
if(prefix)
textMsg.setText(LumaQQ.getString("cluster.message.approved", new Object[] { senderStr }));
else
textMsg.setText(message);
break;
case QQ.QQ_RECV_IM_REJECT_JOIN_CLUSTER:
setNick(clusterIdStr);
isCluster = true;
setQQ(clusterId);
if(prefix)
textMsg.setText(LumaQQ.getString("cluster.message.rejected", new Object[] { senderStr, message }));
else
textMsg.setText(message);
break;
default:
textMsg.setText(message);
break;
}
}
/**
* 设置QQ号
* @param qq
*/
public void setQQ(int qqNum) {
this.qq = qqNum;
textQQ.setText(String.valueOf(qqNum));
}
/**
* 设置昵称
* @param nick
*/
public void setNick(String nick) {
textNick.setText(nick);
}
/**
* 关闭窗口
*/
public void close() {
btnUserInfo.stopAnimate();
shell.close();
}
/* (non-Javadoc)
* @see edu.tsinghua.lumaqq.qq.events.QQListener#qqEvent(edu.tsinghua.lumaqq.qq.events.QQEvent)
*/
public void qqEvent(QQEvent e) {
switch(e.type) {
case QQEvent.QQ_ADD_FRIEND_AUTH_SEND_SUCCESS:
processAddFriendAuthSendSuccess(e);
break;
case QQEvent.QQ_ADD_FRIEND_AUTH_SEND_FAIL:
processAddFriendAuthSendFail(e);
break;
case QQEvent.QQ_ADD_FRIEND_SUCCESS:
processAddFriendSuccess(e);
break;
case QQEvent.QQ_ADD_FRIEND_NEED_AUTH:
processAddFriendNeedAuth(e);
break;
case QQEvent.QQ_ADD_FRIEND_DENY:
processAddFriendForbidden(e);
break;
case QQEvent.QQ_DELETE_FRIEND_SUCCESS:
case QQEvent.QQ_DELETE_FRIEND_FAIL:
processDeleteFriendEvent(e);
break;
case QQEvent.QQ_JOIN_CLUSTER_AUTH_SEND_SUCCESS:
processJoinClusterAuthSendSuccess(e);
break;
case QQEvent.QQ_JOIN_CLUSTER_AUTH_SEND_FAIL:
processJoinClusterAuthSendFail(e);
break;
case QQEvent.QQ_OPERATION_TIMEOUT:
if(e.operation == QQ.QQ_CMD_ADD_FRIEND_AUTH)
processAddFriendAuthSendFail(e);
else if(e.operation == QQ.QQ_CMD_DELETE_FRIEND)
processDeleteFriendTimeout();
else if(e.operation == QQ.QQ_CMD_CLUSTER_CMD)
processClusterCommandTimeout(e);
break;
}
}
/**
* 处理群操作超时事件
* @param e
*/
private void processClusterCommandTimeout(QQEvent e) {
ClusterCommandReplyPacket packet = (ClusterCommandReplyPacket)e.getSource();
if(packet.subCommand == QQ.QQ_CLUSTER_CMD_JOIN_CLUSTER_AUTH)
processJoinClusterAuthSendFail(e);
}
/**
* 处理群认证消息发送失败事件
* @param e
*/
private void processJoinClusterAuthSendFail(QQEvent e) {
ClusterCommandReplyPacket packet = (ClusterCommandReplyPacket)e.getSource();
if(qq == packet.clusterId) {
main.getDisplay().syncExec(
new Runnable() {
public void run() {
textMsg.setEditable(true);
textMsg.setBackground(main.getDisplay().getSystemColor(SWT.COLOR_WHITE));
btnApprove.setEnabled(true);
btnReject.setEnabled(true);
lblHint.setText(LumaQQ.getString("receive.system.message.fail.label"));
textMsg.setText(LumaQQ.getString("receive.system.message.send.fail"));
btnUserInfo.stopAnimate();
}
}
);
}
}
/**
* 处理群认证消息发送成功事件
* @param e
*/
private void processJoinClusterAuthSendSuccess(QQEvent e) {
ClusterCommandReplyPacket packet = (ClusterCommandReplyPacket)e.getSource();
if(qq == packet.clusterId) {
main.getDisplay().syncExec(new Runnable() {
public void run() {
btnApprove.setVisible(false);
btnReject.setVisible(false);
lblHint.setText(LumaQQ.getString("receive.system.message.success.label"));
textMsg.setText(LumaQQ.getString("receive.system.message.submited"));
btnUserInfo.stopAnimate();
// 请求得到群信息
main.getClient().getClusterInfo(qq);
}
});
}
}
/**
* 处理删除好友超时事件
*/
private void processDeleteFriendTimeout() {
main.getDisplay().syncExec(
new Runnable() {
public void run() {
textMsg.setText(LumaQQ.getString("receive.system.message.timeout"));
}
}
);
}
// 处理删除好友成功事件
private void processDeleteFriendEvent(QQEvent e) {
main.getDisplay().syncExec(
new Runnable() {
public void run() {
close();
}
}
);
}
// 处理对方禁止添加好友事件
private void processAddFriendForbidden(QQEvent e) {
AddFriendPacket packet = (AddFriendPacket)e.getSource();
if(qq == packet.getTo()) {
main.getDisplay().syncExec(
new Runnable() {
public void run() {
textMsg.setText(LumaQQ.getString("receive.system.message.forbidden"));
btnUserInfo.stopAnimate();
}
}
);
}
}
// 处理添加好友需要认证事件
private void processAddFriendNeedAuth(QQEvent e) {
AddFriendPacket packet = (AddFriendPacket)e.getSource();
if(qq == packet.getTo()) {
main.getDisplay().syncExec(
new Runnable() {
public void run() {
btnApprove.setEnabled(true);
btnReject.setEnabled(true);
btnAdd.setEnabled(true);
btnAdd.setVisible(true);
textMsg.setEditable(true);
textMsg.setBackground(main.getDisplay().getSystemColor(SWT.COLOR_WHITE));
textMsg.setText("");
btnAdd.setEnabled(true);
lblHint.setText(LumaQQ.getString("receive.system.message.auth.label"));
addSecondStep = true;
rejectSecondStep = false;
btnUserInfo.stopAnimate();
}
}
);
}
}
// 处理添加好友成功事件
private void processAddFriendSuccess(QQEvent e) {
AddFriendPacket packet = (AddFriendPacket)e.getSource();
if(qq == packet.getTo()) {
main.getDisplay().asyncExec(
new Runnable() {
public void run() {
btnAdd.setVisible(false);
textMsg.setText(LumaQQ.getString("receive.system.message.add.success"));
btnUserInfo.stopAnimate();
main.getMVCHelper().addFriendViewPart(qq);
}
}
);
}
}
// 处理认证消息发送失败事件
private void processAddFriendAuthSendFail(QQEvent e) {
AddFriendAuthPacket packet = (AddFriendAuthPacket)e.getSource();
type = packet.getAction();
if(qq == packet.getTo()) {
main.getDisplay().syncExec(
new Runnable() {
public void run() {
if(type == QQ.QQ_MY_AUTH_REQUEST || type == QQ.QQ_MY_AUTH_REJECT) {
textMsg.setEditable(true);
textMsg.setBackground(main.getDisplay().getSystemColor(SWT.COLOR_WHITE));
}
btnApprove.setEnabled(true);
btnReject.setEnabled(true);
btnAdd.setEnabled(true);
lblHint.setText(LumaQQ.getString("receive.system.message.fail.label"));
textMsg.setText(LumaQQ.getString("receive.system.message.send.fail"));
btnUserInfo.stopAnimate();
}
}
);
}
}
// 处理认证消息送出成功事件
private void processAddFriendAuthSendSuccess(QQEvent e) {
AddFriendAuthPacket packet = (AddFriendAuthPacket)e.getSource();
type = packet.getAction();
if(qq == packet.getTo()) {
main.getDisplay().syncExec(
new Runnable() {
public void run() {
if(type == QQ.QQ_MY_AUTH_APPROVE || type == QQ.QQ_MY_AUTH_REJECT) {
btnApprove.setVisible(false);
btnReject.setVisible(false);
}
btnApprove.setEnabled(true);
btnReject.setEnabled(true);
btnAdd.setEnabled(true);
lblHint.setText(LumaQQ.getString("receive.system.message.success.label"));
textMsg.setText(LumaQQ.getString("receive.system.message.submited"));
btnUserInfo.stopAnimate();
}
}
);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -