/* Label Provider */
fItemViewer.setLabelProvider(new CellLabelProvider() {
@Override
public void update(ViewerCell cell) {
CoolBarItem item = ((ToolBarItem) cell.getElement()).item;
cell.setText(item.getName());
if (item.getImg() != null)
cell.setImage(fResources.createImage(item.getImg()));
if (!OwlUI.isHighContrast() && item == CoolBarItem.SPACER)
cell.setForeground(getShell().getDisplay().getSystemColor(SWT.COLOR_DARK_GRAY));
}
});
/* Selection */
fItemViewer.addSelectionChangedListener(new ISelectionChangedListener() {
public void selectionChanged(SelectionChangedEvent event) {
updateButtonEnablement();
}
});
/* Support Keyboard Remove */
fItemViewer.getTable().addKeyListener(new KeyAdapter() {
@Override
public void keyPressed(KeyEvent e) {
if (e.keyCode == SWT.DEL || (Application.IS_MAC && e.keyCode == SWT.BS))
onRemove();
}
});
/* Drag Support */
fItemViewer.addDragSupport(DND.DROP_MOVE, new Transfer[] { LocalSelectionTransfer.getTransfer() }, new DragSourceAdapter() {
@Override
public void dragStart(final DragSourceEvent event) {
SafeRunnable.run(new LoggingSafeRunnable() {
public void run() throws Exception {
IStructuredSelection selection = (IStructuredSelection) fItemViewer.getSelection();
event.doit = (selection.size() < fItemViewer.getTable().getItemCount());
if (event.doit) {
LocalSelectionTransfer.getTransfer().setSelection(selection);
LocalSelectionTransfer.getTransfer().setSelectionSetTime(event.time & 0xFFFFFFFFL);
};
}
});
}
@Override
public void dragSetData(final DragSourceEvent event) {
SafeRunnable.run(new LoggingSafeRunnable() {
public void run() throws Exception {
if (LocalSelectionTransfer.getTransfer().isSupportedType(event.dataType))
event.data = LocalSelectionTransfer.getTransfer().getSelection();
}
});
}
@Override
public void dragFinished(DragSourceEvent event) {
SafeRunnable.run(new LoggingSafeRunnable() {
public void run() throws Exception {
LocalSelectionTransfer.getTransfer().setSelection(null);
LocalSelectionTransfer.getTransfer().setSelectionSetTime(0);
}
});
}
});
/* Drop Support */
ViewerDropAdapter dropSupport = new ViewerDropAdapter(fItemViewer) {
@Override
public boolean validateDrop(Object target, int operation, TransferData transferType) {
return true;
}
@Override
public boolean performDrop(Object data) {
ToolBarItem target = (ToolBarItem) getCurrentTarget();
if (target != null) {
onMove((StructuredSelection) data, target, getCurrentLocation());
return true;
}
return false;
}
};
dropSupport.setFeedbackEnabled(true);
dropSupport.setScrollEnabled(true);
dropSupport.setSelectionFeedbackEnabled(true);
fItemViewer.addDropSupport(DND.DROP_MOVE, new Transfer[] { LocalSelectionTransfer.getTransfer() }, dropSupport);
/* Set Dummy Input */
fItemViewer.setInput(this);
/* Container for the Buttons to Manage Providers */
Composite buttonContainer = new Composite(container, SWT.None);
buttonContainer.setLayout(LayoutUtils.createGridLayout(1, 0, 0));
buttonContainer.setLayoutData(new GridData(SWT.BEGINNING, SWT.FILL, false, false));
/* Add */
fAddMenu = new Menu(getShell(), SWT.POP_UP);
fAddMenu.addMenuListener(new MenuListener() {
public void menuShown(MenuEvent e) {
MenuItem[] items = fAddMenu.getItems();
for (MenuItem item : items) {
item.dispose();
}
/* Fill not yet visible Items */
int[] toolbarItemIds = fPreferences.getIntegers(DefaultPreferences.TOOLBAR_ITEMS);
List<CoolBarItem> visibleItems = new ArrayList<CoolBarItem>();
for (int toolbarItemId : toolbarItemIds) {
visibleItems.add(CoolBarItem.values()[toolbarItemId]);
}
CoolBarItem[] toolItems = getSortedItems();
int currentGroup = -1;
for (final CoolBarItem toolItem : toolItems) {
if (!visibleItems.contains(toolItem) || toolItem == CoolBarItem.SEPARATOR || toolItem == CoolBarItem.SPACER) {
/* Divide Groups by Separators */
if (currentGroup >= 0 && currentGroup != toolItem.getGroup())
new MenuItem(fAddMenu, SWT.SEPARATOR);
/* Create Menu Item */
MenuItem item = new MenuItem(fAddMenu, SWT.PUSH);
if (StringUtils.isSet(toolItem.getTooltip()))
item.setText(toolItem.getTooltip());
else
item.setText(toolItem.getName());
if (toolItem.getImg() != null)
item.setImage(fResources.createImage(toolItem.getImg()));
item.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
/* Add Item */
onAdd(toolItem);