/******************************************************************************* * Copyright (c) 2000, 2008 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.ui.forms.examples.internal.rcp; import java.text.MessageFormat; import java.util.ArrayList; import org.eclipse.jface.action.Action; import org.eclipse.jface.action.ControlContribution; import org.eclipse.jface.dialogs.IMessageProvider; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.swt.SWT; import org.eclipse.swt.dnd.DND; import org.eclipse.swt.dnd.DragSourceEvent; import org.eclipse.swt.dnd.DragSourceListener; import org.eclipse.swt.dnd.DropTargetAdapter; import org.eclipse.swt.dnd.TextTransfer; import org.eclipse.swt.dnd.Transfer; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.graphics.Color; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Combo; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Text; import org.eclipse.ui.ISharedImages; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.forms.FormColors; import org.eclipse.ui.forms.HyperlinkSettings; import org.eclipse.ui.forms.IFormColors; import org.eclipse.ui.forms.IManagedForm; import org.eclipse.ui.forms.IMessageManager; import org.eclipse.ui.forms.editor.FormEditor; import org.eclipse.ui.forms.editor.FormPage; import org.eclipse.ui.forms.events.HyperlinkAdapter; import org.eclipse.ui.forms.events.HyperlinkEvent; import org.eclipse.ui.forms.events.IHyperlinkListener; import org.eclipse.ui.forms.examples.internal.ExamplesPlugin; import org.eclipse.ui.forms.widgets.ExpandableComposite; import org.eclipse.ui.forms.widgets.FormToolkit; import org.eclipse.ui.forms.widgets.ScrolledForm; import org.eclipse.ui.forms.widgets.Section; /** * @author dejan * * To change the template for this generated type comment go to Window - * Preferences - Java - Code Generation - Code and Comments */ public class NewStylePage extends FormPage { private static final String SHORT_TITLE = "Short Title"; private static final String LONG_TITLE = "This title is somewhat longer"; private static final String SHORT_MESSAGE = "A short {0} message"; private static final String LONG_MESSAGE = "This {0} message is longer and will also compete with other header regions"; private static final String[] MESSAGE_NAMES = { "text", "info", "warning", "error" }; /** * @param id * @param title */ public NewStylePage(FormEditor editor) { super(editor, "newStyle", "New Style"); } protected void createFormContent(IManagedForm managedForm) { final ScrolledForm form = managedForm.getForm(); final FormToolkit toolkit = managedForm.getToolkit(); toolkit.getHyperlinkGroup().setHyperlinkUnderlineMode( HyperlinkSettings.UNDERLINE_HOVER); GridLayout layout = new GridLayout(); layout.numColumns = 2; layout.marginHeight = 10; layout.marginWidth = 6; layout.horizontalSpacing = 20; form.getBody().setLayout(layout); Section section = toolkit.createSection(form.getBody(), ExpandableComposite.TITLE_BAR | ExpandableComposite.TWISTIE | ExpandableComposite.EXPANDED); Composite client = toolkit.createComposite(section); section.setClient(client); section.setText("Header features"); section .setDescription("Use the switches below to control basic heading parameters."); GridData gd = new GridData(GridData.FILL_BOTH); section.setLayoutData(gd); layout = new GridLayout(); layout.marginWidth = 0; layout.marginHeight = 0; client.setLayout(layout); final Button tbutton = toolkit.createButton(client, "Add title", SWT.CHECK); final Button sbutton = toolkit.createButton(client, "Short title", SWT.RADIO); sbutton.setSelection(true); sbutton.setEnabled(false); gd = new GridData(); gd.horizontalIndent = 10; sbutton.setLayoutData(gd); final Button lbutton = toolkit.createButton(client, "Long title", SWT.RADIO); gd = new GridData(); gd.horizontalIndent = 10; lbutton.setLayoutData(gd); lbutton.setEnabled(false); tbutton.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { updateTitle(form, tbutton.getSelection(), sbutton .getSelection()); sbutton.setEnabled(tbutton.getSelection()); lbutton.setEnabled(tbutton.getSelection()); } }); sbutton.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { updateTitle(form, tbutton.getSelection(), sbutton .getSelection()); } }); lbutton.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { updateTitle(form, tbutton.getSelection(), sbutton .getSelection()); } }); final Button ibutton = toolkit.createButton(client, "Add image", SWT.CHECK); ibutton.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { updateImage(form, ibutton.getSelection()); } }); final Button tbbutton = toolkit.createButton(client, "Add tool bar", SWT.CHECK); final Button albutton = toolkit.createButton(client, "Set tool bar allignment to SWT.BOTTOM", SWT.CHECK); albutton.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { form.getForm().setToolBarVerticalAlignment(albutton.getSelection()?SWT.BOTTOM:SWT.TOP); form.reflow(true); } }); gd = new GridData(); gd.horizontalIndent = 10; albutton.setLayoutData(gd); albutton.setEnabled(false); tbbutton.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { addToolBar(toolkit, form, tbbutton.getSelection()); albutton.setEnabled(tbbutton.getSelection()); } }); final Button gbutton = toolkit.createButton(client, "Paint background gradient", SWT.CHECK); gbutton.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { addHeadingGradient(toolkit, form, gbutton.getSelection()); } }); final Button clbutton = toolkit.createButton(client, "Add head client", SWT.CHECK); clbutton.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { addHeadClient(toolkit, form, clbutton.getSelection()); } }); final Button mbutton = toolkit.createButton(client, "Add drop-down menu", SWT.CHECK); mbutton.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { addMenu(toolkit, form, mbutton.getSelection()); } }); final Button dbutton = toolkit.createButton(client, "Add drag support", SWT.CHECK); dbutton.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { if (dbutton.getSelection()) { addDragSupport(form); dbutton.setEnabled(false); } } }); section = toolkit.createSection(form.getBody(), ExpandableComposite.TITLE_BAR | ExpandableComposite.TWISTIE | ExpandableComposite.EXPANDED); Composite client2 = toolkit.createComposite(section); section.setClient(client2); section.setText("Messages and active state"); section .setDescription("Use the buttons below to control messages and active state."); gd = new GridData(GridData.FILL_BOTH); section.setLayoutData(gd); layout = new GridLayout(); layout.marginWidth = 0; layout.marginHeight = 0; layout.numColumns = 4; client2.setLayout(layout); final Button shortMessage = toolkit.createButton(client2, "Short message", SWT.RADIO); shortMessage.setSelection(true); gd = new GridData(); gd.horizontalSpan = 4; shortMessage.setLayoutData(gd); final Button longMessage = toolkit.createButton(client2, "Long message", SWT.RADIO); gd = new GridData(); gd.horizontalSpan = 4; longMessage.setLayoutData(gd); final IHyperlinkListener listener = new HyperlinkAdapter() { public void linkActivated(HyperlinkEvent e) { String title = e.getLabel(); String details = (String)e.getHref(); if (details==null) { details = title; title = null; } switch (form.getForm().getMessageType()) { case IMessageProvider.NONE: case IMessageProvider.INFORMATION: if (title==null) title = "Forms Information"; MessageDialog.openInformation(form.getShell(), title, details); break; case IMessageProvider.WARNING: if (title==null) title = "Forms Warning"; MessageDialog.openWarning(form.getShell(), title, details); break; case IMessageProvider.ERROR: if (title==null) title = "Forms Error"; MessageDialog.openError(form.getShell(), title, details); break; } } }; final Button hyperMessage = toolkit.createButton(client2, "Message as hyperlink", SWT.CHECK); gd = new GridData(); gd.horizontalSpan = 4; hyperMessage.setLayoutData(gd); hyperMessage.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { if (hyperMessage.getSelection()) form.getForm().addMessageHyperlinkListener(listener); else form.getForm().removeMessageHyperlinkListener(listener); } }); Control[] children = client.getChildren(); ArrayList buttons = new ArrayList(); for (int i = 0; i < children.length; i++) { if (children[i] instanceof Button) { Button button = (Button) children[i]; if ((button.getStyle() & SWT.CHECK) != 0 && !button.equals(dbutton)) { buttons.add(button); } } } final Button[] checkboxes = (Button[]) buttons.toArray(new Button[buttons.size()]); final Button manageMessage = toolkit.createButton(client2, "Use message manager", SWT.CHECK); gd = new GridData(); gd.horizontalSpan = 4; manageMessage.setLayoutData(gd); SelectionAdapter mmListener = new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { if (manageMessage.getSelection() && e.widget instanceof Button) addRemoveMessage((Button) e.widget, form.getMessageManager()); } }; for (int i = 0; i < checkboxes.length; i++) checkboxes[i].addSelectionListener(mmListener); final Button autoUpdate = toolkit.createButton(client2, "Auto update message manager", SWT.CHECK); gd = new GridData(); gd.horizontalSpan = 4; autoUpdate.setLayoutData(gd); autoUpdate.setSelection(true); autoUpdate.setEnabled(false); autoUpdate.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { form.getMessageManager().setAutoUpdate(autoUpdate.getSelection()); } }); shortMessage.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { form.setMessage(getErrorMessage(form.getMessageType(), longMessage.getSelection()), form.getMessageType()); } }); longMessage.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { form.setMessage(getErrorMessage(form.getMessageType(), longMessage.getSelection()), form.getMessageType()); } }); final Button error = toolkit.createButton(client2, "Error", SWT.PUSH); error.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { form.setMessage(getErrorMessage(IMessageProvider.ERROR, longMessage.getSelection()), IMessageProvider.ERROR); } }); final Button warning = toolkit.createButton(client2, "Warning", SWT.PUSH); warning.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { form.setMessage(getErrorMessage(IMessageProvider.WARNING, longMessage.getSelection()), IMessageProvider.WARNING); } }); final Button info = toolkit.createButton(client2, "Info", SWT.PUSH); info.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { form.setMessage(getErrorMessage(IMessageProvider.INFORMATION, longMessage.getSelection()), IMessageProvider.INFORMATION); } }); final Button cancel = toolkit.createButton(client2, "Cancel", SWT.PUSH); cancel.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { form.setMessage(null, 0); } }); manageMessage.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { boolean selection = manageMessage.getSelection(); if (!selection) autoUpdate.setSelection(true); autoUpdate.setEnabled(selection); IMessageManager mm = form.getMessageManager(); mm.setAutoUpdate(false); if (selection) { for (int i = 0; i < checkboxes.length; i++) { addRemoveMessage(checkboxes[i], mm); } } else { mm.removeAllMessages(); } mm.setAutoUpdate(true); error.setEnabled(!selection); warning.setEnabled(!selection); info.setEnabled(!selection); cancel.setEnabled(!selection); if (selection) { hyperMessage.setSelection(false); form.getForm().removeMessageHyperlinkListener(listener); } hyperMessage.setEnabled(!selection); } }); final Button busy = toolkit.createButton(client2, "Start Progress", SWT.PUSH); busy.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { // IWorkbenchSiteProgressService service = // (IWorkbenchSiteProgressService)getSite().getAdapter(IWorkbenchSiteProgressService.class); if (form.getForm().isBusy()) { form.getForm().setBusy(false); busy.setText("Start Progress"); } else { form.getForm().setBusy(true); busy.setText("Stop Progress"); } } }); gd = new GridData(); gd.horizontalSpan = 2; busy.setLayoutData(gd); } private void addHeadingGradient(FormToolkit toolkit, ScrolledForm form, boolean add) { FormColors colors = toolkit.getColors(); Color top = colors.getColor(IFormColors.H_GRADIENT_END); Color bot = colors.getColor(IFormColors.H_GRADIENT_START); if (add) form.getForm().setTextBackground(new Color[] { top, bot }, new int[] { 100 }, true); else { form.getForm().setTextBackground(null, null, false); form.getForm().setBackground(colors.getBackground()); } form.getForm().setHeadColor(IFormColors.H_BOTTOM_KEYLINE1, add ? colors.getColor(IFormColors.H_BOTTOM_KEYLINE1) : null); form.getForm().setHeadColor(IFormColors.H_BOTTOM_KEYLINE2, add ? colors.getColor(IFormColors.H_BOTTOM_KEYLINE2) : null); form.getForm().setHeadColor(IFormColors.H_HOVER_LIGHT, add ? colors.getColor(IFormColors.H_HOVER_LIGHT) : null); form.getForm().setHeadColor(IFormColors.H_HOVER_FULL, add ? colors.getColor(IFormColors.H_HOVER_FULL) : null); form.getForm().setHeadColor(IFormColors.TB_TOGGLE, add ? colors.getColor(IFormColors.TB_TOGGLE) : null); form.getForm().setHeadColor(IFormColors.TB_TOGGLE_HOVER, add ? colors.getColor(IFormColors.TB_TOGGLE_HOVER) : null); form.getForm().setSeparatorVisible(add); form.reflow(true); form.redraw(); } private String getErrorMessage(int type, boolean longMessage) { String name = MESSAGE_NAMES[type]; if (longMessage) return MessageFormat.format(LONG_MESSAGE, new Object[] { name }); else return MessageFormat.format(SHORT_MESSAGE, new Object[] { name }); } private void updateTitle(ScrolledForm form, boolean addTitle, boolean shortTitle) { if (addTitle) { String text = shortTitle ? SHORT_TITLE : LONG_TITLE; form.setText(text); } else { form.setText(null); } } private void updateImage(ScrolledForm form, boolean addImage) { if (addImage) form.setImage(PlatformUI.getWorkbench().getSharedImages().getImage( ISharedImages.IMG_DEF_VIEW)); else form.setImage(null); } private void addRemoveMessage(Button button, IMessageManager mm) { if (button.getSelection()) mm.addMessage(button, button.getText() + " is checked.", null, IMessageProvider.INFORMATION, button); else mm.removeMessage(button, button); } private void addToolBar(FormToolkit toolkit, ScrolledForm form, boolean add) { if (add) { Action haction = new Action("hor", Action.AS_RADIO_BUTTON) { public void run() { } }; haction.setChecked(true); haction.setToolTipText("Horizontal orientation"); haction.setImageDescriptor(ExamplesPlugin.getDefault() .getImageRegistry().getDescriptor( ExamplesPlugin.IMG_HORIZONTAL)); Action vaction = new Action("ver", Action.AS_RADIO_BUTTON) { public void run() { } }; vaction.setChecked(false); vaction.setToolTipText("Vertical orientation"); vaction.setImageDescriptor(ExamplesPlugin.getDefault() .getImageRegistry().getDescriptor( ExamplesPlugin.IMG_VERTICAL)); ControlContribution save = new ControlContribution("save") { protected Control createControl(Composite parent) { Button saveButton = new Button(parent, SWT.PUSH); saveButton.setText("Save"); return saveButton; } }; form.getToolBarManager().add(haction); form.getToolBarManager().add(vaction); form.getToolBarManager().add(save); form.getToolBarManager().update(true); } else { form.getToolBarManager().removeAll(); } form.reflow(true); } private void addMenu(FormToolkit toolkit, ScrolledForm form, boolean add) { if (add) { Action haction = new Action("hor", Action.AS_RADIO_BUTTON) { public void run() { } }; haction.setChecked(true); haction.setText("Horizontal"); haction.setToolTipText("Horizontal orientation"); haction.setImageDescriptor(ExamplesPlugin.getDefault() .getImageRegistry().getDescriptor( ExamplesPlugin.IMG_HORIZONTAL)); Action vaction = new Action("ver", Action.AS_RADIO_BUTTON) { public void run() { } }; vaction.setChecked(false); vaction.setText("Vertical"); vaction.setToolTipText("Vertical orientation"); vaction.setImageDescriptor(ExamplesPlugin.getDefault() .getImageRegistry().getDescriptor( ExamplesPlugin.IMG_VERTICAL)); form.getForm().getMenuManager().add(haction); form.getForm().getMenuManager().add(vaction); } else { form.getForm().getMenuManager().removeAll(); } form.reflow(true); } private void addHeadClient(FormToolkit toolkit, ScrolledForm form, boolean add) { if (add) { Composite headClient = new Composite(form.getForm().getHead(), SWT.NULL); GridLayout glayout = new GridLayout(); glayout.marginWidth = glayout.marginHeight = 0; glayout.numColumns = 3; headClient.setLayout(glayout); Text t = new Text(headClient, toolkit.getBorderStyle()); t.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); new Combo(headClient, SWT.NULL); new Combo(headClient, SWT.NULL); toolkit.paintBordersFor(headClient); form.setHeadClient(headClient); } else { Control client = form.getForm().getHeadClient(); if (client != null) { client.dispose(); form.setHeadClient(null); } } } private void addDragSupport(final ScrolledForm form) { int operations = DND.DROP_MOVE | DND.DROP_COPY | DND.DROP_LINK; Transfer[] transferTypes = { TextTransfer.getInstance() }; form.getForm().addTitleDragSupport(operations, transferTypes, new DragSourceListener() { public void dragFinished(DragSourceEvent event) { } public void dragSetData(DragSourceEvent event) { event.data = form.getForm().getText(); } public void dragStart(DragSourceEvent event) { event.doit = true; } }); form.getForm().addTitleDropSupport(operations, transferTypes, new DropTargetAdapter() { }); } }