Its been a couple of weeks since my last post, so I thought it was time for a little update. I've been hard at work refactoring Snip-It Pro and integrating it with CAB and Smart Client Software Factory (SCSF). The main reason I did this was because I wanted to create a dedicated window for editing and managing snippets to compliment the standard window that docks to either the left or right of the screen.
Here is a very rough screenshot of what the result looks like. Keep in mind I haven't gone a cleaned up the UI by adding images, fixing fonts, etc:
Both windows need to respond to commands and events that occur in the other one, and creating a direct relationship between the two windows without some sort of event and command broker would just create a tangled mess of code. I was impressed by how CAB events and commands decoupled the publisher from the subscriber, so I decided to go with that.
In a previous post, I mentioned that I went from one .Net project to several. Here is a screen shot of the new solution structure:
The projects under the infrastrucutre folder are created automatically when you create a new Smart Client Software Factory project. I had to copy the main Snip-It Pro form into the shell and modify the generated ShellApplication class to instatiate the old Shell instead of the Shell form that is generated by SCSF.
In SCSF you can put your code into either a business module or a funtional module. I created two functional modules so far, one to house services that deal with core services that are registered with the Service Locator provided by CAB and one to handle File IO operations for persisted Snippets to the file system.
I created two business modules so far as well. One houses all the views that make up the new windows used to edit and manage snippets and folders. The second I am using to separate and centralize all the command registration and handlers for the various menus, toolbars and context menus. For example, the original Snip-It Pro had all the right click menu items hard coded in the form, and the handlers were coded directly in the code behind of the form. Now, the main form exposes each type of context menu as a UIExtension site, and a separate module not only adds the menu items to each context menu, but also handles the execution of that "command."
Moving to this architecture required me rip out a lot of functionality and reimplement it. To give you an idea of where I am in the refactor, here is what is left in the order of how I will do them:
- Move Standard Menu Items from old sidebar to Snippet Details Window. (I figure it would be more natural to set preferences and settings in a standard File Menu than how I have it in the current version)
- Reintroduce the Clipboard monitoring Functionality.
- Reintroduce Import/Export Functionality.
- Get Search Working again (I changed a bunch of stuff and just need to update the old search code)
- Bring back the splash screen and integrate licensing again.
- Clean up the UI (pick Icons, fonts etc for the Detail window)
- Update the Help files.
- Update the web site and relaunch Snip-It Pro as version 2.0
I still haven't decided where to include Snipplr integration in this release. I also want to find a good rich text component that will give automatic code formatting to replace the current enhance rich text box used to edit snippets. If you have any suggestions for such a component, especially one that won't break the bank, leave a comment.
The changes aren't coming quickly enough. I can estimate each of these tasks to take me a weekend give or take, which puts about 8 weeks out from even being ready for a small beta.