📄 menuhelper.java
字号:
mi = new CMenuItem(organizationMenu, SWT.PUSH);
mi.setImage(res.getImage(Resources.icoDialog));
mi.setText(menu_organization_discuss);
mi.addSelectionListener(new ISelectionListener() {
public void widgetSelected(SelectionEvent e) {
Organization org = (Organization)organizationMenu.getData();
List<Integer> members = new ArrayList<Integer>();
int myQQ = main.getMyModel().qq;
boolean hasMe = false;
for(User u : org.cluster.members.values()) {
if(u.organizationId == org.id) {
members.add(u.qq);
if(u.qq == myQQ)
hasMe = true;
}
}
if(members.isEmpty() || members.size() == 1 && members.get(0) == myQQ) {
MessageDialog.openInformation(main.getShell(), message_box_common_info_title, message_box_empty_organization);
return;
} else if(members.size() == 2 && (members.get(0) == myQQ || members.get(1) == myQQ)) {
if(members.get(0) != myQQ)
shellLauncher.openIMShell(members.get(0));
else if(members.get(1) != myQQ)
shellLauncher.openIMShell(members.get(1));
} else {
if(!hasMe)
members.add(myQQ);
// 查找看是否已经存在了相应的讨论组
Cluster subject = null;
boolean hasSubject = true;
for(Cluster c : org.cluster.subClusters.values()) {
if(c.name.equals(org.name) && c.members.size() == members.size()) {
for(Integer qq : members) {
if(!c.hasMember(qq)) {
hasSubject = false;
break;
}
}
if(hasSubject) {
subject = c;
break;
} else
hasSubject = true;
}
}
// 如果讨论组已经存在,直接打开,如果不存在,新建一个
if(subject == null) {
main.getUIHelper().addPromotingDiscuss(
main.getClient().createTemporaryCluster(org.name,
QQ.QQ_CLUSTER_TYPE_SUBJECT,
org.cluster.clusterId,
members)
);
} else {
shellLauncher.openClusterIMWindow(subject);
}
}
}
});
// separator
new CMenuItem(organizationMenu, SWT.SEPARATOR);
// 修改组织
final CMenuItem miModify = new CMenuItem(organizationMenu, SWT.PUSH);
miModify.setText(menu_organization_modify);
miModify.addSelectionListener(new ISelectionListener() {
public void widgetSelected(SelectionEvent e) {
Organization org = (Organization)organizationMenu.getData();
Organization parent = null;
for(Organization o : org.cluster.organizations.values()) {
if(o.isParentOf(org)) {
parent = o;
break;
}
}
shellLauncher.openMemberEditShell(MemberEditShell.ORGANIZATION,
org.cluster,
parent,
org);
}
});
// 添加分组
final CMenuItem miAdd = new CMenuItem(organizationMenu, SWT.PUSH);
miAdd.setText(menu_organization_add);
miAdd.addSelectionListener(new ISelectionListener() {
public void widgetSelected(SelectionEvent e) {
Organization org = (Organization)organizationMenu.getData();
if(org.getLevel() >= 3) {
MessageDialog.openInformation(main.getShell(), message_box_common_info_title, message_box_max_organization_level);
return;
}
// TODO 按理说这里还要检查该层组织个数,不过算了,麻烦
shellLauncher.openMemberEditShell(MemberEditShell.ORGANIZATION,
org.cluster,
org,
null);
}
});
// 删除分组
final CMenuItem miRemove = new CMenuItem(organizationMenu, SWT.PUSH);
miRemove.setText(menu_organization_remove);
miRemove.addSelectionListener(new ISelectionListener() {
public void widgetSelected(SelectionEvent e) {
Organization org = (Organization)organizationMenu.getData();
Cluster cluster = org.cluster;
// 查看其是否有子组织或成员
boolean hasChildren = false;
for(Organization o : cluster.organizations.values()) {
if(o.isChildOf(org)) {
hasChildren = true;
break;
}
}
if(!hasChildren) {
for(User u : cluster.members.values()) {
if(u.organizationId == org.id) {
hasChildren = true;
break;
}
}
}
if(hasChildren) {
MessageDialog.openInformation(main.getShell(), message_box_common_info_title, message_box_empty_organization_first);
return;
}
// 从ui中删除
Organization parentOrg = org.getParent();
cluster.removeOrganization(org);
// 调整组织的id,被删除组织之后的组织id减1
int id = org.id + 1;
while(cluster.hasOrganization(id)) {
cluster.decreaseOrganizationId(id);
id++;
}
// 调整成员的组织id
List<Member> changedMember = new ArrayList<Member>();
for(User u : cluster.members.values()) {
if(u.organizationId > org.id) {
u.organizationId--;
Member m = new Member();
m.qq = u.qq;
m.organization = u.organizationId;
changedMember.add(m);
}
}
// 找到这个父组织的最后一个子组织,然后从它开始调整path,如果
// 要删除的组织没有父组织则不需要做这个操作
if(parentOrg != null) {
Organization lastChild = org;
for(Organization o : cluster.organizations.values()) {
if(o.isChildOf(parentOrg)) {
if(o.getShiftMaskLevelId() > lastChild.getShiftMaskLevelId())
lastChild = o;
}
}
// 它自己就是最后一个时也不需要调整path
if(lastChild != org) {
int level = lastChild.getLevel();
int newValue = org.getShiftMaskLevelId();
for(Organization o : cluster.organizations.values()) {
if(lastChild.isPrefixOf(o))
o.setLevelId(level, newValue);
}
lastChild.setLevelId(newValue);
}
}
// 提交改变
List<QQOrganization> temp = new ArrayList<QQOrganization>();
for(Organization o : cluster.organizations.values()) {
QQOrganization qqOrg = new QQOrganization();
qqOrg.id = o.id;
qqOrg.path = o.path;
qqOrg.name = o.name;
temp.add(qqOrg);
}
main.getClient().commitOrganization(cluster.clusterId, temp);
main.getClient().commitMemberOrganization(cluster.clusterId, changedMember);
main.getBlindHelper().refreshGroup(cluster.group);
}
});
// 菜单监听器
organizationMenu.addMenuListener(new IMenuListener() {
public void menuShown(MenuEvent e) {
Organization org = (Organization)organizationMenu.getData();
boolean admin = org.cluster.isSuperMember(main.getMyModel().qq);
miModify.setEnabled(admin);
miAdd.setEnabled(admin);
miRemove.setEnabled(admin);
}
});
}
/**
* 初始化多人对话容器菜单
*/
private void initDialogContainerMenu() {
dialogContainerMenu = new CMenu();
// 创建多人对话
CMenuItem mi = new CMenuItem(dialogContainerMenu, SWT.PUSH);
mi.setImage(res.getImage(Resources.icoDialog));
mi.setText(menu_dialog_new);
mi.addSelectionListener(new ISelectionListener() {
public void widgetSelected(SelectionEvent e) {
shellLauncher.openMemberEditShell(MemberEditShell.TEMP_CLUSTER, null, null, null);
}
});
// 刷新
mi = new CMenuItem(dialogContainerMenu, SWT.PUSH);
mi.setImage(res.getImage(Resources.icoRefresh));
mi.setText(menu_dialog_refresh);
mi.addSelectionListener(new ISelectionListener() {
public void widgetSelected(SelectionEvent e) {
client.getDialogList();
}
});
}
/**
* 初始化成员菜单
*/
private void initMemberMenu() {
memberMenu = new CMenu();
// 发消息
final CMenuItem miSend = new CMenuItem(memberMenu, SWT.PUSH);
miSend.setImage(res.getImage(Resources.icoSendReceiveMessage));
miSend.setText(menu_friend_sendreceive);
miSend.addSelectionListener(new ISelectionListener() {
public void widgetSelected(SelectionEvent e) {
User u = (User)memberMenu.getData();
shellLauncher.openNormalIMWindow(u);
}
});
// 临时会话
CMenuItem mi = new CMenuItem(memberMenu, SWT.PUSH);
mi.setImage(res.getImage(Resources.icoTempSessionIM));
mi.setText(menu_friend_temp_session);
mi.addSelectionListener(new ISelectionListener() {
public void widgetSelected(SelectionEvent e) {
User u = (User)memberMenu.getData();
shellLauncher.openTempSessionIMWindow(u.qq);
}
});
// 加为好友
final CMenuItem miAdd = new CMenuItem(memberMenu, SWT.PUSH);
miAdd.setImage(res.getImage(Resources.icoAddFriend));
miAdd.setText(cluster_im_menu_member_add);
miAdd.addSelectionListener(new ISelectionListener() {
public void widgetSelected(SelectionEvent e) {
User u = (User)memberMenu.getData();
shellLauncher.openAddReceiveSystemMessageShell(u);
client.addFriend(u.qq);
}
});
// 查看资料
mi = new CMenuItem(memberMenu, SWT.PUSH);
mi.setImage(res.getImage(Resources.icoPersonInfo));
mi.setText(menu_friend_viewinfo);
mi.addSelectionListener(new ISelectionListener() {
public void widgetSelected(SelectionEvent e) {
User u = (User)memberMenu.getData();
if(u.qq == main.getMyModel().qq)
u.info = main.getMyModel().info;
UserInfoWindow uiw = shellLauncher.openUserInfoWindow(u, (u.qq == main.getMyModel().qq) ? UserInfoWindow.EDITABLE : UserInfoWindow.READ_ONLY);
uiw.setCurrentPage(UserInfoWindow.CARD);
}
});
// separator
new CMenuItem(memberMenu, SWT.SEPARATOR);
// 改名
mi = new CMenuItem(memberMenu, SWT.PUSH);
mi.setImage(res.getImage(Resources.icoRename));
mi.setText(menu_friend_rename);
mi.addSelectionListener(new ISelectionListener() {
public void widgetSelected(SelectionEvent e) {
User f = (User)memberMenu.getData();
blindHelper.getViewer(f).editText(f);
}
});
// 置顶
final CMenuItem miPin = new CMenuItem(memberMenu, SWT.PUSH);
miPin.setImage(res.getImage(Resources.icoPin));
miPin.setText(menu_friend_pin);
miPin.addSelectionListener(new ISelectionListener() {
public void widgetSelected(SelectionEvent e) {
User f = (User)memberMenu.getData();
f.pinned = !f.pinned;
blindHelper.refreshGroup(f.group);
}
});
// add menu listener
memberMenu.addMenuListener(new IMenuListener() {
public void menuShown(MenuEvent e) {
User u = (User)memberMenu.getData();
boolean friend = u.isFriend();
miSend.setEnabled(friend);
miAdd.setEnabled(!friend);
miPin.setText(u.pinned ? menu_friend_unpin : menu_friend_pin);
}
});
}
/**
* 初始化讨论组菜单
*/
private void initSubjectMenu() {
subjectMenu = new CMenu();
// 创建讨论组
CMenuItem mi = new CMenuItem(subjectMenu, SWT.PUSH);
mi.setImage(res.getImage(Resources.icoNewSubject));
mi.setText(menu_subject_new);
mi.addSelectionListener(new ISelectionListener() {
public void widgetSelected(SelectionEvent e) {
Dummy dummy = (Dummy)subjectMenu.getData();
shellLauncher.openMemberEditShell(MemberEditShell.TEMP_CLUSTER, dummy.cluster, null, null);
}
});
// 刷新
mi = new CMenuItem(subjectMenu, SWT.PUSH);
mi.setImage(res.getImage(Resources.icoRefresh));
mi.setText(menu_subject_refresh_all);
mi.addSelectionListener(new ISelectionListener() {
public void widgetSelected(SelectionEvent e) {
Dummy dummy = (Dummy)subjectMenu.getData();
client.getSubjectList(dummy.cluster.clusterId);
}
});
}
/**
* 初始化组织菜单
*/
private void initOrganizationContainerMenu() {
organizationContainerMenu = new CMenu();
// 更新组织结构
CMenuItem mi = new CMenuItem(organizationContainerMenu, SWT.PUSH);
mi.setImage(res.getImage(Resources.icoRefresh));
mi.setText(menu_organization_refresh);
mi.addSelectionListener(new ISelectionListener() {
public void widgetSelected(SelectionEvent e) {
Dummy dummy = (Dummy)organizationContainerMenu.getData();
client.updateOrganization(dummy.cluster.clusterId);
}
});
// 添加分组
final CMenuItem miAdd = new CMenuItem(organizationContainerMenu, SWT.PUSH);
miAdd.setImage(res.getImage(Resources.icoOrganization));
miAdd.setText(menu_organization_add);
miAdd.addSelectionListener(new ISelectionListener() {
public void widgetSelected(SelectionEvent e) {
Dummy dummy = (Dummy)organizationContainerMenu.getData();
// TODO 按理说这里还要检查顶层组织个数,不过算了,麻烦
shellLauncher.openMemberEditShell(MemberEditShell.ORGANIZATION, dummy.cluster, null, null);
}
});
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -