headerContainer.setCursor(fParent.getDisplay().getSystemCursor(SWT.CURSOR_HAND));
headerContainer.addMouseListener(new MouseAdapter() {
@Override
public void mouseDown(MouseEvent e) {
onToggle();
notifyListeners(SWT.Selection, new Event());
}
});
}
fFolderIcon = new Label(headerContainer, SWT.None);
fFolderIcon.setLayoutData(new GridData(SWT.BEGINNING, SWT.CENTER, false, true));
fFolderIcon.setBackground(fParent.getDisplay().getSystemColor(SWT.COLOR_LIST_BACKGROUND));
if (fExpandable) {
fFolderIcon.setCursor(fParent.getDisplay().getSystemCursor(SWT.CURSOR_HAND));
fFolderIcon.addMouseListener(new MouseAdapter() {
@Override
public void mouseDown(MouseEvent e) {
onToggle();
notifyListeners(SWT.Selection, new Event());
}
});
}
fFolderName = new Label(headerContainer, SWT.None);
fFolderName.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, true));
fFolderName.setBackground(fParent.getDisplay().getSystemColor(SWT.COLOR_LIST_BACKGROUND));
if (fExpandable) {
fFolderName.setCursor(fParent.getDisplay().getSystemCursor(SWT.CURSOR_HAND));
fFolderName.addMouseListener(new MouseAdapter() {
@Override
public void mouseDown(MouseEvent e) {
onToggle();
notifyListeners(SWT.Selection, new Event());
}
});
}
Composite toolbarContainer = new Composite(headerContainer, SWT.NONE);
toolbarContainer.setLayout(LayoutUtils.createGridLayout(2, 0, 0, 0, 1, false));
toolbarContainer.setLayoutData(new GridData(SWT.END, SWT.CENTER, false, true));
toolbarContainer.setBackground(fParent.getDisplay().getSystemColor(SWT.COLOR_LIST_BACKGROUND));
fAddFolderBar = new ToolBar(toolbarContainer, SWT.FLAT);
OwlUI.makeAccessible(fAddFolderBar, Messages.FolderChooser_NEW_FOLDER);
fAddFolderBar.setLayoutData(new GridData(SWT.END, SWT.CENTER, false, true));
fAddFolderBar.setBackground(fParent.getDisplay().getSystemColor(SWT.COLOR_LIST_BACKGROUND));
fAddFolderBar.setCursor(headerContainer.getDisplay().getSystemCursor(SWT.CURSOR_ARROW));
fAddFolderBar.setVisible(!fExpandable);
ToolItem addFolderItem = new ToolItem(fAddFolderBar, SWT.PUSH);
addFolderItem.setImage(OwlUI.getImage(fResources, "icons/etool16/add_crop.gif")); //$NON-NLS-1$
addFolderItem.setToolTipText(Messages.FolderChooser_NEW_FOLDER);
addFolderItem.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
onNewFolder();
notifyListeners(SWT.Selection, new Event());
}
});
ToolBar toggleBar = new ToolBar(toolbarContainer, SWT.FLAT);
OwlUI.makeAccessible(toggleBar, Messages.FolderChooser_SHOW_FOLDERS);
toggleBar.setLayoutData(new GridData(SWT.END, SWT.CENTER, false, true));
((GridData) toggleBar.getLayoutData()).exclude = !fExpandable;
toggleBar.setBackground(fParent.getDisplay().getSystemColor(SWT.COLOR_LIST_BACKGROUND));
toggleBar.setCursor(headerContainer.getDisplay().getSystemCursor(SWT.CURSOR_ARROW));
fToggleItem = new ToolItem(toggleBar, SWT.PUSH);
fToggleItem.setImage(OwlUI.getImage(fResources, "icons/ovr16/arrow_down.gif")); //$NON-NLS-1$
fToggleItem.setToolTipText(Messages.FolderChooser_SHOW_FOLDERS);
fToggleItem.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
onToggle();
notifyListeners(SWT.Selection, new Event());
}
});
fFolderViewerContainer = new Composite(this, SWT.None);
fFolderViewerContainer.setLayout(LayoutUtils.createGridLayout(1, 0, 0, 2, 0, false));
fFolderViewerContainer.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
fFolderViewerContainer.setBackground(fParent.getDisplay().getSystemColor(SWT.COLOR_LIST_BACKGROUND));
Label separator = new Label(fFolderViewerContainer, SWT.SEPARATOR | SWT.HORIZONTAL);
separator.setLayoutData(new GridData(SWT.FILL, SWT.BEGINNING, true, false));
fFolderViewer = new TreeViewer(fFolderViewerContainer, SWT.None);
fFolderViewer.setAutoExpandLevel(2);
fFolderViewer.getTree().setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
fFolderViewer.getTree().setData(ApplicationWorkbenchWindowAdvisor.FOCUSLESS_SCROLL_HOOK, new Object());
fViewerHeight = fFolderViewer.getTree().getItemHeight() * fItemHeight + 12;
((GridData) fFolderViewerContainer.getLayoutData()).heightHint = fViewerHeight;
((GridData) fFolderViewerContainer.getLayoutData()).exclude = fExpandable;
/* Sort by Name if set so */
if (Owl.getPreferenceService().getGlobalScope().getBoolean(DefaultPreferences.BE_SORT_BY_NAME)) {
fFolderViewer.setComparator(new ViewerComparator() {
@Override
public int compare(Viewer viewer, Object e1, Object e2) {
IFolder f1 = (IFolder) e1;
IFolder f2 = (IFolder) e2;
return f1.getName().compareTo(f2.getName());
}
});
}
/* Filter excluded Folders */
fFolderViewer.addFilter(new ViewerFilter() {
@Override
public boolean select(Viewer viewer, Object parentElement, Object element) {
if (fExcludes == null)
return true;
return !fExcludes.contains(element) && !fExcludes.contains(parentElement);
}
});
fFolderViewer.setContentProvider(new ITreeContentProvider() {
public Object[] getElements(Object inputElement) {
Collection<IFolder> rootFolders = CoreUtils.loadRootFolders();
return rootFolders.toArray();
}
public Object[] getChildren(Object parentElement) {
if (parentElement instanceof IFolder) {
IFolder folder = (IFolder) parentElement;
return folder.getFolders().toArray();
}
return new Object[0];
}
public Object getParent(Object element) {
if (element instanceof IFolder) {
IFolder folder = (IFolder) element;
return folder.getParent();
}
return null;
}
public boolean hasChildren(Object element) {
if (element instanceof IFolder) {
IFolder folder = (IFolder) element;
return !folder.getFolders().isEmpty();
}
return false;
}
public void dispose() {}
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {}
});
boolean usedInDialog = (fParent.getShell().getParent() != null);
fFolderViewer.setLabelProvider(new BookMarkLabelProvider(false, usedInDialog));
fFolderViewer.setInput(new Object());
fFolderViewer.addSelectionChangedListener(new ISelectionChangedListener() {
public void selectionChanged(SelectionChangedEvent event) {
IStructuredSelection selection = (IStructuredSelection) event.getSelection();
if (!selection.isEmpty())
onFolderSelected((IFolder) selection.getFirstElement());
notifyListeners(SWT.Selection, new Event());
}
});
fFolderViewer.addDoubleClickListener(new IDoubleClickListener() {
public void doubleClick(DoubleClickEvent event) {