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

📄 createclustershell.java

📁 类似于MSN
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
		/* 
		 * 创建群的基本流程
		 * 1. 选择群类型
		 * 2. 填写群基本信息
		 * 3. 选择群成员
		 * 4. 提交请求,等待服务器回应
		 * 5. 完成
		 */
		if(step == 2) {
			step--;
			prevPanel.setVisible(false);
			first.setVisible(true);
			prevPanel = first;
			btnPrevious.setEnabled(false);
		} else if(step == 3) {
			step--;
			prevPanel.setVisible(false);
			basic.setVisible(true);
			prevPanel = basic;
			fss.setVisible(false);
		} else if(step == 4) {
			step--;
			prevPanel.setVisible(false);
			member.setVisible(true);
			prevPanel = member;
			fss.setVisible(true);
			btnNext.setEnabled(true);
		}
	}

	/**
	 * 当用户按了下一步按钮时调用此方法
	 */
	protected void navigateNext() {
		/* 
		 * 创建群的基本流程
		 * 1. 选择群类型
		 * 2. 填写群基本信息
		 * 3. 选择群成员
		 * 4. 提交请求,等待服务器回应
		 * 5. 完成
		 */
		if(step == 1) {
			step++;
			prevPanel.setVisible(false);
			basic.setVisible(true);
			prevPanel = basic;			
			btnPrevious.setEnabled(true);
			textName.setFocus();
			if(type == QQ.QQ_CLUSTER_TYPE_TEMPORARY) {
				authGroup.setEnabled(false);
				radioNoAuth.setEnabled(false);
				radioNeedAuth.setEnabled(false);
				radioNoAdd.setEnabled(false);
			} else {
				authGroup.setEnabled(true);
				radioNoAuth.setEnabled(true);
				radioNeedAuth.setEnabled(true);
				radioNoAdd.setEnabled(true);				
			}
		} else if(step == 2) {
			// 检查前提条件,即必须要有群的名称
			if("".equals(textName.getText())) {
				MessageBox box = new MessageBox(shell, SWT.ICON_WARNING | SWT.OK);
				box.setText(LumaQQ.getResourceString("message.box.common.warning.title"));
				box.setMessage(LumaQQ.getResourceString("message.box.please.input.cluster.name"));
				box.open();
				return;
			}
			// 前提满足才执行动作
			step++;
			prevPanel.setVisible(false);
			member.setVisible(true);
			prevPanel = member;
			fss.setVisible(true);
		} else if(step == 3) {
			// 检查前提条件是否成立,即必须要选择一个成员
			if(table.getItemCount() == 0) {
				MessageBox box = new MessageBox(shell, SWT.ICON_WARNING | SWT.OK);
				box.setText(LumaQQ.getResourceString("message.box.common.warning.title"));
				box.setMessage(LumaQQ.getResourceString("message.box.please.select.cluster.member"));
				box.open();
				return;
			}
			// 前提满足才执行动作
			step++;
			prevPanel.setVisible(false);
			create.setVisible(true);
			prevPanel = create;
			fss.setVisible(false);
			btnNext.setEnabled(false);
			btnPrevious.setEnabled(false);
			lblName.setText(textName.getText());
			lblHint.setText(LumaQQ.getResourceString("create.cluster.create.processing"));
			btnFace.startAnimate(frames);
			createCluster();
		} else if(step == 5) {
			close();
		}
	}

	/**
	 * 发送创建群的请求
	 */
	private void createCluster() {
		// 得到成员列表
		int count = table.getItemCount(); 
		int[] members = new int[count];
		for(int i = 0; i < count; i++) {
			FriendModel f = (FriendModel)table.getItem(i).getData();
			members[i] = f.getQQ();
		}
		// 判断群类型,调用不同的方法
		if(type == QQ.QQ_CLUSTER_TYPE_TEMPORARY) 
			main.client.createTemporaryCluster(textName.getText(), textNotice.getText(), textDescription.getText(), members, comboCategory.getSelectionIndex());
		else
			main.client.createPermanentCluster(textName.getText(), textNotice.getText(), textDescription.getText(), members, comboCategory.getSelectionIndex(), authType);			
	}

	/**
	 * 关闭窗口
	 */
	protected void close() {
		shell.close();
	}
	
	// 打开shell
	public void open()	{
		// 打开shell
		shell.layout();
		// set dialog to center of screen
		Rectangle dialogRect = shell.getBounds();
		Rectangle displayRect = display.getBounds();
		shell.setLocation((displayRect.width - dialogRect.width) / 2, (displayRect.height - dialogRect.height) / 2);
		main.client.addQQListener(this);
		shell.open();
	}

	/* (non-Javadoc)
	 * @see edu.tsinghua.lumaqq.qq.events.QQListener#qqEvent(edu.tsinghua.lumaqq.qq.events.QQEvent)
	 */
	public void qqEvent(QQEvent e) {
		switch(e.type) {
			case QQEvent.QQ_CREATE_CLUSTER_SUCCESS:
				processClusterCreateSuccess(e);
				break;
			case QQEvent.QQ_CREATE_CLUSTER_FAIL:
				processClusterCreateFail(e);
				break;
			case QQEvent.QQ_OPERATION_TIMEOUT:
				if(e.operation == QQ.QQ_CMD_CLUSTER_CMD)
					processClusterCommandTimeout(e);
				break;
		}
	}
	
	// 处理群操作超时事件
	private void processClusterCommandTimeout(QQEvent e) {
		ClusterCommandPacket packet = (ClusterCommandPacket)e.getSource();
		if(packet.getSubCommand() == QQ.QQ_CLUSTER_CMD_CREATE_CLUSTER) {
			main.display.syncExec(
				new Runnable() {
					public void run() {
						btnFace.stopAnimate();
						lblHint.setText(LumaQQ.getResourceString("create.cluster.create.timeout"));
						btnPrevious.setEnabled(true);
					}				
				}
			);
		}
	}

	// 处理创建群失败事件
	private void processClusterCreateFail(QQEvent e) {		
		final ClusterCommandReplyPacket packet = (ClusterCommandReplyPacket)e.getSource();
		main.display.syncExec(
			new Runnable() {
				public void run() {
					btnFace.stopAnimate();
					lblHint.setText(LumaQQ.getResourceString("create.cluster.create.fail", new Object[] { packet.errorMessage }));
					btnPrevious.setEnabled(true);
				}				
			}
		);
	}

	// 处理创建群成功事件
	private void processClusterCreateSuccess(QQEvent e) {
		final ClusterCommandReplyPacket packet = (ClusterCommandReplyPacket)e.getSource();
		main.display.syncExec(
			new Runnable() {
				public void run() {
					btnFace.stopAnimate();
					lblHint.setText(LumaQQ.getResourceString("create.cluster.create.success", new Object[] { String.valueOf(packet.externalId) }));
					btnNext.setText(LumaQQ.getResourceString("create.cluster.button.finished"));
					btnNext.setEnabled(true);
					step = 5;
				}				
			}
		);
	}

	/* (non-Javadoc)
	 * @see org.eclipse.swt.events.ShellListener#shellClosed(org.eclipse.swt.events.ShellEvent)
	 */
	public void shellClosed(ShellEvent e) {
		main.createClusterShell = null;
		main.client.removeQQListener(this);
	}
	
	/**
	 * 在表中添加一个成员
	 * @param f
	 */
	private void addMember(FriendModel f) {
		if(f == null) return;
		
		TableItem ti = new TableItem(table, SWT.NONE);
		ti.setText(0, ((Integer)f.getProperty("qq")).toString());
		ti.setText(1, (String)f.getProperty("name"));
		if(f.hasProperty("contact")) {
			ContactInfo info = (ContactInfo)f.getProperty("contact");
			ti.setText(2, info.infos[info.province]);
		}			
		ti.setImage(icons.getSmallFace(f.getFaceId()));
		// 把这个model也做为TableItem的data保存
		ti.setData(f);
	}
	
	/**
	 * 删除一个member
	 * @param f
	 */
	private void removeMember(FriendModel f) {
		if(f == null) return;
		
		int size = table.getItemCount();
		for(int i = 0; i < size; i++) {
			TableItem ti = table.getItem(i);
			if(ti.getData() == f) {
				table.remove(i);
				break;
			}
		}
	}
	
	/* (non-Javadoc)
	 * @see edu.tsinghua.lumaqq.events.FriendSelectionListener#friendSelected(edu.tsinghua.lumaqq.events.FriendSelectionEvent)
	 */
	public void friendSelected(FriendSelectionEvent e) {
		List list = (List)e.getSource();
		Iterator iter = list.iterator();
		while(iter.hasNext()) 
			addMember((FriendModel)iter.next());
	}

	/* (non-Javadoc)
	 * @see edu.tsinghua.lumaqq.events.FriendSelectionListener#friendDeselected(edu.tsinghua.lumaqq.events.FriendSelectionEvent)
	 */
	public void friendDeselected(FriendSelectionEvent e) {
		List list = (List)e.getSource();
		Iterator iter = list.iterator();
		while(iter.hasNext()) 
			removeMember((FriendModel)iter.next());
	}

	/**
	 * @param b
	 */
	public void setMinimized(boolean b) {
		shell.setMinimized(b);
	}

	/**
	 * 激活窗口
	 */
	public void setActive() {
		shell.setActive();
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -