import
java.io.BufferedReader;
import
java.io.File;
import
java.io.FileReader;
import
java.io.IOException;
import
java.util.ArrayList;
import
java.util.List;
import
net.miginfocom.swt.MigLayout;
import
org.eclipse.core.runtime.IStatus;
import
org.eclipse.core.runtime.MultiStatus;
import
org.eclipse.core.runtime.Status;
import
org.eclipse.jface.action.Action;
import
org.eclipse.jface.action.IAction;
import
org.eclipse.jface.action.MenuManager;
import
org.eclipse.jface.dialogs.Dialog;
import
org.eclipse.jface.dialogs.ErrorDialog;
import
org.eclipse.jface.dialogs.IDialogConstants;
import
org.eclipse.jface.dialogs.MessageDialog;
import
org.eclipse.jface.preference.ColorSelector;
import
org.eclipse.jface.viewers.CellEditor;
import
org.eclipse.jface.viewers.ColumnWeightData;
import
org.eclipse.jface.viewers.ComboBoxCellEditor;
import
org.eclipse.jface.viewers.ComboViewer;
import
org.eclipse.jface.viewers.ICellModifier;
import
org.eclipse.jface.viewers.ILabelProviderListener;
import
org.eclipse.jface.viewers.IStructuredContentProvider;
import
org.eclipse.jface.viewers.ITableLabelProvider;
import
org.eclipse.jface.viewers.ITreeContentProvider;
import
org.eclipse.jface.viewers.LabelProvider;
import
org.eclipse.jface.viewers.ListViewer;
import
org.eclipse.jface.viewers.TableLayout;
import
org.eclipse.jface.viewers.TableViewer;
import
org.eclipse.jface.viewers.TextCellEditor;
import
org.eclipse.jface.viewers.TreeViewer;
import
org.eclipse.jface.viewers.Viewer;
import
org.eclipse.jface.window.ApplicationWindow;
import
org.eclipse.jface.wizard.IWizardPage;
import
org.eclipse.jface.wizard.Wizard;
import
org.eclipse.jface.wizard.WizardDialog;
import
org.eclipse.jface.wizard.WizardPage;
import
org.eclipse.swt.SWT;
import
org.eclipse.swt.dnd.DND;
import
org.eclipse.swt.dnd.DropTarget;
import
org.eclipse.swt.dnd.DropTargetAdapter;
import
org.eclipse.swt.dnd.DropTargetEvent;
import
org.eclipse.swt.dnd.FileTransfer;
import
org.eclipse.swt.dnd.Transfer;
import
org.eclipse.swt.events.SelectionEvent;
import
org.eclipse.swt.events.SelectionListener;
import
org.eclipse.swt.graphics.Image;
import
org.eclipse.swt.widgets.Button;
import
org.eclipse.swt.widgets.Composite;
import
org.eclipse.swt.widgets.Control;
import
org.eclipse.swt.widgets.DirectoryDialog;
import
org.eclipse.swt.widgets.Display;
import
org.eclipse.swt.widgets.Group;
import
org.eclipse.swt.widgets.Label;
import
org.eclipse.swt.widgets.Menu;
import
org.eclipse.swt.widgets.MessageBox;
import
org.eclipse.swt.widgets.Shell;
import
org.eclipse.swt.widgets.TabFolder;
import
org.eclipse.swt.widgets.TabItem;
import
org.eclipse.swt.widgets.Table;
import
org.eclipse.swt.widgets.TableColumn;
import
org.eclipse.swt.widgets.TableItem;
import
org.eclipse.swt.widgets.Text;
public
class
SWTApp
extends
ApplicationWindow {
public
SWTApp() {
super
(
null
);
addStatusLine();
}
@Override
protected
Control createContents(Composite parent) {
getStatusLineManager().setMessage(
"Welcome to SWTApp"
);
TabFolder tabFolder =
new
TabFolder(parent, SWT.NONE);
TabItem tabItem =
new
TabItem(tabFolder, SWT.NONE);
tabItem.setText(
"Tab 1"
);
tabItem.setControl(
new
MyComposite1(tabFolder));
tabItem =
new
TabItem(tabFolder, SWT.NONE);
tabItem.setText(
"Tab 2"
);
tabItem.setControl(
new
MyComposite2(tabFolder));
tabItem =
new
TabItem(tabFolder, SWT.NONE);
tabItem.setText(
"Tab 3"
);
tabItem.setControl(
new
MyComposite3(tabFolder));
tabItem =
new
TabItem(tabFolder, SWT.NONE);
tabItem.setText(
"Tab 4"
);
tabItem.setControl(
new
MyComposite4(tabFolder));
tabItem =
new
TabItem(tabFolder, SWT.NONE);
tabItem.setText(
"Tab 5"
);
tabItem.setControl(
new
MyComposite5(tabFolder));
getShell().setText(
"SWTApp"
);
getShell().setSize(
900
,
700
);
return
parent;
};
static
class
MyComposite1
extends
Composite {
public
MyComposite1(Composite parent) {
super
(parent, SWT.NONE);
setLayout(
new
MigLayout(
""
,
"[grow][grow]"
,
"[grow, fill]"
));
Group g1 =
new
Group(
this
, SWT.SHADOW_ETCHED_IN);
g1.setLayout(
new
MigLayout(
""
,
"[grow, fill]"
,
"[][grow, fill]"
));
g1.setLayoutData(
"grow"
);
Composite1 c1 =
new
Composite1(g1);
c1.setLayoutData(
"grow, wrap"
);
Composite2 c2 =
new
Composite2(g1);
c2.setLayoutData(
"grow"
);
Group g2 =
new
Group(
this
, SWT.SHADOW_ETCHED_IN);
g2.setLayout(
new
MigLayout(
""
,
"[grow, fill]"
,
"[grow, fill]"
));
g2.setLayoutData(
"grow"
);
Composite c3 =
new
Composite3(g2);
c3.setLayoutData(
"grow"
);
}
}
static
class
Composite1
extends
Composite {
public
Composite1(Composite parent) {
super
(parent, SWT.NONE);
setLayout(
new
MigLayout(
""
,
"[grow, fill][]"
,
"[grow, fill]"
));
Composite c1 =
new
Composite(
this
, SWT.NONE);
c1.setLayout(
new
MigLayout(
""
,
"[][grow]"
,
""
));
Label field1Label =
new
Label(c1, SWT.NONE);
field1Label.setText(
"Field 1"
);
Text field1Text =
new
Text(c1, SWT.BORDER);
field1Text.setLayoutData(
"grow, wrap"
);
Label field2Label =
new
Label(c1, SWT.NONE);
field2Label.setText(
"Field 2"
);
Text field2Text =
new
Text(c1, SWT.BORDER);
field2Text.setLayoutData(
"grow, wrap"
);
Label field3Label =
new
Label(c1, SWT.NONE);
field3Label.setText(
"Field 3"
);
Text field3Text =
new
Text(c1, SWT.BORDER);
field3Text.setLayoutData(
"grow, wrap"
);
Label field4Label =
new
Label(c1, SWT.NONE);
field4Label.setText(
"Field 4"
);
Text field4Text =
new
Text(c1, SWT.BORDER);
field4Text.setLayoutData(
"grow"
);
Composite c2 =
new
Composite(
this
, SWT.NONE);
c2.setLayout(
new
MigLayout(
""
,
""
,
"[grow]"
));
Button startButton =
new
Button(c2, SWT.NONE);
startButton.setText(
"START"
);
startButton.setBackground(getDisplay().getSystemColor(SWT.COLOR_GREEN));
startButton.setLayoutData(
"grow, wrap"
);
Button stopButton =
new
Button(c2, SWT.NONE);
stopButton.setText(
"STOP"
);
stopButton.setBackground(getDisplay().getSystemColor(SWT.COLOR_RED));
stopButton.setLayoutData(
"grow, wrap"
);
Button advancedButton =
new
Button(c2, SWT.NONE);
advancedButton.setText(
"ADVANCED"
);
advancedButton.setLayoutData(
"grow, wrap"
);
ColorSelector cs =
new
ColorSelector(c2);
Button colorSelectorButton = cs.getButton();
colorSelectorButton.setText(
"COLOR"
);
colorSelectorButton.setLayoutData(
"grow"
);
}
}
static
class
Composite2
extends
Composite {
public
Composite2(Composite parent) {
super
(parent, SWT.NONE);
setLayout(
new
MigLayout(
""
,
"[grow]"
,
"[grow]"
));
Text statusText =
new
Text(
this
, SWT.MULTI | SWT.BORDER);
statusText.setEditable(
false
);
statusText.setLayoutData(
"grow"
);
}
}
static
class
Composite3
extends
Composite {
public
Composite3(Composite parent) {
super
(parent, SWT.NONE);
setLayout(
new
MigLayout(
""
,
"[grow]"
,
"[grow][grow]"
));
Button b1 =
new
Button(
this
, SWT.NONE);
b1.setText(
"Button 1"
);
b1.setLayoutData(
"grow, wrap"
);
Button b2 =
new
Button(
this
, SWT.NONE);
b2.setText(
"Button 2"
);
b2.setLayoutData(
"grow"
);
}
}
static
class
MyComposite2
extends
Composite {
public
MyComposite2(Composite parent) {
super
(parent, SWT.NONE);
setLayout(
new
MigLayout(
""
,
"[grow, fill]"
,
"[grow, fill][]"
));
Composite c1 =
new
Composite(
this
, SWT.BORDER);
c1.setLayout(
new
MigLayout(
""
,
"[grow][grow][grow][grow]"
,
"[grow]"
));
c1.setLayoutData(
"wrap"
);
int
[] styles = { SWT.SINGLE, SWT.MULTI };
for
(
int
style =
0
; style < styles.length; style++) {
ListViewer lv = createListViewer(c1, styles[style]);
lv.getList().setLayoutData(
"grow"
);
}
int
[] selectionStyle = { SWT.SINGLE, SWT.MULTI };
int
[] checkStyle = { SWT.NONE, SWT.CHECK };
for
(
int
selection =
0
; selection < selectionStyle.length; selection++) {
for
(
int
check =
0
; check < checkStyle.length; check++) {
int
style = selectionStyle[selection] | checkStyle[check];
TreeViewer tv = createTreeViewer(c1, style);
tv.getTree().setLayoutData(
"grow"
);
}
}
Composite c2 =
new
Composite(
this
, SWT.BORDER);
c2.setLayout(
new
MigLayout(
""
,
"[grow]"
,
""
));
ComboViewer cv = createComboViewer(c2);
cv.getCombo().setLayoutData(
"grow"
);
}
private
ComboViewer createComboViewer(Composite parent) {
ComboViewer viewer =
new
ComboViewer(parent, SWT.NONE);
viewer.setLabelProvider(
new
LabelProvider() {
@Override
public
String getText(Object element) {
return
((ListItem) element).name;
}
});
viewer.setContentProvider(
new
IStructuredContentProvider() {
@SuppressWarnings
(
"unchecked"
)
@Override
public
Object[] getElements(Object inputElement) {
return
((List<ListItem>) inputElement).toArray();
}
@Override
public
void
dispose() {
}
@Override
public
void
inputChanged(Viewer viewer, Object oldInput, Object newInput) {
}
});
List<ListItem> input =
new
ArrayList<ListItem>();
for
(
int
i =
0
; i <
20
; i++) {
input.add(
new
ListItem(
"Item "
+ i, i));
}
viewer.setInput(input);
return
viewer;
}
private
ListViewer createListViewer(Composite parent,
int
style) {
ListViewer viewer =
new
ListViewer(parent, style);
viewer.setLabelProvider(
new
LabelProvider() {
@Override
public
String getText(Object element) {
return
((ListItem) element).name;
}
});
viewer.setContentProvider(
new
IStructuredContentProvider() {
@SuppressWarnings
(
"unchecked"
)
@Override
public
Object[] getElements(Object inputElement) {
return
((List<ListItem>) inputElement).toArray();
}
@Override
public
void
dispose() {
}
@Override
public
void
inputChanged(Viewer viewer, Object oldInput, Object newInput) {
}
});
List<ListItem> input =
new
ArrayList<ListItem>();
for
(
int
i =
0
; i <
20
; i++) {
input.add(
new
ListItem(
"Item "
+ i, i));
}
viewer.setInput(input);
return
viewer;
}
private
TreeViewer createTreeViewer(Composite parent,
int
style) {
TreeViewer viewer =
new
TreeViewer(parent, style);
viewer.setContentProvider(
new
ITreeContentProvider() {
public
Object[] getChildren(Object parentElement) {
return
((TreeNode) parentElement).getChildren().toArray();
}
public
Object getParent(Object element) {
return
((TreeNode) element).getParent();
}
public
boolean
hasChildren(Object element) {
return
((TreeNode) element).getChildren().size() >
0
;
}
public
Object[] getElements(Object inputElement) {
return
((TreeNode) inputElement).getChildren().toArray();
}
public
void
dispose() {
}
public
void
inputChanged(Viewer viewer, Object oldInput, Object newInput) {
}
});
viewer.setInput(getRootNode());
return
viewer;
}
private
TreeNode getRootNode() {
TreeNode root =
new
TreeNode(
"root"
);
root.addChild(
new
TreeNode(
"child 1"
).addChild(
new
TreeNode(
"subchild 1"
)));
root.addChild(
new
TreeNode(
"child 2"
).addChild(
new
TreeNode(
"subchild 2"
)
.addChild(
new
TreeNode(
"grandchild 1"
))));
return
root;
}
}
static
class
ListItem {
public
String name;
public
int
value;
public
ListItem(String n,
int
v) {
name = n;
value = v;
}
}
static
class
TreeNode {
private
String name;
private
List<TreeNode> children =
new
ArrayList<TreeNode>();
private
TreeNode parent;
public
TreeNode(String n) {
name = n;
}
protected
Object getParent() {
return
parent;
}
public
TreeNode addChild(TreeNode child) {
children.add(child);
child.parent =
this
;
return
this
;
}
public
List<TreeNode> getChildren() {
return
children;
}
public
String toString() {
return
name;
}
}
static
class
MyComposite3
extends
Composite {
public
MyComposite3(Composite parent) {
super
(parent, SWT.NONE);
setLayout(
new
MigLayout(
""
,
"[grow]"
,
"[grow]"
));
Table table = createTable();
table.setLayoutData(
"grow"
);
}
private
Table createTable() {
final
String[] VALUE_SET =
new
String[] {
"xxx"
,
"yyy"
,
"zzz"
};
final
String NAME_PROPERTY =
"name"
;
final
String VALUE_PROPERTY =
"value"
;
Table table =
new
Table(
this
, SWT.FULL_SELECTION);
final
TableViewer viewer =
new
TableViewer(table);
TableLayout layout =
new
TableLayout();
layout.addColumnData(
new
ColumnWeightData(
50
,
75
,
true
));
layout.addColumnData(
new
ColumnWeightData(
50
,
75
,
true
));
table.setLayout(layout);
TableColumn column =
new
TableColumn(table, SWT.CENTER);
column.setText(
"Name"
);
column =
new
TableColumn(table, SWT.NONE);
column.setText(
"Value"
);
table.setHeaderVisible(
true
);
viewer.setLabelProvider(
new
ITableLabelProvider() {
@Override
public
void
removeListener(ILabelProviderListener lpl) {
}
@Override
public
boolean
isLabelProperty(Object element, String property) {
return
false
;
}
@Override
public
void
dispose() {
}
@Override
public
void
addListener(ILabelProviderListener lpl) {
}
@Override
public
String getColumnText(Object element,
int
columnIndex) {
switch
(columnIndex) {
case
0
:
return
((EditableTableItem) element).name;
case
1
:
Number index = ((EditableTableItem) element).value;
return
VALUE_SET[index.intValue()];
default
:
return
"Invalid column: "
+ columnIndex;
}
}
@Override
public
Image getColumnImage(Object element,
int
columnIndex) {
return
null
;
}
});
viewer.setContentProvider(
new
IStructuredContentProvider() {
@Override
public
void
inputChanged(Viewer viewer, Object oldInput, Object newInput) {
}
@Override
public
void
dispose() {
}
@Override
public
Object[] getElements(Object inputElement) {
return
(Object[]) inputElement;
}
});
viewer.setCellModifier(
new
ICellModifier() {
@Override
public
void
modify(Object element, String property, Object value) {
TableItem tableItem = (TableItem) element;
EditableTableItem data = (EditableTableItem) tableItem.getData();
if
(NAME_PROPERTY.equals(property)) {
data.name = value.toString();
}
else
{
data.value = (Integer) value;
}
viewer.refresh(data);
}
@Override
public
Object getValue(Object element, String property) {
if
(NAME_PROPERTY.equals(property)) {
return
((EditableTableItem) element).name;
}
else
{
return
((EditableTableItem) element).value;
}
}
@Override
public
boolean
canModify(Object element, String property) {
return
true
;
}
});
viewer.setCellEditors(
new
CellEditor[] {
new
TextCellEditor(table),
new
ComboBoxCellEditor(table, VALUE_SET)
});
viewer.setInput(
new
Object[] {
new
EditableTableItem(
"Item 1"
,
0
),
new
EditableTableItem(
"Item 2"
,
1
)
});
viewer.setColumnProperties(
new
String[] {NAME_PROPERTY, VALUE_PROPERTY});
createMenu(table, viewer);
return
table;
}
private
void
createMenu(Table table, TableViewer viewer) {
MenuManager popupMenu =
new
MenuManager();
IAction newRowAction =
new
NewRowAction(viewer);
popupMenu.add(newRowAction);
Menu menu = popupMenu.createContextMenu(table);
table.setMenu(menu);
}
}
static
class
EditableTableItem {
public
String name;
public
Integer value;
public
EditableTableItem(String name, Integer value) {
this
.name = name;
this
.value = value;
}
}
static
class
NewRowAction
extends
Action {
private
TableViewer viewer;
public
NewRowAction(TableViewer viewer) {
super
(
"Insert New Row"
);
this
.viewer = viewer;
}
@Override
public
void
run() {
EditableTableItem newItem =
new
EditableTableItem(
"new row"
,
new
Integer(
2
));
viewer.add(newItem);
}
}
static
class
MyComposite4
extends
Composite {
public
MyComposite4(Composite parent) {
super
(parent, SWT.NONE);
setLayout(
new
MigLayout());
createPasswordDialogButton();
createMessageDialogButton();
createMessageBoxButton();
createErrorDialogButton();
createWizardDialogButton();
}
private
Button createPasswordDialogButton() {
Button dialogButton =
new
Button(
this
, SWT.PUSH);
dialogButton.setText(
"Password Dialog..."
);
dialogButton.addSelectionListener(
new
SelectionListener() {
@Override
public
void
widgetSelected(SelectionEvent e) {
UserNamePasswordDialog d =
new
UserNamePasswordDialog(getShell());
d.open();
}
@Override
public
void
widgetDefaultSelected(SelectionEvent e) {
}
});
return
dialogButton;
}
private
Button createMessageDialogButton() {
Button dialogButton =
new
Button(
this
, SWT.PUSH);
dialogButton.setText(
"Message Dialog..."
);
dialogButton.addSelectionListener(
new
SelectionListener() {
@Override
public
void
widgetSelected(SelectionEvent e) {
MessageDialog dialog =
new
MessageDialog(getShell(),
"Greeting Dialog"
,
null
,
"Hello! How are you today?"
,
MessageDialog.QUESTION,
new
String[] {
"Good"
,
"Been better"
,
"Excited about SWT!"
},
0
);
dialog.open();
}
@Override
public
void
widgetDefaultSelected(SelectionEvent e) {
}
});
return
dialogButton;
}
private
Button createMessageBoxButton() {
Button dialogButton =
new
Button(
this
, SWT.PUSH);
dialogButton.setText(
"Message Box..."
);
dialogButton.addSelectionListener(
new
SelectionListener() {
@Override
public
void
widgetSelected(SelectionEvent e) {
MessageBox dialog =
new
MessageBox(getShell(),
SWT.OK | SWT.CANCEL);
dialog.setMessage(
"Do you wish to continue?"
);
dialog.open();
}
@Override
public
void
widgetDefaultSelected(SelectionEvent e) {
}
});
return
dialogButton;
}
private
Button createErrorDialogButton() {
Button dialogButton =
new
Button(
this
, SWT.PUSH);
dialogButton.setText(
"Error Dialog..."
);
dialogButton.addSelectionListener(
new
SelectionListener() {
@Override
public
void
widgetSelected(SelectionEvent e) {
ErrorDialog errorDialog =
new
ErrorDialog(getShell(),
"Test Error Dialog"
,
"This is a test error dialog"
,
createStatus(),
IStatus.ERROR | IStatus.INFO);
errorDialog.open();
}
@Override
public
void
widgetDefaultSelected(SelectionEvent e) {
}
});
return
dialogButton;
}
private
IStatus createStatus() {
final
String dummyPlugin =
"some plugin"
;
IStatus[] statuses =
new
IStatus[
2
];
statuses[
0
] =
new
Status(IStatus.ERROR, dummyPlugin, IStatus.OK,
"Oh no! An error occurred!"
,
new
Exception());
statuses[
1
] =
new
Status(IStatus.INFO, dummyPlugin, IStatus.OK,
"More errors!?!?"
,
new
Exception());
MultiStatus multiStatus =
new
MultiStatus(dummyPlugin, IStatus.OK, statuses,
"Several errors have occurred."
,
new
Exception());
return
multiStatus;
}
private
Button createWizardDialogButton() {
Button dialogButton =
new
Button(
this
, SWT.PUSH);
dialogButton.setText(
"Wizard Dialog..."
);
dialogButton.addSelectionListener(
new
SelectionListener() {
@Override
public
void
widgetSelected(SelectionEvent e) {
WizardDialog dialog =
new
WizardDialog(getShell(),
new
ProjectWizard());
dialog.open();
}
@Override
public
void
widgetDefaultSelected(SelectionEvent e) {
}
});
return
dialogButton;
}
}
static
class
UserNamePasswordDialog
extends
Dialog {
private
static
final
int
RESET_ID = IDialogConstants.NO_TO_ALL_ID +
1
;
private
Text userNameText;
private
Text passwordText;
public
UserNamePasswordDialog(Shell parentShell) {
super
(parentShell);
}
@Override
protected
void
configureShell(Shell newShell) {
super
.configureShell(newShell);
newShell.setText(
"Username/Password Dialog"
);
}
@Override
protected
Control createDialogArea(Composite parent) {
Composite composite = (Composite)
super
.createDialogArea(parent);
composite.setLayout(
new
MigLayout(
""
,
"[][grow]"
,
""
));
Label userNameLabel =
new
Label(composite, SWT.NONE);
userNameLabel.setText(
"Username: "
);
userNameText =
new
Text(composite, SWT.SINGLE | SWT.BORDER);
userNameText.setLayoutData(
"grow, wrap"
);
Label passwordLabel =
new
Label(composite, SWT.NONE);
passwordLabel.setText(
"Password: "
);
passwordText =
new
Text(composite, SWT.SINGLE | SWT.PASSWORD | SWT.BORDER);
passwordText.setLayoutData(
"grow"
);
return
composite;
}
@Override
protected
void
createButtonsForButtonBar(Composite parent) {
super
.createButtonsForButtonBar(parent);
createButton(parent, RESET_ID,
"Reset All"
,
false
);
}
@Override
protected
void
buttonPressed(
int
buttonId) {
if
(buttonId == RESET_ID) {
userNameText.setText(
""
);
passwordText.setText(
""
);
}
else
{
super
.buttonPressed(buttonId);
}
}
}
static
class
DirectoryPage
extends
WizardPage {
public
static
final
String PAGE_NAME =
"Directory"
;
private
Button button;
public
DirectoryPage() {
super
(PAGE_NAME,
"Directory Page"
,
null
);
}
@Override
public
void
createControl(Composite parent) {
Composite topLevel =
new
Composite(parent, SWT.NONE);
topLevel.setLayout(
new
MigLayout());
button =
new
Button(topLevel, SWT.CHECK);
button.setText(
"Use default directory?"
);
setControl(topLevel);
setPageComplete(
true
);
}
public
boolean
useDefaultDirectory() {
return
button.getSelection();
}
}
static
class
ChooseDirectoryPage
extends
WizardPage {
public
static
final
String PAGE_NAME =
"Choose Directory"
;
private
Text text;
public
ChooseDirectoryPage() {
super
(PAGE_NAME,
"Choose Directory Page"
,
null
);
}
@Override
public
void
createControl(Composite parent) {
Composite topLevel =
new
Composite(parent, SWT.NONE);
topLevel.setLayout(
new
MigLayout(
""
,
"[][grow][]"
,
""
));
Label l =
new
Label(topLevel, SWT.CENTER);
l.setText(
"Enter the directory to use:"
);
text =
new
Text(topLevel, SWT.SINGLE | SWT.BORDER);
text.setEditable(
false
);
text.setLayoutData(
"grow"
);
Button b =
new
Button(topLevel, SWT.PUSH);
b.setText(
"Choose Directory"
);
b.addSelectionListener(
new
SelectionListener() {
@Override
public
void
widgetSelected(SelectionEvent e) {
DirectoryDialog dialog =
new
DirectoryDialog(getShell());
String directory = dialog.open();
text.setText(directory);
}
@Override
public
void
widgetDefaultSelected(SelectionEvent e) {
}
});
setControl(topLevel);
setPageComplete(
true
);
}
public
String getDirectory() {
return
text.getText();
}
}
static
class
SummaryPage
extends
WizardPage {
public
static
final
String PAGE_NAME =
"Summary"
;
private
Label textLabel;
private
Composite topLevel;
public
SummaryPage() {
super
(PAGE_NAME,
"Summary Page"
,
null
);
}
@Override
public
void
createControl(Composite parent) {
topLevel =
new
Composite(parent, SWT.NONE);
topLevel.setLayout(
new
MigLayout());
textLabel =
new
Label(topLevel, SWT.CENTER);
textLabel.setText(
""
);
textLabel.setLayoutData(
"grow"
);
setControl(topLevel);
setPageComplete(
true
);
}
public
void
updateText(String newText) {
textLabel.setText(newText);
topLevel.pack();
}
}
static
class
ProjectWizard
extends
Wizard {
public
void
addPages() {
addPage(
new
DirectoryPage());
addPage(
new
ChooseDirectoryPage());
addPage(
new
SummaryPage());
}
@Override
public
boolean
performFinish() {
DirectoryPage dirPage = getDirectoryPage();
if
(dirPage.useDefaultDirectory()) {
System.out.println(
"Using default directory"
);
}
else
{
ChooseDirectoryPage choosePage = getChoosePage();
System.out.println(
"Using directory: "
+ choosePage.getDirectory());
}
return
true
;
}
private
ChooseDirectoryPage getChoosePage() {
return
(ChooseDirectoryPage) getPage(ChooseDirectoryPage.PAGE_NAME);
}
private
DirectoryPage getDirectoryPage() {
return
(DirectoryPage) getPage(DirectoryPage.PAGE_NAME);
}
@Override
public
boolean
performCancel() {
System.out.println(
"Perform Cancel called"
);
return
true
;
}
@Override
public
IWizardPage getNextPage(IWizardPage page) {
if
(page
instanceof
DirectoryPage) {
DirectoryPage dirPage = (DirectoryPage) page;
if
(dirPage.useDefaultDirectory()) {
SummaryPage summaryPage = (SummaryPage) getPage(SummaryPage.PAGE_NAME);
summaryPage.updateText(
"Using default directory"
);
return
summaryPage;
}
}
IWizardPage nextPage =
super
.getNextPage(page);
if
(nextPage
instanceof
SummaryPage) {
SummaryPage summary = (SummaryPage) nextPage;
DirectoryPage dirPage = getDirectoryPage();
summary.updateText(dirPage.useDefaultDirectory() ?
"Using default directory"
:
"Using directory: "
+ getChoosePage().getDirectory());
}
return
nextPage;
}
}
static
class
MyComposite5
extends
Composite {
public
MyComposite5(Composite parent) {
super
(parent, SWT.NONE);
setLayout(
new
MigLayout(
""
,
"[grow, fill]"
,
"[grow, fill]"
));
Text text = createTextArea();
text.setLayoutData(
"grow"
);
}
private
Text createTextArea() {
Text text =
new
Text(
this
, SWT.MULTI | SWT.BORDER);
DropTarget target =
new
DropTarget(text,
DND.DROP_MOVE | DND.DROP_COPY | DND.DROP_DEFAULT);
target.setTransfer(
new
Transfer[] { FileTransfer.getInstance() });
target.addDropListener(
new
DropTargetAdapter() {
@Override
public
void
drop(DropTargetEvent event) {
DropTarget target = (DropTarget) event.widget;
Text t = (Text) target.getControl();
String[] fileList = (String[]) event.data;
t.setText(read(fileList[
0
]));
}
});
return
text;
}
private
String read(String path) {
String text =
""
;
BufferedReader br =
null
;
try
{
File file =
new
File(path);
br =
new
BufferedReader(
new
FileReader(file));
String line =
""
;
while
((line = br.readLine()) !=
null
) {
text += line + System.getProperty(
"line.separator"
);
}
int
lastIndex = text.length() -
System.getProperty(
"line.separator"
).length();
text = text.substring(
0
, lastIndex);
}
catch
(IOException e) {
e.printStackTrace();
}
finally
{
if
(br !=
null
) {
try
{
br.close();
}
catch
(IOException e) {
e.printStackTrace();
}
}
}
return
text;
}
}
public
static
void
show() {
SWTApp app =
new
SWTApp();
app.setBlockOnOpen(
true
);
app.open();
Display.getCurrent().dispose();
}
}