Label label = new Label(shell,SWT.NULL);
label.setText(Localizer._("columneditorwindow.draghint"));
gridData = new GridData(GridData.FILL_HORIZONTAL);
label.setLayoutData(gridData);
table = new Table (shell, SWT.VIRTUAL | SWT.CHECK | SWT.SINGLE | SWT.BORDER | SWT.FULL_SELECTION);
gridData = new GridData(GridData.FILL_BOTH);
table.setLayoutData(gridData);
table.setHeaderVisible(true);
Composite cButtonArea = new Composite(shell, SWT.NULL);
gridData = new GridData(GridData.HORIZONTAL_ALIGN_END);
cButtonArea.setLayoutData(gridData);
RowLayout rLayout = new RowLayout(SWT.HORIZONTAL);
rLayout.marginLeft = 0;
rLayout.marginTop = 0;
rLayout.marginRight = 0;
rLayout.marginBottom = 0;
rLayout.spacing = 5;
cButtonArea.setLayout (rLayout);
Button bOk = new Button(cButtonArea,SWT.PUSH);
bOk.setFont(skin.getButtonFont());
bOk.setImage(skin.getButtonImage(SkinConstants.FINISH_BUTTON_IMAGE));
bOk.setText(Localizer._("mainwindow.button.ok"));
rd = new RowData();
rd.width = 70;
bOk.setLayoutData(rd);
bOk.addListener(SWT.Selection,new Listener() {
public void handleEvent(Event e) {
saveAndApply();
close();
}
});
Button bCancel = new Button(cButtonArea,SWT.PUSH);
bCancel.setFont(skin.getButtonFont());
bCancel.setImage(skin.getButtonImage(SkinConstants.CANCEL_BUTTON_IMAGE));
bCancel.setText(Localizer._("mainwindow.button.cancel"));
rd = new RowData();
rd.width = 70;
bCancel.setLayoutData(rd);
bCancel.addListener(SWT.Selection,new Listener() {
public void handleEvent(Event e) {
close();
}
});
Button bApply = new Button(cButtonArea,SWT.PUSH);
bApply.setFont(skin.getButtonFont());
bApply.setImage(skin.getButtonImage(SkinConstants.OK_BUTTON_IMAGE));
bApply.setText(Localizer._("mainwindo.button.apply"));
rd = new RowData();
rd.width = 70;
bApply.setLayoutData(rd);
bApply.addListener(SWT.Selection,new Listener() {
public void handleEvent(Event e) {
saveAndApply();
}
});
TableColumn column;
column = new TableColumn(table, SWT.NONE);
column.setText(Localizer._("columneditorwindow.column.column_name"));
column = new TableColumn(table, SWT.NONE);
column.setText(Localizer._("columneditorwindow.column.description"));
table.getColumn(0).setWidth(160);
table.getColumn(1).setWidth(1000);
table.addListener(SWT.Selection,new Listener() {
public void handleEvent(Event e) {
if (e.detail != SWT.CHECK)
return;
mousePressed = false;
TableItem item = (TableItem) e.item;
int index = item.getParent().indexOf(item);
TableColumn tableColumn = tableColumns.get(index);
newEnabledState.put(tableColumn, new Boolean(item.getChecked()));
}
});
table.addListener(SWT.SetData, new Listener() {
public void handleEvent(Event event) {
final TableItem item = (TableItem) event.item;
if (item == null)
return;
Table table = item.getParent();
int index = table.indexOf(item);
if (index < 0) {
// Trigger a Table._getItem, which assigns the item to the array
// in Table, so indexOf(..) can find it. This is a workaround for
// a WinXP bug.
Rectangle r = item.getBounds(0);
table.getItem(new Point(r.x, r.y));
index = table.indexOf(item);
if (index < 0)
return;
}
if (index % 2 == 0)
item.setBackground(ROW_ALTERNATE_COLOR_2);
else
item.setBackground(ROW_ALTERNATE_COLOR_1);
TableColumn tableColumn = tableColumns.get(index);
//String sTitleLanguageKey = tableColumn.getTitleLanguageKey();
item.setText(0, tableColumn.getText());
item.setText(1, (String)tableColumn.getData(SWTConstants.COLUMN_DESC_KEY));
//Causes SetData listener to be triggered again, which messes up SWT
//table.getColumn(1).pack();
final boolean bChecked = ((Boolean) newEnabledState.get(tableColumn));
item.setChecked(bChecked);
}
});
table.setItemCount(tableColumns.size());
table.addMouseListener(new MouseAdapter() {
public void mouseDown(MouseEvent arg0) {
mousePressed = true;
selectedItem = table.getItem(new Point(arg0.x,arg0.y));
}
public void mouseUp(MouseEvent e) {
mousePressed = false;
//1. Restore old image
if(oldPoint != null) {
table.redraw(oldPoint.x, oldPoint.y, shell.getSize().x,
oldPoint.y + 2, false);
oldPoint = null;
}
Point p = new Point(e.x,e.y);
TableItem item = table.getItem(p);
if(item != null && selectedItem != null) {
int index = table.indexOf(item);
int oldIndex = table.indexOf(selectedItem);
if(index == oldIndex)
return;
TableColumn tableColumn =
(TableColumn)tableColumns.get(oldIndex);
tableColumns.remove(tableColumn);
tableColumns.add(index, tableColumn);
table.clearAll();
}
}
});
table.addMouseMoveListener(new MouseMoveListener(){
public void mouseMove(MouseEvent e) {
if (!mousePressed || selectedItem == null)
return;
Point p = new Point(e.x,e.y);
TableItem item = table.getItem(p);
if (item == null)
return;
Rectangle bounds = item.getBounds(0);
int selectedPosition = table.indexOf(selectedItem);
int newPosition = table.indexOf(item);
//1. Restore old area
if(oldPoint != null) {
table.redraw(oldPoint.x, oldPoint.y, bounds.width, oldPoint.y + 2, false);
oldPoint = null;
}
bounds.y += VerticalAligner.getTableAdjustVerticalBy(table);
if(newPosition <= selectedPosition)
oldPoint = new Point(bounds.x,bounds.y);
else
oldPoint = new Point(bounds.x,bounds.y+bounds.height);
//3. Draw a thick line
table.redraw(oldPoint.x, oldPoint.y, bounds.width, oldPoint.y + 2, false);
}
});
table.addPaintListener(new PaintListener() {
public void paintControl(PaintEvent e) {
if (!mousePressed || selectedItem == null || oldPoint == null) {
return;
}
Point p = new Point(e.x,e.y);
TableItem item = table.getItem(p);
if (item == null)
return;
Rectangle bounds = item.getBounds(0);
GC gc = new GC(table);