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

📄 infomanagerwindow.java

📁 lumaQQ的源文件
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
/*
* LumaQQ - Java QQ Client
*
* Copyright (C) 2004 luma <stubma@163.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
package edu.tsinghua.lumaqq.ui;

import static edu.tsinghua.lumaqq.resource.Messages.*;

import java.lang.reflect.InvocationTargetException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.List;

import edu.tsinghua.lumaqq.models.Cluster;
import edu.tsinghua.lumaqq.models.ClusterType;
import edu.tsinghua.lumaqq.models.Group;
import edu.tsinghua.lumaqq.models.ModelRegistry;
import edu.tsinghua.lumaqq.models.User;
import edu.tsinghua.lumaqq.record.IKeyConstants;
import edu.tsinghua.lumaqq.record.RecordEntry;
import edu.tsinghua.lumaqq.record.RecordManager;
import edu.tsinghua.lumaqq.resource.Colors;
import edu.tsinghua.lumaqq.resource.Resources;
import edu.tsinghua.lumaqq.ui.listener.AroundBorderPaintListener;
import edu.tsinghua.lumaqq.widgets.rich.RichBox;

import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.dialogs.ProgressMonitorDialog;
import org.eclipse.jface.operation.IRunnableWithProgress;
import org.eclipse.jface.viewers.DoubleClickEvent;
import org.eclipse.jface.viewers.IDoubleClickListener;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.ITableLabelProvider;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.viewers.ViewerSorter;
import org.eclipse.jface.window.Window;
import org.eclipse.osgi.util.NLS;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.CCombo;
import org.eclipse.swt.custom.CTabFolder;
import org.eclipse.swt.custom.CTabItem;
import org.eclipse.swt.custom.ViewForm;
import org.eclipse.swt.events.KeyAdapter;
import org.eclipse.swt.events.KeyEvent;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.ShellEvent;
import org.eclipse.swt.events.ShellListener;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Sash;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.swt.widgets.TableItem;
import org.eclipse.swt.widgets.Text;
import org.eclipse.swt.widgets.ToolBar;
import org.eclipse.swt.widgets.ToolItem;

/**
 * 信息管理器
 * 
 * @author luma
 */
public class InfoManagerWindow extends Window implements ShellListener {
	private class TreeContentProvider implements ITreeContentProvider {
		public Object[] getChildren(Object parentElement) {
			if(parentElement instanceof Integer) {
				Integer i = (Integer)parentElement;
				switch(i) {
					case 1:
						return otherGroups.toArray();
					case 2:
						return clusters.toArray();
					default:
						return EMPTY;
				}
			} else if(parentElement instanceof Group) {
				Group g = (Group)parentElement;
				return g.users.toArray();
			} else
				return EMPTY;
		}

		public Object getParent(Object element) {
			return null;
		}

		public boolean hasChildren(Object element) {
			if(element instanceof Integer) {
				Integer i = (Integer)element;
				return i != 3;
			} else if(element instanceof Cluster)
				return false;
			else if(element instanceof Group)
				return true;
			else
				return false;
		}

		public Object[] getElements(Object inputElement) {
			return root;
		}

		public void dispose() {
		}

