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

📄 mainshell.java

📁 用java实现的
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
	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 + -