📄 bsfpreferencepage.java
字号:
}
/**
* Returns a height hint for a button control.
*/
public static int getButtonHeigthHint(Button button) {
GC gc = new GC(button);
gc.setFont(button.getFont());
FontMetrics fFontMetrics = gc.getFontMetrics();
gc.dispose();
return Dialog.convertVerticalDLUsToPixels(
fFontMetrics,
IDialogConstants.BUTTON_HEIGHT);
}
private void handleAddButtonPressed() {
BSFEngineDialog dialog = new BSFEngineDialog(getShell(), Flow4JPlugin.getResourceString("PreferencePage_BSFEngine.title")); //$NON-NLS-1$
dialog.addEngineClassField(LANGUAGE_LABEL, null, false);
dialog.addLanguageField(ENGINECLASS_LABEL, null, false);
dialog.addEngineClassField(EXTENSIONS_LABEL, null, false);
if (dialog.open() != Window.OK) {
return;
}
addEngineDesc(
getBSFManager().newEngineDescriptor(
dialog.getStringValue(LANGUAGE_LABEL).trim(),
dialog.getStringValue(ENGINECLASS_LABEL).trim(),
dialog.getStringValue(EXTENSIONS_LABEL).trim()));
}
/**
* Attempts to add the given engine descriptor. Returns whether the engine descriptor
* was added or not (as when the user answers not to overwrite an
* existing engine descriptor).
* @param desc the variable to add
* @return whether the engine descriptor was added
*/
public boolean addEngineDesc(BSFEngineDescriptor desc) {
String language = desc.getLanguage();
List editedDescs = engineDescContentProvider.getVariables();
Iterator iter = editedDescs.iterator();
while (iter.hasNext()) {
BSFEngineDescriptor currentDesc =
(BSFEngineDescriptor) iter.next();
String currLang = currentDesc.getLanguage();
if (currLang.equals(language)) {
boolean overWrite = MessageDialog.openQuestion(getShell(), Flow4JPlugin.getResourceString("PreferencePage_BSF_Overwrite.title"), MessageFormat.format(Flow4JPlugin.getResourceString("PreferencePage_BSF_Overwrite_Question.label"), new String[] { language })); //$NON-NLS-1$ //$NON-NLS-2$
if (!overWrite) {
return false;
}
engineDescContentProvider.removeDescriptors(
new BSFEngineDescriptor[] { currentDesc });
break;
}
}
engineDescContentProvider.addVariables(
new BSFEngineDescriptor[] { desc });
engineDescTable.refresh();
return true;
}
private void handleEditButtonPressed() {
IStructuredSelection selection =
(IStructuredSelection) engineDescTable.getSelection();
BSFEngineDescriptor desc =
(BSFEngineDescriptor) selection.getFirstElement();
BSFEngineDialog dialog = new BSFEngineDialog(getShell(), Flow4JPlugin.getResourceString("PreferencePage_BSFEngine.title")); //$NON-NLS-1$
dialog.addLanguageField(LANGUAGE_LABEL, desc.getLanguage(), false);
dialog.addEngineClassField(ENGINECLASS_LABEL, desc.getEngineClassName(), true);
dialog.addExtensionsField(EXTENSIONS_LABEL, desc.getExtensionsStr(), true);
if (dialog.open() == Window.OK) {
desc.setUpdated(true);
desc.setLanguage(dialog.getStringValue(LANGUAGE_LABEL));
desc.setEngineClassName(dialog.getStringValue(ENGINECLASS_LABEL));
desc.setExtensions(dialog.getStringValue(EXTENSIONS_LABEL));
engineDescTable.update(desc, null);
}
}
/**
* Remove the selection variables.
*/
private void handleRemoveButtonPressed() {
IStructuredSelection selection =
(IStructuredSelection) engineDescTable.getSelection();
List variablesToRemove = selection.toList();
StringBuffer contributedVariablesToRemove = new StringBuffer();
Iterator iter = variablesToRemove.iterator();
while (iter.hasNext()) {
BSFEngineDescriptor desc = (BSFEngineDescriptor) iter.next();
contributedVariablesToRemove.append('\t').append(
desc.getLanguage()).append(
'\n');
}
if (contributedVariablesToRemove.length() > 0) {
boolean remove = MessageDialog.openQuestion(getShell(), Flow4JPlugin.getResourceString("PreferencePage_BSF_Remove_Message1.label"), MessageFormat.format(Flow4JPlugin.getResourceString("PreferencePage_BSF_Remove_Message2.label"), new String[] { contributedVariablesToRemove.toString()})); //$NON-NLS-1$ //$NON-NLS-2$
if (!remove) {
return;
}
}
BSFEngineDescriptor[] variables =
(BSFEngineDescriptor[]) variablesToRemove.toArray(
new BSFEngineDescriptor[0]);
engineDescContentProvider.removeDescriptors(variables);
engineDescTable.refresh();
}
/**
* Responds to a selection changed event in the engine descriptor table
* @param event the selection change event
*/
protected void handleTableSelectionChanged(SelectionChangedEvent event) {
int size = ((IStructuredSelection) event.getSelection()).size();
envEditButton.setEnabled(size == 1);
envRemoveButton.setEnabled(size > 0);
}
/* (non-Javadoc)
* @see org.eclipse.ui.IWorkbenchPreferencePage#init(org.eclipse.ui.IWorkbench)
*/
public void init(IWorkbench workbench) {
}
/**
* Clear the variables.
*/
protected void performDefaults() {
engineDescContentProvider.discardChanges();
engineDescTable.refresh();
super.performDefaults();
}
/**
* Sets the saved state for reversion.
*/
public boolean performOk() {
engineDescContentProvider.saveChanges();
storeBSFPreferences();
return super.performOk();
}
static public void loadBSFPreferences() {
Flow4JBSFManager bsfManager = Flow4JBSFManager.getInstance();
IPreferenceStore prefStore =
Flow4JPlugin.getDefault().getPreferenceStore();
String languages = prefStore.getString("pref_bsf_languages");
if (languages == null || languages.trim().length() == 0)
return;
StringTokenizer st = new StringTokenizer(languages, ",");
while (st.hasMoreTokens()) {
String lang = st.nextToken();
bsfManager.addEngineDescriptor(bsfManager.newEngineDescriptor(lang, prefStore.getString("pref_bsf_engineclass_"+lang), prefStore.getString("pref_bsf_extensions_"+lang)));
}
}
public void storeBSFPreferences() {
Flow4JBSFManager bsfManager = Flow4JBSFManager.getInstance();
IPreferenceStore prefStore =
Flow4JPlugin.getDefault().getPreferenceStore();
StringBuffer userLanguages = new StringBuffer();
int len = bsfManager.getEngineDescriptors().length;
for (int i = 0; i < len; i++) {
BSFEngineDescriptor desc = bsfManager.getEngineDescriptors()[i];
String lang = desc.getLanguage();
if (desc.isUpdated() || (! bsfManager.isBuiltInEngine(desc.getLanguage()))) {
prefStore.setValue("pref_bsf_engineclass_"+lang, desc.getEngineClassName());
prefStore.setValue("pref_bsf_extensions_"+lang, desc.getExtensionsStr());
userLanguages.append(lang).append(
i<len-1 ? "," : "");
}
prefStore.setValue("pref_bsf_languages", userLanguages.toString());
}
}
private Flow4JBSFManager getBSFManager() {
return Flow4JBSFManager.getInstance();
}
private class SimpleEngineDescContentProvider
implements IStructuredContentProvider {
/**
* The content provider stores a copy of the engine dscriptors for use during editing.
* The edited engine dscriptors are saved to the launch manager when saveChanges()
* is called.
*/
private List engineDescriptors = new ArrayList();
public Object[] getElements(Object inputElement) {
return engineDescriptors.toArray();
}
/**
* Removes the given engine descriptors from the 'copied list'
*
* @param variables variables to remove
*/
public void removeDescriptors(BSFEngineDescriptor[] descs) {
for (int i = 0; i < descs.length; i++) {
engineDescriptors.remove(descs[i]);
}
}
/**
* Adds the given variables to the 'copied list'
*
* @param variables variables to add
*/
public void addVariables(BSFEngineDescriptor[] variables) {
for (int i = 0; i < variables.length; i++) {
engineDescriptors.add(variables[i]);
}
}
public void dispose() {
}
public void inputChanged(
Viewer viewer,
Object oldInput,
Object newInput) {
if (newInput == null || !(newInput instanceof Flow4JBSFManager)) {
return;
}
discardChanges();
}
/**
* Saves the edited engine descriptor state to the BSF manager.
*/
public void saveChanges() {
Flow4JBSFManager manager = getBSFManager();
manager.removeEngineDescriptors(manager.getEngineDescriptors());
// try {
manager.addEngineDescriptors(
(BSFEngineDescriptor[]) engineDescriptors.toArray(
new BSFEngineDescriptor[0]));
// } catch (CoreException e) {
// Flow4JPlugin.message(e.getStatus().getMessage());
//DebugUIPlugin.errorDialog(getShell(), DebugPreferencesMessages.getString("StringVariablePreferencePage.24"), DebugPreferencesMessages.getString("StringVariablePreferencePage.25"), e.getStatus()); //$NON-NLS-1$ //$NON-NLS-2$
// }
}
/**
* Re-initializes to the variables currently stored in the manager.
*/
public void discardChanges() {
Flow4JBSFManager manager = getBSFManager();
BSFEngineDescriptor[] variables = manager.getEngineDescriptors();
for (int i = 0; i < variables.length; i++) {
BSFEngineDescriptor desc = variables[i];
BSFEngineDescriptor copy =
manager.newEngineDescriptor(
desc.getLanguage(),
desc.getEngineClassName(),
desc.getExtensions());
engineDescriptors.add(copy);
}
}
/**
* Returns the 'working set' of variables
*
* @return the working set of variables (not yet saved)
*/
public List getVariables() {
return engineDescriptors;
}
}
private class SimpleVariableLabelProvider
extends LabelProvider
implements ITableLabelProvider, IColorProvider {
public Image getColumnImage(Object element, int columnIndex) {
return null;
}
public String getColumnText(Object element, int columnIndex) {
if (element instanceof BSFEngineDescriptor) {
BSFEngineDescriptor desc = (BSFEngineDescriptor) element;
switch (columnIndex) {
case 0 :
return desc.getLanguage();
case 1 :
return desc.getEngineClassName();
case 2 :
return desc.getExtensionsStr();
}
}
return null;
}
public Color getForeground(Object element) {
return null;
}
public Color getBackground(Object element) {
/* if (element instanceof IValueVariable) {
if (((IValueVariable) element).isContributed()) {
Display display = Display.getCurrent();
return display.getSystemColor(SWT.COLOR_INFO_BACKGROUND);
}
}
*/
return null;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -