📄 mainshell.java
字号:
mi = new MenuItem(infoMenu, SWT.PUSH);
mi.setText(LumaQQ.getResourceString("menu.sys.friend.download.remark"));
mi.setImage(icons.getResource(IconHolder.icoPersonInfo));
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();
}
});
// 个人设定
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);
// 关于
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.getQqNum();
if(myModel.getQQ() != qqNum) {
client.logout();
setIconByStatus();
// 创建QQ用户对象
QQUser me = new QQUser(qqNum, login.getMd5pwd());
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
separator = new MenuItem(statusMenu, SWT.SEPARATOR);
// 隐身
mi = new MenuItem(statusMenu, SWT.PUSH);
mi.setText(LumaQQ.getResourceString("menu.status.hidden"));
mi.setImage(icons.getResource(IconHolder.icoHidden));
mi.addSelectionListener(
new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
if(checkLogin()) {
if(client.getUser().getStatus() != QQ.QQ_FRIEND_STATUS_HIDDEN)
client.makeMeHidden();
} else
client.getUser().setStatus(QQ.QQ_FRIEND_STATUS_HIDDEN);
}
}
);
// separator
separator = new MenuItem(statusMenu, SWT.SEPARATOR);
// 离线
mi = new MenuItem(statusMenu, SWT.PUSH);
mi.setText(LumaQQ.getResourceString("menu.status.offline"));
mi.setImage(icons.getResource(IconHolder.icoOffline));
mi.addSelectionListener(
new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
logout();
}
}
);
}
/**
* 使自己处于下线状态
*/
protected void logout() {
// 注销
client.logout();
// 停止所有动画
btnStatus.stopAnimate();
btnSysMsg.stopBlinkImage();
stopBlinkImage();
stopAllOtherEffect();
// 重设图标状态和相关变量,把所有好友设为下线模式
setIconByStatus();
setAllFriendOffline();
mq.clear();
}
/**
* 重新设置离开菜单,发生在用户添加或修改了自动回复时
*/
protected void renewAawyMenu() {
int count = awayMenu.getItemCount();
int size = replies.getAutoReplySize();
// 从3开始调整,前面3个是固定的,分别是自定义,separator和无回复消息
int loop = Math.min(count, 3 + size);
for(int i = 3, j = 0; i < loop; i++) {
MenuItem mi = awayMenu.getItem(i);
mi.setText(replies.getAutoReply(j++));
}
// 处理长度不一致的部分,如果自动回复减少了,则把多余的菜单项释放掉,如果少了,添加菜单项
size -= count - 3;
if(size > 0) { // 大于0说明自动回复增加了
for(int i = 0; i < size; i++) {
MenuItem mi = new MenuItem(awayMenu, SWT.RADIO);
final int index = count - 3 + i;
mi.setText(replies.getAutoReply(index));
mi.addSelectionListener(
new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
if(checkLogin()) {
replies.setAutoReply(true);
replies.setCurrentAutoReply(index);
if(client.getUser().getStatus() != QQ.QQ_FRIEND_STATUS_AWAY)
client.makeMeAway();
} else {
replies.setAutoReply(true);
replies.setCurrentAutoReply(index);
client.getUser().setStatus(QQ.QQ_FRIEND_STATUS_AWAY);
}
}
}
);
}
} else if (size < 0) { // 小于0说明自动回复减少了
size = Math.abs(size);
for(int i = size - 1; i >= 0 ; i--) {
MenuItem mi = awayMenu.getItem(loop + i);
mi.dispose();
}
}
}
/**
* 停止所有在好友和组上的动画效果,如果有的话
*/
private void stopAllOtherEffect() {
int tabSize = model.getTabCount();
for(int i = 0; i < tabSize; i++) {
ShutterLabel tab = shutter.getTabControl(i);
if(tab.isBlinking())
tab.stopBlinkImage();
int itemSize = model.getItemCount(i);
for(int j = 0; j < itemSize; j++) {
ShutterLabel item = shutter.getItemControl(i, j);
if(item.isBouncing())
item.stopBounceImage();
}
}
}
/**
* 检查登陆状态,如果正在登录或者已经登录,直接返回,如果尚未登录则执行登录操作
* @return 如果当前正在登陆,则返回false,否则返回true
*/
protected boolean checkLogin() {
// 如果正在登陆,不执行动作
if(client.isLogging()) return false;
// 万一用户还没有登陆,需要先登陆
if(!client.getUser().isLoggedIn()) {
// 设置登陆的服务器和登陆方式
OptionUtils options = OptionUtils.getInstance();
client.getUser().setUdp(!options.isUseTcp());
if(options.isAutoSelect()) {
String[] servers = options.isUseTcp()?LumaQQ.tcpServers:LumaQQ.udpServers;
client.setLoginServer(servers[Utils.random().nextInt(servers.length - 1)]);
} else
client.setLoginServer(options.getServer());
// 设置代理服务器的类型,地址和验证用户名密码
try {
client.setProxy(new InetSocketAddress(options.getProxyServer(), o
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -