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

📄 mainshell.java

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