Design Overview UI Subsystem Panels and views Control Subsystem Actions and switching tests Anything that can be undone Image Rendering Subsystem Image tools Image stacking Exporting Subsystem Printing and saving (later) Highly event driven Rotating Button -> Worspace -> EventController (execute and send to ActionController's Undo stack) Undo stack? Wasn't there only going to be one undo available? This allows more undos to happen later Some actions have more than one thing happening -> Update the view Event structure Buttons don't have any real state with them, just that a button was pressed The Workspace panel gets that event and re-throws it as a more specific event **Flag #1 Raised*** Panel ordering PanelControler holds the queue of panels (loaded at start) Each panel has an "I'm done" method. That method swaps out the current panel and changes it to the next one Also watches the state and shows the "Progress bar" to tell the users where in the process they are. KilageContext Making a deterministic choice (Choosing the background for instance) Images, Textures, Colors or None Loads the chooser panel with the right type of content before switching into it KilageDialog More than just a dialog Represents a window that comes up Has a clear border so it looks like it's floating over the workspace, but takes up the whole screen Help, Printing, Cropping panels. ThumbnailView The scrolling image selector Has a scrolling direction, number of images per row and what images shoud be shown KilageImage Just 2 images The user's original image The changed image …is owned by the ImageCollection Knows the ordering of the images …is owned by the Killage (Collage) Shape Factory "Crop Paths" not Paths Doesn't have a clue what's getting drawn, just gets an id value Makes adding a new shape much easier Creates a shape, of a specific size from a shape context Event Control There are 2 events, Start and Stop Makes the timer start and do the "Processing" dialog box If you don't want to make that happen, don't register yourself ResourceManager Loads images into KilageImages from directory Does basic memory management Delete image just sets them invisible When the next change happens, "whack off" the image ***Flag 2 raised*** 2 Kinds of Actions (all of them have undos) ImageAction Affects a single image KilageAction Affects all of the images on the Kilage ***Flag 3 raised*** Kilage buttons should only be used if there are sub-menus under that button (like the toolbar) Action Controller is only for events that can be undone ***Flags*** 1. Why can't KilageButton know what kind of event to throw? Can we take out the EventController, as it seems to just be a "blow-through"? 2. The Kodak way queues transforms together and then to get multiple undoes whack off the latest part of the transformations 3. Should there be any size or location parts to the XML to cover for the possibility to make custom-sized buttons