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

📄 uiutil.java

📁 mywork是rcp开发的很好的例子
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
package net.sf.pim;

import java.io.BufferedInputStream;
import java.io.IOException;
import java.net.URL;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Properties;

import net.sf.component.calendar.SWTCalendar;
import net.sf.component.config.ConfigHelper;
import net.sf.component.table.BeanBindedTableModel;
import net.sf.component.table.BindedTableColumn;
import net.sf.component.table.BindedTableViewer;
import net.sf.component.table.IBindedTableModel;
import net.sf.component.table.TextBindedTableColumn;
import net.sf.pim.model.Personal;
import net.sf.pim.model.psp.Work;
import net.sf.pim.model.psp.WorkList;
import net.sf.pim.plugin.view.PspEditor;
import net.sf.pim.view.UiCellSorter;
import net.sf.util.StringUtil;
import net.sf.util.persistence.DMFactory;
import net.sf.util.persistence.DataException;
import net.sf.util.persistence.IDataManager;
import net.sf.util.persistence.IEntry;

import org.eclipse.core.runtime.FileLocator;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.action.IStatusLineManager;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.viewers.IColorProvider;
import org.eclipse.jface.viewers.ILabelProviderListener;
import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.ITableLabelProvider;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.CCombo;
import org.eclipse.swt.custom.ControlEditor;
import org.eclipse.swt.custom.SashForm;
import org.eclipse.swt.custom.TableCursor;
import org.eclipse.swt.events.FocusAdapter;
import org.eclipse.swt.events.FocusEvent;
import org.eclipse.swt.events.KeyAdapter;
import org.eclipse.swt.events.KeyEvent;
import org.eclipse.swt.events.MouseAdapter;
import org.eclipse.swt.events.MouseEvent;
import org.eclipse.swt.events.MouseTrackAdapter;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.TraverseEvent;
import org.eclipse.swt.events.TraverseListener;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.swt.widgets.TableItem;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.IMemento;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.XMLMemento;
import org.eclipse.ui.internal.IWorkbenchConstants;
import org.eclipse.ui.internal.PartSite;
import org.eclipse.ui.internal.ViewSashContainer;
import org.eclipse.ui.internal.ViewStack;
import org.eclipse.ui.internal.WorkbenchWindow;

/**
 * Created by IntelliJ IDEA. Date: 2004-1-16 Time: 10:22:30
 */
public class UiUtil {
	private final static class WorkLabelProvider implements ITableLabelProvider, IColorProvider {
		public Image getColumnImage(Object element, int columnIndex) {
			return null;
		}

		public String getColumnText(Object element, int columnIndex) {
			if (element instanceof IEntry)
				return ((IEntry) element).getContent()[columnIndex];
			else
				return "";
		}

		public void addListener(ILabelProviderListener listener) {
		}

		public void dispose() {
		}

		public boolean isLabelProperty(Object element, String property) {
			return false;
		}

		public void removeListener(ILabelProviderListener listener) {
		}

		public Color getForeground(Object element) {
			if (element instanceof Work
							&& StringUtil.parseInt(((Work) element).getGzsj()) > ConfigHelper.getIntegerProperty("work.warningminutes"))
				return Display.getCurrent().getSystemColor(SWT.COLOR_DARK_YELLOW);
			return null;
		}

		public Color getBackground(Object element) {
			return null;
		}
	}

	// 字体
	private static Font font;
	// actionset
	private static Map<String, IAction> actionMap = new HashMap<String, IAction>();
	// 垂直分隔
	private static SashForm sf;
	// 下方的水平分隔
	private static SashForm sf2;
	private static ITableFolder tableFolder;

	private UiUtil() {
	}

	// 注意自己dispose
	public static Font getFont() {
		if (font == null || font.isDisposed())
			font = new Font(Display.getCurrent(), "宋体", 11, SWT.NORMAL);
		return font;
	}

	public static Map<String, IAction> getActionMap() {
		return actionMap;
	}

	public static void setActionMap(Map<String, IAction> map) {
		actionMap = map;
	}

	/**
	 * 初始化表格
	 */
	public static TableViewer initTableViewer(final UiCore uc, final WorkList wl, Composite parent) {
		TableViewer tv0 = new TableViewer(parent, SWT.MULTI | SWT.BORDER | SWT.FULL_SELECTION | SWT.H_SCROLL
						| SWT.V_SCROLL);
		// 准备数据
		String[] header = getHeaderMc();
		int[] headerSize = ConfigHelper.getIntegerArrayProperty("work.headersize");

		Work[] list = wl.getWorks();
		if (list.length == 0) {
			list = new Work[] { new Work() };
			list[0].setRq(StringUtil.getCurrentDay());
			list[0].setWid(String.valueOf(1));
		}

		Table table = tv0.getTable();
		table.setHeaderVisible(true);
		table.setLinesVisible(true);
		table.addSelectionListener(new SelectionAdapter() {
			public void widgetSelected(SelectionEvent e) {
				if (!uc.isMulti()) {
					if ((TableItem) e.item != uc.getTableCursor().getRow())
						uc.getTableCursor().setSelection((TableItem) e.item, uc.getTableCursor().getColumn());
					uc.getTableCursor().setVisible(true);
					uc.getTv().getTable().setSelection(new TableItem[] { uc.getTableCursor().getRow() });
					uc.getTableCursor().setFocus();
				}
			}
		});
		// 使用TableCursor
		final TableCursor cursor = new TableCursor(table, SWT.NONE);
		uc.setTableCursor(cursor);
		final ControlEditor editor = new ControlEditor(cursor);
		editor.grabHorizontal = true;
		editor.grabVertical = true;
		editor.minimumWidth = 50;
		cursor.addSelectionListener(new SelectionAdapter() {
			public void widgetSelected(SelectionEvent e) {
				if (!uc.isMulti()) {
					if ((TableItem) e.item != uc.getTableCursor().getRow())
						uc.getTv().getTable().setSelection(new TableItem[] { uc.getTableCursor().getRow() });
				}
			}
		});
		cursor.addMouseListener(new MouseAdapter() {
			public void mouseDoubleClick(MouseEvent me) {
				adapterEvent(uc, editor);
			}
		});
		cursor.addTraverseListener(new TraverseListener() {
			public void keyTraversed(TraverseEvent event) {
				if (event.detail == SWT.TRAVERSE_RETURN)
					adapterEvent(uc, editor);
				if (event.detail == SWT.TRAVERSE_TAB_NEXT || event.detail == SWT.TRAVERSE_TAB_PREVIOUS) {
					focusNext(event, cursor);
					event.doit = false;
				}
			}
		});
		for (int i = 0; i < header.length; i++) {
			TableColumn column = new TableColumn(table, SWT.NULL);
			column.setText(header[i]);
			column.setWidth(i < headerSize.length ? headerSize[i] : 80);
			// 将column的key保存在data中
			column.setData(getHeaderJc()[i]);
			// 在汇总模式下可排序
			column.addListener(SWT.Selection, new UiCellSorter(uc));
		}
		// set contenet provider
		tv0.setContentProvider(new IStructuredContentProvider() {
			public void dispose() {
			}

			public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
				if (newInput == null)
					return;
				// 输入变化先隐藏TableCursor
				if (uc != null && uc.getTableCursor() != null) {
					uc.getTableCursor().setVisible(false);
				}
			}

			public Object[] getElements(Object input) {
				if (input instanceof IEntry[])
					return (IEntry[]) input;
				else
					return new Object[0];
			}
		});
		tv0.setLabelProvider(new WorkLabelProvider());
		tv0.setColumnProperties(getHeaderJc());
		tv0.setInput(list);
		uc.setWorkDay(StringUtil.getCurrentDay());
		return tv0;
	}

	/**
	 * 创建编辑器
	 */
	public static BindedTableViewer initTabEditor(Composite parent, final Class clazz, final String id) {
		List list = new ArrayList();
		try {
			list = DMFactory.getDataManager(clazz).readList(id);
		} catch (DataException e1) {
			e1.printStackTrace();
		}
		IBindedTableModel model = new BeanBindedTableModel(list) {
			public Object createRow() {
				IEntry entry = (IEntry) instance(clazz);
				// 若存在week或rq等chunk,且id不为空,则置
				if (!StringUtil.isNull(id) && Arrays.asList(entry.getFieldNames()).contains("week")) {
					entry.setProperty("week", getChunkId());
					entry.setProperty("num", String.valueOf(getRows().size() + 1));
				}
				return entry;
			}
		};
		model.setChunkId(id);

		IEntry entry = (IEntry) instance(clazz);
		String[] fieldNames = entry.getFieldNames();
		String[] fieldDescs = entry.getFieldDescs();
		for (int i = 0; i < fieldNames.length; i++) {
			//20071117可以定义一些隐藏字段,在界面上不显示,目前用于p2pim中联系人p2pid字段
			if(fieldDescs[i].indexOf("不显示") == -1){
				BindedTableColumn btc = new TextBindedTableColumn(fieldNames[i]);
				btc.setShowName(fieldDescs[i]);
				model.addColumn(btc);
			}
		}

		BindedTableViewer bindedTableViewer = new BindedTableViewer(parent, SWT.NONE);
		bindedTableViewer.setModel(model);
		bindedTableViewer.setRowCreateRemovable(false);
		bindedTableViewer.setRowsOrderable(false);
		bindedTableViewer.setColsOrderable(false);
		bindedTableViewer.getTableViewer().getTable().setFont(getFont());
		bindedTableViewer.create();
		return bindedTableViewer;
	}

	public static int[] getVerticalSize() {
		if (sf != null)
			return sf.getWeights();
		return new int[] { 62, 38 };
	}

	public static int[] getHorizontalSize() {
		if (sf2 != null)
			return sf2.getWeights();
		return new int[] { 30, 70 };
	}

	public static WorkList getData(UiCore ui) {
		Table table = (Table) ui.getTv().getControl();
		TableItem[] ti = table.getItems();
		Work[] list = new Work[ti.length];
		String[] ss = new String[table.getColumnCount()];
		for (int i = 0; i < list.length; i++) {
			for (int j = 0; j < ss.length; j++)
				ss[j] = ti[i].getText(j);
			list[i] = new Work();
			list[i].setContent(ss);
		}
		WorkList wl = new WorkList();
		wl.setWorks(list);
		wl.setMemo(ui.getMemoText().getText());
		return wl;
	}

	public static void checkSave(UiCore ui) {
		ArrayList<String> needSave = new ArrayList<String>();
		if (ui.isDirty())
			needSave.add("日志");
		for (ITableEditor editor : tableFolder.getEditors()) {
			BindedTableViewer btv = editor.getViewer();
			if (btv != null && btv.getModel().isDirty() && btv.getModel().isEditable())
				needSave.add(editor.getName());
		}
		if (!needSave.isEmpty()) {
			if (MessageDialog.openConfirm(Display.getCurrent().getActiveShell(), "提示", needSave + "已被修改,是否保存?")) {
				// 逐个保存
				try {
					if (ui.isDirty()) {
						ui.getDataManager().createData(ui.getData());
						ui.setDirty(false);
					}
					for (ITableEditor editor : tableFolder.getEditors()) {
						BindedTableViewer btv = editor.getViewer();
						if (btv != null && btv.getModel().isDirty()) {
							IDataManager idm = DMFactory.getDataManager(btv.getModel().createRow().getClass());
							idm.createList(btv.getModel().getRows(), btv.getModel().getChunkId());
							btv.getModel().setDirty(false);
						}
					}

				} catch (DataException e) {
					e.printStackTrace();
				}
			} else {
				// 清除“脏”标记
				if (ui.isDirty()) {
					ui.setDirty(false);
				}
				for (ITableEditor editor : tableFolder.getEditors()) {
					BindedTableViewer btv = editor.getViewer();
					if (btv != null && btv.getModel().isDirty()) {
						btv.getModel().setDirty(false);
					}
				}

			}
		}
	}

	// 检查当前活动Editor
	public static void checkSave(BindedTableViewer btv) {
		if (btv == null || !btv.getModel().isDirty())
			return;
		if (MessageDialog.openConfirm(Display.getCurrent().getActiveShell(), "提示", "已被修改,是否保存?")) {
			try {
				if (btv != null && btv.getModel().isDirty()) {
					IDataManager idm = DMFactory.getDataManager(btv.getModel().createRow().getClass());
					idm.createList(btv.getModel().getRows(), btv.getModel().getChunkId());
				}
			} catch (DataException e) {
				e.printStackTrace();
			}
		}
		btv.getModel().setDirty(false);
	}

	// 显示某天的记录
	public static void showWork(UiCore parent, String day) {
		if (parent.getWorkDay().equals(day) && !parent.isMulti())
			return;
		parent.checkSave();
		parent.setMulti(false);
		parent.setDirty(false);
		parent.setWorkDay(day);
		try {
			parent.setData((WorkList) parent.getDataManager().readData(parent.getWorkDay()));
		} catch (DataException e) {
			e.printStackTrace();
		}
		parent.setMyStatus(parent.getWorkDay());
		syncCalendar(day, parent.getCalendar());
	}

	// 显示某段的记录
	public static void showChunk(UiCore parent, String id) {

⌨️ 快捷键说明

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