X-Git-Url: http://secure.phpeclipse.com diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/preferences/EditTemplateDialog.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/preferences/EditTemplateDialog.java deleted file mode 100644 index d8e8299..0000000 --- a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/preferences/EditTemplateDialog.java +++ /dev/null @@ -1,637 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2004 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package net.sourceforge.phpdt.internal.ui.preferences; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Map; - -import net.sourceforge.phpdt.internal.ui.IJavaHelpContextIds; -import net.sourceforge.phpdt.internal.ui.dialogs.StatusDialog; -import net.sourceforge.phpdt.internal.ui.dialogs.StatusInfo; -import net.sourceforge.phpdt.internal.ui.text.IPHPPartitions; -import net.sourceforge.phpdt.internal.ui.text.template.preferences.TemplateVariableProcessor; -import net.sourceforge.phpdt.internal.ui.util.SWTUtil; -import net.sourceforge.phpdt.ui.IContextMenuConstants; -import net.sourceforge.phpdt.ui.PreferenceConstants; -import net.sourceforge.phpdt.ui.text.JavaTextTools; -import net.sourceforge.phpeclipse.PHPeclipsePlugin; -import net.sourceforge.phpeclipse.phpeditor.JavaSourceViewer; - -import org.eclipse.jface.action.Action; -import org.eclipse.jface.action.GroupMarker; -import org.eclipse.jface.action.IAction; -import org.eclipse.jface.action.IMenuListener; -import org.eclipse.jface.action.IMenuManager; -import org.eclipse.jface.action.MenuManager; -import org.eclipse.jface.action.Separator; -import org.eclipse.jface.preference.IPreferenceStore; -import org.eclipse.jface.resource.JFaceResources; -import org.eclipse.jface.text.Document; -import org.eclipse.jface.text.IDocument; -import org.eclipse.jface.text.ITextListener; -import org.eclipse.jface.text.ITextOperationTarget; -import org.eclipse.jface.text.ITextViewer; -import org.eclipse.jface.text.TextEvent; -import org.eclipse.jface.text.source.ISourceViewer; -import org.eclipse.jface.text.source.SourceViewer; -import org.eclipse.jface.text.templates.ContextTypeRegistry; -import org.eclipse.jface.text.templates.Template; -import org.eclipse.jface.text.templates.TemplateContextType; -import org.eclipse.jface.text.templates.TemplateException; -import org.eclipse.jface.viewers.ISelectionChangedListener; -import org.eclipse.jface.viewers.SelectionChangedEvent; -import org.eclipse.swt.SWT; -import org.eclipse.swt.custom.StyledText; -import org.eclipse.swt.custom.VerifyKeyListener; -import org.eclipse.swt.events.FocusEvent; -import org.eclipse.swt.events.FocusListener; -import org.eclipse.swt.events.ModifyEvent; -import org.eclipse.swt.events.ModifyListener; -import org.eclipse.swt.events.SelectionEvent; -import org.eclipse.swt.events.SelectionListener; -import org.eclipse.swt.events.VerifyEvent; -import org.eclipse.swt.graphics.Font; -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.Label; -import org.eclipse.swt.widgets.Menu; -import org.eclipse.swt.widgets.Shell; -import org.eclipse.swt.widgets.Text; -import org.eclipse.swt.widgets.Widget; -import org.eclipse.ui.PlatformUI; -import org.eclipse.ui.texteditor.ITextEditorActionConstants; -import org.eclipse.ui.texteditor.IUpdate; - -/** - * Dialog to edit a template. - */ -public class EditTemplateDialog extends StatusDialog { - - private static class TextViewerAction extends Action implements IUpdate { - - private int fOperationCode = -1; - - private ITextOperationTarget fOperationTarget; - - /** - * Creates a new action. - * - * @param viewer - * the viewer - * @param operationCode - * the opcode - */ - public TextViewerAction(ITextViewer viewer, int operationCode) { - fOperationCode = operationCode; - fOperationTarget = viewer.getTextOperationTarget(); - update(); - } - - /** - * Updates the enabled state of the action. Fires a property change if - * the enabled state changes. - * - * @see Action#firePropertyChange(String, Object, Object) - */ - public void update() { - - boolean wasEnabled = isEnabled(); - boolean isEnabled = (fOperationTarget != null && fOperationTarget - .canDoOperation(fOperationCode)); - setEnabled(isEnabled); - - if (wasEnabled != isEnabled) { - firePropertyChange(ENABLED, wasEnabled ? Boolean.TRUE - : Boolean.FALSE, isEnabled ? Boolean.TRUE - : Boolean.FALSE); - } - } - - /** - * @see Action#run() - */ - public void run() { - if (fOperationCode != -1 && fOperationTarget != null) { - fOperationTarget.doOperation(fOperationCode); - } - } - } - - private final Template fTemplate; - - private Text fNameText; - - private Text fDescriptionText; - - private Combo fContextCombo; - - private SourceViewer fPatternEditor; - - private Button fInsertVariableButton; - - private boolean fIsNameModifiable; - - private StatusInfo fValidationStatus; - - private boolean fSuppressError = true; // #4354 - - private Map fGlobalActions = new HashMap(10); - - private List fSelectionActions = new ArrayList(3); - - private String[][] fContextTypes; - - private ContextTypeRegistry fContextTypeRegistry; - - private final TemplateVariableProcessor fTemplateProcessor = new TemplateVariableProcessor(); - - /** - * Creates a new dialog. - * - * @param parent - * the shell parent of the dialog - * @param template - * the template to edit - * @param edit - * whether this is a new template or an existing being edited - * @param isNameModifiable - * whether the name of the template may be modified - * @param registry - * the context type registry to use - */ - public EditTemplateDialog(Shell parent, Template template, boolean edit, - boolean isNameModifiable, ContextTypeRegistry registry) { - super(parent); - - setShellStyle(getShellStyle() | SWT.MAX | SWT.RESIZE); - - String title = edit ? PreferencesMessages - .getString("EditTemplateDialog.title.edit") //$NON-NLS-1$ - : PreferencesMessages.getString("EditTemplateDialog.title.new"); //$NON-NLS-1$ - setTitle(title); - - fTemplate = template; - fIsNameModifiable = isNameModifiable; - - // XXX workaround for bug 63313 - disabling prefix until fixed. - // String delim= new Document().getLegalLineDelimiters()[0]; - - List contexts = new ArrayList(); - for (Iterator it = registry.contextTypes(); it.hasNext();) { - TemplateContextType type = (TemplateContextType) it.next(); - // if (type.getId().equals("javadoc")) //$NON-NLS-1$ - // contexts.add(new String[] { type.getId(), type.getName(), "/**" + - // delim }); //$NON-NLS-1$ - // else - contexts.add(new String[] { type.getId(), type.getName(), "" }); //$NON-NLS-1$ - } - fContextTypes = (String[][]) contexts.toArray(new String[contexts - .size()][]); - - fValidationStatus = new StatusInfo(); - - fContextTypeRegistry = registry; - - TemplateContextType type = fContextTypeRegistry.getContextType(template - .getContextTypeId()); - fTemplateProcessor.setContextType(type); - } - - /* - * @see net.sourceforge.phpdt.internal.ui.dialogs.StatusDialog#create() - */ - public void create() { - super.create(); - // update initial ok button to be disabled for new templates - boolean valid = fNameText == null - || fNameText.getText().trim().length() != 0; - if (!valid) { - StatusInfo status = new StatusInfo(); - status.setError(PreferencesMessages - .getString("EditTemplateDialog.error.noname")); //$NON-NLS-1$ - updateButtonsEnableState(status); - } - } - - /* - * @see Dialog#createDialogArea(Composite) - */ - protected Control createDialogArea(Composite ancestor) { - Composite parent = new Composite(ancestor, SWT.NONE); - GridLayout layout = new GridLayout(); - layout.numColumns = 2; - parent.setLayout(layout); - parent.setLayoutData(new GridData(GridData.FILL_BOTH)); - - ModifyListener listener = new ModifyListener() { - public void modifyText(ModifyEvent e) { - doTextWidgetChanged(e.widget); - } - }; - - if (fIsNameModifiable) { - createLabel(parent, PreferencesMessages - .getString("EditTemplateDialog.name")); //$NON-NLS-1$ - - Composite composite = new Composite(parent, SWT.NONE); - composite.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); - layout = new GridLayout(); - layout.numColumns = 3; - layout.marginWidth = 0; - layout.marginHeight = 0; - composite.setLayout(layout); - - fNameText = createText(composite); - fNameText.addFocusListener(new FocusListener() { - - public void focusGained(FocusEvent e) { - } - - public void focusLost(FocusEvent e) { - if (fSuppressError) { - fSuppressError = false; - updateButtons(); - } - } - }); - - createLabel(composite, PreferencesMessages - .getString("EditTemplateDialog.context")); //$NON-NLS-1$ - fContextCombo = new Combo(composite, SWT.READ_ONLY); - - for (int i = 0; i < fContextTypes.length; i++) { - fContextCombo.add(fContextTypes[i][1]); - } - - fContextCombo.addModifyListener(listener); - } - - createLabel(parent, PreferencesMessages - .getString("EditTemplateDialog.description")); //$NON-NLS-1$ - - int descFlags = fIsNameModifiable ? SWT.BORDER : SWT.BORDER - | SWT.READ_ONLY; - fDescriptionText = new Text(parent, descFlags); - fDescriptionText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); - - fDescriptionText.addModifyListener(listener); - - Label patternLabel = createLabel(parent, PreferencesMessages - .getString("EditTemplateDialog.pattern")); //$NON-NLS-1$ - patternLabel.setLayoutData(new GridData( - GridData.VERTICAL_ALIGN_BEGINNING)); - fPatternEditor = createEditor(parent); - - Label filler = new Label(parent, SWT.NONE); - filler.setLayoutData(new GridData()); - - Composite composite = new Composite(parent, SWT.NONE); - layout = new GridLayout(); - layout.marginWidth = 0; - layout.marginHeight = 0; - composite.setLayout(layout); - composite.setLayoutData(new GridData()); - - fInsertVariableButton = new Button(composite, SWT.NONE); - fInsertVariableButton - .setLayoutData(getButtonGridData(fInsertVariableButton)); - fInsertVariableButton.setText(PreferencesMessages - .getString("EditTemplateDialog.insert.variable")); //$NON-NLS-1$ - fInsertVariableButton.addSelectionListener(new SelectionListener() { - public void widgetSelected(SelectionEvent e) { - fPatternEditor.getTextWidget().setFocus(); - fPatternEditor - .doOperation(ISourceViewer.CONTENTASSIST_PROPOSALS); - } - - public void widgetDefaultSelected(SelectionEvent e) { - } - }); - - fDescriptionText.setText(fTemplate.getDescription()); - if (fIsNameModifiable) { - fNameText.setText(fTemplate.getName()); - fNameText.addModifyListener(listener); - fContextCombo.select(getIndex(fTemplate.getContextTypeId())); - } else { - fPatternEditor.getControl().setFocus(); - } - initializeActions(); - - applyDialogFont(parent); - return composite; - } - - protected void doTextWidgetChanged(Widget w) { - if (w == fNameText) { - fSuppressError = false; - String name = fNameText.getText(); - fTemplate.setName(name); - updateButtons(); - } else if (w == fContextCombo) { - String name = fContextCombo.getText(); - String contextId = getContextId(name); - fTemplate.setContextTypeId(contextId); - fTemplateProcessor.setContextType(fContextTypeRegistry - .getContextType(contextId)); - } else if (w == fDescriptionText) { - String desc = fDescriptionText.getText(); - fTemplate.setDescription(desc); - } - } - - private String getContextId(String name) { - if (name == null) - return name; - - for (int i = 0; i < fContextTypes.length; i++) { - if (name.equals(fContextTypes[i][1])) { - return fContextTypes[i][0]; - } - } - return name; - } - - protected void doSourceChanged(IDocument document) { - String text = document.get(); - String prefix = getPrefix(); - fTemplate.setPattern(text.substring(prefix.length(), text.length())); - fValidationStatus.setOK(); - TemplateContextType contextType = fContextTypeRegistry - .getContextType(fTemplate.getContextTypeId()); - if (contextType != null) { - try { - contextType.validate(text); - } catch (TemplateException e) { - fValidationStatus.setError(e.getLocalizedMessage()); - } - } - - updateUndoAction(); - updateButtons(); - } - - private static GridData getButtonGridData(Button button) { - GridData data = new GridData(GridData.FILL_HORIZONTAL); - data.heightHint = SWTUtil.getButtonHeightHint(button); - - return data; - } - - private static Label createLabel(Composite parent, String name) { - Label label = new Label(parent, SWT.NULL); - label.setText(name); - label.setLayoutData(new GridData()); - - return label; - } - - private static Text createText(Composite parent) { - Text text = new Text(parent, SWT.BORDER); - text.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); - - return text; - } - - private SourceViewer createEditor(Composite parent) { - String prefix = getPrefix(); - IDocument document = new Document(prefix + fTemplate.getPattern()); - JavaTextTools tools = PHPeclipsePlugin.getDefault().getJavaTextTools(); - tools.setupJavaDocumentPartitioner(document, - IPHPPartitions.PHP_PARTITIONING); - IPreferenceStore store = PHPeclipsePlugin.getDefault() - .getCombinedPreferenceStore(); - SourceViewer viewer = new JavaSourceViewer(parent, null, null, false, - SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL, store); - TemplateEditorSourceViewerConfiguration configuration = new TemplateEditorSourceViewerConfiguration( - tools.getColorManager(), store, null, fTemplateProcessor); - viewer.configure(configuration); - viewer.setEditable(true); - // XXX workaround for bug 63313 - disabling prefix until fixed. - // viewer.setDocument(document, prefix.length(), document.getLength() - - // prefix.length()); - viewer.setDocument(document); - - Font font = JFaceResources - .getFont(PreferenceConstants.EDITOR_TEXT_FONT); - viewer.getTextWidget().setFont(font); - new JavaSourcePreviewerUpdater(viewer, configuration, store); - - int nLines = document.getNumberOfLines(); - if (nLines < 5) { - nLines = 5; - } else if (nLines > 12) { - nLines = 12; - } - - Control control = viewer.getControl(); - GridData data = new GridData(GridData.FILL_BOTH); - data.widthHint = convertWidthInCharsToPixels(80); - data.heightHint = convertHeightInCharsToPixels(nLines); - control.setLayoutData(data); - - viewer.addTextListener(new ITextListener() { - public void textChanged(TextEvent event) { - if (event.getDocumentEvent() != null) - doSourceChanged(event.getDocumentEvent().getDocument()); - } - }); - - viewer.addSelectionChangedListener(new ISelectionChangedListener() { - public void selectionChanged(SelectionChangedEvent event) { - updateSelectionDependentActions(); - } - }); - - viewer.prependVerifyKeyListener(new VerifyKeyListener() { - public void verifyKey(VerifyEvent event) { - handleVerifyKeyPressed(event); - } - }); - - return viewer; - } - - private String getPrefix() { - String prefix; - int idx = getIndex(fTemplate.getContextTypeId()); - if (idx != -1) - prefix = fContextTypes[idx][2]; - else - prefix = ""; //$NON-NLS-1$ - - return prefix; - } - - private void handleVerifyKeyPressed(VerifyEvent event) { - if (!event.doit) - return; - - if (event.stateMask != SWT.MOD1) - return; - - switch (event.character) { - case ' ': - fPatternEditor.doOperation(ISourceViewer.CONTENTASSIST_PROPOSALS); - event.doit = false; - break; - - // CTRL-Z - case 'z' - 'a' + 1: - fPatternEditor.doOperation(ITextOperationTarget.UNDO); - event.doit = false; - break; - } - } - - private void initializeActions() { - TextViewerAction action = new TextViewerAction(fPatternEditor, - SourceViewer.UNDO); - action - .setText(PreferencesMessages - .getString("EditTemplateDialog.undo")); //$NON-NLS-1$ - fGlobalActions.put(ITextEditorActionConstants.UNDO, action); - - action = new TextViewerAction(fPatternEditor, SourceViewer.CUT); - action.setText(PreferencesMessages.getString("EditTemplateDialog.cut")); //$NON-NLS-1$ - fGlobalActions.put(ITextEditorActionConstants.CUT, action); - - action = new TextViewerAction(fPatternEditor, SourceViewer.COPY); - action - .setText(PreferencesMessages - .getString("EditTemplateDialog.copy")); //$NON-NLS-1$ - fGlobalActions.put(ITextEditorActionConstants.COPY, action); - - action = new TextViewerAction(fPatternEditor, SourceViewer.PASTE); - action.setText(PreferencesMessages - .getString("EditTemplateDialog.paste")); //$NON-NLS-1$ - fGlobalActions.put(ITextEditorActionConstants.PASTE, action); - - action = new TextViewerAction(fPatternEditor, SourceViewer.SELECT_ALL); - action.setText(PreferencesMessages - .getString("EditTemplateDialog.select.all")); //$NON-NLS-1$ - fGlobalActions.put(ITextEditorActionConstants.SELECT_ALL, action); - - action = new TextViewerAction(fPatternEditor, - SourceViewer.CONTENTASSIST_PROPOSALS); - action.setText(PreferencesMessages - .getString("EditTemplateDialog.content.assist")); //$NON-NLS-1$ - fGlobalActions.put("ContentAssistProposal", action); //$NON-NLS-1$ - - fSelectionActions.add(ITextEditorActionConstants.CUT); - fSelectionActions.add(ITextEditorActionConstants.COPY); - fSelectionActions.add(ITextEditorActionConstants.PASTE); - - // create context menu - MenuManager manager = new MenuManager(null, null); - manager.setRemoveAllWhenShown(true); - manager.addMenuListener(new IMenuListener() { - public void menuAboutToShow(IMenuManager mgr) { - fillContextMenu(mgr); - } - }); - - StyledText text = fPatternEditor.getTextWidget(); - Menu menu = manager.createContextMenu(text); - text.setMenu(menu); - } - - private void fillContextMenu(IMenuManager menu) { - menu.add(new GroupMarker(ITextEditorActionConstants.GROUP_UNDO)); - menu.appendToGroup(ITextEditorActionConstants.GROUP_UNDO, - (IAction) fGlobalActions.get(ITextEditorActionConstants.UNDO)); - - menu.add(new Separator(ITextEditorActionConstants.GROUP_EDIT)); - menu.appendToGroup(ITextEditorActionConstants.GROUP_EDIT, - (IAction) fGlobalActions.get(ITextEditorActionConstants.CUT)); - menu.appendToGroup(ITextEditorActionConstants.GROUP_EDIT, - (IAction) fGlobalActions.get(ITextEditorActionConstants.COPY)); - menu.appendToGroup(ITextEditorActionConstants.GROUP_EDIT, - (IAction) fGlobalActions.get(ITextEditorActionConstants.PASTE)); - menu.appendToGroup(ITextEditorActionConstants.GROUP_EDIT, - (IAction) fGlobalActions - .get(ITextEditorActionConstants.SELECT_ALL)); - - menu.add(new Separator(IContextMenuConstants.GROUP_GENERATE)); - menu.appendToGroup(IContextMenuConstants.GROUP_GENERATE, - (IAction) fGlobalActions.get("ContentAssistProposal")); //$NON-NLS-1$ - } - - protected void updateSelectionDependentActions() { - Iterator iterator = fSelectionActions.iterator(); - while (iterator.hasNext()) - updateAction((String) iterator.next()); - } - - protected void updateUndoAction() { - IAction action = (IAction) fGlobalActions - .get(ITextEditorActionConstants.UNDO); - if (action instanceof IUpdate) - ((IUpdate) action).update(); - } - - protected void updateAction(String actionId) { - IAction action = (IAction) fGlobalActions.get(actionId); - if (action instanceof IUpdate) - ((IUpdate) action).update(); - } - - private int getIndex(String contextid) { - - if (contextid == null) - return -1; - - for (int i = 0; i < fContextTypes.length; i++) { - if (contextid.equals(fContextTypes[i][0])) { - return i; - } - } - return -1; - } - - protected void okPressed() { - super.okPressed(); - } - - private void updateButtons() { - StatusInfo status; - - boolean valid = fNameText == null - || fNameText.getText().trim().length() != 0; - if (!valid) { - status = new StatusInfo(); - if (!fSuppressError) { - status.setError(PreferencesMessages - .getString("EditTemplateDialog.error.noname")); //$NON-NLS-1$ - } - } else { - status = fValidationStatus; - } - updateStatus(status); - } - - /* - * @see org.eclipse.jface.window.Window#configureShell(Shell) - */ - protected void configureShell(Shell newShell) { - super.configureShell(newShell); - PlatformUI.getWorkbench().getHelpSystem().setHelp(newShell, - IJavaHelpContextIds.EDIT_TEMPLATE_DIALOG); - } - -}