Well, 4:00PM was my deadline, so here’s where we landed. That’s a screenshot of the running app. I feel pretty good about the progress that I made, but I think it’s going to take a couple more days to finish this up…so one or two more weekends. For now, you can get the source as it stands right here. Remember, it’s definitely not done so this is just for learning/fun.
Some interesting notes about development: First, I had to restructure the data again once I started building it. The original approach kept all of the tasks in collections that belonged to each of the projects. This made it difficult to get a complete list of all the tasks (without doing a lot of artificial collection manipulation). In the end, I structured the data a lot more like it’s structured on Remember The Milk: I keep a list of tasks and a list of projects and then tie them together with an ID reference. This is a little more DB and a little less XML, but it really simplified things.
Second, I ended up creating three controls that are worth sharing. They need some tweaking before they are general purpose (I was rushing through this stuff) but you can sift through the source and use them as you please.
The first is a Shape called CalloutShape. This is the shape you see surrounding the calendar above. Right now, the arrow is in a fixed spot and has a fixed width and height. That would be really easy to customize though. If you do the work, let me know and I’ll post or link to the cleaned up version. If you haven’t created a shape before, this is probably worth check out. It’s a really straightforward example. When creating the shape’s geometry, I use a CombinedGeometry to merge the arrow with the rounded rectangle. That’s a handy technique for creating a geometry that might otherwise require a lot of math (in this case, to handle the rounded corners)
Next is a panel called IndexingStackPanel. This actually comes from Kaxaml. It’s basically just a StackPanel that sets attached properties on it’s children that let you know the child’s index, whether it’s odd or even, where it is relative to the selected item in a Selector, etc. It’s really useful for things like alternating line colors, etc. This one is relatively robust.
Finally, there’s a really simple Calendar control in there. Probably still too simple at this point. It’s meant to be used with another control that will handle month changes, etc. Right now it just displays a set of dates and let’s you select one. Again, if you do anything cool with it let me know.
Well, thanks for following along this weekend. I’ll keep you posted on ThoughtBox’s progress. If you’re a fellow GTDer and looking for something that works on Windows, I’d love a hand on this project so drop me a line and we can crank this out.