jbosstools / jbosstools-quarkus

Quarkus tooling for Eclipse
https://tools.jboss.org
Apache License 2.0
16 stars 20 forks source link

JBIDE-27448: Quarkus Wizard: Should improve user experience when addi… #172

Closed jeffmaury closed 2 years ago

jeffmaury commented 2 years ago

…ng/removing extensions

Signed-off-by: Jeff MAURY jmaury@redhat.com

Pull Request Checklist

General

Code

Testing

Function

sbouchet commented 2 years ago

i get the general idea, and love it. but the filter text area isn't very visible on the dark theme, compared to the standard eclipse UI : Capture d’écran de 2022-04-25 17-42-30

it misses the border at least, and maybe the inside text.

on another side, is it possible to narrow the category label close to the arrow ? it seems swt left a palce for an icon, but there is none for categories.

at last, the tree is deployed entirely by default, may be better to only shows categories at first ? Capture d’écran de 2022-04-25 17-42-52

adietish commented 2 years ago

Steps:

  1. EXEC: launch quarkus project wizard
  2. EXEC: select some extension among the available ones so that it shows up in the Selected Extensions:
  3. EXEC: reduce horiz and vert size of the wizard window

Result: Selected Extensions: area is missing scrollbars (MacOS). Available Extensions: has those so that I can scroll to read the labels that are cut off. image

adietish commented 2 years ago

When filtering, empty categories shows up. Feels unexpected at first glance, in a 2nd thought I get the idea. I tend to think that empty categories shouldn't be listed. image In other wizards (ex. new project wizard) empty categories are not listed image

adietish commented 2 years ago

The Filter: text input looks too small vertically
image especially when compared to other filter inputs in other wizards (ex. new project wizard) image

jeffmaury commented 2 years ago

@adietish I change an option for the filter text widget, can you check if it fixes the issue on MacOS ?

adietish commented 2 years ago

I found another problem with scrollbars when the wizard shows the page initially (no resizing): Available Extensions: does not have scrollbars even though only a portion of the content is shown. Scrollbars appear though as soon as you resize the dialog: image @jeffmaury I look into it since I have MacOS. Will ask you to verify on Windows/Linux once I filed a PR, ok?

adietish commented 2 years ago

I also have the following stack trace in the log as soon as I select the quarkus wizard: Steps:

  1. EXEC: Ctrl + N, enter "qua" into the filter text field
  2. EXEC: select Quarkus > Quarkus Project & hit "Next"

Result: wizard shows first page of quarkus project wizard. In the log the following appears:

java.lang.NoSuchMethodException: org.jboss.tools.quarkus.core.code.model.QuarkusModel.addPropertyChangeListener(java.beans.PropertyChangeListener)
    at java.base/java.lang.Class.getMethod(Class.java:2108)
    at org.eclipse.core.internal.databinding.beans.BeanPropertyListenerSupport.processListener(BeanPropertyListenerSupport.java:97)
    at org.eclipse.core.internal.databinding.beans.BeanPropertyListenerSupport.hookListener(BeanPropertyListenerSupport.java:48)
    at org.eclipse.core.internal.databinding.beans.BeanPropertyListener.doAddTo(BeanPropertyListener.java:64)
    at org.eclipse.core.databinding.property.NativePropertyListener.addTo(NativePropertyListener.java:49)
    at org.eclipse.core.internal.databinding.property.list.SimplePropertyObservableList.lambda$2(SimplePropertyObservableList.java:94)
    at org.eclipse.core.databinding.observable.Realm$1.run(Realm.java:151)
    at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45)
    at org.eclipse.core.databinding.observable.Realm.safeRun(Realm.java:155)
    at org.eclipse.core.databinding.observable.Realm.exec(Realm.java:173)
    at org.eclipse.core.internal.databinding.property.list.SimplePropertyObservableList.firstListenerAdded(SimplePropertyObservableList.java:89)
    at org.eclipse.core.databinding.observable.list.AbstractObservableList$PrivateChangeSupport.firstListenerAdded(AbstractObservableList.java:63)
    at org.eclipse.core.databinding.observable.ChangeManager.addListener(ChangeManager.java:72)
    at org.eclipse.core.databinding.observable.ChangeSupport.addListener(ChangeSupport.java:34)
    at org.eclipse.core.databinding.observable.list.AbstractObservableList.addListChangeListener(AbstractObservableList.java:118)
    at org.eclipse.core.databinding.observable.list.DecoratingObservableList.firstListenerAdded(DecoratingObservableList.java:86)
    at org.eclipse.core.databinding.observable.ChangeManager.addListener(ChangeManager.java:72)
    at org.eclipse.core.databinding.observable.list.DecoratingObservableList.addListChangeListener(DecoratingObservableList.java:60)
    at org.eclipse.core.internal.databinding.observable.masterdetail.DetailObservableList.updateInnerObservableList(DetailObservableList.java:131)
    at org.eclipse.core.internal.databinding.observable.masterdetail.DetailObservableList.lambda$1(DetailObservableList.java:98)
    at org.eclipse.core.databinding.observable.value.ValueChangeEvent.dispatch(ValueChangeEvent.java:73)
    at org.eclipse.core.databinding.observable.ChangeManager.fireEvent(ChangeManager.java:119)
    at org.eclipse.core.databinding.observable.value.DecoratingObservableValue.fireValueChange(DecoratingObservableValue.java:68)
    at org.eclipse.core.databinding.observable.value.DecoratingObservableValue.handleValueChange(DecoratingObservableValue.java:105)
    at org.eclipse.core.databinding.observable.value.ValueChangeEvent.dispatch(ValueChangeEvent.java:73)
    at org.eclipse.core.databinding.observable.ChangeManager.fireEvent(ChangeManager.java:119)
    at org.eclipse.core.databinding.observable.value.DecoratingObservableValue.fireValueChange(DecoratingObservableValue.java:68)
    at org.eclipse.core.databinding.observable.value.DecoratingObservableValue.handleValueChange(DecoratingObservableValue.java:105)
    at org.eclipse.core.databinding.observable.value.ValueChangeEvent.dispatch(ValueChangeEvent.java:73)
    at org.eclipse.core.databinding.observable.ChangeManager.fireEvent(ChangeManager.java:119)
    at org.eclipse.core.databinding.observable.value.AbstractObservableValue.fireValueChange(AbstractObservableValue.java:86)
    at org.eclipse.core.internal.databinding.property.value.SimplePropertyObservableValue.notifyIfChanged(SimplePropertyObservableValue.java:120)
    at org.eclipse.core.internal.databinding.property.value.SimplePropertyObservableValue.lambda$1(SimplePropertyObservableValue.java:69)
    at org.eclipse.core.databinding.observable.Realm$1.run(Realm.java:151)
    at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45)
    at org.eclipse.core.databinding.observable.Realm.safeRun(Realm.java:155)
    at org.eclipse.jface.databinding.swt.DisplayRealm.lambda$0(DisplayRealm.java:68)
    at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:40)
    at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:185)
    at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:4320)
    at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3943)
    at org.eclipse.jface.operation.ModalContext$ModalContextThread.block(ModalContext.java:166)
    at org.eclipse.jface.operation.ModalContext.run(ModalContext.java:368)
    at org.eclipse.jface.wizard.WizardDialog.run(WizardDialog.java:1033)
    at org.jboss.tools.common.ui.WizardUtils.runInWizard(WizardUtils.java:130)
    at org.jboss.tools.common.ui.WizardUtils.runInWizard(WizardUtils.java:94)
    at org.jboss.tools.common.ui.WizardUtils.runInWizard(WizardUtils.java:72)
    at org.jboss.tools.quarkus.ui.wizard.CodeProjectTypeWizardPage.loadModel(CodeProjectTypeWizardPage.java:235)
    at org.jboss.tools.quarkus.ui.wizard.CodeProjectTypeWizardPage.doCreateControls(CodeProjectTypeWizardPage.java:223)
    at org.jboss.tools.common.ui.wizard.AbstractDataBindingWizardPage.createControl(AbstractDataBindingWizardPage.java:77)
    at org.eclipse.jface.wizard.Wizard.createPageControls(Wizard.java:178)
    at org.eclipse.jface.wizard.WizardDialog.createPageControls(WizardDialog.java:743)
    at org.eclipse.jface.wizard.WizardDialog.setWizard(WizardDialog.java:1181)
    at org.eclipse.jface.wizard.WizardDialog.updateForPage(WizardDialog.java:1234)
    at org.eclipse.jface.wizard.WizardDialog.lambda$3(WizardDialog.java:1222)
    at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:74)
    at org.eclipse.jface.wizard.WizardDialog.showPage(WizardDialog.java:1222)
    at org.eclipse.jface.wizard.WizardDialog.nextPressed(WizardDialog.java:917)
    at org.eclipse.jface.wizard.WizardDialog.buttonPressed(WizardDialog.java:468)
    at org.eclipse.jface.dialogs.Dialog.lambda$0(Dialog.java:619)
    at org.eclipse.swt.events.SelectionListener$1.widgetSelected(SelectionListener.java:84)
    at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:252)
    at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:89)
    at org.eclipse.swt.widgets.Display.sendEvent(Display.java:4579)
    at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1524)
    at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1547)
    at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1532)
    at org.eclipse.swt.widgets.Widget.notifyListeners(Widget.java:1325)
    at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4365)
    at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3941)
    at org.eclipse.jface.window.Window.runEventLoop(Window.java:823)
    at org.eclipse.jface.window.Window.open(Window.java:799)
    at org.eclipse.ui.internal.handlers.WizardHandler$New.executeHandler(WizardHandler.java:263)
    at org.eclipse.ui.internal.handlers.WizardHandler.execute(WizardHandler.java:283)
    at org.eclipse.ui.internal.handlers.HandlerProxy.execute(HandlerProxy.java:283)
    at org.eclipse.ui.internal.handlers.E4HandlerProxy.execute(E4HandlerProxy.java:97)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:566)
    at org.eclipse.e4.core.internal.di.MethodRequestor.execute(MethodRequestor.java:58)
    at org.eclipse.e4.core.internal.di.InjectorImpl.invokeUsingClass(InjectorImpl.java:317)
    at org.eclipse.e4.core.internal.di.InjectorImpl.invoke(InjectorImpl.java:251)
    at org.eclipse.e4.core.contexts.ContextInjectionFactory.invoke(ContextInjectionFactory.java:173)
    at org.eclipse.e4.core.commands.internal.HandlerServiceHandler.execute(HandlerServiceHandler.java:156)
    at org.eclipse.core.commands.Command.executeWithChecks(Command.java:488)
    at org.eclipse.core.commands.ParameterizedCommand.executeWithChecks(ParameterizedCommand.java:487)
    at org.eclipse.e4.core.commands.internal.HandlerServiceImpl.executeHandler(HandlerServiceImpl.java:213)
    at org.eclipse.e4.ui.bindings.keys.KeyBindingDispatcher.executeCommand(KeyBindingDispatcher.java:308)
    at org.eclipse.e4.ui.bindings.keys.KeyBindingDispatcher.press(KeyBindingDispatcher.java:580)
    at org.eclipse.e4.ui.bindings.keys.KeyBindingDispatcher.processKeyEvent(KeyBindingDispatcher.java:647)
    at org.eclipse.e4.ui.bindings.keys.KeyBindingDispatcher.filterKeySequenceBindings(KeyBindingDispatcher.java:439)
    at org.eclipse.e4.ui.bindings.keys.KeyBindingDispatcher$KeyDownFilter.handleEvent(KeyBindingDispatcher.java:96)
    at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:89)
    at org.eclipse.swt.widgets.Display.filterEvent(Display.java:1170)
    at org.eclipse.swt.widgets.Display.sendEvent(Display.java:4574)
    at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1524)
    at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1547)
    at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1532)
    at org.eclipse.swt.widgets.Widget.sendKeyEvent(Widget.java:1561)
    at org.eclipse.swt.widgets.Widget.sendKeyEvent(Widget.java:1557)
    at org.eclipse.swt.widgets.Canvas.sendKeyEvent(Canvas.java:522)
    at org.eclipse.swt.widgets.Control.doCommandBySelector(Control.java:1085)
    at org.eclipse.swt.widgets.Display.windowProc(Display.java:6428)
    at org.eclipse.swt.internal.cocoa.OS.objc_msgSend(Native Method)
    at org.eclipse.swt.internal.cocoa.NSResponder.interpretKeyEvents(NSResponder.java:59)
    at org.eclipse.swt.widgets.Composite.keyDown(Composite.java:607)
    at org.eclipse.swt.widgets.Display.windowProc(Display.java:6260)
    at org.eclipse.swt.internal.cocoa.OS.objc_msgSendSuper(Native Method)
    at org.eclipse.swt.widgets.Widget.callSuper(Widget.java:236)
    at org.eclipse.swt.widgets.Widget.windowSendEvent(Widget.java:2162)
    at org.eclipse.swt.widgets.Shell.windowSendEvent(Shell.java:2487)
    at org.eclipse.swt.widgets.Display.windowProc(Display.java:6380)
    at org.eclipse.swt.internal.cocoa.OS.objc_msgSendSuper(Native Method)
    at org.eclipse.swt.widgets.Display.applicationSendEvent(Display.java:5628)
    at org.eclipse.swt.widgets.Display.applicationProc(Display.java:5767)
    at org.eclipse.swt.internal.cocoa.OS.objc_msgSend(Native Method)
    at org.eclipse.swt.internal.cocoa.NSApplication.sendEvent(NSApplication.java:117)
    at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3938)
    at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1155)
    at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338)
    at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1046)
    at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155)
    at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:644)
    at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338)
    at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:551)
    at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:156)
    at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:152)
    at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203)
    at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:136)
    at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:104)
    at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:401)
    at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:566)
    at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:659)
    at org.eclipse.equinox.launcher.Main.basicRun(Main.java:596)
    at org.eclipse.equinox.launcher.Main.run(Main.java:1467)
    at org.eclipse.equinox.launcher.Main.main(Main.java:1440)
