📄 uiutil.java
字号:
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 + -