Bug 368552 - Redesign the CDT New Project Wizard
Summary: Redesign the CDT New Project Wizard
Status: NEW
Alias: None
Product: CDT
Classification: Tools
Component: cdt-build (show other bugs)
Version: 8.1.0   Edit
Hardware: PC Windows 7
: P3 normal (vote)
Target Milestone: ---   Edit
Assignee: cdt-build-inbox@eclipse.org CLA
QA Contact: Jonah Graham CLA
URL:
Whiteboard:
Keywords:
Depends on: 197802
Blocks: 75342 234860 252766
  Show dependency tree
 
Reported: 2012-01-13 10:22 EST by Doug Schaefer CLA
Modified: 2020-09-04 15:17 EDT (History)
13 users (show)

See Also:


Attachments
example of an "intro" page for the wizard (63.74 KB, image/png)
2012-01-13 12:03 EST, William Swanson CLA
no flags Details
Dialogs with discrepancies associated with discovery configurations at project, system, and new project access points. (191.28 KB, image/png)
2014-02-06 12:00 EST, Leo L CLA
no flags Details

Note You need to log in before you can comment on or make changes to this bug.
Description Doug Schaefer CLA 2012-01-13 10:22:38 EST
We'll use this bug to manage my work on the CDT New Project Wizard. It's time to redo it's design. We've had a number of bugs raised in the past on usability of the wizard, and I've had my own series of complaints about it.

I'll come up with a prototype for the wizard and check it in. It'll sit beside the existing one so we can compare and contrast, and turn it off if we need to scrap it.
Comment 1 Doug Schaefer CLA 2012-01-13 10:37:13 EST
The first thing I want to do is combine C and C++ projects into a single C/C++ Project and allow choice of language in the wizard.
Comment 2 Doug Schaefer CLA 2012-01-13 11:01:35 EST
Another questionable concept is project type as Andrew mentions here: https://bugs.eclipse.org/bugs/show_bug.cgi?id=197802#c1. A project type just ends up being a filter used by option enablement, and not a whole lot else.

Also, it is configuration specific. You can have multiple project types for a given project. One of the greatest advantages of the CDT build system is the ability to have build configurations with vastly different properties. When creating a new project things specific to configurations should be moved there.
Comment 3 Doug Schaefer CLA 2012-01-13 11:29:14 EST
Something that just crossed my mind, a new Build Configuration wizard. Looking at the New Project wizard, a lot of that is build configuration for the initial build configuration set.
Comment 4 Jeffrey Overbey CLA 2012-01-13 11:38:38 EST
Glad to hear you're working on this, Doug.

Just so you know... Photran reuses the CDT New Project Wizard, adjusting the wizard title/description in the constructor and overriding #continueCreation, #getLanguageIDs, #getNatures, and #setCreated to (1) add the Fortran project nature to the C nature and (2) filter the dialog to show only Fortran project types and toolchains.

It doesn't completely succeed at #2 -- e.g., the XL C/C++ project types still show up, and it's unintuitive that an Empty Makefile Project doesn't have any Fortran error parsers enabled -- but this isn't the fault of the project wizard.

