/******************************************************************************* * Copyright (c) 2000, 2005 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * IBM Corporation - initial API and implementation *******************************************************************************/ package org.eclipse.gef.ui.palette.customize; import java.util.HashMap; import org.eclipse.swt.SWT; import org.eclipse.swt.events.DisposeEvent; import org.eclipse.swt.events.DisposeListener; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.graphics.FontData; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.graphics.Point; 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.FontDialog; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Widget; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.resource.JFaceResources; import org.eclipse.jface.resource.StringConverter; import org.eclipse.ui.part.PageBook; import org.eclipse.gef.ui.palette.PaletteMessages; import org.eclipse.gef.ui.palette.PaletteViewerPreferences; /** * @author Pratik Shah */ public class PaletteSettingsDialog extends Dialog { private PaletteViewerPreferences prefs; private Label fontName; private PageBook book; private Control columnsPanel, detailsPanel, iconsPanel, listPanel; private HashMap widgets = new HashMap(); /** * A HashMap to cache the various settings displayed in this dialog */ protected HashMap settings = new HashMap(); /** * HashMap keys used for caching the various settings displayed in this dialog. */ protected static final String CACHE_LAYOUT = "layout setting", //$NON-NLS-1$ CACHE_COLUMNS_ICON_SIZE = "columns - use large icons", //$NON-NLS-1$ CACHE_LIST_ICON_SIZE = "list - use large icons", //$NON-NLS-1$ CACHE_ICONS_ICON_SIZE = "icons only - use large icons", //$NON-NLS-1$ CACHE_DETAILS_ICON_SIZE = "details - use large icons", //$NON-NLS-1$ CACHE_FONT = "font", //$NON-NLS-1$ CACHE_COLLAPSE = "auto-collapse setting"; //$NON-NLS-1$ /** * The unique IDs for the various widgets. These IDs can be used to retrieve * these widgets from the internal map (using {@link #getWidget(int)}), or to identify * widgets in {@link #buttonPressed(int)}. */ protected static final int LAYOUT_COLUMNS_VIEW_ID = IDialogConstants.CLIENT_ID + 1, LAYOUT_LIST_VIEW_ID = IDialogConstants.CLIENT_ID + 2, LAYOUT_ICONS_VIEW_ID = IDialogConstants.CLIENT_ID + 3, LAYOUT_COLUMNS_ICON_SIZE_ID = IDialogConstants.CLIENT_ID + 4, LAYOUT_LIST_ICON_SIZE_ID = IDialogConstants.CLIENT_ID + 5, LAYOUT_ICONS_ICON_SIZE_ID = IDialogConstants.CLIENT_ID + 6, LAYOUT_DETAILS_ICON_SIZE_ID = IDialogConstants.CLIENT_ID + 7, COLLAPSE_NEVER_ID = IDialogConstants.CLIENT_ID + 8, COLLAPSE_ALWAYS_ID = IDialogConstants.CLIENT_ID + 9, COLLAPSE_NEEDED_ID = IDialogConstants.CLIENT_ID + 10, APPLY_ID = IDialogConstants.CLIENT_ID + 11, LAYOUT_DETAILS_VIEW_ID = IDialogConstants.CLIENT_ID + 12, FONT_CHANGE_ID = IDialogConstants.CLIENT_ID + 13, DEFAULT_FONT_ID = IDialogConstants.CLIENT_ID + 14; /** * Sub - classes that need to create their own unique IDs should do so by adding * to this ID. */ protected static final int CLIENT_ID = 16; /** * Constructor * * @param parentShell The parent shell, or <code>null</code> to create a top - level * shell * @param prefs The PaletteViewerPreferences object that can provide access to * and allow modification of the palette's settings. It cannot be * <code>null</code>. */ public PaletteSettingsDialog(Shell parentShell, PaletteViewerPreferences prefs) { super(parentShell); this.prefs = prefs; setShellStyle(getShellStyle() | SWT.RESIZE | SWT.MAX); } /** * This method will be invoked whenever any <code>Button</code> created using * {@link #createButton(Composite, int, String, int, ImageDescriptor)} or * {@link Dialog#createButton(Composite, int, String, boolean)} is selected. * * @see Dialog#buttonPressed(int) */ protected void buttonPressed(int buttonId) { Button b = getButton(buttonId); if (FONT_CHANGE_ID == buttonId) { handleChangeFontPressed(); } else if (COLLAPSE_ALWAYS_ID == buttonId) { handleAutoCollapseSettingChanged(PaletteViewerPreferences.COLLAPSE_ALWAYS); } else if (COLLAPSE_NEVER_ID == buttonId) { handleAutoCollapseSettingChanged(PaletteViewerPreferences.COLLAPSE_NEVER); } else if (COLLAPSE_NEEDED_ID == buttonId) { handleAutoCollapseSettingChanged(PaletteViewerPreferences.COLLAPSE_AS_NEEDED); } else if (LAYOUT_COLUMNS_VIEW_ID == buttonId) { handleLayoutSettingChanged(PaletteViewerPreferences.LAYOUT_COLUMNS); } else if (LAYOUT_ICONS_VIEW_ID == buttonId) { handleLayoutSettingChanged(PaletteViewerPreferences.LAYOUT_ICONS); } else if (LAYOUT_LIST_VIEW_ID == buttonId) { handleLayoutSettingChanged(PaletteViewerPreferences.LAYOUT_LIST); } else if (LAYOUT_DETAILS_VIEW_ID == buttonId) { handleLayoutSettingChanged(PaletteViewerPreferences.LAYOUT_DETAILS); } else if (LAYOUT_DETAILS_ICON_SIZE_ID == buttonId) { handleIconSizeChanged(b.getSelection()); } else if (LAYOUT_COLUMNS_ICON_SIZE_ID == buttonId) { handleIconSizeChanged(b.getSelection()); } else if (LAYOUT_ICONS_ICON_SIZE_ID == buttonId) { handleIconSizeChanged(b.getSelection()); } else if (LAYOUT_LIST_ICON_SIZE_ID == buttonId) { handleIconSizeChanged(b.getSelection()); } else if (DEFAULT_FONT_ID == buttonId) { handleDefaultFontRequested(); } else { super.buttonPressed(buttonId); } } /** * This method saves the various settings in this dialog, so that they can be restored * later on if "Cancel" is pressed. * * @see #restoreSettings() */ protected void cacheSettings() { settings.put(CACHE_LAYOUT, new Integer(prefs.getLayoutSetting())); settings.put(CACHE_COLLAPSE, new Integer(prefs.getAutoCollapseSetting())); settings.put(CACHE_FONT, prefs.getFontData()); settings.put(CACHE_DETAILS_ICON_SIZE, new Boolean(prefs.useLargeIcons(PaletteViewerPreferences.LAYOUT_DETAILS))); settings.put(CACHE_ICONS_ICON_SIZE, new Boolean(prefs.useLargeIcons(PaletteViewerPreferences.LAYOUT_ICONS))); settings.put(CACHE_COLUMNS_ICON_SIZE, new Boolean(prefs.useLargeIcons(PaletteViewerPreferences.LAYOUT_COLUMNS))); settings.put(CACHE_LIST_ICON_SIZE, new Boolean(prefs.useLargeIcons(PaletteViewerPreferences.LAYOUT_LIST))); } /** * @see org.eclipse.jface.window.Window#close() */ public boolean close() { // Save or dump changes // This needs to be done here and not in the handle methods because the user can // also close the dialog with the 'X' in the top right of the window (which // corresponds to a cancel). if (getReturnCode() != OK) { handleCancelPressed(); } return super.close(); } /** * @see org.eclipse.jface.window.Window#configureShell(Shell) */ protected void configureShell(Shell newShell) { newShell.setText(PaletteMessages.SETTINGS_DIALOG_TITLE); super.configureShell(newShell); } /** * This method should not be used to create buttons for the button bar. Use * {@link Dialog#createButton(Composite, int, String, boolean)} for that. This method * can be used to create any other button in the dialog. The parent * <code>Composite</code> must have a GridLayout. These buttons will be available * through {@link #getButton(int)} and {@link #getWidget(int)}. Ensure that the various * buttons created by this method are given unique IDs. Pass in a null image descriptor * if you don't want the button to have an icon. This method will take care of * disposing the images that it creates. {@link #buttonPressed(int)} will be called when * any of the buttons created by this method are clicked (selected). * * @param parent The composite in which the button is to be created * @param id The button's unique ID * @param label The button's text * @param stylebits The style bits for creating the button (eg., * <code>SWT.PUSH</code) or <code>SWT.CHECK</code>) * @param descriptor The ImageDescriptor from which the image/icon for this * button should be created * @return The newly created button for convenience */ protected Button createButton(Composite parent, int id, String label, int stylebits, ImageDescriptor descriptor) { Button button = new Button(parent, stylebits); button.setText(label); button.setFont(parent.getFont()); GridData data = new GridData(GridData.HORIZONTAL_ALIGN_FILL); button.setLayoutData(data); button.setData(new Integer(id)); button.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent event) { buttonPressed(((Integer) event.widget.getData()).intValue()); } }); widgets.put(new Integer(id), button); if (descriptor != null) { button.setImage(new Image(parent.getDisplay(), descriptor.getImageData())); button.addDisposeListener(new DisposeListener() { public void widgetDisposed(DisposeEvent e) { Image img = ((Button)e.getSource()).getImage(); if (img != null && !img.isDisposed()) { img.dispose(); } } }); } return button; } /** * Creates and initializes (i.e., loads the current value from the * PaletteViewerPreferences) the part of the dialog where the options to close drawers * will be displayed. * * @param container The parent composite * @return The newly created Control which has the drawer collapse options */ protected Control createDrawerCollapseOptions(Composite container) { Composite composite = new Composite(container, SWT.NONE); composite.setFont(container.getFont()); GridLayout layout = new GridLayout(1, false); composite.setLayout(layout); Label label = new Label(composite, SWT.NONE); label.setFont(composite.getFont()); label.setText(PaletteMessages.COLLAPSE_OPTIONS_TITLE); GridData data = new GridData(); label.setLayoutData(data); Button b = createButton(composite, COLLAPSE_ALWAYS_ID, PaletteMessages.COLLAPSE_ALWAYS_LABEL, SWT.RADIO, null); ((GridData)b.getLayoutData()).horizontalIndent = 5; b = createButton(composite, COLLAPSE_NEEDED_ID, PaletteMessages.COLLAPSE_AS_NEEDED_LABEL, SWT.RADIO, null); ((GridData)b.getLayoutData()).horizontalIndent = 5; b = createButton(composite, COLLAPSE_NEVER_ID, PaletteMessages.COLLAPSE_NEVER_LABEL, SWT.RADIO, null); ((GridData)b.getLayoutData()).horizontalIndent = 5; // Load auto - collapse settings b = null; int collapse = prefs.getAutoCollapseSetting(); switch (collapse) { case PaletteViewerPreferences.COLLAPSE_ALWAYS: b = getButton(COLLAPSE_ALWAYS_ID); break; case PaletteViewerPreferences.COLLAPSE_AS_NEEDED: b = getButton(COLLAPSE_NEEDED_ID); break; case PaletteViewerPreferences.COLLAPSE_NEVER: b = getButton(COLLAPSE_NEVER_ID); } b.setSelection(true); return composite; } /** * Creates and initializes (i.e. loads the current settings from PaletteViewerPreferences) * the options for details layout. * * @param parent the parent composite * @return the newly created Control */ protected Control createDetailsOptions(Composite parent) { Control contents = createOptionsPage(parent, PaletteMessages.SETTINGS_OPTIONS_DETAILS, LAYOUT_DETAILS_ICON_SIZE_ID); getButton(LAYOUT_DETAILS_ICON_SIZE_ID).setSelection( prefs.useLargeIcons(PaletteViewerPreferences.LAYOUT_DETAILS)); return contents; } /** * @see org.eclipse.jface.dialogs.Dialog#createDialogArea(Composite) */ protected Control createDialogArea(Composite parent) { Composite composite = (Composite)super.createDialogArea(parent); GridLayout layout = (GridLayout)composite.getLayout(); layout.horizontalSpacing = 0; layout.numColumns = 2; Control child = createFontSettings(composite); GridData data = new GridData(GridData.FILL_HORIZONTAL); data.horizontalSpan = 2; data.horizontalIndent = 5; child.setLayoutData(data); Label label = new Label(composite, SWT.SEPARATOR | SWT.HORIZONTAL); data = new GridData(GridData.HORIZONTAL_ALIGN_FILL); data.horizontalSpan = 2; label.setLayoutData(data); child = createLayoutSettings(composite); data = new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.FILL_VERTICAL); data.horizontalSpan = 2; data.horizontalIndent = 5; child.setLayoutData(data); label = new Label(composite, SWT.SEPARATOR | SWT.HORIZONTAL); data = new GridData(GridData.HORIZONTAL_ALIGN_FILL); data.horizontalSpan = 2; label.setLayoutData(data); child = createDrawerCollapseOptions(composite); data = new GridData(GridData.HORIZONTAL_ALIGN_FILL); data.horizontalSpan = 2; data.horizontalIndent = 5; child.setLayoutData(data); label = new Label(parent, SWT.SEPARATOR | SWT.HORIZONTAL); data = new GridData(GridData.HORIZONTAL_ALIGN_FILL); data.horizontalSpan = 2; label.setLayoutData(data); cacheSettings(); return composite; } /** * Creates and initializes (i.e. loads the current settings from PaletteViewerPreferences) * the options for columns layout. * * @param parent the parent composite * @return the newly created Control */ protected Control createColumnsOptions(Composite parent) { Composite contents = (Composite)createOptionsPage(parent, PaletteMessages.SETTINGS_OPTIONS_COLUMNS, LAYOUT_COLUMNS_ICON_SIZE_ID); getButton(LAYOUT_COLUMNS_ICON_SIZE_ID).setSelection( prefs.useLargeIcons(PaletteViewerPreferences.LAYOUT_COLUMNS)); // final Button button = createButton(contents, -1, // PaletteMessages.SETTINGS_LAYOUT_COLUMNS_OVERRIDE_WIDTH, SWT.CHECK, null); // ((GridData)button.getLayoutData()).horizontalSpan = 2; // // Composite container = new Composite(contents, SWT.NONE); // container.setFont(contents.getFont()); // GridLayout layout = new GridLayout(2, false); // container.setLayout(layout); // GridData data = new GridData(GridData.FILL_HORIZONTAL | GridData.VERTICAL_ALIGN_FILL); // data.horizontalSpan = 2; // container.setLayoutData(data); // // final Label label = new Label(container, SWT.NONE); // label.setFont(container.getFont()); // label.setText(PaletteMessages.SETTINGS_LAYOUT_COLUMNS_WIDTH); // data = new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING // | GridData.VERTICAL_ALIGN_BEGINNING); // label.setLayoutData(data); // label.setEnabled(false); // // final Text box = new Text(container, SWT.SINGLE | SWT.BORDER); // box.setFont(container.getFont()); //// box.setText("30"); // box.setEnabled(false); // data = new GridData(GridData.FILL_HORIZONTAL | GridData.VERTICAL_ALIGN_BEGINNING); // data.widthHint = 50; // box.setLayoutData(data); // // button.addSelectionListener(new SelectionListener() { // public void widgetSelected(SelectionEvent e) { // label.setEnabled(!label.isEnabled()); // box.setEnabled(!box.isEnabled()); // } // public void widgetDefaultSelected(SelectionEvent e) { // } // }); return contents; } /** * Creates and initializes (i.e. loads the current settings from PaletteViewerPreferences) * the part of the dialog that displays the font settings. * * @param parent the parent composite * @return the newly created Control */ protected Control createFontSettings(Composite parent) { Composite container = new Composite(parent, SWT.NONE); container.setFont(parent.getFont()); GridLayout layout = new GridLayout(2, false); container.setLayout(layout); fontName = new Label(container, SWT.LEFT | SWT.WRAP); fontName.setFont(container.getFont()); GridData data = new GridData(GridData.FILL_BOTH); data.verticalSpan = 2; fontName.setLayoutData(data); updateFontName(); createButton(container, FONT_CHANGE_ID, PaletteMessages.SETTINGS_FONT_CHANGE, SWT.PUSH, null); createButton(container, DEFAULT_FONT_ID, PaletteMessages.SETTINGS_DEFAULT_FONT, SWT.PUSH, null); return container; } /** * Creates and initializes (i.e. loads the current settings from PaletteViewerPreferences) * the options for icons layout. * * @param parent the parent composite * @return the newly created Control */ protected Control createIconsOnlyOptions(Composite parent) { Control contents = createOptionsPage(parent, PaletteMessages.SETTINGS_OPTIONS_ICONS_ONLY, LAYOUT_ICONS_ICON_SIZE_ID); getButton(LAYOUT_ICONS_ICON_SIZE_ID).setSelection( prefs.useLargeIcons(PaletteViewerPreferences.LAYOUT_ICONS)); return contents; } /** * Creates the part of the dialog that displays the various options for the selected * layout. * * @param parent the parent composite * @return the newly created Control */ protected Control createLayoutOptions(Composite parent) { Composite composite = new Composite(parent, SWT.NONE); composite.setFont(parent.getFont()); GridLayout layout = new GridLayout(1, false); layout.marginWidth = 0; layout.marginHeight = 0; composite.setLayout(layout); Label label = new Label(composite, SWT.NONE); label.setFont(composite.getFont()); label.setText(PaletteMessages.SETTINGS_LAYOUT_TITLE); GridData data = new GridData(); label.setLayoutData(data); Button b = null; int[] modes = prefs.getSupportedLayoutModes(); for (int i = 0; i < modes.length; i++) { switch(modes[i]) { case PaletteViewerPreferences.LAYOUT_COLUMNS: b = createButton(composite, LAYOUT_COLUMNS_VIEW_ID, PaletteMessages.SETTINGS_COLUMNS_VIEW_LABEL, SWT.RADIO, null); ((GridData)b.getLayoutData()).horizontalIndent = 5; break; case PaletteViewerPreferences.LAYOUT_LIST: b = createButton(composite, LAYOUT_LIST_VIEW_ID, PaletteMessages.SETTINGS_LIST_VIEW_LABEL, SWT.RADIO, null); ((GridData)b.getLayoutData()).horizontalIndent = 5; break; case PaletteViewerPreferences.LAYOUT_ICONS: b = createButton(composite, LAYOUT_ICONS_VIEW_ID, PaletteMessages.SETTINGS_ICONS_VIEW_LABEL, SWT.RADIO, null); ((GridData)b.getLayoutData()).horizontalIndent = 5; break; case PaletteViewerPreferences.LAYOUT_DETAILS: b = createButton(composite, LAYOUT_DETAILS_VIEW_ID, PaletteMessages.SETTINGS_DETAILS_VIEW_LABEL, SWT.RADIO, null); ((GridData)b.getLayoutData()).horizontalIndent = 5; break; } } // Load layout settings int layoutSetting = prefs.getLayoutSetting(); switch (layoutSetting) { case PaletteViewerPreferences.LAYOUT_COLUMNS: b = getButton(LAYOUT_COLUMNS_VIEW_ID); break; case PaletteViewerPreferences.LAYOUT_ICONS: b = getButton(LAYOUT_ICONS_VIEW_ID); break; case PaletteViewerPreferences.LAYOUT_LIST: b = getButton(LAYOUT_LIST_VIEW_ID); break; case PaletteViewerPreferences.LAYOUT_DETAILS: b = getButton(LAYOUT_DETAILS_VIEW_ID); break; } b.setSelection(true); b.setFocus(); return composite; } /** * Creates the part of the dialog that displays the lists the available layout modes. * * @param parent the parent composite * @return the newly created Control */ protected Control createLayoutSettings(Composite parent) { Composite composite = new Composite(parent, SWT.NONE); composite.setFont(parent.getFont()); GridLayout layout = new GridLayout(2, false); composite.setLayout(layout); Control layoutOptions = createLayoutOptions(composite); GridData data = new GridData(GridData.VERTICAL_ALIGN_BEGINNING); layoutOptions.setLayoutData(data); book = new PageBook(composite, SWT.NONE); book.setFont(composite.getFont()); data = new GridData(GridData.FILL_BOTH); book.setLayoutData(data); columnsPanel = createColumnsOptions(book); listPanel = createListOptions(book); iconsPanel = createIconsOnlyOptions(book); detailsPanel = createDetailsOptions(book); // Show the right page in the book handleLayoutSettingChanged(prefs.getLayoutSetting()); return composite; } /** * Creates and initializes (i.e. loads the current settings from PaletteViewerPreferences) * the options for list layout. * * @param parent the parent composite * @return the newly created Control */ protected Control createListOptions(Composite parent) { Control composite = createOptionsPage(parent, PaletteMessages.SETTINGS_OPTIONS_LIST, LAYOUT_LIST_ICON_SIZE_ID); getButton(LAYOUT_LIST_ICON_SIZE_ID).setSelection( prefs.useLargeIcons(PaletteViewerPreferences.LAYOUT_LIST)); return composite; } /** * This helper method is a result of code-factoring. It creates a Group displaying the * given title and creates a "Use Large Icons" checkbox with the given buttonId in it. * This method is used to create the options for the different layout modes. * * @param parent the parent composite * @param title The title for the group to be created. * @param buttonId The ID for the "Use Large Icons" checkbox to be created in the * group. * @return the newly created Group */ protected Control createOptionsPage(Composite parent, String title, int buttonId) { Group contents = new Group(parent, SWT.NONE); contents.setFont(parent.getFont()); GridLayout layout = new GridLayout(1, false); contents.setLayout(layout); GridData data = new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.VERTICAL_ALIGN_FILL); data.heightHint = 0; contents.setLayoutData(data); contents.setText(title); createButton(contents, buttonId, PaletteMessages.SETTINGS_USE_LARGE_ICONS_LABEL, SWT.CHECK, null); return contents; } /** * Returns the Button with the given id; or <code>null</code> if none was found. * * @see org.eclipse.jface.dialogs.Dialog#getButton(int) */ protected Button getButton(int id) { Button button = null; Widget widget = getWidget(id); if (widget instanceof Button) { button = (Button)widget; } return button; } /** * The <code>Widget</code>s that were created with a unique ID and added to this class' * internal map can be retrieved through this method. * * @param id The unique ID of the Widget that you wish to retrieve * @return The Widget, if one with the given id exists. <code>null</code> * otherwise. */ protected Widget getWidget(int id) { Widget widget = (Widget)widgets.get(new Integer(id)); if (widget == null) { widget = super.getButton(id); } return widget; } /** * Called when any one of the "Auto - Collapse" radio buttons is clicked. It * changes the setting in the {@link org.eclipse.gef.ui.palette.PaletteViewerPreferences} * object. * * @param newSetting The flag for the new setting */ protected void handleAutoCollapseSettingChanged(int newSetting) { prefs.setAutoCollapseSetting(newSetting); } /** * This method is invoked when "Cancel" is invoked on the dialog. It simply restores the * settings, thus undoing any changes made in this Dialog. */ protected void handleCancelPressed() { restoreSettings(); } /** * This method is invoked when the user selects the "Change" font button. It opens the * FontDialog to allow the user to change the font. */ protected void handleChangeFontPressed() { FontDialog dialog = new FontDialog(getShell()); FontData data = prefs.getFontData(); dialog.setFontList(new FontData[] {data}); data = dialog.open(); if (data != null) { prefs.setFontData(data); } updateFontName(); } /** * This method is invoked when the user selects the "Restore Default" font button. It * changes the font, in case it was different, to the default one, which is the Workbench * Dialog font. */ protected void handleDefaultFontRequested() { prefs.setFontData(JFaceResources.getDialogFont().getFontData()[0]); updateFontName(); } /** * This method is invoked when the "Use Large Icons" checkbox is selected/deselected for * the currently active layout mode. * * @param selection indicates whether large icons are to be used or not. */ protected void handleIconSizeChanged(boolean selection) { prefs.setCurrentUseLargeIcons(selection); } /** * This method is called when any one of the "Layout" radio buttons is clicked. It * changes the setting in the {@link org.eclipse.gef.ui.palette.PaletteViewerPreferences} * object. * * @param newSetting The flag for the new setting */ protected void handleLayoutSettingChanged(int newSetting) { prefs.setLayoutSetting(newSetting); switch (newSetting) { case PaletteViewerPreferences.LAYOUT_COLUMNS : showLayoutOptionsPage(columnsPanel); break; case PaletteViewerPreferences.LAYOUT_LIST : showLayoutOptionsPage(listPanel); break; case PaletteViewerPreferences.LAYOUT_ICONS : showLayoutOptionsPage(iconsPanel); break; case PaletteViewerPreferences.LAYOUT_DETAILS : showLayoutOptionsPage(detailsPanel); break; default : break; } } /** * Restores the cached settings, thus undoing any changes made since the last caching of * settings. * * @see #cacheSettings() */ protected void restoreSettings() { prefs.setFontData((FontData)settings.get(CACHE_FONT)); prefs.setAutoCollapseSetting(((Integer)settings.get(CACHE_COLLAPSE)).intValue()); prefs.setLayoutSetting(((Integer)settings.get(CACHE_LAYOUT)).intValue()); prefs.setUseLargeIcons(PaletteViewerPreferences.LAYOUT_DETAILS, ((Boolean)settings.get(CACHE_DETAILS_ICON_SIZE)).booleanValue()); prefs.setUseLargeIcons(PaletteViewerPreferences.LAYOUT_ICONS, ((Boolean)settings.get(CACHE_ICONS_ICON_SIZE)).booleanValue()); prefs.setUseLargeIcons(PaletteViewerPreferences.LAYOUT_LIST, ((Boolean)settings.get(CACHE_LIST_ICON_SIZE)).booleanValue()); prefs.setUseLargeIcons(PaletteViewerPreferences.LAYOUT_COLUMNS, ((Boolean)settings.get(CACHE_COLUMNS_ICON_SIZE)).booleanValue()); } /** * This helper method is mainly a result of code-factoring. It shows the given page * (which should be one of the controls showing the layout options) in the PageBook and * grows the dialog if necessary. * * @param page One of the controls showing the layout options that already belongs to * the PageBook book. */ protected void showLayoutOptionsPage(Control page) { // Show the page and grow the shell (if necessary) so that the page is completely // visible Point oldSize = getShell().getSize(); book.showPage(page); Point newSize = getShell().computeSize(SWT.DEFAULT, SWT.DEFAULT, true); int x = newSize.x - oldSize.x; x = (x < 0) ? 0 : x; int y = newSize.y - oldSize.y; y = (y < 0) ? 0 : y; if (x > 0 || y > 0) { getShell().setSize(oldSize.x + x, oldSize.y + y); } } /** * Updates the label showing the font's name to show the name of the current font. */ protected void updateFontName() { String name; if (prefs.getFontData().equals((JFaceResources.getDialogFont().getFontData()[0]))) { name = PaletteMessages.SETTINGS_WORKBENCH_FONT_LABEL; } else { name = StringConverter.asString(prefs.getFontData()); } fontName.setText(PaletteMessages.SETTINGS_FONT_CURRENT + name); } }