blob: 43ed8d94ed5fd58acc5831afa90efc5c8f0f3482 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2000, 2010 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 org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.draw2d.rap.swt.SWT;
import org.eclipse.gef.palette.PaletteDrawer;
import org.eclipse.gef.palette.PaletteEntry;
import org.eclipse.gef.ui.palette.PaletteMessages;
/**
* The default entry page for drawers.
*
* @author Pratik Shah
*/
public class DrawerEntryPage extends DefaultEntryPage {
private Button openDrawerOption, pinDrawerOption;
private boolean contains(Object[] array, Object obj) {
for (int i = array.length - 1; i >= 0; i--) {
if (obj == array[i]) {
return true;
}
}
return false;
}
/**
* @see org.eclipse.gef.ui.palette.customize.EntryPage#createControl(Composite,
* PaletteEntry)
*/
public void createControl(Composite parent, PaletteEntry entry) {
super.createControl(parent, entry);
openDrawerOption = createOpenDrawerInitiallyOption(getComposite());
pinDrawerOption = createPinDrawerInitiallyOption(getComposite());
Control[] oldTablist = getComposite().getTabList();
if (!contains(oldTablist, openDrawerOption)) {
// This means that the super class must've set a specific tab order
// on this
// composite. We need to add the two newly created controls to this
// tab order.
Control[] newTablist = new Control[oldTablist.length + 2];
System.arraycopy(oldTablist, 0, newTablist, 0, oldTablist.length);
newTablist[newTablist.length - 2] = openDrawerOption;
newTablist[newTablist.length - 1] = pinDrawerOption;
getComposite().setTabList(newTablist);
}
}
/**
* Creates the button that provides the option to pin a drawer open at
* start-up.
*
* @param panel
* The parent Composite
* @return The button for the new option
*/
protected Button createOpenDrawerInitiallyOption(Composite panel) {
Button b = new Button(panel, SWT.CHECK);
b.setFont(panel.getFont());
b.setText(PaletteMessages.EXPAND_DRAWER_AT_STARTUP_LABEL);
b.setSelection(getDrawer().isInitiallyOpen());
if (getPermission() >= PaletteEntry.PERMISSION_LIMITED_MODIFICATION) {
b.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
handleOpenSelected(((Button) e.getSource()).getSelection());
}
});
} else {
b.setEnabled(false);
}
return b;
}
/**
* Creates the button that provides the option to have a drawer open at
* start-up.
*
* @param panel
* The parent Composite
* @return The button for the new option
*/
protected Button createPinDrawerInitiallyOption(Composite panel) {
Button pinOption = new Button(panel, SWT.CHECK);
pinOption.setFont(panel.getFont());
pinOption.setText(PaletteMessages.DRAWER_PIN_AT_STARTUP);
GridData data = new GridData();
data.horizontalIndent = 15;
pinOption.setLayoutData(data);
pinOption.setEnabled(openDrawerOption.getSelection()
&& openDrawerOption.isEnabled());
pinOption.setSelection(getDrawer().isInitiallyPinned());
if (getPermission() >= PaletteEntry.PERMISSION_LIMITED_MODIFICATION) {
pinOption.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
handlePinSelected(((Button) e.getSource()).getSelection());
}
});
}
return pinOption;
}
private Composite getComposite() {
return (Composite) getControl();
}
/**
* Convenience method that provides access to the PaletteDrawer.
*
* @return the entry as a PaletteDrawer
*/
protected PaletteDrawer getDrawer() {
return (PaletteDrawer) getEntry();
}
/**
* Returns the checkbox button which controls whether the drawer is
* initially open.
*
* @return the checkbox button which controls the initially open setting.
*/
protected Button getOpenDrawerInitiallyButton() {
return openDrawerOption;
}
/**
* Returns the checkbox button which controls whether the drawer is
* initially pinned.
*
* @return the checkbox button which controls the initially pinned setting.
*/
protected Button getPinDrawerInitiallyButton() {
return pinDrawerOption;
}
/**
* This method is invoked when the selection state of the option to open
* drawer at start-up is toggled.
* <p>
* It sets the initial state of the drawer accordingly.
*
* @param selection
* <code>true</code> if that option is now selected
*/
protected void handleOpenSelected(boolean selection) {
int status = selection ? PaletteDrawer.INITIAL_STATE_OPEN
: PaletteDrawer.INITIAL_STATE_CLOSED;
getDrawer().setInitialState(status);
pinDrawerOption.setEnabled(selection);
if (!selection) {
pinDrawerOption.setSelection(false);
}
}
/**
* This method is invoked when the selection state of the option to pin a
* drawer open at start-up is toggled.
* <p>
* It sets the initial state of the drawer accordingly.
*
* @param selection
* <code>true</code> if that option is now selected
*/
protected void handlePinSelected(boolean selection) {
int status = selection ? PaletteDrawer.INITIAL_STATE_PINNED_OPEN
: PaletteDrawer.INITIAL_STATE_OPEN;
getDrawer().setInitialState(status);
}
}