So, if it's possible for Photran to reuse the new New Project wizard as before, that would be ideal.  And if it would be possible to replace the Empty Makefile Project type with our own, that would be an added bonus.
Comment 5 Eugene Ostroukhov CLA 2012-01-13 11:44:12 EST
Our IDE for a custom C variant also has a wizard based on a CDT new project wizard.
Can the language selection from comment#1 be made extensible? Also there may be a need for a more generic wizard name ("New C/C++ Project" will not work for Photran and other languages, like ours)
Comment 6 Doug Schaefer CLA 2012-01-13 11:46:51 EST
(In reply to comment #4)
> Just so you know... Photran reuses the CDT New Project Wizard, adjusting the
> wizard title/description in the constructor and overriding #continueCreation,
> #getLanguageIDs, #getNatures, and #setCreated to (1) add the Fortran project
> nature to the C nature and (2) filter the dialog to show only Fortran project
> types and toolchains.

Photran is definitely on my mind as I do this. Hopefully I can make it easier to manage, especially on the filters front.

> It doesn't completely succeed at #2 -- e.g., the XL C/C++ project types still
> show up, and it's unintuitive that an Empty Makefile Project doesn't have any
> Fortran error parsers enabled -- but this isn't the fault of the project
> wizard.

I've already commented another bug about xlc and will try to clean that up for everyone.

> So, if it's possible for Photran to reuse the new New Project wizard as before,
> that would be ideal.  And if it would be possible to replace the Empty Makefile
> Project type with our own, that would be an added bonus.

The empty project things are bizarre to begin with. There has to be a better way of dealing with them. We'll see what I can come up with.
Comment 7 Doug Schaefer CLA 2012-01-13 11:52:55 EST
(In reply to comment #5)
> Our IDE for a custom C variant also has a wizard based on a CDT new project
> wizard.
> Can the language selection from comment#1 be made extensible? Also there may be
> a need for a more generic wizard name ("New C/C++ Project" will not work for
> Photran and other languages, like ours)

We've struggled for years to come up with a name for CDT and family projects. Nothing is obvious.

I think for now, having multiple entry points into the wizard still makes sense. At least per language (somewhat backing away from the C/C++ combined entry point idea), maybe per target, maybe per template.
Comment 8 William Swanson CLA 2012-01-13 12:01:35 EST
Some suggestions, based on the changes I made to the wizard in Tilera's IDE:

1 - Consider adding an "intro" page that asks a few up-front questions
    regarding the most common project usages, and makes the corresponding
    changes on subsequent pages. Ideally, in the simplest projects,
    the user could just hit "Finish" without having to leave this initial page.

    Some examples:
      - project location (workspace or existing directory,
         and infer project name from project directory name)
      - project language (C/C++), since you're considering adding it
      - Makefile vs Managed (exe, shared lib, static lib)
      - platform (native vs Cross-GCC compilation)

    This can help a lot when a user wants to do something really simple,
    but does not recall exactly what that translates to in terms of
    project types, build tool chains, etc. (This still has value even if
    we clean up the project type selection page, as proposed by Bug 234860.)

2 - Make this "intro" page replaceable e.g. via an extension point,
    so integrators (such as myself :-) have the option of substituting
    a page that adds more questions (Example: for Tilera's IDE we also
    need to know whether the user is building for Tilera hardware,
    and if so which MDE installation they wish to use.)

3 - Consider making the wizard UI more programmatically drivable,
    so code like the intro page can make changes like setting the
    project name, selecting the project type, etc.

I'll attach a screenshot of the intro page we use as an example.

Regarding item 2, I've coded such an extension point, which I'd be
happy to share it would be of use.
Comment 9 William Swanson CLA 2012-01-13 12:03:33 EST
Created attachment 209469 [details]
example of an "intro" page for the wizard
Comment 10 Eugene Ostroukhov CLA 2012-01-13 12:39:10 EST
Nice UI!

Can it also be used to import the sources (i.e. if the user selects directory that already contains the sources)?
Would it be a stretch to add wizard from "Team->Share Project" into the wizard flow so the user could configure VCM when adding a project?
Comment 11 Corey Ashford CLA 2012-01-13 17:22:16 EST
(In reply to comment #9)
> Created attachment 209469 [details]
> example of an "intro" page for the wizard

This intro page idea is very nice!

I would like to see the idea of projects that are outside of the workspace be
extended to remote projects as well (via RSE etc.).
Comment 12 Doug Schaefer CLA 2012-01-16 09:50:46 EST
In my experience, users struggle with the concept of 'workspace'. It would be nice to hide that a bit. If they don't care where the project goes, we put it in the workspace. If they do care where it goes, chances are it's external, usually relative to some source control root. It might even be nice to have integrations with source control plug-ins to facilitate that.
Comment 13 Doug Schaefer CLA 2012-01-19 10:10:25 EST
The idea I'm starting to conclude on and will start prototyping is that we start with a basic new project wizard page that includes project name, location, and working set settings. After that, we elevate templates to be first class citizens, similar to visual studio. The user selects a template and that drives the remainder of the new project wizard.

We can have generic "Empty" project templates that drive things like toolchain selection and configuration set up. I'll have to see how we'd organize the other templates, like the Hello World ones, maybe make them gcc specific. We'll definitely need to organize templates in categories and allow a search function to improve scalability. We'll learn more as the prototype proceeds.

Thoughts?
Comment 14 William Swanson CLA 2012-01-19 12:46:47 EST
I suggest that if we go the template route, we should make sure that:

(a) the effect(s) of a template on the resulting project
    are clear and bounded, and should do just what's needed
    and no more -- one shouldn't have to use the template
    and then undo a number of things to get to the starting
    point you want.

    (This happens to me a lot in Visual Studio, where there are
    a zillion compiler/linker settings and it can be tedious
    undoing things the template has set for you. I find as a
    result that I tend to start with the minimal "Empty Project"
    template and work up from there -- it's just safer and
    more consistent when I know exactly what changes have been
    made to the project, beyond the most basic ones like kind
    of build product and tool(s) to use.)

(b) it's easy to add new templates that can change settings
    in the wizard and/or the generated project -- for integrators,
    being able to quickly add a template for one or more
    specialized project types is important
    
(c) it's easy to remove the predefined templates, so one can
    keep the template list down to a manageable set -- again,
    for integrators, it's just as important to be able to remove
    stuff the intended user(s) will likely not need to deal with

It's clear that we need some way for the user to say
"I need to do X" and quickly get to a known state with a
project they can pour code into. Templates may be the answer,
but we should take care that they don't become another long list
of opaque options that the user needs to carefully choose from
every time they create a new project.

I was going to suggest dividing templates up into a "tree" of options
(like first you choose a type of project, then content for it, etc.
and each selection filters the ones that follow) but that's leading
back to the current language/toolchain/build selection hierarchy again.
It's a careful balancing act, no question.
Comment 15 Marc-André Laperle CLA 2012-01-22 09:39:55 EST
(In reply to comment #0)
> I'll come up with a prototype for the wizard and check it in. It'll sit beside
> the existing one so we can compare and contrast, and turn it off if we need to
> scrap it.

Would it be a good idea to work on this in a separate feature branch? If we need to scrap it then it just won't be merged in master.
Comment 16 Doug Schaefer CLA 2012-01-22 11:08:07 EST
(In reply to comment #15)
> (In reply to comment #0)
> > I'll come up with a prototype for the wizard and check it in. It'll sit beside
> > the existing one so we can compare and contrast, and turn it off if we need to
> > scrap it.
> 
> Would it be a good idea to work on this in a separate feature branch? If we
> need to scrap it then it just won't be merged in master.

Nah, that's a pain. Doing it in master forces me to keep things working with both wizards in place. If we decide to scrap it, we just remove the extension and it disappears for the user.

BTW, in case you haven't seen it, the beginnings of it are there now (New->C/C++ Project (new)). I'm really liking how the workflow is working with templates elevated to first class citizens. It so much easier to understand.
Comment 17 Andrew Gvozdev CLA 2012-01-22 13:27:23 EST
(In reply to comment #15)
> (In reply to comment #0)
> > I'll come up with a prototype for the wizard and check it in. It'll sit beside
> > the existing one so we can compare and contrast, and turn it off if we need to
> > scrap it.
> Would it be a good idea to work on this in a separate feature branch? If we need
> to scrap it then it just won't be merged in master.
I agree with Marc on that. I think it is better development practice to do side development on a branch and merge to master when it is ready. That was a pain to keep up with the HEAD in CVS but with git, you can easily rebase anytime you like.
Comment 18 Doug Schaefer CLA 2012-01-22 14:11:33 EST
(In reply to comment #17)
> (In reply to comment #15)
> > (In reply to comment #0)
> > > I'll come up with a prototype for the wizard and check it in. It'll sit beside
> > > the existing one so we can compare and contrast, and turn it off if we need to
> > > scrap it.
> > Would it be a good idea to work on this in a separate feature branch? If we need
> > to scrap it then it just won't be merged in master.
> I agree with Marc on that. I think it is better development practice to do side
> development on a branch and merge to master when it is ready. That was a pain
> to keep up with the HEAD in CVS but with git, you can easily rebase anytime you
> like.

Call me old school then :). This feature isn't big enough, nor intrusive enough to warrant that. And it shouldn't take too long to be ready for people to try.
Comment 19 Marc-André Laperle CLA 2012-01-22 15:21:25 EST
(In reply to comment #13)
> We can have generic "Empty" project templates that drive things like toolchain
> selection and configuration set up. I'll have to see how we'd organize the
> other templates, like the Hello World ones, maybe make them gcc specific. We'll
> definitely need to organize templates in categories and allow a search function
> to improve scalability. We'll learn more as the prototype proceeds.
> 
> Thoughts?

I don't know, that sounds like a lot of templates. I think selecting a set of toolchains (maybe call it Target platform?) first would bring that number down. Then the user could select one of the templates compatible with this set. That way, the same template can be reused for many toolchains, like is it currently done with the core.templateAssociations extension point.

I like the idea of having a search function in case of many templates. But I would not want a beginner to have to search for "Hello world" because it's buried in a long list. Chances are that the beginner doesn't know what to look for in the first place.
Comment 20 Doug Schaefer CLA 2012-01-23 11:59:22 EST
(In reply to comment #19)
> I don't know, that sounds like a lot of templates. I think selecting a set of
> toolchains (maybe call it Target platform?) first would bring that number down.
> Then the user could select one of the templates compatible with this set. That
> way, the same template can be reused for many toolchains, like is it currently
> done with the core.templateAssociations extension point.

The templates will be organized in a tree with uber flexibility at defining the hierarchy. Target platforms would be an obvious choice for a category but I don't want to restrict that. That should make the list of templates managable (BTW, we really only have a small handful out of the box).
 
> I like the idea of having a search function in case of many templates. But I
> would not want a beginner to have to search for "Hello world" because it's
> buried in a long list. Chances are that the beginner doesn't know what to look
> for in the first place.

That exactly it. A beginner doesn't know what a toolchain is either. Let's play with the hierarchy and make sure things like the Hello World templates are easy to find.
Comment 21 Marc-André Laperle CLA 2012-01-29 14:32:14 EST
(In reply to comment #16)
> > Would it be a good idea to work on this in a separate feature branch? If we
> > need to scrap it then it just won't be merged in master.
> 
> Nah, that's a pain. Doing it in master forces me to keep things working with
> both wizards in place. If we decide to scrap it, we just remove the extension
> and it disappears for the user.es elevated to first class citizens. It so much easier to understand.

Please consider branching. If the new wizard is not adopted, it will leave superfluous changes and unused code. The CDT code base is confusing enough as it is. Also, if it's in a separate branch, it makes the feature much easier to code review since we can diff between the two branches.

(In reply to comment #20)
> That exactly it. A beginner doesn't know what a toolchain is either. 

Good point!

(In reply to comment #20)
> The templates will be organized in a tree with uber flexibility at defining the
> hierarchy. Target platforms would be an obvious choice for a category but I
> don't want to restrict that. That should make the list of templates managable

I see you've added the parentCategory element in the Template definition and that a template can have multiple parentCategory elements. Say for the Hello World template, would it have a parentCategory of MinGW, another one for Cygwin, etc? Does that mean an externally contributed toolchain can't be associated with the Hello world template? Maybe toolchains shouldn't be categories because of this.

I'm thinking, maybe the core.templateAssociations extension point could still be supported by appending toolchain name to the template name, example:
"Hello World using MinGW GCC"
"Hello World using Cygwin GCC"
"Hello World using Microsoft Visual C++"
...

> (BTW, we really only have a small handful out of the box).
It would be great to have many more! Perhaps in a optional plugin/feature. I'd be willing to work on that (bug 197802 comment 10).
Comment 22 Doug Schaefer CLA 2012-01-29 18:09:04 EST
I'm really liking how this is turning out with the focus being on the templates. It greatly enhances the usability of the CDT new project wizard. And doing a quick survey, all major IDE's do it this way. Unless I get a veto, this is going through.

For the Hello World template, there are a couple of ways to go. The choice of toolchain will likely be one of the template pages (and make it reusable for other templates). I wouldn't create separate templates for each. Again, I'm anticipating the user doesn't really know what toolchain they're using. If they only have one toolchain installed, there would be no need to present the choice, which would be confusing anyway.

I'll also create an Empty Project wizard that will allow for selecting project types and toolchains, just like we have now.

Stay tuned. I'll be working more on this once M5 is out.
Comment 23 CDT Genie CLA 2012-02-29 13:22:59 EST
*** cdt git genie on behalf of Doug Schaefer ***

    Bug 368552 - Hooked up template wizard pages.

[*] http://git.eclipse.org/c/cdt/org.eclipse.cdt.git/commit/?id=7585db1990bcc82c440a5dbd65b5d8e76cd5f835
Comment 24 CDT Genie CLA 2012-02-29 13:23:02 EST
*** cdt git genie on behalf of Doug Schaefer ***

    Bug 368552 - Hooked up template wizard pages.

[*] http://git.eclipse.org/c/cdt/org.eclipse.cdt.git/commit/?id=7585db1990bcc82c440a5dbd65b5d8e76cd5f835
*** cdt git genie on behalf of Doug Schaefer ***

    Bug 368552 - Hooked up template wizard pages.

[*] http://git.eclipse.org/c/cdt/org.eclipse.cdt.git/commit/?id=7585db1990bcc82c440a5dbd65b5d8e76cd5f835
Comment 25 CDT Genie CLA 2012-02-29 13:23:04 EST
*** cdt git genie on behalf of Doug Schaefer ***

    Bug 368552 - Hook up finish button.

[*] http://git.eclipse.org/c/cdt/org.eclipse.cdt.git/commit/?id=453f71f4c4f4fdc8652d308c30a6a538c471d6f0
Comment 26 Marc-André Laperle CLA 2012-04-18 01:00:09 EDT
(In reply to comment #22)
> If they
> only have one toolchain installed, there would be no need to present the
> choice, which would be confusing anyway.

There would be no need to present the choice but I think the automatically selected toolchain should still be mentioned somewhere, maybe in a less intrusive way then a page. It's possible that the only one toolchain detected is wrong and that the user actually wants a second toolchain that wasn't detected properly.

> Stay tuned. I'll be working more on this once M5 is out.

Is it safe to assume this won't make it into Juno? Just want to know whether I should look into committing fixes for bug 353786 / bug 353790 or not.
Comment 27 Doug Schaefer CLA 2012-04-18 10:15:04 EDT
(In reply to comment #26)
> (In reply to comment #22)
> > If they
> > only have one toolchain installed, there would be no need to present the
> > choice, which would be confusing anyway.
> 
> There would be no need to present the choice but I think the automatically
> selected toolchain should still be mentioned somewhere, maybe in a less
> intrusive way then a page. It's possible that the only one toolchain detected
> is wrong and that the user actually wants a second toolchain that wasn't
> detected properly.
> 
> > Stay tuned. I'll be working more on this once M5 is out.
> 
> Is it safe to assume this won't make it into Juno? Just want to know whether I
> should look into committing fixes for bug 353786 / bug 353790 or not.

Yeah, I finally got back into thinking about this today. The transition to QNX was more complicated than I planned.

This feature is certainly at risk of making it into Juno given how little time I have left to work out the issues. If you have fixes the the existing wizards, I'd put them in.

I'll make a decision by tomorrow what I want to do here. Leaning towards deferring at the moment since this is a pretty major user impacting change that needs more time to mature.
Comment 28 Doug Schaefer CLA 2012-04-18 12:02:30 EDT
Yes, I am deferring. There just isn't enough time and I want to focus on fixing various bugs from here on in with Juno.
Comment 29 Dimitar Peikov CLA 2012-06-01 01:25:12 EDT
It would be nice to have general selection for globaly preferred toolchain, thus to extend individual preferred toolchain.
Comment 30 Dimitar Peikov CLA 2012-06-01 02:19:26 EDT
What about to have posibility to have capability to include configurations for frameworks as extension. E.g. something like: generic libraries, UI, shared configuration settings, unit testing, reporting frameworks. And depending on installed features to be able to combine them. Also could be nice to have grouping by keyword or feature.
Comment 31 Doug Schaefer CLA 2012-06-01 07:50:32 EDT
(In reply to comment #30)
> What about to have posibility to have capability to include configurations for
> frameworks as extension. E.g. something like: generic libraries, UI, shared
> configuration settings, unit testing, reporting frameworks. And depending on
> installed features to be able to combine them. Also could be nice to have
> grouping by keyword or feature.

By switching things around to be template centric, as long as templates are provided for these things, it should be possible.
Comment 32 Leo L CLA 2014-02-06 12:00:08 EST
Created attachment 239707 [details]
Dialogs with discrepancies associated with discovery configurations at project, system, and new project access points.
Comment 33 Leo L CLA 2014-02-06 12:05:39 EST
Would it be possible to reconcile the project vs system vs new project configuration pages? Would that be less confusing? I have added an attachment showing the discrepancies I find confusing. Here is a specific proposal to address the dialog boxes and functionality:

Current sources of confusion:
* The discovery option dialogs do not match (see attachment). They are called "Discovery" in the top left dialog, "Discovery Options" in the top right dialog, and "Providers" in the bottom dialog. In the top left there are no check boxes (although there are checkboxes in its sibling -- Error Parsers.)

* It is not possible, even using plugin_customization.ini, to set the default discovery options - even if you do it in the top right dialog, the Makefile project still uses "User Settings" and "Managed Build Settings" (does the latter even make sense for a makefile project)? If you try to select "Automate discovery of paths and symbols", you get the confusing (i.e., bug 142619) message "This discovery method is deprecated, use 'Preprocessor Include Paths' instead", and the "GCC per file scanned" setting seems to be ignored.

The suggestion is to simplify this workflow in one of two ways. Either:

1. Drop the two tabs "Error Parsers" and "Discovery Options" from the New Project (top-right) dialog and use the settings from the System (top-left) dialog; and add checkboxes to the "Discovery" tab in the System (top-left) (like in its sibling "Error Parsers" and the Project (bottom) dialog; then use those settings for new projects.

or

2. Copy the tab from the Project (bottom) dialog onto what is currently "Discovery Options" in the New Project (top-right) dialog; and rename all three tabs to the same thing. "Discovery" maybe? 

This way, at least the project settings and the system-wide settings have the same interface, and the user doesn't have to change the settings every time they create a new project.

Thanks for considering it. Please let me know if you have further questions.
Comment 34 Jonah Graham CLA 2019-12-30 18:55:58 EST
This bug was assigned and targeted at a now released milestone (or Future or Next that isn't being used by CDT). As that milestone has now passed, the milestone field has been cleared. If this bug has been fixed, please set the milestone to the version it was fixed in and mark the bug as resolved.