/***********************************************************************
* Copyright (c) 2008 Anyware Technologies 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:
* Jacques Lescot (Anyware Technologies) - initial API and implementation
**********************************************************************/
package org.eclipse.papyrus.views.documentation.view;
import org.eclipse.core.runtime.Platform;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.papyrus.views.documentation.view.actions.AddElementLinkAction;
import org.eclipse.papyrus.views.documentation.view.actions.DeleteTableColumnAction;
import org.eclipse.papyrus.views.documentation.view.actions.DeleteTableRowAction;
import org.eclipse.papyrus.views.documentation.view.actions.InsertTableColumnAction;
import org.eclipse.papyrus.views.documentation.view.actions.InsertTableRowAction;
import org.eclipse.papyrus.views.documentation.view.actions.TextColorAction;
import org.eclipse.papyrus.views.documentation.view.actions.TextHighlightAction;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.epf.richtext.IRichText;
import org.eclipse.epf.richtext.IRichTextToolBar;
import org.eclipse.epf.richtext.RichText;
import org.eclipse.epf.richtext.RichTextToolBar;
import org.eclipse.epf.richtext.actions.AddImageAction;
import org.eclipse.epf.richtext.actions.AddLinkAction;
import org.eclipse.epf.richtext.actions.AddOrderedListAction;
import org.eclipse.epf.richtext.actions.AddTableAction;
import org.eclipse.epf.richtext.actions.AddUnorderedListAction;
import org.eclipse.epf.richtext.actions.BoldAction;
import org.eclipse.epf.richtext.actions.ClearContentAction;
import org.eclipse.epf.richtext.actions.CopyAction;
import org.eclipse.epf.richtext.actions.CutAction;
import org.eclipse.epf.richtext.actions.FindReplaceAction;
import org.eclipse.epf.richtext.actions.FontNameAction;
import org.eclipse.epf.richtext.actions.FontSizeAction;
import org.eclipse.epf.richtext.actions.FontStyleAction;
import org.eclipse.epf.richtext.actions.IndentAction;
import org.eclipse.epf.richtext.actions.ItalicAction;
import org.eclipse.epf.richtext.actions.JustifyCenterAction;
import org.eclipse.epf.richtext.actions.JustifyLeftAction;
import org.eclipse.epf.richtext.actions.JustifyRightAction;
import org.eclipse.epf.richtext.actions.OutdentAction;
import org.eclipse.epf.richtext.actions.PasteAction;
import org.eclipse.epf.richtext.actions.SubscriptAction;
import org.eclipse.epf.richtext.actions.SuperscriptAction;
import org.eclipse.epf.richtext.actions.TidyActionGroup;
import org.eclipse.epf.richtext.actions.UnderlineAction;
/**
* A dialog using a RichText and its Toolbar to change a documentation
*
* @author <a href="mailto:jacques.lescot@anyware-tech.com">Jacques Lescot</a>
*/
public class RichTextEditorDialog extends Dialog
{
/** The minimum width of the dialog */
private static final int MINIMUM_DIALOG_WIDTH = 600;
/** The minimum height of the dialog */
private static final int MINIMUM_DIALOG_HEIGHT = 300;
private RichText commentsText;
private String initialValue;
private String newValue;
/**
* Constructor
*
* @param parentShell the parent Shell
* @param initialValue initial documentation value
*/
public RichTextEditorDialog(Shell parentShell, String initialValue)
{
super(parentShell);
setBlockOnOpen(true);
setShellStyle(getShellStyle() | SWT.RESIZE);
this.initialValue = initialValue;
}
/**
* @see org.eclipse.jface.window.Window#configureShell(org.eclipse.swt.widgets.Shell)
*/
protected void configureShell(Shell newShell)
{
newShell.setText(Messages.RichTextEditorDialog_useRichText);
newShell.setMinimumSize(MINIMUM_DIALOG_WIDTH, MINIMUM_DIALOG_HEIGHT);
super.configureShell(newShell);
}
/**
* @see org.eclipse.jface.dialogs.Dialog#createDialogArea(org.eclipse.swt.widgets.Composite)
*/
@Override
protected Control createDialogArea(Composite parent)
{
Composite dialogComposite = (Composite) super.createDialogArea(parent);
RichTextToolBar toolBar = new RichTextToolBar(dialogComposite, SWT.NONE, commentsText);
Composite container = new Composite(dialogComposite, SWT.BORDER);
GridLayout richTextLayout = new GridLayout();
richTextLayout.marginWidth = 0;
richTextLayout.marginHeight = 0;
container.setLayout(richTextLayout);
container.setLayoutData(new GridData(GridData.FILL_BOTH));
commentsText = new RichText(container, SWT.NONE);
commentsText.setLayoutData(new GridData(GridData.FILL_BOTH));
commentsText.setText(initialValue);
commentsText.setFocus();
fillToolBar(toolBar, commentsText);
return dialogComposite;
}
/**
* Populate actions in the Toolbar to link with the RichText
*
* @param toolBar The IRichTextToolBar
* @param richText The IRichText
*/
private void fillToolBar(IRichTextToolBar toolBar, IRichText richText)
{
toolBar.addAction(new FontStyleAction(richText));
toolBar.addAction(new FontNameAction(richText));
toolBar.addAction(new FontSizeAction(richText));
toolBar.addSeparator();
toolBar.addAction(new CutAction(richText));
toolBar.addAction(new CopyAction(richText));
toolBar.addAction(new PasteAction(richText));
toolBar.addSeparator();
toolBar.addAction(new ClearContentAction(richText));
toolBar.addSeparator();
toolBar.addAction(new BoldAction(richText));
toolBar.addAction(new ItalicAction(richText));
toolBar.addAction(new UnderlineAction(richText));
toolBar.addSeparator();
toolBar.addAction(new TextColorAction(richText));
toolBar.addAction(new TextHighlightAction(richText));
toolBar.addSeparator();
toolBar.addAction(new SubscriptAction(richText));
toolBar.addAction(new SuperscriptAction(richText));
toolBar.addSeparator();
toolBar.addAction(new TidyActionGroup(richText));
toolBar.addSeparator();
toolBar.addAction(new AddOrderedListAction(richText));
toolBar.addAction(new AddUnorderedListAction(richText));
toolBar.addSeparator();
toolBar.addAction(new OutdentAction(richText));
toolBar.addAction(new IndentAction(richText));
toolBar.addSeparator();
toolBar.addAction(new JustifyLeftAction(richText));
toolBar.addAction(new JustifyCenterAction(richText));
toolBar.addAction(new JustifyRightAction(richText));
toolBar.addSeparator();
toolBar.addAction(new FindReplaceAction(richText)
{
/**
* @see org.eclipse.epf.richtext.actions.FindReplaceAction#execute(org.eclipse.epf.richtext.IRichText)
*/
@Override
public void execute(IRichText rText)
{
rText.getFindReplaceAction().execute(rText);
}
});
toolBar.addSeparator();
toolBar.addAction(new AddLinkAction(richText));
toolBar.addAction(new AddElementLinkAction(richText));
toolBar.addAction(new AddImageAction(richText));
toolBar.addSeparator();
toolBar.addAction(new AddTableAction(richText));
// Only add these actions when IE is used to render the Browser
if (Platform.getOS().equals("win32")) { //$NON-NLS-1$
toolBar.addAction(new InsertTableColumnAction(richText));
toolBar.addAction(new DeleteTableColumnAction(richText));
toolBar.addAction(new InsertTableRowAction(richText));
toolBar.addAction(new DeleteTableRowAction(richText));
}
}
/**
* @see org.eclipse.jface.dialogs.Dialog#okPressed()
*/
@Override
protected void okPressed()
{
newValue = commentsText.getText();
super.okPressed();
}
/*
* (non-Javadoc)
*
* @see org.eclipse.jface.dialogs.Dialog#createButtonsForButtonBar(org.eclipse.swt.widgets.Composite)
*/
@Override
protected void createButtonsForButtonBar(Composite parent) {
// create OK and Cancel buttons by default
createButton(parent, IDialogConstants.OK_ID, IDialogConstants.OK_LABEL, false);
createButton(parent, IDialogConstants.CANCEL_ID, IDialogConstants.CANCEL_LABEL, false);
}
/**
* This method returns the text contained in the <code>RichTextCommentsComposite</code>
*
* @return the text contained in the <code>RichTextCommentsComposite</code>
*/
public String getDocumentationValue()
{
return newValue;
}
}