/******************************************************************************* * Copyright (c) 2014, 2015 Cisco Systems, Inc. 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 * *******************************************************************************/ package com.cisco.yangide.ext.model.editor.preferences; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.layout.GridDataFactory; import org.eclipse.jface.layout.GridLayoutFactory; import org.eclipse.jface.layout.LayoutConstants; import org.eclipse.jface.preference.PreferencePage; import org.eclipse.jface.resource.JFaceResources; import org.eclipse.jface.resource.StringConverter; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.graphics.Font; import org.eclipse.swt.graphics.FontData; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.FontDialog; import org.eclipse.swt.widgets.Label; import org.eclipse.ui.IWorkbench; import org.eclipse.ui.IWorkbenchPreferencePage; import org.eclipse.ui.PlatformUI; import com.cisco.yangide.ext.model.editor.Activator; /** * @author Konstantin Zaitsev * @date Aug 29, 2014 */ public class ModelEditorPreferencePage extends PreferencePage implements IWorkbenchPreferencePage { private FontData[] fontData; private Label preview; private Font oldFont; @Override public void init(IWorkbench workbench) { this.setPreferenceStore(Activator.getDefault().getPreferenceStore()); } @Override protected Control createContents(Composite parent) { Composite pageArea = new Composite(parent, SWT.NONE); GridLayoutFactory.fillDefaults().numColumns(3).spacing(LayoutConstants.getSpacing().x, 3).applyTo(pageArea); Label label = new Label(pageArea, SWT.NONE); label.setText("Diagram Editor Font: "); GridDataFactory.swtDefaults().align(SWT.BEGINNING, SWT.TOP).span(1, 3).applyTo(label); preview = new Label(pageArea, SWT.BORDER | SWT.SHADOW_NONE); GridDataFactory.fillDefaults().grab(true, false).span(1, 2).applyTo(preview); Button editBtn = new Button(pageArea, SWT.PUSH); GridDataFactory.fillDefaults().hint(100, SWT.DEFAULT).applyTo(editBtn); editBtn.setText("Edit..."); editBtn.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { FontDialog dialog = new FontDialog(getShell()); dialog.setFontList(fontData); FontData fd = dialog.open(); if (fd != null) { fontData = new FontData[] { fd }; update(); } } }); Button systemBtn = new Button(pageArea, SWT.PUSH); GridDataFactory.fillDefaults().hint(100, SWT.DEFAULT).applyTo(systemBtn); systemBtn.setText("Use System Font"); systemBtn.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { fontData = JFaceResources.getDefaultFont().getFontData(); update(); } }); Composite note = createNoteComposite(JFaceResources.getDialogFont(), pageArea, "Note: ", "Changing the font does not update open editors."); GridDataFactory.fillDefaults().grab(true, false).span(2, 1).applyTo(note); Dialog.applyDialogFont(pageArea); load(); return pageArea; } private void load() { fontData = toFontData(getPreferenceStore().getString(ModelEditorPreferences.DIAGRAM_EDITOR_FONT)); if (fontData == null) { fontData = JFaceResources.getDefaultFont().getFontData(); } update(); } @Override public boolean performOk() { getPreferenceStore().setValue(ModelEditorPreferences.DIAGRAM_EDITOR_FONT, StringConverter.asString(fontData)); return true; } @Override protected void performDefaults() { fontData = toFontData(getPreferenceStore().getDefaultString(ModelEditorPreferences.DIAGRAM_EDITOR_FONT)); if (fontData == null) { fontData = JFaceResources.getDefaultFont().getFontData(); } update(); super.performDefaults(); } private FontData[] toFontData(String str) { return JFaceResources.getFontRegistry().filterData(StringConverter.asFontDataArray(str), PlatformUI.getWorkbench().getDisplay()); } private void update() { if (fontData != null && fontData.length > 0) { StringBuilder sb = new StringBuilder(); sb.append(" ").append(fontData[0].getName()).append(" ").append(fontData[0].getHeight()).append("\n"); sb.append(" The quick brown fox jumps over the lazy dog."); Font newFont = new Font(Display.getCurrent(), fontData); preview.setFont(newFont); preview.setText(sb.toString()); if (oldFont != null) { oldFont.dispose(); } oldFont = newFont; } } @Override public void dispose() { if (oldFont != null) { oldFont.dispose(); } super.dispose(); } }