From 207f3bc210e8c27bfb24fc9636d6d023d0ee3c2d Mon Sep 17 00:00:00 2001 From: Jakob Heher Date: Wed, 10 Aug 2022 13:50:20 +0200 Subject: scroll parent scrolledcomposite on combo boxes, cf. #116 --- .../AdvancedConfigurationComposite.java | 4 ++-- .../KeystoreConfigurationComposite.java | 6 +++--- .../SimpleConfigurationComposite.java | 6 +++--- .../java/at/asit/pdfover/gui/utils/SWTUtils.java | 25 ++++++++++++++++++++++ 4 files changed, 33 insertions(+), 8 deletions(-) (limited to 'pdf-over-gui') diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/configuration/AdvancedConfigurationComposite.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/configuration/AdvancedConfigurationComposite.java index 6d68bb4c..dd2275ec 100644 --- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/configuration/AdvancedConfigurationComposite.java +++ b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/configuration/AdvancedConfigurationComposite.java @@ -177,7 +177,7 @@ public class AdvancedConfigurationComposite extends ConfigurationCompositeBase { this.cmbBKUAuswahl = new Combo(this.grpBkuAuswahl, SWT.READ_ONLY); SWTUtils.anchor(cmbBKUAuswahl).right(100,-5).top(0).left(0,5); SWTUtils.setFontHeight(cmbBKUAuswahl, Constants.TEXT_SIZE_NORMAL); - SWTUtils.disableEventDefault(cmbBKUAuswahl, SWT.MouseVerticalWheel); + SWTUtils.scrollPassthrough(cmbBKUAuswahl); this.bkuStrings = Arrays.stream(BKUs.values()).map(s -> Messages.getString("BKU."+s)).collect(Collectors.toList()); this.cmbBKUAuswahl.setItems(bkuStrings.toArray(new String[0])); @@ -254,7 +254,7 @@ public class AdvancedConfigurationComposite extends ConfigurationCompositeBase { SWTUtils.anchor(cmbLocaleAuswahl).right(100,-5).top(0).left(0,5); SWTUtils.setFontHeight(cmbLocaleAuswahl, Constants.TEXT_SIZE_NORMAL);; this.cmbLocaleAuswahl.setItems(Arrays.stream(Constants.SUPPORTED_LOCALES).map(l -> l.getDisplayLanguage()).toArray(String[]::new)); - SWTUtils.disableEventDefault(cmbLocaleAuswahl, SWT.MouseVerticalWheel); + SWTUtils.scrollPassthrough(cmbLocaleAuswahl); SWTUtils.addSelectionListener(cmbLocaleAuswahl, e -> { Locale currentLocale = configurationContainer.interfaceLocale; diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/configuration/KeystoreConfigurationComposite.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/configuration/KeystoreConfigurationComposite.java index 19eba137..862fc424 100644 --- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/configuration/KeystoreConfigurationComposite.java +++ b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/configuration/KeystoreConfigurationComposite.java @@ -141,7 +141,7 @@ public class KeystoreConfigurationComposite extends ConfigurationCompositeBase { this.cmbKeystoreType = new Combo(grpKeystore, SWT.READ_ONLY); SWTUtils.anchor(cmbKeystoreType).top(lblKeystoreType, 5).left(0,15).right(btnLoad, -5); SWTUtils.setFontHeight(cmbKeystoreType, Constants.TEXT_SIZE_NORMAL); - SWTUtils.disableEventDefault(cmbKeystoreType, SWT.MouseVerticalWheel); + SWTUtils.scrollPassthrough(cmbKeystoreType); this.lblKeystoreAlias = new Label(grpKeystore, SWT.NONE); SWTUtils.anchor(lblKeystoreAlias).top(cmbKeystoreType, 5).left(0, 5); @@ -150,7 +150,7 @@ public class KeystoreConfigurationComposite extends ConfigurationCompositeBase { this.cmbKeystoreAlias = new Combo(grpKeystore, SWT.NONE); SWTUtils.anchor(cmbKeystoreAlias).top(lblKeystoreAlias, 5).left(0,15).right(100,-5); SWTUtils.setFontHeight(cmbKeystoreAlias, Constants.TEXT_SIZE_NORMAL); - SWTUtils.disableEventDefault(cmbKeystoreAlias, SWT.MouseVerticalWheel); + SWTUtils.scrollPassthrough(cmbKeystoreAlias); this.lblKeystorePassStoreType = new Label(this.grpKeystore, SWT.NONE); SWTUtils.anchor(lblKeystorePassStoreType).top(cmbKeystoreAlias, 5).left(0,5); @@ -159,7 +159,7 @@ public class KeystoreConfigurationComposite extends ConfigurationCompositeBase { this.cmbKeystorePassStoreType = new Combo(grpKeystore, SWT.READ_ONLY); SWTUtils.anchor(cmbKeystorePassStoreType).top(lblKeystorePassStoreType, 5).left(0,15).right(100,-5); SWTUtils.setFontHeight(cmbKeystorePassStoreType, Constants.TEXT_SIZE_NORMAL); - SWTUtils.disableEventDefault(cmbKeystorePassStoreType, SWT.MouseVerticalWheel); + SWTUtils.scrollPassthrough(cmbKeystorePassStoreType); this.lblKeystoreStorePass = new Label(grpKeystore, SWT.NONE); SWTUtils.anchor(lblKeystoreStorePass).top(cmbKeystorePassStoreType, 5).left(0,5); diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/configuration/SimpleConfigurationComposite.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/configuration/SimpleConfigurationComposite.java index 4c636489..94362b54 100644 --- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/configuration/SimpleConfigurationComposite.java +++ b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/configuration/SimpleConfigurationComposite.java @@ -165,7 +165,7 @@ public class SimpleConfigurationComposite extends ConfigurationCompositeBase { this.cmbSignatureProfiles = new Combo(this.grpSignatureProfile, SWT.READ_ONLY); SWTUtils.anchor(cmbSignatureProfiles).left(0,10).right(100,-10).top(0,10).bottom(100,-10); SWTUtils.setFontHeight(cmbSignatureProfiles, Constants.TEXT_SIZE_NORMAL); - SWTUtils.disableEventDefault(cmbSignatureProfiles, SWT.MouseVerticalWheel); + SWTUtils.scrollPassthrough(cmbSignatureProfiles); this.cmbSignatureProfiles.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { @@ -186,7 +186,7 @@ public class SimpleConfigurationComposite extends ConfigurationCompositeBase { this.cmbSignatureLang = new Combo(this.grpSignatureLang, SWT.READ_ONLY); SWTUtils.anchor(cmbSignatureLang).left(0,10).right(100,-10).top(0,10).bottom(100,-10); SWTUtils.setFontHeight(cmbSignatureLang, Constants.TEXT_SIZE_NORMAL); - SWTUtils.disableEventDefault(cmbSignatureLang, SWT.MouseVerticalWheel); + SWTUtils.scrollPassthrough(cmbSignatureLang); this.cmbSignatureLang.setItems(Arrays.stream(Constants.SUPPORTED_LOCALES).map(l -> l.getDisplayLanguage()).toArray(String[]::new)); this.cmbSignatureLang.addSelectionListener(new SelectionAdapter() { @@ -271,7 +271,7 @@ public class SimpleConfigurationComposite extends ConfigurationCompositeBase { sclLogoOnlyTargetSize.setMaximum(200); sclLogoOnlyTargetSize.setIncrement(1); sclLogoOnlyTargetSize.setPageIncrement(10); - SWTUtils.disableEventDefault(sclLogoOnlyTargetSize, SWT.MouseVerticalWheel); + SWTUtils.scrollPassthrough(sclLogoOnlyTargetSize); SWTUtils.addSelectionListener(sclLogoOnlyTargetSize, e -> { configurationContainer.logoOnlyTargetSize = sclLogoOnlyTargetSize.getSelection(); diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/utils/SWTUtils.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/utils/SWTUtils.java index 980710e3..ef93e3e9 100644 --- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/utils/SWTUtils.java +++ b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/utils/SWTUtils.java @@ -4,13 +4,17 @@ import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.function.Consumer; +import org.eclipse.swt.SWT; +import org.eclipse.swt.custom.ScrolledComposite; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.SelectionListener; import org.eclipse.swt.graphics.Font; import org.eclipse.swt.graphics.FontData; +import org.eclipse.swt.graphics.Point; import org.eclipse.swt.layout.FormAttachment; import org.eclipse.swt.layout.FormData; +import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Event; import org.slf4j.Logger; @@ -62,6 +66,27 @@ public final class SWTUtils { c.addListener(event, (Event e) -> { e.doit = false; }); } + public static void scrollPassthrough(Control c) { + c.addListener(SWT.MouseVerticalWheel, (Event e) -> { + // disable default handling + e.doit = false; + + // find containing ScrolledComposite + Composite target = c.getParent(); + while ((target != null) && !(target instanceof ScrolledComposite)) + target = target.getParent(); + + if (target == null) + return; + + // scroll containing ScrolledComposite + ScrolledComposite sTarget = (ScrolledComposite)target; + Point origin = sTarget.getOrigin(); + origin.y -= (e.count * 10); + sTarget.setOrigin(origin); + }); + } + public static void setFontHeight(Control c, int height) { FontData[] fD = c.getFont().getFontData(); fD[0].setHeight(height); -- cgit v1.2.3