Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorcletavernie2013-03-04 10:52:09 +0000
committercletavernie2013-03-04 10:52:09 +0000
commitb2a0869434a00bad2b41b6d485fd58dc38b347cc (patch)
tree7d20eaf1bde012d8eb4d1b6811895625bc38ee2c /plugins/infra
parent89dbffae06adae4fb7ef1948e8f56137e73303c1 (diff)
downloadorg.eclipse.papyrus-b2a0869434a00bad2b41b6d485fd58dc38b347cc.tar.gz
org.eclipse.papyrus-b2a0869434a00bad2b41b6d485fd58dc38b347cc.tar.xz
org.eclipse.papyrus-b2a0869434a00bad2b41b6d485fd58dc38b347cc.zip
402196: [Property View] Appearance tab slows down every selection
https://bugs.eclipse.org/bugs/show_bug.cgi?id=402196
Diffstat (limited to 'plugins/infra')
-rw-r--r--plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.widgets/src/org/eclipse/papyrus/infra/gmfdiag/widgets/editors/FontEditor.java88
-rw-r--r--plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.widgets/src/org/eclipse/papyrus/infra/gmfdiag/widgets/editors/XWTAwareFontEditor.java46
2 files changed, 44 insertions, 90 deletions
diff --git a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.widgets/src/org/eclipse/papyrus/infra/gmfdiag/widgets/editors/FontEditor.java b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.widgets/src/org/eclipse/papyrus/infra/gmfdiag/widgets/editors/FontEditor.java
deleted file mode 100644
index 4039162d24e..00000000000
--- a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.widgets/src/org/eclipse/papyrus/infra/gmfdiag/widgets/editors/FontEditor.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/*****************************************************************************
- * Copyright (c) 2011 CEA LIST.
- *
- * 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:
- * Camille Letavernier (CEA LIST) camille.letavernier@cea.fr - Initial API and implementation
- *****************************************************************************/
-package org.eclipse.papyrus.infra.gmfdiag.widgets.editors;
-
-import java.text.Collator;
-import java.util.Arrays;
-import java.util.Comparator;
-import java.util.HashSet;
-import java.util.Set;
-
-import org.eclipse.jface.databinding.swt.WidgetProperties;
-import org.eclipse.papyrus.infra.widgets.editors.AbstractValueEditor;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.custom.CCombo;
-import org.eclipse.swt.graphics.FontData;
-import org.eclipse.swt.widgets.Composite;
-
-public class FontEditor extends AbstractValueEditor {
-
- private CCombo fontCombo;
-
- public FontEditor(Composite parent, int style) {
- super(parent, style);
- fontCombo = factory.createCCombo(this, style | SWT.READ_ONLY
- | SWT.BORDER);
- fontCombo.setLayoutData(getDefaultLayoutData());
- // fontCombo.setEditable(false);
-
- FontData[] fontDatas = getDisplay().getFontList(null, true);
-
- Arrays.sort(fontDatas, new Comparator<FontData>() {
-
- public int compare(FontData font1, FontData font2) {
- return Collator.getInstance().compare(font1.getName(),
- font2.getName());
- }
-
- });
-
- Set<String> fonts = new HashSet<String>();
- for (FontData data : fontDatas) {
- if (data.getName() != null) {
- if (fonts.add(data.getName())) {
- fontCombo.add(data.getName());
- }
- }
- }
-
- setWidgetObservable(WidgetProperties.selection().observe(fontCombo));
- }
-
- @Override
- public String getValue() {
- int index = fontCombo.getSelectionIndex();
- return fontCombo.getItem(index);
- }
-
- @Override
- public Object getEditableType() {
- return String.class;
- }
-
- @Override
- public void setReadOnly(boolean readOnly) {
- fontCombo.setEnabled(!readOnly);
- }
-
- @Override
- public boolean isReadOnly() {
- return !fontCombo.isEnabled();
- }
-
- @Override
- public void setToolTipText(String text) {
- setLabelToolTipText(text);
- fontCombo.setToolTipText(text);
- }
-
-}
diff --git a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.widgets/src/org/eclipse/papyrus/infra/gmfdiag/widgets/editors/XWTAwareFontEditor.java b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.widgets/src/org/eclipse/papyrus/infra/gmfdiag/widgets/editors/XWTAwareFontEditor.java
index 74ab1ff82ad..5cf5d1acac9 100644
--- a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.widgets/src/org/eclipse/papyrus/infra/gmfdiag/widgets/editors/XWTAwareFontEditor.java
+++ b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.widgets/src/org/eclipse/papyrus/infra/gmfdiag/widgets/editors/XWTAwareFontEditor.java
@@ -11,16 +11,58 @@
*****************************************************************************/
package org.eclipse.papyrus.infra.gmfdiag.widgets.editors;
+import java.text.Collator;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.Set;
+
+import org.eclipse.papyrus.infra.widgets.editors.ReferenceCombo;
+import org.eclipse.papyrus.infra.widgets.providers.IStaticContentProvider;
+import org.eclipse.papyrus.infra.widgets.providers.StaticContentProvider;
import org.eclipse.papyrus.views.properties.widgets.AbstractPropertyEditor;
+import org.eclipse.swt.graphics.FontData;
import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Display;
public class XWTAwareFontEditor extends AbstractPropertyEditor {
- private FontEditor editor;
+ private ReferenceCombo editor;
+
+ private static IStaticContentProvider fontContentProvider;
public XWTAwareFontEditor(Composite parent, int style) {
- editor = new FontEditor(parent, style);
+ editor = new ReferenceCombo(parent, style);
setEditor(editor);
}
+
+ @Override
+ protected void doBinding() {
+ IStaticContentProvider contentProvider = getFontContentProvider();
+
+ editor.setContentProvider(contentProvider);
+ editor.setUnsettable(!input.isMandatory(propertyPath));
+
+ super.doBinding();
+ }
+
+ private synchronized static IStaticContentProvider getFontContentProvider() {
+ if(fontContentProvider == null) {
+ FontData[] fontDatas = Display.getDefault().getFontList(null, true);
+
+ Set<String> fontNames = new HashSet<String>();
+ for(FontData data : fontDatas) {
+ if(data.getName() != null) {
+ fontNames.add(data.getName());
+ }
+ }
+
+ String[] uniqueFontNames = fontNames.toArray(new String[fontNames.size()]);
+ Arrays.sort(uniqueFontNames, Collator.getInstance());
+
+ fontContentProvider = new StaticContentProvider(uniqueFontNames);
+ }
+ return fontContentProvider;
+ }
+
}

Back to the top