idselector.java
来自「SANCHO」· Java 代码 · 共 351 行
JAVA
351 行
/* * Copyright (C) 2004-2005 Rutger M. Ovidius for use with the sancho project. * See LICENSE.txt for license information. */package sancho.view.utility;import org.eclipse.jface.dialogs.Dialog;import org.eclipse.jface.preference.PreferenceStore;import org.eclipse.swt.SWT;import org.eclipse.swt.events.SelectionAdapter;import org.eclipse.swt.events.SelectionEvent;import org.eclipse.swt.graphics.Point;import org.eclipse.swt.layout.GridData;import org.eclipse.swt.widgets.Button;import org.eclipse.swt.widgets.Composite;import org.eclipse.swt.widgets.Control;import org.eclipse.swt.widgets.Event;import org.eclipse.swt.widgets.Label;import org.eclipse.swt.widgets.Listener;import org.eclipse.swt.widgets.Shell;import org.eclipse.swt.widgets.Table;import org.eclipse.swt.widgets.TableItem;import sancho.core.Sancho;import sancho.view.preferences.PreferenceLoader;public class IDSelector extends Dialog { public static final int MAGIC_NUMBER = 65; private String[] legend; private String allIDs; private String leftIDs; private String rightIDs; private String prefOption; private String prefOptionOff; private String prefSuffix; private TableItem hoverTableItem; private Table table; private boolean dragging; public IDSelector(Shell parentShell, String[] legend, String prefOption, String prefSuffix) { super(parentShell); this.legend = legend; allIDs = SResources.S_ES; for (int i = 0; i < legend.length; i++) allIDs += String.valueOf((char) (IDSelector.MAGIC_NUMBER + i)); this.prefSuffix = prefSuffix; this.prefOption = prefOption + prefSuffix; this.prefOptionOff = this.prefOption + "Off"; String tmpString = PreferenceLoader.loadString(this.prefOption); leftIDs = PreferenceLoader.loadString(this.prefOptionOff); rightIDs = ((!tmpString.equals(SResources.S_ES)) ? tmpString : allIDs); for (int i = 0; i < allIDs.length(); i++) { if (leftIDs.indexOf(allIDs.charAt(i)) == -1) { if (rightIDs.indexOf(allIDs.charAt(i)) == -1) rightIDs += allIDs.charAt(i); } } } public Control createDialogArea(Composite oldParent) { Composite parent = (Composite) super.createDialogArea(oldParent); parent.setLayout(WidgetFactory.createGridLayout(2, 5, 5, 5, 5, false)); GridData gridData = new GridData(GridData.FILL_HORIZONTAL); gridData.horizontalSpan = 2; Label l = new Label(parent, SWT.NONE); l.setText(SResources.getString("l.selectorInfo")); l.setLayoutData(gridData); createTable(parent); createButtons(parent); createDefault(parent); return parent; } protected void configureShell(Shell shell) { super.configureShell(shell); shell.setText(prefSuffix + " " + SResources.getString("l.selector")); shell.setImage(SResources.getImage("preferences")); } protected void createDefault(Composite parent) { GridData gd = new GridData(GridData.FILL_HORIZONTAL); gd.horizontalSpan = 2; Button moveUp = new Button(parent, SWT.NONE); moveUp.setText(SResources.getString("l.default")); moveUp.setLayoutData(gd); moveUp.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { rightIDs = allIDs; leftIDs = SResources.S_ES; table.removeAll(); createItems(); } }); } public void createTable(Composite parent) { table = new Table(parent, SWT.BORDER | SWT.FULL_SELECTION | SWT.SINGLE | SWT.CHECK); table.setLayoutData(new GridData(GridData.FILL_BOTH)); Listener shellListener = new Listener() { public void handleEvent(Event e) { switch (e.type) { case SWT.MouseDown : onMouseDown(e); break; case SWT.MouseMove : onMouseMove(e); break; case SWT.MouseUp : onMouseUp(e); } } }; int[] shellEvents = new int[]{SWT.MouseDown, SWT.MouseUp, SWT.MouseMove}; for (int i = 0; i < shellEvents.length; i++) table.addListener(shellEvents[i], shellListener); createItems(); } public void onMouseMove(Event e) { Table table = (Table) e.widget; TableItem tableItem = table.getItem(new Point(e.x, e.y)); if (tableItem != null) { if (hoverTableItem != null) { if (hoverTableItem != tableItem) hoverTableItem.setBackground(null); } if (dragging) { hoverTableItem = tableItem; hoverTableItem.setBackground(table.getDisplay().getSystemColor(SWT.COLOR_WIDGET_BACKGROUND)); } } else { dragging = false; if (hoverTableItem != null && !hoverTableItem.isDisposed()) { hoverTableItem.setBackground(null); hoverTableItem = null; } } } public void onMouseUp(Event e) { Table table = (Table) e.widget; TableItem tableItem = table.getItem(new Point(e.x, e.y)); if (dragging) { if (hoverTableItem != null && table.getSelection().length > 0) { TableItem selectedTableItem = table.getSelection()[0]; if (selectedTableItem != tableItem) { int selID = table.getSelectionIndex(); boolean isChecked = selectedTableItem.getChecked(); String ID = (String) selectedTableItem.getData("ID"); int IDnum = ID.charAt(0) - IDSelector.MAGIC_NUMBER; table.remove(selID); int targetID = table.indexOf(hoverTableItem) + 1; TableItem newTableItem = new TableItem(table, SWT.NONE, targetID); newTableItem.setData("ID", ID); newTableItem.setText(SResources.getString(legend[IDnum])); newTableItem.setChecked(isChecked); table.setSelection(targetID); hoverTableItem.setBackground(null); hoverTableItem = null; } } dragging = false; } } public void onMouseDown(Event e) { Table table = (Table) e.widget; TableItem tableItem = table.getItem(new Point(e.x, e.y)); if (tableItem != null) { dragging = true; hoverTableItem = null; } } public void createItems() { for (int i = 0; i < rightIDs.length(); i++) { TableItem tableItem = new TableItem(table, SWT.NONE); int IDnum = rightIDs.charAt(i) - IDSelector.MAGIC_NUMBER; tableItem.setData("ID", SResources.S_ES + rightIDs.charAt(i)); tableItem.setText(SResources.getString(legend[IDnum])); tableItem.setChecked(true); } for (int i = 0; i < leftIDs.length(); i++) { TableItem tableItem = new TableItem(table, SWT.NONE); int IDnum = leftIDs.charAt(i) - IDSelector.MAGIC_NUMBER; tableItem.setData("ID", SResources.S_ES + leftIDs.charAt(i)); tableItem.setText(SResources.getString(legend[IDnum])); } } public void createButtons(Composite parent) { Composite buttonComposite = new Composite(parent, SWT.NONE); buttonComposite.setLayout(WidgetFactory.createGridLayout(1, 0, 0, 5, 5, false)); buttonComposite.setLayoutData(new GridData(GridData.FILL_BOTH)); Button moveUp = new Button(buttonComposite, SWT.NONE); moveUp.setText(SResources.getString("l.up")); moveUp.setLayoutData(new GridData(GridData.FILL_BOTH)); moveUp.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { int index; if ((index = table.getSelectionIndex()) > 0) moveItem(index, -1); } }); Button moveDown = new Button(buttonComposite, SWT.NONE); moveDown.setText(SResources.getString("l.down")); moveDown.setLayoutData(new GridData(GridData.FILL_BOTH)); moveDown.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { int index = table.getSelectionIndex(); if (index < table.getItemCount() - 1 && index > -1) moveItem(index, 1); } }); } public void moveItem(int index, int increment) { TableItem tableItem = table.getItem(index); boolean isChecked = tableItem.getChecked(); String ID = (String) tableItem.getData("ID"); int IDnum = ID.charAt(0) - IDSelector.MAGIC_NUMBER; table.remove(index); TableItem newTableItem = new TableItem(table, SWT.NONE, index + increment); newTableItem.setData("ID", ID); newTableItem.setText(SResources.getString(legend[IDnum])); newTableItem.setChecked(isChecked); table.setSelection(index + increment); } /** * savePrefs */ public void savePrefs() { if (rightIDs.length() > 1) { PreferenceStore p = PreferenceLoader.getPreferenceStore(); p.setValue(prefOption, rightIDs); p.setValue(prefOptionOff, leftIDs); PreferenceLoader.saveStore(); } if (Sancho.getCore() != null) Sancho.getCore().updatePreferences(); } /** * refreshLists */ public void refreshLists() { TableItem[] tableItems = table.getItems(); leftIDs = SResources.S_ES; rightIDs = SResources.S_ES; for (int i = 0; i < tableItems.length; i++) { if (tableItems[i].getChecked()) rightIDs += (String) tableItems[i].getData("ID"); else leftIDs += (String) tableItems[i].getData("ID"); } } protected void buttonPressed(int buttonId) { refreshLists(); super.buttonPressed(buttonId); } public static String createIDString(String[] legend) { String result = ""; for (int i = 0; i < legend.length; i++) result += String.valueOf((char) (IDSelector.MAGIC_NUMBER + i)); return result; } public static String getID(int i) { return String.valueOf((char) (IDSelector.MAGIC_NUMBER + i)); } public static String loadIDs(String prefString, String allIDs) { String prefStringOff = prefString + "Off"; String savedIDs = PreferenceLoader.loadString(prefString); String savedOffIDs = PreferenceLoader.loadString(prefStringOff); for (int i = 0; i < savedIDs.length(); i++) { if (allIDs.indexOf(savedIDs.charAt(i)) == -1) { PreferenceStore p = PreferenceLoader.getPreferenceStore(); p.setValue(prefString, allIDs); p.setValue(prefStringOff, ""); return allIDs; } } for (int i = 0; i < savedOffIDs.length(); i++) { if (allIDs.indexOf(savedOffIDs.charAt(i)) == -1) { PreferenceStore p = PreferenceLoader.getPreferenceStore(); savedOffIDs=""; p.setValue(prefStringOff, ""); } } for (int i = 0; i < allIDs.length(); i++) { if ((savedIDs.indexOf(allIDs.charAt(i)) == -1) && (savedOffIDs.indexOf(allIDs.charAt(i)) == -1)) savedIDs += allIDs.charAt(i); } String tmp = ""; for (int i = 0; i < savedIDs.length(); i++) { if ((savedOffIDs.indexOf(savedIDs.charAt(i)) == -1)) tmp += savedIDs.charAt(i); } savedIDs = tmp; PreferenceStore p = PreferenceLoader.getPreferenceStore(); p.setValue(prefString, savedIDs); p.setValue(prefStringOff, savedOffIDs); // PreferenceLoader.saveStore(); return savedIDs; }}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?