/*******************************************************************************
* Copyright (c) 2015 Bruno Medeiros and other Contributors.
* 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:
* Bruno Medeiros - initial API and implementation
*******************************************************************************/
package melnorme.lang.ide.ui.templates;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.text.Document;
import org.eclipse.jface.text.IDocument;
import org.eclipse.jface.text.contentassist.IContentAssistProcessor;
import org.eclipse.jface.text.source.SourceViewer;
import org.eclipse.jface.text.source.SourceViewerConfiguration;
import org.eclipse.jface.text.templates.ContextTypeRegistry;
import org.eclipse.jface.text.templates.Template;
import org.eclipse.jface.text.templates.persistence.TemplatePersistenceData;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.window.Window;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.IWorkbenchPreferencePage;
import org.eclipse.ui.texteditor.templates.TemplatePreferencePage;
import melnorme.lang.ide.core_text.LangDocumentPartitionerSetup;
import melnorme.lang.ide.ui.EditorSettings_Actual;
import melnorme.lang.ide.ui.LangUIMessages;
import melnorme.lang.ide.ui.LangUIPlugin;
import melnorme.lang.ide.ui.editor.LangSourceViewer;
import melnorme.lang.ide.ui.text.SimpleSourceViewerConfiguration;
import melnorme.util.swt.jface.text.ColorManager2;
public abstract class LangTemplatePreferencePage extends TemplatePreferencePage implements IWorkbenchPreferencePage {
public LangTemplatePreferencePage() {
super();
setPreferenceStore(LangUIPlugin.getInstance().getPreferenceStore());
setTemplateStore(LangUIPlugin.getTemplateRegistry().getTemplateStore());
setContextTypeRegistry(LangUIPlugin.getTemplateRegistry().getContextTypeRegistry());
setDescription(LangUIMessages.TemplatePreferencePage_message);
}
@Override
public void setTitle(String title) {
super.setTitle(LangUIMessages.TemplatePreferencePage_title);
}
public static ColorManager2 getColorManager() {
return LangUIPlugin.getInstance().getColorManager();
}
@Override
public boolean performOk() {
boolean ok= super.performOk();
LangUIPlugin.flushInstanceScope();
return ok;
}
@Override
protected boolean isShowFormatterSetting() {
return false;
}
@Override
protected String getFormatterPreferenceKey() {
return super.getFormatterPreferenceKey();
}
@Override
protected SourceViewer createViewer(Composite parent) {
SourceViewer viewer = new LangSourceViewer(parent, null, null, false,
SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL);
viewer.configure(createPreviewerSourceViewerConfiguration());
viewer.setEditable(false);
viewer.setDocument(createViewerDocument());
return viewer;
}
protected IDocument createViewerDocument() {
IDocument document = new Document();
LangDocumentPartitionerSetup.getInstance().setup(document);
return document;
}
protected SourceViewerConfiguration createPreviewerSourceViewerConfiguration() {
return new SimpleSourceViewerConfiguration(getPreferenceStore());
}
// Note: Mostly copied from parent, in the future we might need to modify this code.
@Override
protected void updateViewerInput() {
IStructuredSelection selection= (IStructuredSelection) getTableViewer().getSelection();
if(selection.size() == 1 && selection.getFirstElement() instanceof TemplatePersistenceData) {
TemplatePersistenceData data= (TemplatePersistenceData) selection.getFirstElement();
Template template= data.getTemplate();
getViewer().getDocument().set(template.getPattern());
} else {
getViewer().getDocument().set("");
}
}
/* ----------------- EditTemplateDialog ----------------- */
@Override
protected Template editTemplate(Template template, boolean edit, boolean isNameModifiable) {
EditTemplateDialog dialog = new LangEditTemplateDialog(getShell(), template, edit, isNameModifiable,
getContextTypeRegistry());
if(dialog.open() == Window.OK) {
return dialog.getTemplate();
}
return null;
}
public static class LangEditTemplateDialog extends EditTemplateDialog {
public LangEditTemplateDialog(Shell parent, Template template, boolean edit, boolean isNameModifiable,
ContextTypeRegistry registry) {
super(parent, template, edit, isNameModifiable, registry);
}
@Override
protected SourceViewer createViewer(Composite parent) {
LangSourceViewer viewer = new LangSourceViewer(parent, null, null, false,
SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL);
final IContentAssistProcessor templateProcessor = getTemplateProcessor();
IDocument document = new Document();
LangDocumentPartitionerSetup.getInstance().setup(document);
IPreferenceStore store = LangUIPlugin.getDefault().getCombinedPreferenceStore();
SourceViewerConfiguration configuration = EditorSettings_Actual
.createTemplateEditorSourceViewerConfiguration(store, templateProcessor);
viewer.configure(configuration);
viewer.setEditable(true);
viewer.setDocument(document);
return viewer;
}
}
}