⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 menuhelper.java

📁 lumaQQ的源文件
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
		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 + -