📄 mainshell.java
字号:
opDialog.setFailString(LumaQQ.getResourceString("message.box.op.upload.fail"));
opDialog.open();
// 组装上传分组名称包,注意i从1开始,因为我的好友组是缺省的,不需要上传
// 同时组装上传分组好友列表包
GroupNameOpPacket gnoPacket = new GroupNameOpPacket();
UploadGroupFriendPacket ugfPacket = new UploadGroupFriendPacket();
int tabSize = model.getTabCount();
for(int i = 0, g = 0; i < tabSize; i++) {
GroupModel gModel = (GroupModel)model.getTab(i);
if(gModel.needUpload()) {
// 等于0表示是“我的好友”,这个是不需要上传名字的
if(i != 0)
gnoPacket.addGroup(model.getTabName(i));
// 添加组中好友
int itemSize = model.getItemCount(i);
for(int j = 0; j < itemSize; j++) {
FriendModel fModel = (FriendModel)model.getItem(i, j);
int qqNum = fModel.getQQ();
ugfPacket.addFriend(g, qqNum);
}
g++;
}
}
// 发送
client.sendPacket(gnoPacket);
client.sendPacket(ugfPacket);
}
}
);
// 下载分组
sub = new MenuItem(groupMenu, SWT.PUSH);
sub.setText(LumaQQ.getResourceString("menu.sys.group.download"));
sub.setImage(icons.getResource(IconHolder.icoDownloadGroup));
sub.addSelectionListener(
new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
// 检查是否已经登陆,没有则返回
if(!client.getUser().isLoggedIn()) return;
// 检查当前是否有其他长时间操作正在进行,是则返回
if(working) return;
else working = true;
// 打开提示框
opDialog = new OperationShell(getThis());
opDialog.setTitle(LumaQQ.getResourceString("op.download.title"));
opDialog.setHint(LumaQQ.getResourceString("op.download.hint"));
opDialog.setSuccessString(LumaQQ.getResourceString("message.box.op.download.success"));
opDialog.setFailString(LumaQQ.getResourceString("message.box.op.download.fail"));
opDialog.open();
// 组装下载分组名称包和下载分组好友列表包
GroupNameOpPacket gnoPacket = new GroupNameOpPacket();
gnoPacket.setType(QQ.QQ_DOWNLOAD_GROUP_NAME);
DownloadGroupFriendPacket dgfPacket = new DownloadGroupFriendPacket();
// 发送
client.sendPacket(gnoPacket);
client.sendPacket(dgfPacket);
}
}
);
// separator
MenuItem separator = new MenuItem(sysMenu, SWT.SEPARATOR);
// 好友信息管理菜单
mi = new MenuItem(sysMenu, SWT.CASCADE);
mi.setText(LumaQQ.getResourceString("menu.sys.friend"));
mi.setImage(icons.getResource(IconHolder.icoFriendView));
Menu infoMenu = new Menu(mi);
mi.setMenu(infoMenu);
// separator
separator = new MenuItem(sysMenu, SWT.SEPARATOR);
// 刷新好友列表
mi = new MenuItem(infoMenu, SWT.PUSH);
mi.setText(LumaQQ.getResourceString("menu.sys.friend.refresh"));
mi.setImage(icons.getResource(IconHolder.icoFriend));
mi.addSelectionListener(
new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
client.getFriendList();
}
}
);
// 批量下载好友备注
mi = new MenuItem(infoMenu, SWT.PUSH);
mi.setText(LumaQQ.getResourceString("menu.sys.friend.download.remark"));
mi.setImage(icons.getResource(IconHolder.icoDownloadRemark));
mi.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
// 检查是否已经登陆,没有则返回
if(!client.getUser().isLoggedIn()) return;
// 检查当前是否有其他长时间操作正在进行,是则返回
if(working) return;
else working = true;
// 打开下载进度窗口
DownloadFriendRemarkShell downloadShell = new DownloadFriendRemarkShell(getThis());
downloadShell.open();
}
});
// 申请QQ号码
mi = new MenuItem(sysMenu, SWT.PUSH);
mi.setText(LumaQQ.getResourceString("menu.sys.apply"));
mi.setImage(icons.getResource(IconHolder.icoApply));
mi.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
openBrowserShell("http://im.qq.com/qq/reg_freeqq.shtml", "Apply Free QQ Number", LumaQQ.getResourceString("message.box.manual.apply"));
}
});
// separator
separator = new MenuItem(sysMenu, SWT.SEPARATOR);
// IP查询
mi = new MenuItem(sysMenu, SWT.PUSH);
mi.setText(LumaQQ.getResourceString("menu.sys.searchip"));
mi.setImage(icons.getResource(IconHolder.icoSearchIp));
mi.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
IPSeekerShell ips = new IPSeekerShell(getThis());
ips.open();
}
});
// 个人设定
mi = new MenuItem(sysMenu, SWT.PUSH);
mi.setText(LumaQQ.getResourceString("menu.sys.personinfo"));
mi.setImage(icons.getResource(IconHolder.icoPersonInfo));
mi.addSelectionListener(
new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
openUserInfoShell(myModel, true);
}
}
);
// 系统参数
mi = new MenuItem(sysMenu, SWT.PUSH);
mi.setText(LumaQQ.getResourceString("menu.sys.sysopt"));
mi.setImage(icons.getResource(IconHolder.icoSysOpt));
mi.addSelectionListener(
new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
openSystemOptionShell();
}
}
);
// separator
separator = new MenuItem(sysMenu, SWT.SEPARATOR);
// 更改用户
mi = new MenuItem(sysMenu, SWT.PUSH);
mi.setText(LumaQQ.getResourceString("menu.sys.changeuser"));
mi.setImage(icons.getResource(IconHolder.icoChangeUser));
mi.addSelectionListener(
new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
changeUser();
}
}
);
// separator
separator = new MenuItem(sysMenu, SWT.SEPARATOR);
// 检查LumaQQ更新
mi = new MenuItem(sysMenu, SWT.PUSH);
mi.setText(LumaQQ.getResourceString("menu.sys.checkupdate"));
mi.setImage(icons.getResource(IconHolder.icoUpdate));
mi.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
if(!checkingUpdate) {
checkingUpdate = true;
CheckUpdateShell cus = new CheckUpdateShell(getThis());
cus.open();
}
}
});
// 登录LumaQQ主页
mi = new MenuItem(sysMenu, SWT.PUSH);
mi.setText(LumaQQ.getResourceString("menu.sys.homepage"));
mi.setImage(icons.getResource(IconHolder.icoHomepage));
mi.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
openBrowserShell("http://lumaqq.linuxsir.org", "LumaQQ HomePage", LumaQQ.getResourceString("message.box.manual.homepage"));
}
});
// 关于
mi = new MenuItem(sysMenu, SWT.PUSH);
mi.setText(LumaQQ.getResourceString("menu.sys.about"));
mi.setImage(icons.getResource(IconHolder.icoAbout));
mi.addSelectionListener(
new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
AboutDialog ad = new AboutDialog(shell);
ad.open();
}
}
);
// separator
separator = new MenuItem(sysMenu, SWT.SEPARATOR);
// 退出
mi = new MenuItem(sysMenu, SWT.PUSH);
mi.setText(LumaQQ.getResourceString("menu.sys.exit"));
mi.setImage(icons.getResource(IconHolder.icoExit));
mi.addSelectionListener(
new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
close();
}
}
);
}
// 改变当前用户
protected void changeUser() {
LoginDialog login = new LoginDialog(shell);
if(login.open()) {
int qqNum = login.getQQ();
if(myModel.getQQ() != qqNum) {
client.logout();
setIconByStatus();
// 创建QQ用户对象
QQUser me = new QQUser(qqNum, login.getMd5Password());
if(login.isLoginHidden()) {
me.setLoginMode(QQ.QQ_LOGIN_MODE_HIDDEN);
me.setStatus(QQ.QQ_FRIEND_STATUS_HIDDEN);
} else {
me.setLoginMode(QQ.QQ_LOGIN_MODE_NORMAL);
me.setStatus(QQ.QQ_FRIEND_STATUS_ONLINE);
}
// 创建QQ客户端对象
client.setUser(me);
// 初始化用户文件路径
LumaQQ.initUserFilePath(me);
// 设置client
setClient(this.client);
// shutter控件重新layout
shutter.layout();
// 登陆
checkLogin();
}
}
}
// 打开系统设置对话框
protected SystemOptionShell openSystemOptionShell() {
if(systemOptionShell == null) {
systemOptionShell = new SystemOptionShell(this);
systemOptionShell.open();
} else {
systemOptionShell.setMinimized(false);
systemOptionShell.setActive();
}
return systemOptionShell;
}
/**
* 保存用户的好友列表和分组信息到缺省xml文件中
*/
private void saveModel() {
Groups groups = new GroupsImpl();
int tabSize = model.getTabCount();
for(int i = 0; i < tabSize; i++) {
Group group = ModelUtils.createGroupElement(model.getTab(i));
groups.addGroup(group);
// 判断这个组是群组还是普通组,保存的方式有些不一样,因为model不一样
if("true".equals(group.getIsCluster())) {
int itemSize = model.getItemCount(i);
for(int j = 0; j < itemSize; j++) {
// 得到群的model
Object modelObj = model.getItem(i, j);
// 判断model的类型
if(modelObj instanceof ClusterModel) {
ClusterModel c = (ClusterModel)modelObj;
// 只需要保存固定群
if(c.isPermanent()) {
// 把群model添加到group中
Cluster cluster = ModelUtils.createClusterElement(c);
group.addCluster(cluster);
// 添加这个群的成员
Hashtable members = (Hashtable)c.getProperty("members");
Iterator iter = members.values().iterator();
while(iter.hasNext()) {
FriendModel f = (FriendModel)iter.next();
Friend friend = ModelUtils.createFriendElement(f);
cluster.addFriend(friend);
}
}
}
}
} else {
int itemSize = model.getItemCount(i);
for(int j = 0; j < itemSize; j++) {
Friend friend = ModelUtils.createFriendElement((FriendModel)model.getItem(i, j));
group.addFriend(friend);
}
}
}
// 写入到文件
try {
groups.marshal(new File(LumaQQ.GROUPS));
} catch (IOException e) {
log.error("好友分组信息保存失败");
}
}
/**
* 创建,初始化状态菜单
*/
private void initStatusMenu() {
// 更改状态弹出菜单
statusMenu = new Menu(shell, SWT.POP_UP);
// 上线
MenuItem mi = new MenuItem(statusMenu, SWT.PUSH);
mi.setText(LumaQQ.getResourceString("menu.status.online"));
mi.setImage(icons.getResource(IconHolder.icoOnline));
mi.addSelectionListener(
new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
if(checkLogin())
client.makeMeOnline();
else
client.getUser().setStatus(QQ.QQ_FRIEND_STATUS_ONLINE);
}
}
);
// separator
MenuItem separator = new MenuItem(statusMenu, SWT.SEPARATOR);
// 离开,离开菜单有子菜单
mi = new MenuItem(statusMenu, SWT.CASCADE);
mi.setText(LumaQQ.getResourceString("menu.status.away"));
mi.setImage(icons.getResource(IconHolder.icoAway));
awayMenu = new Menu(mi);
mi.setMenu(awayMenu);
// 自定义
MenuItem sub = new MenuItem(awayMenu, SWT.PUSH);
sub.setText(LumaQQ.getResourceString("menu.status.away.custom"));
sub.setImage(icons.getResource(IconHolder.icoReply));
sub.addSelectionListener(
new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
openSystemOptionShell().showPanel(SystemOptionShell.REPLY);
}
}
);
separator = new MenuItem(awayMenu, SWT.SEPARATOR);
// 无回复
sub = new MenuItem(awayMenu, SWT.RADIO);
sub.setText(LumaQQ.getResourceString("menu.status.away.null"));
sub.addSelectionListener(
new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
if(checkLogin()) {
replies.setAutoReply(false);
if(client.getUser().getStatus() != QQ.QQ_FRIEND_STATUS_AWAY)
client.makeMeAway();
} else
client.getUser().setStatus(QQ.QQ_FRIEND_STATUS_AWAY);
}
}
);
// separator
se
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -