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

📄 uiutil.java

📁 mywork是rcp开发的很好的例子
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
		BindedTableViewer btv = getActiveTableEditor().getViewer();
		IBindedTableModel model = btv.getModel();
		if (model.getChunkId().equals(id) && model.isEditable())
			return;
		UiUtil.checkSave(btv);
		model.setEditable(true);
		model.setDirty(false);
		model.setChunkId(id);
		try {
			model.getRows().clear();
			model.getRows().addAll(DMFactory.getDataManager(getActiveTableEditor().getEntityClass()).readList(id));
			btv.refresh(true);
		} catch (DataException e) {
			e.printStackTrace();
		}
		parent.setMyStatus(id);
		try {
			String date = StringUtil.getDefaultDateFormat().format(StringUtil.getDefaultWeekFormat().parse(id));
			// 修改跨年有时计算第一周不准的bug,以每年第1天所在的周为第1周
			if (id.endsWith("01"))
				date = id + "01";
			syncCalendar(date, parent.getCalendar());
		} catch (ParseException e) {
			e.printStackTrace();
		}
	}

	public static void syncCalendar(String value, SWTCalendar calendar) {
		try {
			Calendar date1 = Calendar.getInstance();
			date1.setTime(StringUtil.getDefaultDateFormat().parse(value));
			calendar.setCalendar(date1);
		} catch (ParseException e) {
			e.printStackTrace();
		}
	}

	// 给控件赋值 levin 20060127
	private static void synTextCellValue(final TableCursor cursor, final Text cellEdit) {
		TableItem row = cursor.getRow();
		int column = cursor.getColumn();
		TableColumn tc = ((Table) cursor.getParent()).getColumn(column);
		row.setText(column, cellEdit.getText());
		cellEdit.dispose();
		// 给工作时间赋值 gzsj=jssj-kssj-ddsj
		if (tc.getData().equals("kssj")) {
			synGzsj(row, column + 1);
		}
		if (tc.getData().equals("jssj")) {
			synGzsj(row, column);
		}
		if (tc.getData().equals("ddsj")) {
			synGzsj(row, column - 1);
		}
	}
	
	// 只给控件赋值 Relay 2007-11-28
	private static void synCellValue(final TableCursor cursor, String value) {
		TableItem row = cursor.getRow();
		int column = cursor.getColumn();
		row.setText(column, value);
	}

	// 给工作时间赋值 gzsj=jssj-kssj-ddsj
	private static void synGzsj(TableItem row, int column) {
		if (TjUtil.convertSj(row.getText(column - 1)) > 0 && TjUtil.convertSj(row.getText(column)) > 0)
			row
							.setText(column + 2, String.valueOf(TjUtil.convertSj(row.getText(column))
											- TjUtil.convertSj(row.getText(column - 1))
											- StringUtil.parseInt(row.getText(column + 1))));
	}

	// 取当前的操作视图
	public static ITableEditor getActiveTableEditor() {
		return tableFolder.getActiveEditor();
	}

	/* 用TableCursor进行Table导航时处理的编辑事件 */
	private static void adapterEvent(UiCore uc, final ControlEditor editor) {
		TableCursor cursor = uc.getTableCursor();
		int i = cursor.getColumn();
		TableColumn tc = ((Table) cursor.getParent()).getColumn(i);
		// 不允许编辑的列
		if (uc.isMulti() || tc.getData().equals("rq") || tc.getData().equals("wid"))
			return;
		// 判断采用text还是combo
		if (tc.getData().equals("gzfl") || tc.getData().equals("xmz") || tc.getData().equals("plan")) {
			final CCombo cellEdit = new CCombo(cursor, SWT.READ_ONLY);
			cellEdit.setFont(cursor.getParent().getFont());
			if (tc.getData().equals("gzfl"))
				cellEdit.setItems(ConfigHelper.getStringArrayProperty("work.listgzfl"));
			else if (tc.getData().equals("xmz"))
				cellEdit.setItems(ConfigHelper.getStringArrayProperty("work.listxmz"));
			else if (tc.getData().equals("plan"))
				cellEdit.setItems(getPlans(uc.getWorkDay()));
			adapterComboEvent(cellEdit, cursor, editor);
		} else {
			final Text cellEdit = new Text(cursor, SWT.LEFT);
			cellEdit.setFont(uc.getTv().getTable().getFont());
			adapterTextEvent(cellEdit, cursor, editor);
		}
		uc.setDirty(true);
	}

	/* Text的事件处理 */
	private static void adapterTextEvent(final Text cellEdit, final TableCursor cursor, final ControlEditor editor) {
		TableItem row = cursor.getRow();
		int column = cursor.getColumn();
		TableColumn tc = ((Table) cursor.getParent()).getColumn(column);
		cellEdit.setText(row.getText(column));
		// 在此判断是否显示当前时间以HH:MM 2004.04.27 levin
		if (ConfigHelper.getBooleanProperty("work.datetip") && StringUtil.convertNull(cellEdit.getText()).equals("")) {
			if (tc.getData().equals("kssj") || tc.getData().equals("jssj")) {
				cellEdit.setText(StringUtil.getSysTime());
			}
			// 如果存在上一行,则拷贝above.jssj --> self.kssj,默认开始时间前为序号
			if (tc.getData().equals("kssj")) {
				int self = StringUtil.parseInt(row.getText(column - 1));
				if (self > 1) {
					Table tt = (Table) cursor.getParent();
					cellEdit.setText(StringUtil.convertNull(tt.getItem(self - 2).getText(column + 1)));
				}
			}
			// 如果存在下一行,则拷贝below.kssj --> self.jssj, 2006.01.09 levin
			if (tc.getData().equals("jssj")) {
				int self = StringUtil.parseInt(row.getText(column - 2));
				Table tt = (Table) cursor.getParent();
				if (self < tt.getItemCount()) {
					cellEdit.setText(StringUtil.convertNull(tt.getItem(self).getText(column - 1)));
				}
			}

		}
		cellEdit.selectAll();
		cellEdit.addTraverseListener(new TraverseListener() {
			public void keyTraversed(TraverseEvent e) {
				if (e.detail == SWT.TRAVERSE_TAB_NEXT || e.detail == SWT.TRAVERSE_TAB_PREVIOUS
								|| e.detail == SWT.TRAVERSE_RETURN) {
					synTextCellValue(cursor, cellEdit);
					// 修订gtk下cursor显示不正常的bug 2007.09.17 levin
					cursor.setFocus();
					// 后移或前移
					focusNext(e, cursor);
					// e.doit = false;
				}
				if (e.detail == SWT.TRAVERSE_ESCAPE) {
					cellEdit.dispose();
				}
			}
		});
		cellEdit.addFocusListener(new FocusAdapter() {
			public void focusLost(FocusEvent e) {
				synTextCellValue(cursor, cellEdit);
			}
		});
		// 离开编辑框进行菜单操作时,编辑的内容同步以便保存 Relay 2007-11-28
		cellEdit.addMouseTrackListener(new MouseTrackAdapter(){
			@Override
			public void mouseExit(MouseEvent e) {
				synCellValue(cursor, cellEdit.getText());
			}
		});
		cellEdit.addKeyListener(new KeyAdapter(){
			@Override
			public void keyReleased(KeyEvent e) {
				synCellValue(cursor, cellEdit.getText());
			}
		});
		editor.setEditor(cellEdit);
		cellEdit.setFocus();
	}

	/**
	 * Combo的事件处理
	 */
	private static void adapterComboEvent(final CCombo cellEdit, final TableCursor cursor, final ControlEditor editor) {
		TableItem row = cursor.getRow();
		int column = cursor.getColumn();
		String org = row.getText(column);
		if (!StringUtil.convertNull(org).equals(""))
			for (int i = 0; i < cellEdit.getItemCount(); i++)
				if (cellEdit.getItem(i).equals(org))
					cellEdit.select(i);
		// 修正没有选中时focus的错误
		if (cellEdit.getSelectionIndex() == -1)
			cellEdit.select(0);
		cellEdit.addSelectionListener(new SelectionAdapter() {
			public void widgetSelected(SelectionEvent e) {
				CCombo combo = (CCombo) e.getSource();
				combo.setSelection(combo.getSelection());
				// 离开编辑框进行菜单操作时,编辑的内容同步以便保存 Relay 2007-12-1
				synCellValue(cursor, cellEdit.getItem(cellEdit.getSelectionIndex()));
			}
		});
		cellEdit.addTraverseListener(new TraverseListener() {
			public void keyTraversed(TraverseEvent e) {
				if (e.detail == SWT.TRAVERSE_TAB_NEXT || e.detail == SWT.TRAVERSE_TAB_PREVIOUS
								|| e.detail == SWT.TRAVERSE_RETURN) {
					synCellValue(cursor, cellEdit.getItem(cellEdit.getSelectionIndex()));
					cellEdit.dispose();
					// 修订gtk下cursor显示不正常的bug 2007.09.17 levin
					cursor.setFocus();
					// 后移或前移
					focusNext(e, cursor);
				}
				if (e.detail == SWT.TRAVERSE_ESCAPE) {
					cellEdit.dispose();
				}
			}
		});
		cellEdit.addFocusListener(new FocusAdapter() {
			public void focusLost(FocusEvent e) {
				synCellValue(cursor, cellEdit.getItem(cellEdit.getSelectionIndex()));
				cellEdit.dispose();
			}
		});
		editor.setEditor(cellEdit);
		cellEdit.setFocus();
	}

	private static void focusNext(TraverseEvent e, final TableCursor cursor) {
		TableItem row = cursor.getRow();
		int column = cursor.getColumn();
		if (e.detail != SWT.TRAVERSE_TAB_PREVIOUS)
			cursor.setSelection(row, column == ((Table) cursor.getParent()).getColumnCount() - 1 ? column : column + 1);
		else
			cursor.setSelection(row, column == 0 ? column : column - 1);
	}

	private static Object instance(final Class clazz) {
		try {
			return clazz.newInstance();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}

	public static ITableFolder getTableFolder() {
		if (tableFolder == null)
			tableFolder = new DefaultTableFolder();
		return tableFolder;
	}

	// 配置修改后的重绘页面
	public static void init() {
		// Composite composite=sf.getParent();
		// int indexEditor=tfEditor.getSelectionIndex();
		// int indexTool=tfTool.getSelectionIndex();
		// sf.dispose();
		// initContentPane(UiWork.self,composite);
		// tfEditor.setSelection(indexEditor);
		// tfTool.setSelection(indexTool);
		// composite.layout();
	}

	// 取某天的计划列表
	private static Map<String, String[]> plansCache = new HashMap<String, String[]>(1); // 缓存一个计划列表

	public static Map<String, String[]> getPlansCache() {
		return plansCache;
	}

	private static String[] getPlans(String day) {
		if (plansCache.get(day) != null)
			return plansCache.get(day);
		try {
			java.util.List list = DMFactory.getDataManager(Personal.class).readList(StringUtil.getWeek(day));
			String[] plans = new String[list.size() + 1];
			plans[0] = "";
			for (int i = 1; i < plans.length; i++)
				plans[i] = ((Personal) list.get(i - 1)).task;
			plansCache.clear();
			plansCache.put(day, plans);
			return plans;
		} catch (DataException e) {
			return new String[] { "" };
		}
	}

	// 当前的UiCore
	public static UiCore getInstance() {
		if (PspEditor.self != null)
			return PspEditor.self;
		return null;
	}

	// 保存位置
	public static void savePosition() {
		IWorkbenchPage activePage = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
		PartSite part = (PartSite) activePage.getActivePart().getSite();
		// 2007010 如果当前透视图不是PSP,则不保存位置
		if (!"net.sf.psp".equals(part.getPluginId()))
			return;

		// 取表头的间隔
		Table table = getInstance().getTv().getTable();
		TableColumn[] tcs = table.getColumns();
		int[] headerSize = new int[tcs.length];
		for (int i = 0; i < headerSize.length; i++) {
			headerSize[i] = tcs[i].getWidth();
		}
		// 取窗体大小
		Point point = table.getShell().getSize();
		int[] windowSize = new int[] { point.x, point.y };
		// 取窗体位置
		Point point2 = table.getShell().getLocation();
		int[] windowLocation = new int[] { point2.x, point2.y };

		Properties pr = ConfigHelper.getPropList();
		pr.setProperty("work.headersize", StringUtil.int2string(headerSize));
		pr.setProperty("work.windowsize", StringUtil.int2string(windowSize));
		pr.setProperty("work.windowlocation", StringUtil.int2string(windowLocation));
		pr.setProperty("work.verticalsize", StringUtil.int2string(UiUtil.getVerticalSize()));
		pr.setProperty("work.horizontalsize", StringUtil.int2string(UiUtil.getHorizontalSize()));
		// 保存各btv的位置
		for (ITableEditor editor : UiUtil.getTableFolder().getEditors()) {
			BindedTableViewer btv = editor.getViewer();
			if (btv != null) {
				String name = btv.getModel().createRow().getClass().getSimpleName().toLowerCase();
				TableColumn[] tc = btv.getTable().getColumns();
				Map map = new HashMap(tc.length);
				for (int k = 0; k < tc.length; k++) {
					map.put(tc[k].getData(), tc[k].getWidth());
				}
				pr.setProperty(name + ".headersize", StringUtil.fromMap(map, ";"));
			}
		}
		if (UiUtil.getInstance() instanceof PspEditor) {
			// 保存view的相对位置
			ViewStack stack = (ViewStack) part.getPane().getContainer();
			ViewSashContainer container = (ViewSashContainer) stack.getContainer();
			XMLMemento memento = XMLMemento.createWriteRoot("DummyStatus");
			container.saveState(memento);
			IMemento[] children = memento.getChildren(IWorkbenchConstants.TAG_INFO);
			// 保持UiPerspective布局不变情况下,只对最后两个布局信息感兴趣
			// 垂直间隔
			IMemento vchild = children[children.length - 2];
			int vleft = vchild.getInteger(IWorkbenchConstants.TAG_RATIO_LEFT);
			int vright = vchild.getInteger(IWorkbenchConstants.TAG_RATIO_RIGHT);
			pr.setProperty("work.verticalsize", StringUtil.int2string(new int[] { vleft, vright }));
			// 水平间隔
			IMemento hchild = children[children.length - 1];
			int hleft = hchild.getInteger(IWorkbenchConstants.TAG_RATIO_LEFT);
			int hright = hchild.getInteger(IWorkbenchConstants.TAG_RATIO_RIGHT);
			pr.setProperty("work.horizontalsize", StringUtil.int2string(new int[] { hleft, hright }));
		}
		ConfigHelper.store();
	}

	// 取表头名称
	public static String[] getHeaderMc() {
		return new Work().getFieldDescs();
	}

	// 取表头简称
	public static String[] getHeaderJc() {
		return new Work().getFieldNames();
	}

	public static String getToDoList() {
		StringBuffer sb = new StringBuffer();
		try {
			BufferedInputStream bis = new BufferedInputStream(URLUtil.getResourceURL("docs/readme.txt").openStream());
			byte[] b = new byte[bis.available()];
			bis.read(b);
			//约定文件都是UTF-8格式的,修订about中取readme.txt时编码不一致出乱码的bug,20070917 levin
			sb.append(new String(b,"UTF-8"));
			bis.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return sb.toString();
	}

	// 使某组action可操作
	public static void enableActions(String actions, boolean enabled) {
		actions = ";" + actions + ";";
		for (String key : actionMap.keySet()) {
			if (actions.indexOf(";" + key + ";") != -1)
				actionMap.get(key).setEnabled(enabled);
		}
	}

	// 取文件的url,win32平台下可能会多一个/
	public static String toFilePath(URL url) throws IOException {
		String path = FileLocator.toFileURL(url).getPath();
		if ("win32".equals(SWT.getPlatform()) && path.startsWith("/"))
			path = path.substring(1);
		return path;
	}

	//设置状态栏显示信息
	public static void setStatus(String string) {
		WorkbenchWindow window=(WorkbenchWindow) PlatformUI.getWorkbench().getActiveWorkbenchWindow();
		IStatusLineManager statusLineManager = window.getActionBars().getStatusLineManager();
		statusLineManager.setMessage(string);
	}
}

⌨️ 快捷键说明

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