// ============================================================================ // // Copyright (C) 2006-2016 Talend Inc. - www.talend.com // // This source code is available under agreement available at // %InstallDIR%\features\org.talend.rcp.branding.%PRODUCTNAME%\%PRODUCTNAME%license.txt // // You should have received a copy of the agreement // along with this program; if not, write to Talend SA // 9 rue Pages 92150 Suresnes, France // // ============================================================================ package com.amalto.workbench.widgets.composites; import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.jface.resource.StringConverter; import org.eclipse.jface.text.source.IOverviewRuler; import org.eclipse.jface.text.source.IVerticalRuler; import org.eclipse.jface.viewers.DoubleClickEvent; import org.eclipse.jface.viewers.IDoubleClickListener; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.StyledText; import org.eclipse.swt.events.ModifyEvent; import org.eclipse.swt.events.ModifyListener; import org.eclipse.swt.graphics.RGB; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Group; import com.amalto.workbench.MDMWorbenchPlugin; import com.amalto.workbench.detailtabs.sections.XpathSection; import com.amalto.workbench.i18n.Messages; /** * created by liusongbo on Aug 31, 2015 */ public class ElementFKInfoComposite extends XpathComposite { private int caretPosition = 0; private String formatFKInfo = ""; //$NON-NLS-1$ private ModifyListener modifyListener; private ElementFKInfoFormatViewer formatEditor; private StyledText styledText; public ElementFKInfoComposite(Composite parent) { super(parent); } public ElementFKInfoComposite(Composite parent, int style, XpathSection section) { super(parent, style, section); createFormatFkUIArea(this); addDoubleClickListener(); } private void addDoubleClickListener() { tvInfos.addDoubleClickListener(new IDoubleClickListener() { public void doubleClick(DoubleClickEvent event) { IStructuredSelection selection = (IStructuredSelection) tvInfos.getSelection(); String label = selection.getFirstElement().toString(); formatEditor.getTextWidget().insert(label); } }); } protected void createFormatFkUIArea(Composite parent) { initializeDefaultPreferences(); Group formatGroup = new Group(parent, SWT.NONE); GridData glayoutData = new GridData(SWT.FILL, SWT.FILL, true, true, 3, 1); formatGroup.setLayoutData(glayoutData); GridLayout layout = new GridLayout(); layout.marginLeft = 0; layout.marginRight = 0; layout.marginTop = 0; layout.marginBottom = 0; formatGroup.setLayout(layout); formatGroup.setText(Messages.FormatFKInfoComp_format); IVerticalRuler verticalRuler = ElementFKInfoFormatHelper.createVerticalRuler(); IOverviewRuler overviewRuler = ElementFKInfoFormatHelper.createOverviewRuler(); formatEditor = new ElementFKInfoFormatViewer(formatGroup, verticalRuler, overviewRuler, true, SWT.V_SCROLL | SWT.H_SCROLL); formatEditor.configure(new ElementFKInfoConfiguration()); formatEditor.initilize(); GridData layoutData = new GridData(GridData.FILL_BOTH); layoutData.heightHint = 150; formatEditor.getControl().setLayoutData(layoutData); formatEditor.setFkinfos(infos); formatEditor.setFormatFKInfo(formatFKInfo); styledText = formatEditor.getTextWidget(); modifyListener = new ModifyListener() { public void modifyText(ModifyEvent e) { formatFKInfo = styledText.getText(); caretPosition = styledText.getCaretOffset(); if (section != null) { section.autoCommit(); } } }; } private void addModifyListener() { styledText.addModifyListener(modifyListener); } private void removeModifyListener() { styledText.removeModifyListener(modifyListener); } public static final String PREF_COLOR_DEFAULT = "colorDefault"; //$NON-NLS-1$ public static final String PREF_COLOR_STRING = "colorString"; //$NON-NLS-1$ public static final String PREF_COLOR_KEYWORD = "colorKeyword"; //$NON-NLS-1$ public void initializeDefaultPreferences() { IPreferenceStore store = MDMWorbenchPlugin.getDefault().getPreferenceStore(); store.setDefault(PREF_COLOR_DEFAULT, StringConverter.asString(new RGB(0, 128, 0))); store.setDefault(PREF_COLOR_STRING, StringConverter.asString(new RGB(0, 0, 255))); store.setDefault(PREF_COLOR_KEYWORD, StringConverter.asString(new RGB(0, 0, 128))); } @Override public void setContentChanged(boolean changed) { super.setContentChanged(changed); fireXPathsChanges(); } @Override public void setInfos(String[] infos) { super.setInfos(infos); fireXPathsChanges(); } private void fireXPathsChanges() { formatEditor.setFkinfos(infos); } public String getFormatFKInfo() { formatFKInfo = formatEditor.getFormatFKInfo(); return formatFKInfo; } public void setFormatFKInfo(String formatedFkInfo) { this.formatFKInfo = formatedFkInfo; removeModifyListener(); styledText.setText(formatedFkInfo); styledText.setSelection(caretPosition); addModifyListener(); } }