📄 gfmprogdictionarycomposite.java
字号:
package com.cmspad.dmp.bundles.gfm.widget;import java.io.BufferedReader;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStreamReader;import java.io.OutputStreamWriter;import java.io.PrintWriter;import java.util.LinkedHashMap;import java.util.Map;import org.eclipse.swt.SWT;import org.eclipse.swt.custom.TableEditor;import org.eclipse.swt.events.ControlAdapter;import org.eclipse.swt.events.ControlEvent;import org.eclipse.swt.events.SelectionAdapter;import org.eclipse.swt.events.SelectionEvent;import org.eclipse.swt.graphics.Point;import org.eclipse.swt.graphics.Rectangle;import org.eclipse.swt.layout.GridData;import org.eclipse.swt.layout.GridLayout;import org.eclipse.swt.widgets.Button;import org.eclipse.swt.widgets.Composite;import org.eclipse.swt.widgets.Event;import org.eclipse.swt.widgets.FileDialog;import org.eclipse.swt.widgets.Label;import org.eclipse.swt.widgets.Listener;import org.eclipse.swt.widgets.ScrollBar;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 com.cmspad.dmp.DMPBundle;import com.cmspad.dmp.DMPPreferencesUI;import com.cmspad.dmp.bundles.gfm.GFMActivator;import com.cmspad.dmp.bundles.gfm.GFMProgDictionary;import com.cmspad.dmp.util.DMPUtil;public class GFMProgDictionaryComposite extends DMPPreferencesUI { private Text vText; private Button applyButton; private Button resetButton; private Text kText; private Table data; public GFMProgDictionaryComposite(Composite parent, long uid) { super(parent, SWT.NONE); final GridLayout gridLayout = new GridLayout(); gridLayout.marginHeight = 0; gridLayout.marginWidth = 0; gridLayout.numColumns = 6; setLayout(gridLayout); final Label label = new Label(this, SWT.NONE); label.setText("名称"); kText = new Text(this, SWT.BORDER); final GridData gd_kText = new GridData(SWT.FILL, SWT.CENTER, true, false); kText.setLayoutData(gd_kText); final Label label_1 = new Label(this, SWT.NONE); label_1.setText("程序"); vText = new Text(this, SWT.BORDER); final GridData gd_vText = new GridData(SWT.FILL, SWT.CENTER, true, false); vText.setLayoutData(gd_vText); final Button button_3 = new Button(this, SWT.NONE); button_3.addSelectionListener(new SelectionAdapter() { public void widgetSelected(final SelectionEvent e) { FileDialog dialog = new FileDialog(getShell(), SWT.OPEN); dialog.setText("选择应用程序"); dialog.setFilterNames(new String[]{"应用程序"}); dialog.setFilterExtensions(new String[]{"*.exe"}); String path = dialog.open(); if(path != null){ vText.setText(path); if(kText.getText().length() == 0){ File f = new File(path); String fn = f.getName(); kText.setText(fn.substring(0, fn.length() - 4)); } } } }); button_3.setText("..."); final Button button_4 = new Button(this, SWT.NONE); button_4.addSelectionListener(new SelectionAdapter() { public void widgetSelected(final SelectionEvent e) { String k = kText.getText(); String v = vText.getText(); if (k.length() > 0 && v.length() > 0) { TableItem item = new TableItem(data, SWT.NONE); item.setText(new String[]{k, v.length() > 0?v:k}); data.setTopIndex(data.getItemCount() - 1); kText.setText(""); vText.setText(""); resetButton.setEnabled(true); applyButton.setEnabled(true); }else{ if(k.length() < 1){ DMPUtil.error("错误", "请输入名称", getShell()); kText.setFocus(); }else if(v.length() < 1){ DMPUtil.error("错误", "请选择程序", getShell()); vText.setFocus(); } } } }); button_4.setLayoutData(new GridData(80, SWT.DEFAULT)); button_4.setText("添加"); data = new Table(this, SWT.FULL_SELECTION | SWT.MULTI | SWT.BORDER); data.setLinesVisible(true); data.setHeaderVisible(true); data.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 5, 3)); final TableColumn column1 = new TableColumn(data, SWT.NONE); column1.setText("名称"); final TableColumn column2 = new TableColumn(data, SWT.NONE); column2.setText("程序"); // 自动改变字段长度 addControlListener(new ControlAdapter() { public void controlResized(ControlEvent e) { Rectangle area = getClientArea(); Point size = data.computeSize(SWT.DEFAULT, SWT.DEFAULT); ScrollBar vBar = data.getVerticalBar(); int width = area.width - data.computeTrim(0, 0, 0, 0).width - vBar.getSize().x - 75; if (size.y > area.height + data.getHeaderHeight()) { Point vBarSize = vBar.getSize(); width -= vBarSize.x; } int columnWidth = width / 2; column1.setWidth(columnWidth); column2.setWidth(columnWidth); } }); final Button button = new Button(this, SWT.NONE); button.addSelectionListener(new SelectionAdapter() { public void widgetSelected(final SelectionEvent e) { int[] indices = data.getSelectionIndices(); if(indices.length > 0){ TableItem[] items = new TableItem[indices.length]; StringBuffer text = new StringBuffer(); for (int i = 0, l = indices.length; i < l; i++) { int index = indices[i]; TableItem item = data.getItem(index); items[i] = item; text.append(item.getText()); text.append("\n"); } if (SWT.YES == DMPUtil.confirm("确认", "是否要删除下列程序?\n\n" + text.toString(), SWT.YES | SWT.NO)) { for (TableItem item : items) { item.dispose(); } resetButton.setEnabled(true); applyButton.setEnabled(true); } } } }); button.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false)); button.setText("删除"); final Button button_1 = new Button(this, SWT.NONE); button_1.addSelectionListener(new SelectionAdapter() { public void widgetSelected(final SelectionEvent e) { importData(); } }); button_1.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false)); button_1.setText("导入"); final Button button_2 = new Button(this, SWT.NONE); button_2.addSelectionListener(new SelectionAdapter() { public void widgetSelected(final SelectionEvent e) { exportData(); } }); button_2.setLayoutData(new GridData(SWT.FILL, SWT.TOP, false, false)); button_2.setText("导出"); resetButton = new Button(this, SWT.NONE); resetButton.addSelectionListener(new SelectionAdapter() { public void widgetSelected(final SelectionEvent e) { refresh(); } }); final GridData gd_resetButton = new GridData(SWT.RIGHT, SWT.CENTER, false, false, 5, 1); gd_resetButton.widthHint = 80; resetButton.setLayoutData(gd_resetButton); resetButton.setText("重置"); applyButton = new Button(this, SWT.NONE); applyButton.addSelectionListener(new SelectionAdapter() { public void widgetSelected(final SelectionEvent e) { apply(); } }); final GridData gd_applyButton = new GridData(SWT.FILL, SWT.CENTER, false, false); applyButton.setLayoutData(gd_applyButton); applyButton.setText("应用"); // 在线编辑表格内容 final TableEditor editor = new TableEditor(data); editor.horizontalAlignment = SWT.LEFT; editor.grabHorizontal = true; data.addListener(SWT.MouseDoubleClick, new Listener() { public void handleEvent(Event event) { Rectangle clientArea = data.getClientArea(); Point pt = new Point(event.x, event.y); int index = data.getTopIndex(); while (index < data.getItemCount()) { boolean visible = false; final TableItem item = data.getItem(index); for (int i = 0; i < data.getColumnCount(); i++) { Rectangle rect = item.getBounds(i); if (rect.contains(pt)) { final int column = i; final Text text = new Text(data, SWT.NONE); Listener textListener = new Listener() { public void handleEvent(final Event e) { switch (e.type) { case SWT.FocusOut: String oldText = item.getText(); String newText = text.getText(); item.setText(column, newText); if(!oldText.equals(newText)){ resetButton.setEnabled(true); applyButton.setEnabled(true); } text.dispose(); break; case SWT.Traverse: switch (e.detail) { case SWT.TRAVERSE_RETURN: oldText = item.getText(); newText = text.getText(); item.setText(column, newText); if(!oldText.equals(newText)){ resetButton.setEnabled(true); applyButton.setEnabled(true); } case SWT.TRAVERSE_ESCAPE: text.dispose(); e.doit = false; } break; } } }; text.addListener(SWT.FocusOut, textListener); text.addListener(SWT.Traverse, textListener); editor.setEditor(text, item, i); text.setText(item.getText(i)); text.selectAll(); text.setFocus(); return; } if (!visible && rect.intersects(clientArea)) { visible = true; } } if (!visible) return; index++; } } }); // } public void refresh() { data.removeAll(); for(String key: GFMProgDictionary.keys()){ String title = GFMProgDictionary.value(key); TableItem item = new TableItem(data, SWT.NONE); item.setText(new String[]{key, title}); } resetButton.setEnabled(false); applyButton.setEnabled(false); } @Override protected void checkSubclass() {} private void apply() { Map<String, String> strings = new LinkedHashMap<String, String>(); for (TableItem item : data.getItems()) { strings.put(item.getText(0), item.getText(1)); } StringBuffer string = new StringBuffer(); for(String k: strings.keySet()){ String v = strings.get(k); string.append(k); string.append("="); string.append(v); string.append("\n"); } DMPBundle.setPreference(GFMActivator.ID, GFMActivator.PREFS_PROG_DICTIONARY, string.length() > 0?string.substring(0, string.length() - 1):""); resetButton.setEnabled(false); applyButton.setEnabled(false); GFMProgDictionary.refresh(); } private void importData() { Map<String, String> strings = new LinkedHashMap<String, String>(); for (TableItem item : data.getItems()) { strings.put(item.getText(0), item.getText(1)); } data.removeAll(); FileDialog dialog = new FileDialog(getShell(), SWT.OPEN); dialog.setText("请选择导入的文本文件(UTF-8编码)"); String path = dialog.open(); if (path != null) { try { BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(path), "UTF-8")); for (String line = reader.readLine(); line != null; line = reader.readLine()) { if (line.length() == 0) { continue; } String[] ts = DMPUtil.split(line, '='); strings.put(ts[0], ts.length > 1?ts[1]:ts[0]); } reader.close(); } catch (IOException e) { DMPUtil.error("错误", "无法导入数据字典:" + e.getLocalizedMessage()); } } for (String k : strings.keySet()) { String v = strings.get(k); TableItem item = new TableItem(data, SWT.NONE); item.setText(new String[]{k, v}); } resetButton.setEnabled(true); applyButton.setEnabled(true); } private void exportData() { Map<String, String> strings = new LinkedHashMap<String, String>(); for (TableItem item : data.getItems()) { strings.put(item.getText(0), item.getText(1)); } FileDialog dialog = new FileDialog(getShell(), SWT.SAVE); dialog.setText("请选择导出的文本文件(UTF-8编码)"); String path = dialog.open(); if (path != null) { try { PrintWriter writer = new PrintWriter(new OutputStreamWriter(new FileOutputStream(path), "UTF-8")); for (String k : strings.keySet()) { String v = strings.get(k); writer.print(k); writer.print("="); writer.println(v); } writer.flush(); writer.close(); } catch (IOException e) { DMPUtil.error("错误", "无法导出数据字典:" + e.getLocalizedMessage()); } } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -