This Bugzilla instance is a read-only archive of historic NetBeans bug reports. To report a bug in NetBeans please follow the project's instructions for reporting issues.
Implement a framework to allow module extend dialogs of projects system. This will be used mainly for customizers in projects system. The UI is described in the UI spec.
The API for extensible customizer is the current wizard framework. It means that the customizer tabs would be composed from WizardDescriptor.Iterator. One tab per one step. Clicking on particular tab would simulate pressing next/previous button corresponding times. This can lead to a problem if iterator dynamically changes sequence of steps or the steps in the content do not corresponds to actual iterator steps. Another problem can be with marking a wizard step as invalid. The implementation again tries to simulate a wizard and disables tabs that follow after the current tab. This does not fit into the tabbed pane metaphor and should be avoided too. So, the following rule have to be fulfilled: * "WizardPanel_contentData" property contains the same steps (names and number) as the WizardDescriptor.Iterator * Steps and content property does not change during the wizard/customizer lifetime * Each step should stay valid. It means that the user should not be allowed to enter invalid data. I will attach patch which turns on tabbed wizard in the IDE. It works well with the Setup wizard as it satisfies above mentioned rules. Just put the patch into lib/patches directory. I will attach also implementation, which is written directly to WizardDescriptor as it seems safest (in terms of not breaking the current wizard framework). Please review the patch. Finally, the customizer would simply turn off the content panel, content label and provide the Done button (what can be achieved by hacking the Finish button), so it doesn't look like the wizard.
Created attachment 7973 [details] Binary patch providing tabbed ui for the wizards.
Created attachment 7974 [details] Diff of the WizardDescriptor providing tabbed ui for the wizards.
I will attach a patch containing following changes: * CustomizerWizard extends WizardDescriptor and changes Finish button's name to Done. * Five form files and iterators for three custmizers: 4.2.2 Project Customizer, 5.1.1 Sources Customizer, 7.2.1 Build Output Customizer. It doesn't contain any data access logic, just the code necessary for displaying the dialogs. * Some testing code in the layer.xml (folder containing customizers) and code-nature.xml (attribute pointing to the customizer folder) * A fix of CompoundWizardIterator. Without it the tabbed ui in the wizard doesn't work.
Created attachment 8043 [details] Patch containing CustomizerWizard and form files of customizer panels.
Thanx! I'm going to try it.
Well, it seems that the tabbed wizard has not been accepted by the community. I have started to work on a different tasks so reassigning to an owner of the subcomponent.
Jano, too strong words. There is not any problem with tabbed UI - the guys just get scared when they tried your patch and saw template wizard with numbered steps on the left, next/prev button on the bottom and tabs at the top. I showed Dafe the customizer which is basically regular tab dialog and he liked it. The only remaing problem is with where the option will be and at the moment it was not decided yet. I would like to ask a question: would it be possible to move your implementation from WD into CustomizerWizard which is in projects? That's the easiest solution. If there are some problems we can copy _whole_ WD and store it in projects as CustomizerWizard (this is a bit messy, but also possible solution). Anyway, thanx for the good job. It works really nice! The discussions about additions into OpenAPIs are always painful. Thanx Jano!
I am sorry for my previous attitude. To answer your question, it is not possible to add a tabbed ui by subclassing current WizardDescriptor. That is because there is nothing to override except updateState() method, which when overridden actually suppresses all functionality of WizardDescriptor, thus nothing of the functionality would be reused. So, I would subclass DialogDescriptor, maybe copy tabbed ui from the patch, but writing it from the scratch should be better, and make it work only with CompoundWizardIterator. CompoundWizardIterator should be either enhanced by providing content of the iterator by a method call, or getting content list from a client properties could be copied from WizardDescriptor. Hmm, now I think, I should have done it this way. It can take few days of work, so copying whole WizardDescriptor with my patch could be taken as quick solution. Once again, sorry for not completing my work.
Jano, your help was great. The important thing is that you wrote the code, now we have to find some place where to put it ;-). Thanks again.
Closing as fixed. The scope of this issue for M4 was implemented. The remaning tasks are filed in issue 29050.
i've verified all these issues
closing all my verified issues