		public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
		}
	}
	
	private class TreeLabelProvider extends LabelProvider {
		@Override
		public String getText(Object element) {
			if(element instanceof Integer) {
				Integer i = (Integer)element;
				switch(i) {
					case 1:
						return info_groups;
					case 2:
						return info_cluster;
					case 3:
						return info_sys_msg;
					default:
						return "";
				}
			} else if(element instanceof Group) {
				Group g = (Group)element;
				return g.name + '(' + g.users.size() + ')';
			} else if(element instanceof Cluster) {
				Cluster c = (Cluster)element;
				return "" + c.externalId + '(' + c.name + ')'; 
			} else if(element instanceof User) {
				User u = (User)element;
				return "" + u.qq + '(' + u.displayName + ')';
			} else
				return "";
		}
		
		@Override
		public Image getImage(Object element) {
			if(element instanceof Integer) {
				Integer i = (Integer)element;
				switch(i) {
					case 1:
						return res.getSmallHead(main.getMyModel().headId);
					case 2:
						return res.getImage(Resources.icoFolder);
					case 3:
						return res.getImage(Resources.icoSysMsg);
					default:
						return null;
				}
			} else if(element instanceof Group)
				return res.getImage(Resources.icoFolder);
			else if(element instanceof Cluster)
				return res.getSmallClusterHead(((Cluster)element).headId);
			else if(element instanceof User)
				return res.getSmallHead(((User)element).headId);
			else
				return null;
		}
	}
	
	private class TreeSorter extends ViewerSorter {
		@Override
		public int compare(Viewer viewer, Object e1, Object e2) {
			if(e1 instanceof Integer && e2 instanceof Integer) {
				Integer i1 = (Integer)e1;
				Integer i2 = (Integer)e2;
				return i1 - i2;
			} else if(e1 instanceof Cluster && e2 instanceof Cluster) {
				Cluster c1 = (Cluster)e1;
				Cluster c2 = (Cluster)e2;
				return c1.externalId - c2.externalId;
			} else if(e1 instanceof User && e2 instanceof User) {
				User u1 = (User)e1;
				User u2 = (User)e2;
				return u1.qq - u2.qq;
			} else
				return 0;
		}
	}
	
	private class RecordContentProvider implements IStructuredContentProvider {
		public Object[] getElements(Object inputElement) {
			int pageSize = main.getRecordManager().getPageSize();
			return records.subList(pageNum * pageSize, Math.min(pageNum * pageSize + pageSize, records.size())).toArray();
		}

		public void dispose() {
		}

		public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
		}		
	}
	
	private class RecordLabelProvider extends LabelProvider implements ITableLabelProvider {
		public Image getColumnImage(Object element, int columnIndex) {
			RecordEntry entry = (RecordEntry)element;
			if(columnIndex == 0) {
				switch(entry.type) {
					case IKeyConstants.SYSTEM:
						return res.getImage(Resources.icoSysMsg);
					case IKeyConstants.NORMAL:
					case IKeyConstants.CLUSTER:
						User u = ModelRegistry.getUser(entry.sender);
						return (u == null) ? res.getSmallHead(Resources.QQ_2005_FACE_MAX_INDEX) : res.getSmallHead(u.headId);
					default:
						return null;
				}
			} else
				return null;
		}

		public String getColumnText(Object element, int columnIndex) {
			RecordEntry entry = (RecordEntry)element;
			switch(columnIndex) {
				case 0:
					switch(entry.type) {
						case IKeyConstants.SYSTEM:
							return "10000";
						case IKeyConstants.NORMAL:
						case IKeyConstants.CLUSTER:
							User u = ModelRegistry.getUser(entry.sender);
							return (u == null) ? String.valueOf(entry.sender) : u.displayName;
						default:
							return "";
					}				
				case 1:
					date.setTime(entry.time);
					return dateFormat.format(date);
				case 2:
					date.setTime(entry.time);
					return timeFormat.format(date);
				case 3:
					return entry.message;
				default:
					return "";
			}
		}		
	}
	
	private MainShell main;
	private Resources res;
	private boolean active;
	
	private static final int SEARCH_RECORD = 0;
	@SuppressWarnings("unused")
	private static final int SEARCH_FRIEND = 1;
	private static final int SCOPE_ALL = 0;
	
	@SuppressWarnings("unused")
	private int searchMode;
	private int scope;
	private int pageNum;
	private int pageCount;
	private String keyword;
	private ViewForm vfRecord;
	private List<RecordEntry> records;
	private static final DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
	private static final DateFormat timeFormat = new SimpleDateFormat("HH:mm:ss");
	private static final Date date = new Date();
	private TableViewer recordViewer;
	private List<Cluster> clusters;
	private List<Group> otherGroups;
	private List scopes;
	
	private static final Integer[] root = new Integer[] {
		1, 2, 3
	};
	private static final Object[] EMPTY = new Object[0];
	private TreeViewer treeViewer;
	private CCombo comboScope;
	private RichBox box;
	private Label lblPage;
	private ToolItem tiExport;
	private ToolItem tiDelete;
	private Label lblDate;
	private Label lblTime;
	private Label lblSender;
	private Label lblReceiver;
	private ToolItem tiSearch;
	private ToolItem tiFirst;
	private ToolItem tiPrev;
	private ToolItem tiNext;
	private ToolItem tiLast;
	
	public InfoManagerWindow(MainShell main) {
		super(main.getShell());
		this.main = main;
		res = Resources.getInstance();
		initializeVariables();
	}
	
	@Override
	protected void configureShell(Shell newShell) {
		super.configureShell(newShell);
		newShell.setText(info_title);
		newShell.setImage(res.getImage(Resources.icoMessageManage));
	}
	
	@Override
	protected Control createContents(Composite parent) {
		Composite control = (Composite)super.createContents(parent);
		control.setLayout(new GridLayout());
		control.setLayoutData(new GridData(GridData.FILL_BOTH));
		
		// 工具条
		final ToolBar tb = new ToolBar(control, SWT.FLAT | SWT.RIGHT);
		tiExport = new ToolItem(tb, SWT.PUSH);
		tiExport.setImage(res.getImage(Resources.icoExport));
		tiExport.setText(button_export);
		tiExport.addSelectionListener(new SelectionAdapter() {
			@Override
			public void widgetSelected(SelectionEvent e) {
				onExport();
			}
		});

⌨️ 快捷键说明

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