📄 mainshell.java
字号:
/**
* 删除一个成功或者失败的删除好友请求
*
* @param key
* 好友的QQ号
*/
public Group removeDeleteToMap(int key) {
return deleteToMap.remove(key);
}
public void setGroupDirty(boolean groupDirty) {
this.groupDirty = groupDirty;
}
/**
* 设置窗口可见状态
*
* @param b
* true表示窗口可见
*/
public void setVisible(boolean b) {
shell.setVisible(b);
}
public BlindHelper getBlindHelper() {
return blindHelper;
}
public void qqShowDownloaded(final int qq) {
if(shellRegistry.hasUserInfoWindow(qq) && sm.isCached(qq)) {
display.syncExec(new Runnable() {
public void run() {
UserInfoWindow uis = shellRegistry.getUserInfoWindow(qq);
if(uis != null)
uis.setQQShow(sm.getQQShowImage(qq));
}
});
}
}
/**
* @return Returns the groupColor.
*/
public Color getGroupColor() {
return groupColor;
}
public QQShowManager getQQShowManager() {
return sm;
}
/**
* @return
* ShellLauncher对象
*/
public ShellLauncher getShellLauncher() {
return shellLauncher;
}
/**
* @return
* 窗口注册表
*/
public ShellRegistry getShellRegistry() {
return shellRegistry;
}
public Sounder getSounder() {
return sounder;
}
public ExportHelper getExportHelper() {
return exportHelper;
}
public String getCurrentOnlineNumber() {
return currentOnlineNumber;
}
public MessageQueue getMessageQueue() {
return mq;
}
public IPSeeker getIPSeeker() {
return seeker;
}
public LineStyle getDefaultStyle() {
return defaultStyle;
}
public Color getFontColor() {
return defaultStyle.foreground;
}
/**
* 设置字体颜色
*
* @param fontColor
* 字体颜色
*/
public void setFontColor(Color fontColor) {
defaultStyle.foreground = fontColor;
}
public RecordManager getRecordManager() {
return rm;
}
/**
* 删除一个好友
*
* @param f
* User
* @param directly
* 表示是直接删除还是从服务器删除
* @param removeSelf
* 是否把自己从对方的好友列表中删除
*/
public void deleteFriend(User f, boolean directly, boolean removeSelf) {
if(directly && f != null) {
Group g = f.group;
g.removeUser(f);
if(g.users.size() == 0)
blindHelper.collapseGroup(g);
blindHelper.refreshGroup(g);
} else {
// 请求服务器删除该好友
deleteFriendFromServer(f.qq, true, removeSelf, null);
}
}
/**
* 从服务器上删除一个好友
*
* @param qqNum
* 要删除的QQ号,为0表示不执行删除动作
* @param doDelete
* 表示是否从向服务器发请求要求删除这个好友,如果这个QQ号不在我好友列表里面就不需要
* @param removeSelf
* 表示是否把自己也从这个好友的列表中删除
* @param g
* 表示这个好友删除后把它放置到哪个组,如果为null则忽略
*/
public void deleteFriendFromServer(int qqNum, boolean doDelete, boolean removeSelf, Group g) {
// 如果删除请求包发送成功,则加入到删除请求哈希表中
if(doDelete)
client.deleteFriend(qqNum);
if(removeSelf)
client.removeSelfFrom(qqNum);
if(g != null)
deleteToMap.put(qqNum, g);
}
public Label getSystemMenuButton() {
return btnSysMenu;
}
public Label getSMSButton() {
return btnSMS;
}
/**
* 处理
* @param e
*/
public void handleRuntimeError(QQEvent e) {
// 隐藏窗口
stopWaitingPanelAnimation();
setVisible(false);
// 退出登录
getClient().getUser().setStatus(QQ.QQ_STATUS_OFFLINE);
logout();
// 打开报告窗口
CrashDialog dialog = new CrashDialog(this, ((ErrorPacket)e.getSource()).errorMessage);
dialog.open();
}
/**
* 重新开始登录流程
*
* @param e
*/
public void restartLogin(QQEvent e) {
// 隐藏窗口
stopWaitingPanelAnimation();
setVisible(false);
// 退出登录
getClient().getUser().setStatus(QQ.QQ_STATUS_OFFLINE);
logout();
// 显示错误提示框
if(e != null) {
String msg = "";
if(e.getSource() instanceof LoginReplyPacket)
msg = ((LoginReplyPacket)e.getSource()).replyMessage;
else if(e.getSource() instanceof ErrorPacket)
msg = ((ErrorPacket)e.getSource()).errorMessage;
MessageDialog.openError(getShell(),
message_box_login_fail_title,
(msg == null || msg.trim().equals("")) ? error_login_fail : msg);
}
relaunchLoginDialog();
}
/**
* 重新打开登录对话框
*/
public void relaunchLoginDialog() {
// 再次显示登录对话框
LoginDialog login = new LoginDialog(getShell(), true);
if(login.open()) {
// 创建QQ用户对象
QQUser me = new QQUser(login.getQQ(), login.getMd5Password());
if(login.isLoginHidden()) {
me.setLoginMode(QQ.QQ_LOGIN_MODE_HIDDEN);
me.setStatus(QQ.QQ_STATUS_HIDDEN);
} else {
me.setLoginMode(QQ.QQ_LOGIN_MODE_NORMAL);
me.setStatus(QQ.QQ_STATUS_ONLINE);
}
// 设置用户对象
getClient().setUser(me);
// 初始化用户文件路径
LumaQQ.initUserFilePath(me);
// 设置client,相当于刷新各种数据
setClient(getClient());
// 检查是否使用登录框的网络设置
if(login.isUseNetworkSetting())
LumaQQ.syncLoginOption(login.getLogins().getNetwork(), optionHelper);
// relayout
getBlind().layout();
// 打开主界面
setVisible(true);
setWaitingPanelHint(hint_login);
resumeWaitingPanelAnimation();
checkLogin(false, false);
} else
close();
}
/**
* 改变当前用户
*/
public void changeUser() {
LoginDialog login = new LoginDialog(shell, true);
if(login.open()) {
int qqNum = login.getQQ();
if(myModel.qq != qqNum) {
// 重设界面
switchPanel(PANEL_WAITING);
setWaitingPanelHint(hint_login);
resumeWaitingPanelAnimation();
// 登出
client.logout();
uiHelper.setTrayIconByStatus();
// 创建QQ用户对象
QQUser me = new QQUser(qqNum, login.getMd5Password());
if(login.isLoginHidden()) {
me.setLoginMode(QQ.QQ_LOGIN_MODE_HIDDEN);
me.setStatus(QQ.QQ_STATUS_HIDDEN);
} else {
me.setLoginMode(QQ.QQ_LOGIN_MODE_NORMAL);
me.setStatus(QQ.QQ_STATUS_ONLINE);
}
// 创建QQ客户端对象
client.setUser(me);
// 初始化用户文件路径
LumaQQ.initUserFilePath(me);
// 设置client
setClient(this.client);
// 检查是否使用登录框的网络设置
if(login.isUseNetworkSetting())
LumaQQ.syncLoginOption(login.getLogins().getNetwork(), optionHelper);
// 设置tray的tooltip
if(item != null)
item.setToolTipText("LumaQQ " + String.valueOf(myModel.qq));
// 登陆
checkLogin(false, false);
}
}
}
public ClusterCustomFaceReceiver getFaceReceiver() {
return faceReceiver;
}
/**
* @param f
*/
public void addOnline(User f) {
currentOnlines.add(f);
}
public Label getSystemMessageButton() {
return btnSysMsg;
}
public TrayItem getTrayItem() {
return item;
}
public Ring getStatusRing() {
return statusRing;
}
/**
* @return Returns the optionHelper.
*/
public OptionHelper getOptionHelper() {
return optionHelper;
}
public ClusterCategoryTool getClusterCategoryUtility() {
return ccu;
}
/**
* 收到提取消息按键时调用此方法
*/
public void onMessageKey() {
if(mq.hasNext()) {
populateMessage();
} else {
menuHelper.setStatusMenuVisible(false);
if(shell.getMinimized()) {
shell.setLocation(shellLocation);
shell.setMinimized(false);
shell.setVisible(true);
} else if(isAutoDockEnabled() && isDocking())
pend();
}
}
public IHotkeyListener getMessageKeyListener() {
return messageKeyListener;
}
public Listener getFalseMessageKeyListener() {
return falseMessageKeyListener;
}
public void off() {
((AutoDockManager)getShell().getData(AutoDockManager.DOCK_MANAGER)).off();
}
private boolean isAutoDockEnabled() {
return getShell().getData(AutoDockManager.DOCK_MANAGER) != null;
}
/**
* 主窗口是否停靠状态
*
* @return
*/
private boolean isDocking() {
return ((AutoDockManager)getShell().getData(AutoDockManager.DOCK_MANAGER)).isDocking();
}
/**
* 主窗口是否在屏幕边缘
*
* @return
*/
private boolean isPending() {
return ((AutoDockManager)getShell().getData(AutoDockManager.DOCK_MANAGER)).isPending();
}
/**
* 主窗口是否没有dock,也没有pending
*
* @return
*/
public boolean isOff() {
AutoDockManager manager = (AutoDockManager)getShell().getData(AutoDockManager.DOCK_MANAGER);
if(manager == null)
return true;
else
return manager.isOff();
}
/**
* 按了短信按钮
*/
private void onSMS() {
ReceiveIMPacket packet = (ReceiveIMPacket)mq.getSMS();
if(packet == null)
shellLauncher.openSMSWindow();
else {
if(packet.sms.sender == 10000) {
/*
* 打开普通手机消息
*/
String mobile = packet.sms.senderName;
SMSWindow window = shellLauncher.openSMSWindow(mobile);
window.putSMS(packet);
packet = (ReceiveIMPacket)mq.getSMS(mobile);
while(packet != null) {
window.putSMS(packet);
packet = (ReceiveIMPacket)mq.getSMS(mobile);
}
} else{
/*
* 打开移动QQ和绑定手机用户消息
*/
User f = ModelRegistry.getUser(packet.sms.sender);
if(f == null) {
f = new User();
f.qq = packet.sms.sender;
}
SMSWindow window = shellLauncher.openSMSWindow(f);
window.putSMS(packet);
packet = (ReceiveIMPacket)mq.getSMS(f.qq);
while(packet != null) {
window.putSMS(packet);
packet = (ReceiveIMPacket)mq.getSMS(f.qq);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -