📄 bsfpreferencepage.java
字号:
/*
* Copyright (c) 2003-2004, Alexander Greif
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* * Neither the name of the Flow4J-Eclipse project nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
* THE POSSIBILITY OF SUCH DAMAGE.
*/
package net.orthanc.flow4j.designer.ui.preferences;
import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.StringTokenizer;
import net.orthanc.flow4j.bsf.BSFEngineDescriptor;
import net.orthanc.flow4j.bsf.Flow4JBSFManager;
import net.orthanc.flow4j.designer.core.Flow4JPlugin;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.preference.PreferencePage;
import org.eclipse.jface.viewers.ColumnLayoutData;
import org.eclipse.jface.viewers.ColumnWeightData;
import org.eclipse.jface.viewers.DoubleClickEvent;
import org.eclipse.jface.viewers.IColorProvider;
import org.eclipse.jface.viewers.IDoubleClickListener;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.ITableLabelProvider;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.TableLayout;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.viewers.ViewerSorter;
import org.eclipse.jface.window.Window;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.KeyAdapter;
import org.eclipse.swt.events.KeyEvent;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.graphics.FontMetrics;
import org.eclipse.swt.graphics.GC;
import org.eclipse.swt.graphics.Image;
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.Control;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPreferencePage;
/**
* @author greifa
*
* To change the template for this generated type comment go to
* Window>Preferences>Java>Code Generation>Code and Comments
*/
public class BSFPreferencePage
extends PreferencePage
implements IWorkbenchPreferencePage {
private TableViewer engineDescTable;
protected Button envAddButton;
protected Button envEditButton;
protected Button envRemoveButton;
protected SimpleEngineDescContentProvider engineDescContentProvider =
new SimpleEngineDescContentProvider();
protected static final String LANGUAGE_LABEL = Flow4JPlugin.getResourceString("PreferencePage_BSFEngine_Language.label"); //$NON-NLS-1$
protected static final String ENGINECLASS_LABEL = Flow4JPlugin.getResourceString("PreferencePage_BSFEngine_EngineClass.label"); //$NON-NLS-1$
protected static final String EXTENSIONS_LABEL = Flow4JPlugin.getResourceString("PreferencePage_BSFEngine_Extensions.label"); //$NON-NLS-1$
protected static String[] engineDescTableColumnProperties = { "language", //$NON-NLS-1$
"engineclass", //$NON-NLS-1$
"extensions" //$NON-NLS-1$
};
protected String[] engineDescTableColumnHeaders = { Flow4JPlugin.getResourceString("PreferencePage_BSF_Columm_Language.label"), //$NON-NLS-1$
Flow4JPlugin.getResourceString("PreferencePage_BSF_Columm_EngineClass.label"), //$NON-NLS-1$
Flow4JPlugin.getResourceString("PreferencePage_BSF_Columm_Extensions.label") //$NON-NLS-1$
};
protected ColumnLayoutData[] engineDescTableColumnLayouts =
{
new ColumnWeightData(18),
new ColumnWeightData(75),
new ColumnWeightData(27)};
public BSFPreferencePage() {
setDescription(Flow4JPlugin.getResourceString("PreferencePage_BSF.title")); //$NON-NLS-1$
}
protected Control createContents(Composite parent) {
noDefaultAndApplyButton();
Font font = parent.getFont();
//The main composite
Composite composite = new Composite(parent, SWT.NONE);
GridLayout layout = new GridLayout();
layout.marginHeight = 0;
layout.marginWidth = 0;
layout.numColumns = 2;
composite.setLayout(layout);
composite.setFont(font);
createTable(composite);
createButtons(composite);
return composite;
}
/**
* Creates and configures the table containing launch configuration variables
* and their associated value.
*/
private void createTable(Composite parent) {
Font font = parent.getFont();
// Create table composite
Composite tableComposite = new Composite(parent, SWT.NONE);
GridLayout layout = new GridLayout();
layout.marginHeight = 0;
layout.marginWidth = 0;
layout.numColumns = 1;
GridData gridData = new GridData(GridData.FILL_BOTH);
gridData.heightHint = 150;
gridData.widthHint = 400;
tableComposite.setLayout(layout);
tableComposite.setLayoutData(gridData);
tableComposite.setFont(font);
// Create table
engineDescTable =
new TableViewer(
tableComposite,
SWT.BORDER
| SWT.H_SCROLL
| SWT.V_SCROLL
| SWT.MULTI
| SWT.FULL_SELECTION);
Table table = engineDescTable.getTable();
TableLayout tableLayout = new TableLayout();
table.setLayout(tableLayout);
table.setHeaderVisible(true);
table.setLinesVisible(true);
table.setFont(font);
gridData = new GridData(GridData.FILL_BOTH);
engineDescTable.getControl().setLayoutData(gridData);
engineDescTable.setContentProvider(engineDescContentProvider);
engineDescTable.setColumnProperties(engineDescTableColumnProperties);
engineDescTable.setSorter(new ViewerSorter() {
public int compare(Viewer iViewer, Object e1, Object e2) {
if (e1 == null) {
return -1;
} else if (e2 == null) {
return 1;
} else {
return ((BSFEngineDescriptor) e1)
.getLanguage()
.compareToIgnoreCase(
((BSFEngineDescriptor) e2).getLanguage());
}
}
});
engineDescTable
.addSelectionChangedListener(new ISelectionChangedListener() {
public void selectionChanged(SelectionChangedEvent event) {
handleTableSelectionChanged(event);
}
});
engineDescTable.addDoubleClickListener(new IDoubleClickListener() {
public void doubleClick(DoubleClickEvent event) {
if (!engineDescTable.getSelection().isEmpty()) {
handleEditButtonPressed();
}
}
});
engineDescTable.getTable().addKeyListener(new KeyAdapter() {
public void keyPressed(KeyEvent event) {
if (event.character == SWT.DEL && event.stateMask == 0) {
handleRemoveButtonPressed();
}
}
});
// Create columns
for (int i = 0; i < engineDescTableColumnHeaders.length; i++) {
tableLayout.addColumnData(engineDescTableColumnLayouts[i]);
TableColumn tc = new TableColumn(table, SWT.NONE, i);
tc.setResizable(engineDescTableColumnLayouts[i].resizable);
tc.setText(engineDescTableColumnHeaders[i]);
}
engineDescTable.setInput(getBSFManager());
engineDescTable.setLabelProvider(new SimpleVariableLabelProvider());
}
/**
* Creates the new/edit/remove buttons for the engine descriptor table
* @param parent the composite in which the buttons should be created
*/
private void createButtons(Composite parent) {
// Create button composite
Composite buttonComposite = new Composite(parent, SWT.NONE);
GridLayout glayout = new GridLayout();
glayout.marginHeight = 0;
glayout.marginWidth = 0;
glayout.numColumns = 1;
GridData gdata = new GridData(GridData.VERTICAL_ALIGN_BEGINNING);
buttonComposite.setLayout(glayout);
buttonComposite.setLayoutData(gdata);
buttonComposite.setFont(parent.getFont());
// Create buttons
envAddButton = createPushButton(buttonComposite, Flow4JPlugin.getResourceString("PreferencePage_BSF_Button_New.label"), null); //$NON-NLS-1$
envAddButton.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent event) {
handleAddButtonPressed();
}
});
envEditButton = createPushButton(buttonComposite, Flow4JPlugin.getResourceString("PreferencePage_BSF_Button_Edit.label"), null); //$NON-NLS-1$
envEditButton.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent event) {
handleEditButtonPressed();
}
});
envEditButton.setEnabled(false);
envRemoveButton = createPushButton(buttonComposite, Flow4JPlugin.getResourceString("PreferencePage_BSF_Button_Remove.label"), null); //$NON-NLS-1$
envRemoveButton.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent event) {
handleRemoveButtonPressed();
}
});
envRemoveButton.setEnabled(false);
}
/**
* Creates and returns a new push button with the given
* label and/or image.
*
* @param parent parent control
* @param label button label or <code>null</code>
* @param image image of <code>null</code>
*
* @return a new push button
*/
public static Button createPushButton(
Composite parent,
String label,
Image image) {
Button button = new Button(parent, SWT.PUSH);
button.setFont(parent.getFont());
if (image != null) {
button.setImage(image);
}
if (label != null) {
button.setText(label);
}
GridData gd = new GridData();
button.setLayoutData(gd);
setButtonDimensionHint(button);
return button;
}
/**
* Sets width and height hint for the button control.
* <b>Note:</b> This is a NOP if the button's layout data is not
* an instance of <code>GridData</code>.
*
* @param the button for which to set the dimension hint
*/
public static void setButtonDimensionHint(Button button) {
Object gd = button.getLayoutData();
if (gd instanceof GridData) {
((GridData) gd).heightHint = getButtonHeigthHint(button);
((GridData) gd).widthHint = getButtonWidthHint(button);
((GridData) gd).horizontalAlignment = GridData.FILL;
}
}
/**
* Returns a width hint for a button control.
*/
public static int getButtonWidthHint(Button button) {
GC gc = new GC(button);
gc.setFont(button.getFont());
FontMetrics fFontMetrics = gc.getFontMetrics();
gc.dispose();
int widthHint =
Dialog.convertHorizontalDLUsToPixels(
fFontMetrics,
IDialogConstants.BUTTON_WIDTH);
return Math.max(
widthHint,
button.computeSize(SWT.DEFAULT, SWT.DEFAULT, true).x);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -