Factor Mystic

20Nov/0911

Aero.Wizard and Aero.Controls code pack released

I'm pleased to announce the first stage of my roadmap to fully open Default Programs Editor with the release of Aero.Wizard and Aero.Controls.

What are Aero.Wizard and Aero.Controls?

Aero.Wizard is an WinForms implementation of an Aero Wizard Dialog. Aero.Controls is a package of a half dozen WinForms controls, intended for use with an Aero Wizard Dialog. These are some of the components I wrote for the creation of Default Programs Editor 2.0 with the revised user interface, and I'm now freely releasing them to the public.

Aero.Wizard:

Aero Wizard Info Screenshot

Aero.Wizard Info Screenshot

Aero.Wizard Features:

  • History/Navigation handled automatically
  • Page contents are children of separate container controls, which can be created in design time like a regular Windows form
  • Glass title area degrades gracefully when running a theme without glass, or on XP
  • Blank Wizard Page template included
  • Use with Aero.Controls pack to make Windows UX Guidelines compatible user interfaces

Aero.Controls:

Aero.Controls Info Screenshot

Aero.Controls Info Screenshot

Aero.Controls Includes:

Both of these projects strive to adhere to the Windows User Experience Guidelines, freely available documentation from Microsoft which provided the basis for the DPE 2.0 restructuring.

Licensing

I debated for some time on this issue, trying to figure out a permissive license where I could retain some amount of ownership without being overbearing. I settled on BSD, which in my opinion is very permissive and seems to be low-friction for other developers to use this code in their projects.

Downloading

Both projects are hosted on Bitbucket (Mercurial) and you can either clone the repositories, or download the latest revision as a zip file. I encourage anyone to contribute bug fixes or report issues on each project's public issue ticketing system.

Aero.Wizard on Bitbucket

Aero.Controls on Bitbucket

What's next?

With the release of this code pack, my plan for fully releasing Default Programs Editor is underway. It is now possible to fully replicate the UI with this release. The next step is for me to continue refining and documenting the base file association library the project is built on, then release that as well as the UI logic for the program itself. Be looking for that in the next few months.

  • blub

    This is really cool. I was searching for something like your library for months :)

  • Stefan

    Hi,

    is it possible to use the aero wizard for applications which should run on Windows XP too? Does he have the native WinXP/Wizard look then_

  • Factor Mystic

    It works on XP, but it doesn’t switch to an old wizard style; just a gracefully reduced mode.

  • alleyes

    Long search for Aero Controls/Wizards taken me here. What a find! Absolutely perfect for anyone looking to upgrade wizard pages to the new controls. Many “Aero” samples out there including samples in the latest SDK (v.7.0) However, this is the only code pack that works in XP as well. Perfect if you are targeting XP and up.

    Well done

  • alleyes

    Stupid question here.
    Does your code pack allow a page as the start-up? That is show a wizard page first rather than have another form call the ShowDialog method of the first page?

  • alleyes

    Any plans for a WPF port?

  • factormystic

    You mean, can the wizard be the only form of your application? Like how Default Programs Editor works? If this is your question, yes, no other forms are required.

  • Al

    I figured it out. Call ShowDialog and pass the instance of the first page in Main.
    How do you pass any control values from controls placed on a page? That is, if I have an instance of page1, and it has controls contained, I can't get an instance of a local page1 on page2 and have the local page1 objects avaialable.

  • factormystic

    You could do it a couple ways. One easy way is to make the controls public scope, then access them via their page via the Wizard's history stack. You could also define globally scoped data structures in your Program.cs (if this is a Wizard-only project, this is probably where you'd instantiate it). Basically, do it the same way you'd access data or controls in a multi-form application, except, in this situation the forms are page controls and they all have access to one another via their host Wizard.

  • Nameless

    I must say, your coding style is severely lacking. I pray to God that nobody will ever inherit any code you write. These projects are the biggest mess I have come across in quite some time. Variables thrown all around the place, random naming conventions, redundant comments, violating several standard coding practices, not using P/Invoke correctly (you just stole some code from random websites, I guess?), etc. etc; the list could be continued endlessly.

    Even after taking apart Aero.Wizard and Aero.Controls and throwing away everything I don’t need (seriously, a Main Instruction Label whose only function is to enforce a specific Font and ForeColor???), FxCop still gives me over 60 warnings.

    I still have about a day of refactoring to go before this stuff is anywhere near usable for production-quality code; I’ll stop for now since the day is almost over. The depressing thing is that due to the BSD license, I actually have to credit you for your “effort” even though my refactoring is essentially equivalent to a rewrite. *sigh*

    PS: No, I don’t intend to make my refactoring efforts public.

  • Anonymous

    Aero.Controls isn’t a shrine to elegance, it’s an effort in convenience. The Windows UX Guidelines dictate what a Main Instruction label is, and so I set those defaults. Yes, it’s just like a regular label you get out of the box… except, it’s ready to dump onto a form and be ready to go. Just like the rest of the controls.

    Aero.Wizard is a bit rough, because I ripped it out of Default Programs Editor, rather than starting it as a separate project from the start.

    However, it takes some hubris to announce you have superior revisions you won’t be contributing back. This is why it’s open source- so my efforts can be improved upon by others such as yourself, and the next guy benefits from both of us, and so on. Not contributing back isn’t hurting me, it’s hurting the next guy who was looking to make an Aero UX compliant project in Winforms, and came here not interested in rewriting the wheel. This stuff is super basic, and nobody should have to rewrite it from scratch- that’s why I posted it.