jeffmaury commented 2 years ago

I found another problem with scrollbars when the wizard shows the page initially (no resizing): Available Extensions: does not have scrollbars even though only a portion of the content is shown. Scrollbars appear though as soon as you resize the dialog: image @jeffmaury I look into it since I have MacOS. Will ask you to verify on Windows/Linux once I filed a PR, ok?

I have scrollbars on Windows !!!!

adietish commented 2 years ago

I found another problem with scrollbars when the wizard shows the page initially (no resizing): Available Extensions: does not have scrollbars even though only a portion of the content is shown. Scrollbars appear though as soon as you resize the dialog I have scrollbars on Windows !!!!

@jeffmaury ok, a MacOS problem then. Do you have scrollbars in the table on the right "Selected Extensions:"? Initially and after resizing?

jeffmaury commented 2 years ago

I found another problem with scrollbars when the wizard shows the page initially (no resizing): Available Extensions: does not have scrollbars even though only a portion of the content is shown. Scrollbars appear though as soon as you resize the dialog I have scrollbars on Windows !!!!

@jeffmaury ok, a MacOS problem then. Do you have scrollbars in the table on the right "Selected Extensions:"? Initially and after resizing?

No once there are enough extensions

adietish commented 2 years ago

No once there are enough extensions

@jeffmaury ok, for the vertical ones. But are there horizontal scrollbars if you resize (either the dialog or via Sashform) the "Selected Extensions:" so that the text of the extensions is cut off. Are there any horiz. scrollbars on windows in this case?

