/// <summary>
        /// Updates active workspace and AssemblyList according to <see cref="PersistedWorkspace.IsActive"/> flags.
        /// </summary>
        void UpdateActiveWorkspace()
        {
            var mainAssemblyList = SD.ClassBrowser.MainAssemblyList;

            if ((mainAssemblyList != null) && (activeWorkspace != null))
            {
                // Temporarily detach from event handler
                mainAssemblyList.Assemblies.CollectionChanged -= AssemblyListCollectionChanged;
            }

            activeWorkspace = persistedWorkspaces.FirstOrDefault(w => w.IsActive);
            if (activeWorkspace == null)
            {
                // If no workspace is active, activate default
                var defaultWorkspace = persistedWorkspaces.FirstOrDefault(w => w.Name == DefaultWorkspaceName);
                activeWorkspace           = defaultWorkspace;
                defaultWorkspace.IsActive = true;
            }

            mainAssemblyList.Assemblies.Clear();
            if (activeWorkspace != null)
            {
                foreach (string assemblyFile in activeWorkspace.AssemblyFiles)
                {
                    AppendAssemblyFileToList(assemblyFile);
                }
            }

            // Attach to event handler, again.
            if (mainAssemblyList != null)
            {
                mainAssemblyList.Assemblies.CollectionChanged += AssemblyListCollectionChanged;
            }
        }
        /// <summary>
        /// Activates the specified workspace.
        /// </summary>
        void ActivateWorkspace(PersistedWorkspace workspace)
        {
            // Update the activation flags in workspace list
            foreach (var workspaceElement in persistedWorkspaces)
            {
                workspaceElement.IsActive = (workspaceElement == workspace);
            }

            UpdateActiveWorkspace();
        }
        /// <summary>
        /// Loads persisted workspaces from configuration.
        /// </summary>
        void LoadWorkspaces()
        {
            persistedWorkspaces = SD.PropertyService.GetList <PersistedWorkspace>(PersistedWorkspaceSetting).ToList();
            if (!persistedWorkspaces.Any())
            {
                // Add at least default workspace
                persistedWorkspaces = new List <PersistedWorkspace>();
                persistedWorkspaces.Add(new PersistedWorkspace()
                {
                    Name = DefaultWorkspaceName
                });
            }

            // Load all assemblies (for now always from default workspace)
            PersistedWorkspace defaultWorkspace = persistedWorkspaces.FirstOrDefault(w => w.Name == DefaultWorkspaceName);

            ActivateWorkspace(defaultWorkspace);
        }
        /// <summary>
        /// Updates active workspace and AssemblyList according to <see cref="PersistedWorkspace.IsActive"/> flags.
        /// </summary>
        void UpdateActiveWorkspace()
        {
            var mainAssemblyList = SD.ClassBrowser.MainAssemblyList;
            if ((mainAssemblyList != null) && (activeWorkspace != null)) {
                // Temporarily detach from event handler
                mainAssemblyList.Assemblies.CollectionChanged -= AssemblyListCollectionChanged;
            }

            activeWorkspace = persistedWorkspaces.FirstOrDefault(w => w.IsActive);
            if (activeWorkspace == null) {
                // If no workspace is active, activate default
                var defaultWorkspace = persistedWorkspaces.FirstOrDefault(w => w.Name == DefaultWorkspaceName);
                activeWorkspace = defaultWorkspace;
                defaultWorkspace.IsActive = true;
            }

            mainAssemblyList.Assemblies.Clear();
            if (activeWorkspace != null) {
                foreach (string assemblyFile in activeWorkspace.AssemblyFiles) {
                    AppendAssemblyFileToList(assemblyFile);
                }
            }

            // Attach to event handler, again.
            if (mainAssemblyList != null) {
                mainAssemblyList.Assemblies.CollectionChanged += AssemblyListCollectionChanged;
            }
        }
        /// <summary>
        /// Activates the specified workspace.
        /// </summary>
        void ActivateWorkspace(PersistedWorkspace workspace)
        {
            // Update the activation flags in workspace list
            foreach (var workspaceElement in persistedWorkspaces) {
                workspaceElement.IsActive = (workspaceElement == workspace);
            }

            UpdateActiveWorkspace();
        }