diff options
5 files changed, 142 insertions, 26 deletions
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/CCombo.java b/bundles/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/CCombo.java index b87b045a5e..db9e9d5706 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/CCombo.java +++ b/bundles/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/CCombo.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2000, 2016 IBM Corporation and others. + * Copyright (c) 2000, 2019 IBM Corporation and others. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 2.0 @@ -10,6 +10,7 @@ * * Contributors: * IBM Corporation - initial API and implementation + * Paul Pazderski - Bug 349112: allow setting alignment on the text field *******************************************************************************/ package org.eclipse.swt.custom; @@ -32,8 +33,8 @@ import org.eclipse.swt.widgets.*; * attempts to set the height of a Combo are ignored. CCombo can be used * anywhere that having the increased flexibility is more important than * getting native L&F, but the decision should not be taken lightly. - * There is no is no strict requirement that CCombo look or behave - * the same as the native combo box. + * There is no strict requirement that CCombo look or behave the same as + * the native combo box. * </p> * <p> * Note that although this class is a subclass of <code>Composite</code>, @@ -41,7 +42,7 @@ import org.eclipse.swt.widgets.*; * </p> * <dl> * <dt><b>Styles:</b> - * <dd>BORDER, READ_ONLY, FLAT</dd> + * <dd>BORDER, READ_ONLY, FLAT, LEAD, LEFT, CENTER, TRAIL, RIGHT</dd> * <dt><b>Events:</b> * <dd>DefaultSelection, Modify, Selection, Verify</dd> * </dl> @@ -91,20 +92,17 @@ public class CCombo extends Composite { * @see SWT#BORDER * @see SWT#READ_ONLY * @see SWT#FLAT + * @see SWT#LEAD + * @see SWT#LEFT + * @see SWT#CENTER + * @see SWT#RIGHT + * @see SWT#TRAIL * @see Widget#getStyle() */ public CCombo (Composite parent, int style) { super (parent, style = checkStyle (style)); _shell = super.getShell (); - int textStyle = SWT.SINGLE; - if ((style & SWT.READ_ONLY) != 0) textStyle |= SWT.READ_ONLY; - if ((style & SWT.FLAT) != 0) textStyle |= SWT.FLAT; - text = new Text (this, textStyle); - int arrowStyle = SWT.ARROW | SWT.DOWN; - if ((style & SWT.FLAT) != 0) arrowStyle |= SWT.FLAT; - arrow = new Button (this, arrowStyle); - listener = event -> { if (isDisposed ()) return; if (popup == event.widget) { @@ -134,6 +132,12 @@ public CCombo (Composite parent, int style) { }); } }; + + createText(parent, style); + + int arrowStyle = SWT.ARROW | SWT.DOWN; + if ((style & SWT.FLAT) != 0) arrowStyle |= SWT.FLAT; + arrow = new Button (this, arrowStyle); filter = event -> { if (isDisposed ()) return; if (event.type == SWT.Selection) { @@ -151,11 +155,6 @@ public CCombo (Composite parent, int style) { int [] comboEvents = {SWT.Dispose, SWT.FocusIn, SWT.Move, SWT.Resize, SWT.FocusOut}; for (int i=0; i<comboEvents.length; i++) this.addListener (comboEvents [i], listener); - int [] textEvents = {SWT.DefaultSelection, SWT.DragDetect, SWT.KeyDown, SWT.KeyUp, SWT.MenuDetect, SWT.Modify, - SWT.MouseDown, SWT.MouseUp, SWT.MouseDoubleClick, SWT.MouseEnter, SWT.MouseExit, SWT.MouseHover, - SWT.MouseMove, SWT.MouseWheel, SWT.Traverse, SWT.FocusIn, SWT.Verify}; - for (int i=0; i<textEvents.length; i++) text.addListener (textEvents [i], listener); - int [] arrowEvents = {SWT.DragDetect, SWT.MouseDown, SWT.MouseEnter, SWT.MouseExit, SWT.MouseHover, SWT.MouseMove, SWT.MouseUp, SWT.MouseWheel, SWT.Selection, SWT.FocusIn}; for (int i=0; i<arrowEvents.length; i++) arrow.addListener (arrowEvents [i], listener); @@ -172,9 +171,57 @@ public CCombo (Composite parent, int style) { initAccessible(); } static int checkStyle (int style) { - int mask = SWT.BORDER | SWT.READ_ONLY | SWT.FLAT | SWT.LEFT_TO_RIGHT | SWT.RIGHT_TO_LEFT; + int mask = SWT.BORDER | SWT.READ_ONLY | SWT.FLAT | SWT.LEFT_TO_RIGHT | SWT.RIGHT_TO_LEFT | SWT.LEAD | SWT.CENTER | SWT.TRAIL; return SWT.NO_FOCUS | (style & mask); } +void createText(Control parent, int style) { + String textValue = null, tooltip = null; + Point selection = null; + int limit = 0; + boolean enabled = false, focus = false, editable = false; + Font font = null; + Color fg = null, bg = null; + Menu menu = null; + if (text != null) { + textValue = text.getText(); + tooltip = text.getToolTipText(); + selection = text.getSelection(); + limit = text.getTextLimit(); + enabled = text.isEnabled(); + editable = text.getEditable(); + focus = text.isFocusControl(); + font = text.getFont(); + fg = text.getForeground(); + bg = text.getBackground(); + menu = text.getMenu(); + text.dispose(); + } + + int textStyle = style | SWT.SINGLE; + if ((style & SWT.READ_ONLY) != 0) textStyle |= SWT.READ_ONLY; + if ((style & SWT.FLAT) != 0) textStyle |= SWT.FLAT; + textStyle |= style & (SWT.LEAD | SWT.CENTER | SWT.TRAIL); + text = new Text (this, textStyle); + if (textValue != null) { + text.setText(textValue); + text.setToolTipText(tooltip); + if (selection != null) text.setSelection(selection); + text.setTextLimit(limit); + text.setEnabled(enabled); + text.setEditable(editable); + if (focus) text.setFocus(); + if (font != null) text.setFont(font); + if (fg != null) text.setForeground(fg); + if (bg != null) text.setBackground(bg); + if (menu != null) text.setMenu(menu); + internalLayout(true); + } + + int [] textEvents = {SWT.DefaultSelection, SWT.DragDetect, SWT.KeyDown, SWT.KeyUp, SWT.MenuDetect, SWT.Modify, + SWT.MouseDown, SWT.MouseUp, SWT.MouseDoubleClick, SWT.MouseEnter, SWT.MouseExit, SWT.MouseHover, + SWT.MouseMove, SWT.MouseWheel, SWT.Traverse, SWT.FocusIn, SWT.Verify}; + for (int i=0; i<textEvents.length; i++) text.addListener (textEvents [i], listener); +} /** * Adds the argument to the end of the receiver's list. * <p> @@ -660,6 +707,16 @@ String getAssociatedLabel () { } return null; } +/** + * Returns the horizontal alignment. + * The alignment style (LEFT, CENTER or RIGHT) is returned. + * + * @return SWT.LEFT, SWT.RIGHT or SWT.CENTER + * @since 3.113 + */ +public int getAlignment() { + return text.getStyle() & (SWT.LEFT | SWT.CENTER | SWT.RIGHT); +} @Override public Control [] getChildren () { checkWidget(); @@ -827,6 +884,8 @@ public int getStyle () { int style = super.getStyle (); style &= ~SWT.READ_ONLY; if (!text.getEditable()) style |= SWT.READ_ONLY; + style &= ~(SWT.LEFT | SWT.CENTER | SWT.RIGHT); + style |= getAlignment(); return style; } /** @@ -1463,6 +1522,25 @@ public void select (int index) { } } } + +/** + * Set the horizontal alignment of the CLabel. + * Use the values LEFT, CENTER and RIGHT to align image and text within the available space. + * + * @param align the alignment style of LEFT, RIGHT or CENTER + * + * @exception SWTException <ul> + * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li> + * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li> + * <li>ERROR_INVALID_ARGUMENT - if the value of align is not one of SWT.LEFT, SWT.RIGHT or SWT.CENTER</li> + * </ul> + * @since 3.113 + */ +public void setAlignment(int align) { + checkWidget(); + int styleWithoutAlign = getStyle() & ~(SWT.LEFT | SWT.CENTER | SWT.RIGHT); + createText(getParent(), styleWithoutAlign | align); +} @Override public void setBackground (Color color) { super.setBackground(color); diff --git a/examples/org.eclipse.swt.examples/META-INF/MANIFEST.MF b/examples/org.eclipse.swt.examples/META-INF/MANIFEST.MF index fe1220e474..87d73bd575 100644 --- a/examples/org.eclipse.swt.examples/META-INF/MANIFEST.MF +++ b/examples/org.eclipse.swt.examples/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: %plugin.SWTStandaloneExampleSet.name Bundle-SymbolicName: org.eclipse.swt.examples; singleton:=true -Bundle-Version: 3.106.600.qualifier +Bundle-Version: 3.106.700.qualifier Bundle-Vendor: %providerName Bundle-Localization: plugin Bundle-RequiredExecutionEnvironment: JavaSE-1.8 diff --git a/examples/org.eclipse.swt.examples/pom.xml b/examples/org.eclipse.swt.examples/pom.xml index bae768f91c..2e58a3d1e2 100644 --- a/examples/org.eclipse.swt.examples/pom.xml +++ b/examples/org.eclipse.swt.examples/pom.xml @@ -19,6 +19,6 @@ </parent> <groupId>org.eclipse.swt</groupId> <artifactId>org.eclipse.swt.examples</artifactId> - <version>3.106.600-SNAPSHOT</version> + <version>3.106.700-SNAPSHOT</version> <packaging>eclipse-plugin</packaging> </project> diff --git a/examples/org.eclipse.swt.examples/src/org/eclipse/swt/examples/controlexample/CComboTab.java b/examples/org.eclipse.swt.examples/src/org/eclipse/swt/examples/controlexample/CComboTab.java index 064dd4d05d..237ab29917 100644 --- a/examples/org.eclipse.swt.examples/src/org/eclipse/swt/examples/controlexample/CComboTab.java +++ b/examples/org.eclipse.swt.examples/src/org/eclipse/swt/examples/controlexample/CComboTab.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2000, 2013 IBM Corporation and others. + * Copyright (c) 2000, 2019 IBM Corporation and others. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 2.0 @@ -14,12 +14,15 @@ package org.eclipse.swt.examples.controlexample; -import org.eclipse.swt.*; -import org.eclipse.swt.widgets.*; -import org.eclipse.swt.custom.*; -import org.eclipse.swt.layout.*; +import org.eclipse.swt.SWT; +import org.eclipse.swt.custom.CCombo; +import org.eclipse.swt.layout.GridData; +import org.eclipse.swt.layout.GridLayout; +import org.eclipse.swt.widgets.Button; +import org.eclipse.swt.widgets.Group; +import org.eclipse.swt.widgets.Widget; -class CComboTab extends Tab { +class CComboTab extends AlignableTab { /* Example widgets and groups that contain them */ CCombo combo1; @@ -70,6 +73,9 @@ class CComboTab extends Tab { if (flatButton.getSelection ()) style |= SWT.FLAT; if (readOnlyButton.getSelection ()) style |= SWT.READ_ONLY; if (borderButton.getSelection ()) style |= SWT.BORDER; + if (leftButton.getSelection ()) style |= SWT.LEFT; + if (centerButton.getSelection ()) style |= SWT.CENTER; + if (rightButton.getSelection ()) style |= SWT.RIGHT; /* Create the example widgets */ combo1 = new CCombo (comboGroup, style); @@ -129,5 +135,17 @@ class CComboTab extends Tab { flatButton.setSelection ((combo1.getStyle () & SWT.FLAT) != 0); readOnlyButton.setSelection ((combo1.getStyle () & SWT.READ_ONLY) != 0); borderButton.setSelection ((combo1.getStyle () & SWT.BORDER) != 0); + leftButton.setSelection ((combo1.getStyle () & SWT.LEFT) != 0); + centerButton.setSelection ((combo1.getStyle () & SWT.CENTER) != 0); + rightButton.setSelection ((combo1.getStyle () & SWT.RIGHT) != 0); + } + + @Override + void setExampleWidgetAlignment() { + int alignment = 0; + if (leftButton.getSelection ()) alignment = SWT.LEFT; + if (centerButton.getSelection ()) alignment = SWT.CENTER; + if (rightButton.getSelection ()) alignment = SWT.RIGHT; + combo1.setAlignment (alignment); } } diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_CCombo.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_CCombo.java index deef387cc1..c2e67a841d 100644 --- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_CCombo.java +++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_CCombo.java @@ -1029,4 +1029,24 @@ public void test_setTextLjava_lang_String() { assertTrue(":c:" + i, ccombo.getText().equals(cases[i])); } } + +@Test +public void test_setAlignment() { + assertEquals(":a:", SWT.LEAD, ccombo.getAlignment()); + + ccombo.setText("Trail"); + ccombo.setAlignment(SWT.TRAIL); + assertEquals(":b:", SWT.TRAIL, ccombo.getAlignment()); + assertEquals(":b:", "Trail", ccombo.getText()); + + ccombo.add("Center"); + ccombo.select(ccombo.getItemCount() - 1); + ccombo.setAlignment(SWT.CENTER); + assertEquals(":c:", SWT.CENTER, ccombo.getAlignment()); + assertEquals(":c:", "Center", ccombo.getText()); + + ccombo.setAlignment(SWT.LEFT); + assertEquals(":d:", SWT.LEFT, ccombo.getAlignment()); + assertEquals(":d:", "Center", ccombo.getText()); +} } |