Excel has a feature called “File/Save Workspaces…” which saves the layout of multiple spreadsheets, so that in the future one can load multiple spreadsheets at once in a preconfigured arrangement. (There’s also a similar feature “Views/Custom Views” which works within a single spreadsheet and preserves a number of view and print settings.)Visual Studio in the late nineties added the concept of solutions, which grouped multiple interdependent projects together into a single file.
Similarly, NStatic has a notion of workspaces in which multiple files, directories, projects/solutions can be grouped into a workspace. Whereas solutions are “meta-projects,” workspaces are “meta-meta-projects.” A workspace also stores scan settings.
The first time NStatic is run, the Workspace View pane presents a task-oriented (inductive UI) interface indicating that workspace is empty and files must be added.
My rationale for doing this is not to lose any users by keeping the user from wading through unfamiliar menus and pointing him to the logical first step. I am not going to make the optimistic assumption that a new user will know what a “workspace” does.
Each successive launch of the application reloads the last workspace (unless a modifier key is pressed.) Most users probably only need to scan one project.
When a project or solution is added, only those source files included in the project are added as are any references.
When a directory is added, all of the files below that directory and subdirectories are added for scanning, but any file can be excluded by manually. Although not required for scanning, any references to dependent non-system (or older system) assemblies have to be added manually. Individual files can be added individually.
References to certain .NET 2.0 system assemblies are automatically detected and loaded when its matching namespace is found in a using declaration and if no other reference of the same name has been added to the project. So, any use of the namespace System.Windows.Forms loads the assembly for WinForms. This method isn’t fool proof, since namespaces aren’t actually tied to any specific assembly. Mscorlib and System.dll are automatically loaded.
Below are the menus shown for the File menu and the Workspace menu.
To be honest, I don’t really like the workspace concept much…I am still thinking of removing the concept of workspaces altogether.
Workspaces add a little too much complexity as seen by the double menus. For instance, should opening a file from the File menu add the file to the workspace?
I previously had an “Add File…” item in the workspace menu, which offered two ways to open files from two different menus. The option in the workspace menu both opened the file and added it to the workspace, while the option in file menu simply opened the file is standalone mode. This had to potential for confusion, so I removed the “Add File” option, and simply came up with the rule that opening anything adds it to the workspace.
My other dilemma is whether to use the same file open dialog for loading both projects and files. I can take this a step further and load workspaces and references from the same dialog, in which case I may be able to eliminate the workspace menu altogether.