Fancy Windows, &c.
Lately, inspired by John Gruber‘s recent assertions that the Apple Human Interface Guidelines are no longer relevant (a good summary can be found here), the new, fancier widgets made by various Cocoa developers have come into the spotlight. Daniel Jalkut, a Very Cool Guy, developed a bunch of very nifty widgets while revamping the interface for his unbelievably cool application FlexTime, and was so kind as to blog about his thought process while doing it. His blog entry pointed me to Matt Gemmell‘s enormous stack of custom-made widgets, replete with shiny screenshots. My interest piqued, I fired up Google and found Sean Patrick O’Brien’s iLifeControls framework, a class-dumped version of Disco‘s Smoke framework, Toxic Software’s Toxic Progress Indicator and TXTableView, Chad Weider’s badging and gradient code, Blake Seely’s BSRoundedBox, Andy Matuschak’s Polished Metal buttons, AMViewAnimation, and OpenHUD framework, Andreas M.’s jaw-dropping amount of custom widgets, Erling Ellingsen’s CGSWindowWarp exposé, John Pannell’s PSMTabBarControls, Uli’s freakin’ plethora of awesome doodads, Rainer Brockerhoff’s RBSplitView, and Ankur Kothari’s CoreGraphics framework.
I’ve had a project idea brewing in my head for some time now, and after a lot of planning and drawing up drafts, it’s starting to come to fruition. However, this throws a new wrench into the works – if I want to have a lot of users, I need to have a nice interface; however, if I use too many of the above fancy widgets, then I will resign myself to being labeled one of the Delicious Generation. Besides, the target audience for my application is developers, and developers have a notoriously low tolerance for bells-and-whistles without functionality – most of the harshest criticism I’ve found has been written by developers. (If you ask me, I think it’s ugly and doesn’t do anything that Disk Utility or the Finder don’t.)
As a result, I’ve been pondering how I’m going to implement the user interface. Right now, only the left side of the window is really clear in my mind as regards to the layout; I’ve decided to use an NSTableView. (Big whoop.) However, to add some spice, I decided to make the cells a bit bigger, a lá FlexTime. (Is it just me, or are standard NSTextCells far too small? Actually, it’s probably just me; never mind.) However, Apple have decided to make NSTextCells quite difficult to modify – when the cells do get bigger, the text clings to the top. In order to fix this disturbing problem, I am using RSVerticallyCenteredTextCells. The CTGradient class has also caught my eye, and I therefore wish to try and implement the oh-so-chic Aqua blue-gradient for selected items in that NSTableView.
The window style is bothering me greatly. Should I use the standard Aqua window, Brushed Metal or the look provided by the StyledWindow, colloquially referred to as Polished Metal? This has been troubling me greatly, but I think I’m coming to some sort of conclusion on this issue – standard Aqua it is. As cool as the iTunes look is, a lot of developers really loathe it. Additionally, my tool is going to depend on quite a bit of third-party code even without the interface, so I’d like to avoid customizing every single widget. Besides, if Apple pull a fast one on us and completely abandon Polished Metal in Leopard, I don’t want to look like a fool.
As far as visual effects go, I’m still undecided. As previously mentioned, developers don’t like UI goodness when it gets in the way of functionality, so I have to walk a very fine line here. I’m not planning on challenging NewsFire for Champion of Snazzy Effects, but I’m still going to try – I have ideas for Chad Weider’s badging and gradient code, and plan to put some code that I wrote (yes! actual, original code!) that fades windows to use. Check back here for more ideas as they emerge in my brain, and wish me luck with this app.