📄 mainshell.java
字号:
private void addGroup() {
int index = shutter.getCurrentTab() + 1;
model.insertTab(index, new GroupModel(""));
shutter.getTabControl(index).editText();
shutter.addItemMouseListener(itemMouseListener, index);
shutter.addItemMouseTrackListener(itemMouseTrackListener, index);
shutter.addContentMouseListener(groupMouseListener, index);
}
// 显示大头像还是小头像
private void showSmallFace(boolean b) {
if(b) {
shutter.setShowSmallImage(true);
shutter.setTextOrientation(SWT.RIGHT);
shutter.setContentAlignment(SWT.LEFT);
} else {
shutter.setShowSmallImage(false);
shutter.setTextOrientation(SWT.BOTTOM);
shutter.setContentAlignment(SWT.CENTER);
}
options.setSmallFace(b);
}
/**
* 初始化在好友上点右键出现的菜单
*/
private void initFriendMenu() {
friendMenu = new Menu(shell, SWT.POP_UP);
// 收发消息
MenuItem mi = new MenuItem(friendMenu, SWT.PUSH);
mi.setText(LumaQQ.getResourceString("menu.friend.sendreceive"));
mi.setImage(icons.getResource(IconHolder.icoSendReceiveMessage));
mi.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
// 得到当前选择用户的view part,打开消息窗口
openNormalMessageShell((ShutterLabel)friendMenu.getData());
}
});
// 发送文件
mi = new MenuItem(friendMenu, SWT.PUSH);
mi.setText(LumaQQ.getResourceString("menu.friend.sendfile"));
mi.setImage(icons.getResource(IconHolder.icoSendFile));
mi.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
Object obj = openNormalMessageShell((ShutterLabel)friendMenu.getData());
while(obj instanceof ReceiveMessageShell)
obj = openNormalMessageShell((ShutterLabel)friendMenu.getData());
SendMessageShell sms = (SendMessageShell)obj;
sms.requestSendFile();
}
});
// separator
mi = new MenuItem(friendMenu, SWT.SEPARATOR);
// 查看资料
mi = new MenuItem(friendMenu, SWT.PUSH);
mi.setText(LumaQQ.getResourceString("menu.friend.viewinfo"));
mi.setImage(icons.getResource(IconHolder.icoPersonInfo));
mi.addSelectionListener(
new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
// 得到当前选择用户的view part,打开资料窗口
openUserInfoShell((ShutterLabel)friendMenu.getData(), false);
}
}
);
// 消息管理菜单
mi = new MenuItem(friendMenu, SWT.CASCADE);
mi.setText(LumaQQ.getResourceString("menu.friend.message.manage"));
mi.setImage(icons.getResource(IconHolder.icoMessageManage));
Menu msgMenu = new Menu(mi);
mi.setMenu(msgMenu);
// 导出为文本文件菜单
mi = new MenuItem(msgMenu, SWT.PUSH);
mi.setText(LumaQQ.getResourceString("menu.friend.message.export"));
mi.setImage(icons.getResource(IconHolder.icoTxtFile));
mi.addSelectionListener(
new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
// 得到好友的model
ShutterLabel viewPart = (ShutterLabel)friendMenu.getData();
FriendModel f = (FriendModel)viewPart.getData();
// 导出
exportMessage(f.getQQ(), new FriendMessageExporter(myModel, f));
}
}
);
// separator
mi = new MenuItem(friendMenu, SWT.SEPARATOR);
// 显示小头像
mi = new MenuItem(friendMenu, SWT.PUSH);
mi.setText(LumaQQ.getResourceString("menu.friend.showsmall"));
mi.setImage(icons.getResource(IconHolder.icoSmallFace));
mi.addSelectionListener(
new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
showSmallFace(true);
}
}
);
// 显示大头像
mi = new MenuItem(friendMenu, SWT.PUSH);
mi.setText(LumaQQ.getResourceString("menu.friend.showlarge"));
mi.setImage(icons.getResource(IconHolder.icoLargeFace));
mi.addSelectionListener(
new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
showSmallFace(false);
}
}
);
// 添加组
mi = new MenuItem(friendMenu, SWT.PUSH);
mi.setText(LumaQQ.getResourceString("menu.friend.addgroup"));
mi.setImage(icons.getResource(IconHolder.icoAddGroup));
mi.addSelectionListener(
new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
addGroup();
}
}
);
// separator
mi = new MenuItem(friendMenu, SWT.SEPARATOR);
// 只显示在线好友
mi = new MenuItem(friendMenu, SWT.PUSH);
mi.setImage(icons.getResource(IconHolder.icoShowOnlineOnly));
mi.addSelectionListener(
new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
if(options.isShowOnlineOnly())
showAllFriend();
else
showOnlineFriendOnly();
}
}
);
// separator
mi = new MenuItem(friendMenu, SWT.SEPARATOR);
// 从该组删除
mi = new MenuItem(friendMenu, SWT.PUSH);
mi.setText(LumaQQ.getResourceString("menu.friend.delfriend"));
mi.setImage(icons.getResource(IconHolder.icoDelFriend));
mi.addSelectionListener(
new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
GroupModel g = (GroupModel)model.getTab(shutter.getCurrentTab());
ShutterLabel viewPart = (ShutterLabel)friendMenu.getData();
FriendModel f = (FriendModel)viewPart.getData();
// 检查要删除的这个好友是否在一个好友组中,如果是,需要从服务器删除,如果不是
// 直接删除即可
if("false".equals(g.getProperty("friendly")))
deleteFriend(viewPart, true, false);
else {
MessageBox box = new MessageBox(shell, SWT.ICON_QUESTION | SWT.YES | SWT.NO);
box.setText(LumaQQ.getResourceString("message.box.common.question.title"));
box.setMessage(LumaQQ.getResourceString("message.box.confirm.delete.friend", new Object[] { f.getProperty("name") }));
if(box.open() == SWT.YES) {
ReceiveSystemMessageShell rsms = new ReceiveSystemMessageShell(getThis());
rsms.setFriendModel(f);
rsms.open(ReceiveSystemMessageShell.DELETE_MODE);
deleteFriend(viewPart, false, false);
}
}
}
}
);
// 改名
mi = new MenuItem(friendMenu, SWT.PUSH);
mi.setText(LumaQQ.getResourceString("menu.friend.rename"));
mi.setImage(icons.getResource(IconHolder.icoRename));
mi.addSelectionListener(
new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
ShutterLabel viewPart = (ShutterLabel)friendMenu.getData();
viewPart.editText();
viewPart.addShutterLabelListener(fsll);
}
}
);
// 添加事件监听器,因为需要判断当前显示的是小头像还是大头像,从而使相应的菜单disable
friendMenu.addMenuListener(
new MenuAdapter() {
public void menuShown(MenuEvent e) {
// 显示什么头像的菜单使能状态
if(shutter.isShowSmallImage()) {
friendMenu.getItem(6).setEnabled(false);
friendMenu.getItem(7).setEnabled(true);
} else {
friendMenu.getItem(6).setEnabled(true);
friendMenu.getItem(7).setEnabled(false);
}
// 显示在线用户还是全部用户的选项
if(options.isShowOnlineOnly())
friendMenu.getItem(10).setText(LumaQQ.getResourceString("menu.friend.showall"));
else
friendMenu.getItem(10).setText(LumaQQ.getResourceString("menu.friend.showonlineonly"));
}
}
);
}
/**
* 显示所有好友
*/
protected void showAllFriend() {
// 显示所有用户
int tabSize = model.getTabCount();
for(int i = 0; i < tabSize; i++) {
// 对于群组,我们不响应这个菜单事件
GroupModel g = (GroupModel)model.getTab(i);
if(g.isCluster()) continue;
// 不是群组就显示所有的用户
int itemSize = model.getItemCount(i);
if(itemSize > 0) {
// 为了提高刷新速度,这里用false,然后再统一刷新
for(int j = 0; j < itemSize; j++) {
shutter.showItem(i, j, false);
}
shutter.refreshTabView(i);
}
}
options.setShowOnlineOnly(false);
}
/**
* 隐藏不在线的好友
*/
protected void showOnlineFriendOnly() {
// 显示在线用户
int tabSize = model.getTabCount();
for(int i = 0; i < tabSize; i++) {
// 对于群组,我们不响应这个菜单事件
GroupModel g = (GroupModel)model.getTab(i);
if(g.isCluster()) continue;
// 不是群组就隐藏不在线的用户
int itemSize = model.getItemCount(i);
if(itemSize > 0) {
// 为了提高刷新速度,这里用false,然后再统一刷新
for(int j = 0; j < itemSize; j++) {
Object status = model.getItem(i, j).getProperty("status");
if(!("online".equals(status) || "away".equals(status)))
shutter.hideItem(i, j, false);
}
shutter.refreshTabView(i);
}
}
options.setShowOnlineOnly(true);
}
/**
* 初始化系统菜单
*/
private void initSysMenu() {
// 系统弹出菜单
sysMenu = new Menu(shell, SWT.POP_UP);
// 分组管理菜单
MenuItem mi = new MenuItem(sysMenu, SWT.CASCADE);
mi.setText(LumaQQ.getResourceString("menu.sys.group"));
mi.setImage(icons.getResource(IconHolder.icoGroup));
Menu groupMenu = new Menu(mi);
mi.setMenu(groupMenu);
// 上传分组
MenuItem sub = new MenuItem(groupMenu, SWT.PUSH);
sub.setText(LumaQQ.getResourceString("menu.sys.group.upload"));
sub.setImage(icons.getResource(IconHolder.icoUploadGroup));
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.upload.title"));
opDialog.setHint(LumaQQ.getResourceString("op.upload.hint"));
opDialog.setSuccessString(LumaQQ.getResourceString("message.box.op.upload.success"));
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("true".equals(gModel.getProperty("upload"))) {
// 等于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();
}
}
);
// 批量下载好友备注
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -