package org.xmind.cathy.internal.dashboard; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.jface.viewers.IOpenListener; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.OpenEvent; import org.eclipse.jface.viewers.SelectionChangedEvent; import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.FillLayout; 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.Shell; import org.xmind.cathy.internal.WorkbenchMessages; import org.xmind.core.style.IStyle; import org.xmind.gef.EditDomain; import org.xmind.gef.GEF; import org.xmind.gef.util.Properties; import org.xmind.ui.gallery.GallerySelectTool; import org.xmind.ui.gallery.GalleryViewer; import org.xmind.ui.internal.views.CategorizedThemeViewer; import org.xmind.ui.internal.views.ThemeLabelProvider; import org.xmind.ui.mindmap.IResourceManager; import org.xmind.ui.mindmap.MindMapUI; public class ThemeChooserDialog extends Dialog { private IStyle selectedTheme = null; private String structureClass; protected ThemeChooserDialog(Shell parentShell) { super(parentShell); setShellStyle(getShellStyle() | SWT.SHEET); } protected ThemeChooserDialog(Shell parentShell, String structureClass) { this(parentShell); this.structureClass = structureClass; } @Override protected boolean isResizable() { return true; } @Override protected void configureShell(Shell newShell) { super.configureShell(newShell); newShell.setText(WorkbenchMessages.DashboardThemeChoose_message); } @Override protected Control createDialogArea(Composite parent) { Composite composite = (Composite) super.createDialogArea(parent); composite.setLayout(new FillLayout()); GridData parentData = (GridData) composite.getLayoutData(); parentData.widthHint = 940; parentData.heightHint = 500; doCreateViewer(composite); return composite; } private void doCreateViewer(Composite parent) { CategorizedThemeViewer viewer = doCreatePartControlViewer(parent); viewer.addSelectionChangedListener(new ISelectionChangedListener() { public void selectionChanged(SelectionChangedEvent event) { selectedTheme = (IStyle) ((IStructuredSelection) event .getSelection()).getFirstElement(); setButtonEnabled(IDialogConstants.OK_ID, !event.getSelection().isEmpty()); } }); viewer.addOpenListener(new IOpenListener() { public void open(OpenEvent event) { ISelection selection = event.getSelection(); selectedTheme = selection.isEmpty() ? null : (IStyle) ((IStructuredSelection) selection) .getFirstElement(); setReturnCode(OK); close(); } }); IResourceManager rm = MindMapUI.getResourceManager(); IStyle defaultTheme = rm.getDefaultTheme(); viewer.setSelection(new StructuredSelection(defaultTheme)); } private CategorizedThemeViewer doCreatePartControlViewer(Composite parent) { Composite container = new Composite(parent, SWT.NONE); GridLayout layout = new GridLayout(1, false); layout.marginWidth = 0; layout.marginHeight = 0; layout.verticalSpacing = 0; layout.horizontalSpacing = 0; container.setLayout(layout); CategorizedThemeViewer viewer = new CategorizedThemeViewer(container) { @Override protected void postInit() { // cancel change theme listener } @Override protected void initGalleryViewer(GalleryViewer galleryViewerer) { galleryViewerer.setLabelProvider( new ThemeLabelProvider(structureClass)); EditDomain editDomain = new EditDomain(); editDomain.installTool(GEF.TOOL_SELECT, new GallerySelectTool()); galleryViewerer.setEditDomain(editDomain); Properties properties = galleryViewerer.getProperties(); properties.set(GalleryViewer.TitlePlacement, GalleryViewer.TITLE_BOTTOM); properties.set(GalleryViewer.HideTitle, false); properties.set(GalleryViewer.SingleClickToOpen, Boolean.FALSE); properties.set(GalleryViewer.SolidFrames, true); properties.set(GalleryViewer.FlatFrames, true); properties.set(GalleryViewer.ImageConstrained, true); properties.set(GalleryViewer.CustomContentPaneDecorator, true); } }; viewer.getControl() .setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); return viewer; } @Override protected Button createButton(Composite parent, int id, String label, boolean defaultButton) { if (id == IDialogConstants.OK_ID) label = WorkbenchMessages.DashboardThemeCreate_label; return super.createButton(parent, id, label, defaultButton); } @Override protected void cancelPressed() { super.cancelPressed(); selectedTheme = null; } public IStyle getSelectedTheme() { return selectedTheme; } private void setButtonEnabled(int id, boolean enabled) { Button button = getButton(id); if (button == null || button.isDisposed()) return; button.setEnabled(enabled); } }