http://engy.us/misc/HandbrakeWpfPrototype-0.0.1.zip
It's written in WPF, so you'll still need .NET 3.5. You'll also probably still need DVD43 or AnyDVD to rip DVDs. Right now it's running off the 0.9.4 CLI.
As you can see, I changed things around a bit. The primary motivation for doing this is getting a conceptual separation of what you want to encode and how you want to encode it. The "what" portion is on the main UI: the chapters, the audio tracks to include, the subtitles to add. The "how" is tucked away under the encoding section:
Here's where you specify rules for handling picture settings, video encoding quality and filters, as well as how you want to encode any audio tracks you may have picked. The idea is you spend some time tweaking your encoding settings, then apply them to multiple tracks or movies. Optionally, you can tweak the encoding settings before each item. You can also create your own presets, or just use a "scratchpad" encoding profile which is automatically saved when edits are made. One thing to note is that the user presets and built-in presets have exactly the same power.
The queue is now also part of the main UI. I moved it here because it fits in with the workflow of the main form: you've got the encoding settings how you want them, now you want to do a bunch of ripping.
Also, as a side effect, the "big button ribbon" is gone. I thought its functionality was a little bit schizophrenic, so I broke it up. "Show queue" is gone, the "Select source" has been merged with the source label, the activity log will probably end up in a normal menu and the Start/Add to Queue buttons are down near the queue area where it makes sense from a workflow standpoint.
One more change I've made is getting rid of the popping up console windows. I realize that this means you need to kill the CLI process to stop it, but I figured I would explore the change (especially since the windows were driving me crazy). Anyway if we get standard input on the CLI or switch over to library calls, this won't matter so much.
I've also changed the preview to just simply open the file it's just created with whatever program the user has default for that extension in Windows: Neither Quicktime nor VLC are required. The in-UI quicktime thing never worked for me anyway.
Some other new stuff:
- Multiple DVD drives supported.
- Detects DVD eject/insert and automatically scans new discs.
- Real-time previews of output picture display dimensions.
- List items (audio encodings, subtitles) are editable directly on the list rather than requiring everything go through a single editing area.
- Flexible window sizes, and smaller minimum window sizes.
- Program remembers window sizes and locations.
- Drag and drop reordering for queue items, subtitles and audio encodings.
- Progress bar on the taskbar icon in Windows 7.
- Both width/height and maxwidth/maxheight are visible and available for editing.
- Encoding settings still available while scanning.
- Explicit Save/Save As for user presets.
- Instant UI updates when changing number fields.
- Chapter markers (though I have a good idea of how I'm going to add them)
- Advanced x264 options
- Options dialog
- Activity log
- Menu, with help/exit/etc
- Growl notifications
- Drag and drop file on to UI to encode
- The other presets
- Queue recovery (would autosave and recover silently and automatically)
- Angles
- Preview button on the main UI (have not finalized where to put it yet, probably down near start/add to queue)
- Program/Preset updates (need some work here, should probably version the preset XML so we can upgrade it if the structure changes)
There's also some polish needed, such as icons on save, add, enqueue buttons, an animation for the "Scanning..." text, and lots more tooltips and warnings about restrictions that we apply.
One other note from an architectural standpoint is that the UI, program logic and preset format is completely separated from the idea of calling the CLI to do an encode. Changing the program to do P-Invokes into a library would be a relatively straightforward procedure. Also if you take a look at the source, you may notice it's written in MVVM. It's a bit weird at first, but I quite like it. It also lays groundwork for adding unit tests later if we feel like it (though my home copy of VS doesn't support unit test projects).
Anyway, what do you think of what's there? Comments, suggestions and criticism are all welcome.