adietish commented 2 years ago

Found another flaw: filtering is case sensitive. I'll take care of this, too. Steps:

  1. EXEC: open Quarkus project wizard
  2. EXEC: in filter text field: enter "small"

Result: You should get the extensions for "SmallRye" but noe is listed image Expected result: Extensions for "SmallRye" should be listed even though case of the filter text does not match image

jeffmaury commented 2 years ago

No once there are enough extensions

@jeffmaury ok, for the vertical ones. But are there horizontal scrollbars if you resize (either the dialog or via Sashform) the "Selected Extensions:" so that the text of the extensions is cut off. Are there any horiz. scrollbars on windows in this case?

You right, if I add an extension with a long description the horizontal scrollbar does not appear but as soon as the vertical scrollbar is show (after adding enough extensions), then the horizontal scrollbar is show so I would think this is an issue with the table and scrollbars

jeffmaury commented 2 years ago

Found another flaw: filtering is case sensitive. I'll take care of this, too. Steps:

1. EXEC: open Quarkus project wizard

2. EXEC: in filter text field: enter "small"

Result: You should get the extensions for "SmallRye" but noe is listed image Expected result: Extensions for "SmallRye" should be listed even though case of the filter text does not match image

Should be fixed by 27cbfea3e133312850e92f7f8985c8d7d88c7265

adietish commented 2 years ago

You right, if I add an extension with a long description the horizontal scrollbar does not appear but as soon as the vertical scrollbar is show (after adding enough extensions), then the horizontal scrollbar is show so I would think this is an issue with the table and scrollbars

ok, in MacOS there are never horizontal scrollbars. Vertical ones appear though as soon as there are more selected extensions than are visible (can be forced by resizing the dialog). I'll take care of it.

adietish commented 2 years ago

@jeffmaury 27cbfea fixed the filtering issue, yay! I fixed the height of "Filter:" input and horizontal scrollbars in "Selected Extensions:". Please verify that things behave correctly on Win/Linux: https://github.com/jeffmaury/jbosstools-quarkus/pull/1