From aaeea686f3e05c9cc964846fc372996f5b18079e Mon Sep 17 00:00:00 2001 From: Daniel Grunwald Date: Fri, 25 Nov 2005 18:39:30 +0000 Subject: [PATCH] Use ToolStripManager.Renderer instead of MenuService.Renderer. Use ProfessionalRenderer+SystemColorTable instead of SystemRenderer. The "CoreStartup" class now helps starting up the core and enables the core user to change the location of the properties file and some other core settings. git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@799 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61 --- .../src/BaseControls/DynamicHelpPad.cs | 7 -- .../Project/src/BaseControls/TocPad.cs | 18 --- .../Src/Gui/Workbench/DefaultWorkbench.cs | 12 +- .../Gui/SearchAndReplaceDialog.cs | 1 - src/Main/Core/Project/ICSharpCode.Core.csproj | 1 + .../Core/Project/Src/AddInTree/AddInTree.cs | 9 -- .../Core/Project/Src/AddInTree/CoreStartup.cs | 106 ++++++++++++++++++ .../Src/Services/FileUtility/FileUtility.cs | 17 +-- .../Src/Services/MenuService/MenuService.cs | 13 --- .../Services/MessageService/MessageService.cs | 2 +- .../PropertyService/PropertyService.cs | 36 +++--- .../ResourceService/ResourceService.cs | 9 +- .../Src/Services/StringParser/StringParser.cs | 2 +- .../Services/ToolBarService/ToolBarService.cs | 23 ---- src/Main/StartUp/Project/SharpDevelopMain.cs | 42 +++---- 15 files changed, 166 insertions(+), 132 deletions(-) create mode 100644 src/Main/Core/Project/Src/AddInTree/CoreStartup.cs diff --git a/src/AddIns/Misc/HtmlHelp2/Project/src/BaseControls/DynamicHelpPad.cs b/src/AddIns/Misc/HtmlHelp2/Project/src/BaseControls/DynamicHelpPad.cs index 1e978bdac8..75ef9f9bd9 100644 --- a/src/AddIns/Misc/HtmlHelp2/Project/src/BaseControls/DynamicHelpPad.cs +++ b/src/AddIns/Misc/HtmlHelp2/Project/src/BaseControls/DynamicHelpPad.cs @@ -368,7 +368,6 @@ namespace HtmlHelp2 dynamicHelpToolbar.Items.Add(button); } - this.RenderModeChanged(null, null); dynamicHelpToolbar.ImageList = new ImageList(); dynamicHelpToolbar.ImageList.ColorDepth = ColorDepth.Depth32Bit; dynamicHelpToolbar.ImageList.Images.Add(ResourcesHelper.GetBitmap("HtmlHelp2.16x16.Toc.png")); @@ -379,7 +378,6 @@ namespace HtmlHelp2 { HtmlHelp2Environment.NamespaceReloaded += new EventHandler(this.NamespaceReloaded); } - ToolbarService.RendererChanged += new EventHandler(this.RenderModeChanged); } public void LoadDynamicHelpPage() @@ -396,11 +394,6 @@ namespace HtmlHelp2 this.BuildANothing(); } - private void RenderModeChanged(object sender, EventArgs e) - { - dynamicHelpToolbar.Renderer = ToolbarService.Renderer; - } - private void ToolStripButtonClicked(object sender, EventArgs e) { ToolStripItem item = (ToolStripItem)sender; diff --git a/src/AddIns/Misc/HtmlHelp2/Project/src/BaseControls/TocPad.cs b/src/AddIns/Misc/HtmlHelp2/Project/src/BaseControls/TocPad.cs index 5e1963fc4a..8de0136778 100644 --- a/src/AddIns/Misc/HtmlHelp2/Project/src/BaseControls/TocPad.cs +++ b/src/AddIns/Misc/HtmlHelp2/Project/src/BaseControls/TocPad.cs @@ -154,10 +154,6 @@ namespace HtmlHelp2 printTopic.Click += new EventHandler(this.PrintTopic); printPopup.Items.Add(printChildTopics); printChildTopics.Click += new EventHandler(this.PrintTopicAndSubtopics); - - RenderModeChanged(null, null); - - ToolbarService.RendererChanged += new EventHandler(this.RenderModeChanged); } catch (Exception ex) { @@ -206,20 +202,6 @@ namespace HtmlHelp2 Controls.Add(nohelpLabel); } - private void RenderModeChanged(object sender, EventArgs e) - { - if (ToolbarService.Renderer is ToolStripProfessionalRenderer) - { - ProfessionalColorTable colorTable = new ProfessionalColorTable(); - colorTable.UseSystemColors = true; - printPopup.Renderer = new ToolStripProfessionalRenderer(colorTable); - } - else - { - printPopup.Renderer = ToolbarService.Renderer; - } - } - public void LoadToc() { if (!this.controlIsEnabled) return; diff --git a/src/Main/Base/Project/Src/Gui/Workbench/DefaultWorkbench.cs b/src/Main/Base/Project/Src/Gui/Workbench/DefaultWorkbench.cs index cdf1e4b361..38ffb56667 100644 --- a/src/Main/Base/Project/Src/Gui/Workbench/DefaultWorkbench.cs +++ b/src/Main/Base/Project/Src/Gui/Workbench/DefaultWorkbench.cs @@ -233,11 +233,12 @@ namespace ICSharpCode.SharpDevelop.Gui public void UpdateRenderer() { bool pro = PropertyService.Get("ICSharpCode.SharpDevelop.Gui.UseProfessionalRenderer", true); - ToolStripRenderer renderer = pro ? (ToolStripRenderer)new ToolStripProfessionalRenderer() : new ToolStripSystemRenderer(); - MenuService.Renderer = renderer; - ToolbarService.Renderer = renderer; - if (TopMenu != null) { - TopMenu.Renderer = renderer; + if (pro) { + ToolStripManager.Renderer = new ToolStripProfessionalRenderer(); + } else { + ProfessionalColorTable colorTable = new ProfessionalColorTable(); + colorTable.UseSystemColors = true; + ToolStripManager.Renderer = new ToolStripProfessionalRenderer(colorTable); } } @@ -471,7 +472,6 @@ namespace ICSharpCode.SharpDevelop.Gui void CreateMainMenu() { TopMenu = new MenuStrip(); - TopMenu.Renderer = MenuService.Renderer; TopMenu.Items.Clear(); try { ToolStripItem[] items = (ToolStripItem[])(AddInTree.GetTreeNode(mainMenuPath).BuildChildItems(this)).ToArray(typeof(ToolStripItem)); diff --git a/src/Main/Base/Project/Src/TextEditor/SearchAndReplace/Gui/SearchAndReplaceDialog.cs b/src/Main/Base/Project/Src/TextEditor/SearchAndReplace/Gui/SearchAndReplaceDialog.cs index c9bf314692..e4c06225eb 100644 --- a/src/Main/Base/Project/Src/TextEditor/SearchAndReplace/Gui/SearchAndReplaceDialog.cs +++ b/src/Main/Base/Project/Src/TextEditor/SearchAndReplace/Gui/SearchAndReplaceDialog.cs @@ -64,7 +64,6 @@ namespace SearchAndReplace toolStrip.Dock = DockStyle.Top; toolStrip.Stretch = true; toolStrip.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden; - toolStrip.Renderer = MenuService.Renderer; searchButton.Text = StringParser.Parse("${res:Dialog.NewProject.SearchReplace.FindDialogName}"); searchButton.Image = IconService.GetBitmap("Icons.16x16.FindIcon"); diff --git a/src/Main/Core/Project/ICSharpCode.Core.csproj b/src/Main/Core/Project/ICSharpCode.Core.csproj index a49852dd44..6173e1fc60 100644 --- a/src/Main/Core/Project/ICSharpCode.Core.csproj +++ b/src/Main/Core/Project/ICSharpCode.Core.csproj @@ -139,6 +139,7 @@ + diff --git a/src/Main/Core/Project/Src/AddInTree/AddInTree.cs b/src/Main/Core/Project/Src/AddInTree/AddInTree.cs index 03d99a90db..d138006e9a 100644 --- a/src/Main/Core/Project/Src/AddInTree/AddInTree.cs +++ b/src/Main/Core/Project/Src/AddInTree/AddInTree.cs @@ -18,8 +18,6 @@ namespace ICSharpCode.Core /// public sealed class AddInTree { - readonly static string defaultCoreDirectory; - static List addIns = new List(); static AddInTreeNode rootNode = new AddInTreeNode(); @@ -28,8 +26,6 @@ namespace ICSharpCode.Core static AddInTree() { - defaultCoreDirectory = FileUtility.Combine(FileUtility.ApplicationRootPath, "AddIns"); - doozers.Add("Class", new ClassDoozer()); doozers.Add("FileFilter", new FileFilterDoozer()); doozers.Add("Icon", new IconDoozer()); @@ -216,11 +212,6 @@ namespace ICSharpCode.Core } } - public static void Load() - { - Load(FileUtility.SearchDirectory(defaultCoreDirectory, "*.addin")); - } - public static void Load(List addInFiles) { List list = new List(); diff --git a/src/Main/Core/Project/Src/AddInTree/CoreStartup.cs b/src/Main/Core/Project/Src/AddInTree/CoreStartup.cs new file mode 100644 index 0000000000..ff5e69a7e8 --- /dev/null +++ b/src/Main/Core/Project/Src/AddInTree/CoreStartup.cs @@ -0,0 +1,106 @@ +/* + * Created by SharpDevelop. + * User: Daniel Grunwald + * Date: 25.11.2005 + * Time: 18:56 + */ + +using System; +using System.Collections.Generic; +using System.IO; + +namespace ICSharpCode.Core +{ + /// + /// Class that helps starting up ICSharpCode.Core. + /// + public class CoreStartup + { + List addInFiles = new List(); + string propertiesName; + string configDirectory; + string dataDirectory; + string applicationName; + + /// + /// Sets the name used for the properties (only name, without path or extension). + /// Must be set before StartCoreServices() is called. + /// + public string PropertiesName { + get { + return propertiesName; + } + set { + if (value == null || value.Length == 0) + throw new ArgumentNullException("value"); + propertiesName = value; + } + } + + /// + /// Sets the directory name used for the property service. + /// Must be set before StartCoreServices() is called. + /// Use null to use the default path "ApplicationData\ApplicationName". + /// + public string ConfigDirectory { + get { + return configDirectory; + } + set { + configDirectory = value; + } + } + + /// + /// Sets the data directory used to load resources. + /// Must be set before StartCoreServices() is called. + /// Use null to use the default path "ApplicationRootPath\data". + /// + public string DataDirectory { + get { + return dataDirectory; + } + set { + dataDirectory = value; + } + } + + public CoreStartup(string applicationName) + { + if (applicationName == null) + throw new ArgumentNullException("applicationName"); + this.applicationName = applicationName; + propertiesName = applicationName + "Properties"; + MessageService.DefaultMessageBoxTitle = applicationName; + } + + public void AddAddInsFromDirectory(string addInDir) + { + addInFiles.AddRange(FileUtility.SearchDirectory(addInDir, "*.addin")); + } + + public void RunInitialization() + { + LoggingService.Info("Loading AddInTree..."); + AddInTree.Load(addInFiles); + + // run workspace autostart commands + LoggingService.Info("Running autostart commands..."); + foreach (ICommand command in AddInTree.BuildItems("/Workspace/Autostart", null, false)) { + command.Run(); + } + } + + public void StartCoreServices() + { + if (configDirectory == null) + configDirectory = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), + applicationName); + PropertyService.InitializeService(configDirectory, + dataDirectory ?? Path.Combine(FileUtility.ApplicationRootPath, "data"), + propertiesName); + PropertyService.Load(); + ResourceService.InitializeService(FileUtility.Combine(PropertyService.DataDirectory, "resources")); + } + } +} diff --git a/src/Main/Core/Project/Src/Services/FileUtility/FileUtility.cs b/src/Main/Core/Project/Src/Services/FileUtility/FileUtility.cs index 0704ca6f1e..f7fd72e20d 100644 --- a/src/Main/Core/Project/Src/Services/FileUtility/FileUtility.cs +++ b/src/Main/Core/Project/Src/Services/FileUtility/FileUtility.cs @@ -39,33 +39,24 @@ namespace ICSharpCode.Core /// /// A utility class related to file utilities. /// - public sealed class FileUtility + public static class FileUtility { // TODO: GetFullPath is a **very** expensive method (performance-wise)! // Call it only when necessary. (see IsEqualFile) readonly static char[] separators = { Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar, Path.VolumeSeparatorChar }; - static string applicationRootPath; + static string applicationRootPath = Environment.CurrentDirectory; const string fileNameRegEx = @"^([a-zA-Z]:)?[^:]+$"; public static string ApplicationRootPath { get { return applicationRootPath; } - } - - static FileUtility() - { - Assembly entryAssembly = Assembly.GetEntryAssembly(); - // entryAssembly == null might happen in unit test mode - if (entryAssembly != null) { - applicationRootPath = Path.Combine(Path.GetDirectoryName(entryAssembly.Location), ".."); - } else { - applicationRootPath = Environment.CurrentDirectory; + set { + applicationRootPath = value; } } - public static string NETFrameworkInstallRoot { get { using (RegistryKey installRootKey = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\.NETFramework")) { diff --git a/src/Main/Core/Project/Src/Services/MenuService/MenuService.cs b/src/Main/Core/Project/Src/Services/MenuService/MenuService.cs index 2969cb5ed1..de953c1efc 100644 --- a/src/Main/Core/Project/Src/Services/MenuService/MenuService.cs +++ b/src/Main/Core/Project/Src/Services/MenuService/MenuService.cs @@ -20,17 +20,6 @@ namespace ICSharpCode.Core { public static class MenuService { - static ToolStripRenderer renderer; - - public static ToolStripRenderer Renderer { - get { - return renderer; - } - set { - renderer = value; - } - } - public static void AddItemsToMenu(ToolStripItemCollection collection, object owner, string addInTreePath) { ArrayList buildItems = AddInTree.GetTreeNode(addInTreePath).BuildChildItems(owner); @@ -54,7 +43,6 @@ namespace ICSharpCode.Core try { ArrayList buildItems = AddInTree.GetTreeNode(addInTreePath).BuildChildItems(owner); ContextMenuStrip contextMenu = new ContextMenuStrip(); - if (Renderer != null) contextMenu.Renderer = Renderer; contextMenu.Items.Add(new ToolStripMenuItem("dummy")); contextMenu.Opening += delegate { contextMenu.Items.Clear(); @@ -135,7 +123,6 @@ namespace ICSharpCode.Core public static void CreateQuickInsertMenu(TextBoxBase targetControl, Control popupControl, string[,] quickInsertMenuItems) { ContextMenuStrip contextMenu = new ContextMenuStrip(); - if (Renderer != null) contextMenu.Renderer = Renderer; for (int i = 0; i < quickInsertMenuItems.GetLength(0); ++i) { if (quickInsertMenuItems[i, 0] == "-") { contextMenu.Items.Add(new MenuSeparator()); diff --git a/src/Main/Core/Project/Src/Services/MessageService/MessageService.cs b/src/Main/Core/Project/Src/Services/MessageService/MessageService.cs index 1a3d5231ec..2ebff5141b 100644 --- a/src/Main/Core/Project/Src/Services/MessageService/MessageService.cs +++ b/src/Main/Core/Project/Src/Services/MessageService/MessageService.cs @@ -149,7 +149,7 @@ namespace ICSharpCode.Core } } - static string defaultMessageBoxTitle = "SharpDevelop"; + static string defaultMessageBoxTitle = "MessageBox"; public static string DefaultMessageBoxTitle { get { diff --git a/src/Main/Core/Project/Src/Services/PropertyService/PropertyService.cs b/src/Main/Core/Project/Src/Services/PropertyService/PropertyService.cs index ec51c5257a..12839a5bc3 100644 --- a/src/Main/Core/Project/Src/Services/PropertyService/PropertyService.cs +++ b/src/Main/Core/Project/Src/Services/PropertyService/PropertyService.cs @@ -13,18 +13,27 @@ using System.Xml; namespace ICSharpCode.Core { - public sealed class PropertyService + public static class PropertyService { - const string propertyFileName = "SharpDevelopProperties.xml"; - const string propertyXmlRootNodeName = "SharpDevelopProperties"; + static string propertyFileName; + static string propertyXmlRootNodeName; - static string configDirectory = FileUtility.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), ".ICSharpCode", "SharpDevelop2") + Path.DirectorySeparatorChar; - static string dataDirectory = FileUtility.Combine(FileUtility.ApplicationRootPath, "data"); + static string configDirectory; + static string dataDirectory; - static Properties properties = new Properties(); + static Properties properties; - static PropertyService() + public static void InitializeService(string configDirectory, string dataDirectory, string propertiesName) { + if (properties != null) + throw new InvalidOperationException("Service is already initialized."); + if (configDirectory == null || dataDirectory == null || propertiesName == null) + throw new ArgumentNullException(); + properties = new Properties(); + PropertyService.configDirectory = configDirectory; + PropertyService.dataDirectory = dataDirectory; + propertyXmlRootNodeName = propertiesName; + propertyFileName = propertiesName + ".xml"; properties.PropertyChanged += new PropertyChangedEventHandler(PropertiesPropertyChanged); } @@ -40,12 +49,12 @@ namespace ICSharpCode.Core } } - public static string Get(string property) + public static string Get(string property) { return properties[property]; } - public static T Get(string property, T defaultValue) + public static T Get(string property, T defaultValue) { return properties.Get(property, defaultValue); } @@ -57,6 +66,8 @@ namespace ICSharpCode.Core public static void Load() { + if (properties == null) + throw new InvalidOperationException("Service is not initialized."); if (!Directory.Exists(configDirectory)) { Directory.CreateDirectory(configDirectory); } @@ -76,10 +87,9 @@ namespace ICSharpCode.Core using (XmlTextReader reader = new XmlTextReader(fileName)) { while (reader.Read()){ if (reader.IsStartElement()) { - switch (reader.LocalName) { - case propertyXmlRootNodeName: - properties.ReadProperties(reader, propertyXmlRootNodeName); - return true; + if (reader.LocalName == propertyXmlRootNodeName) { + properties.ReadProperties(reader, propertyXmlRootNodeName); + return true; } } } diff --git a/src/Main/Core/Project/Src/Services/ResourceService/ResourceService.cs b/src/Main/Core/Project/Src/Services/ResourceService/ResourceService.cs index d70e6a264c..d7d4c0a9b7 100644 --- a/src/Main/Core/Project/Src/Services/ResourceService/ResourceService.cs +++ b/src/Main/Core/Project/Src/Services/ResourceService/ResourceService.cs @@ -33,11 +33,14 @@ namespace ICSharpCode.Core static string resourceDirectory; - public static void InitializeService() + public static void InitializeService(string resourceDirectory) { - if (resourceDirectory != null) + if (ResourceService.resourceDirectory != null) throw new InvalidOperationException("Service is already initialized."); - resourceDirectory = FileUtility.Combine(PropertyService.DataDirectory, "resources"); + if (resourceDirectory == null) + throw new ArgumentNullException("resourceDirectory"); + + ResourceService.resourceDirectory = resourceDirectory; PropertyService.PropertyChanged += new PropertyChangedEventHandler(OnPropertyChange); LoadLanguageResources(PropertyService.Get(uiLanguageProperty, Thread.CurrentThread.CurrentUICulture.Name)); diff --git a/src/Main/Core/Project/Src/Services/StringParser/StringParser.cs b/src/Main/Core/Project/Src/Services/StringParser/StringParser.cs index bae83b1f9f..d385e57b87 100644 --- a/src/Main/Core/Project/Src/Services/StringParser/StringParser.cs +++ b/src/Main/Core/Project/Src/Services/StringParser/StringParser.cs @@ -193,7 +193,7 @@ namespace ICSharpCode.Core if (k <= 0) return null; string prefix = propertyName.Substring(0, k); - switch (prefix.ToUpper()) { + switch (prefix.ToUpperInvariant()) { case "ENV": return Environment.GetEnvironmentVariable(propertyName.Substring(k + 1)); case "RES": diff --git a/src/Main/Core/Project/Src/Services/ToolBarService/ToolBarService.cs b/src/Main/Core/Project/Src/Services/ToolBarService/ToolBarService.cs index 34e328f3cb..ca49f4c199 100644 --- a/src/Main/Core/Project/Src/Services/ToolBarService/ToolBarService.cs +++ b/src/Main/Core/Project/Src/Services/ToolBarService/ToolBarService.cs @@ -13,23 +13,6 @@ namespace ICSharpCode.Core { public static class ToolbarService { - static ToolStripRenderer renderer; - - public static ToolStripRenderer Renderer { - get { - return renderer; - } - set { - if (renderer != value) { - renderer = value; - if (RendererChanged != null) - RendererChanged(null, EventArgs.Empty); - } - } - } - - public static event EventHandler RendererChanged; - public static ToolStripItem[] CreateToolStripItems(object owner, AddInTreeNode treeNode) { return (ToolStripItem[])(treeNode.BuildChildItems(owner)).ToArray(typeof(ToolStripItem)); @@ -38,7 +21,6 @@ namespace ICSharpCode.Core public static ToolStrip CreateToolStrip(object owner, AddInTreeNode treeNode) { ToolStrip toolStrip = new ToolStrip(); - if (Renderer != null) toolStrip.Renderer = Renderer; toolStrip.Items.AddRange(CreateToolStripItems(owner, treeNode)); UpdateToolbar(toolStrip); // setting Visible is only possible after the items have been added new LanguageChangeWatcher(toolStrip); @@ -51,17 +33,12 @@ namespace ICSharpCode.Core this.toolStrip = toolStrip; toolStrip.Disposed += Disposed; ResourceService.LanguageChanged += OnLanguageChanged; - RendererChanged += OnRendererChanged; } void OnLanguageChanged(object sender, EventArgs e) { ToolbarService.UpdateToolbarText(toolStrip); } - void OnRendererChanged(object sender, EventArgs e) { - toolStrip.Renderer = Renderer ?? new ToolStripProfessionalRenderer(); - } void Disposed(object sender, EventArgs e) { ResourceService.LanguageChanged -= OnLanguageChanged; - RendererChanged -= OnRendererChanged; } } diff --git a/src/Main/StartUp/Project/SharpDevelopMain.cs b/src/Main/StartUp/Project/SharpDevelopMain.cs index 928f36e0eb..d0fceac1cd 100644 --- a/src/Main/StartUp/Project/SharpDevelopMain.cs +++ b/src/Main/StartUp/Project/SharpDevelopMain.cs @@ -162,17 +162,30 @@ namespace ICSharpCode.SharpDevelop MessageService.CustomErrorReporter = ShowErrorBox; #endif - LoggingService.Info("Loading properties..."); - PropertyService.Load(); - ResourceService.InitializeService(); - Assembly exe = typeof(SharpDevelopMain).Assembly; + + FileUtility.ApplicationRootPath = Path.Combine(Path.GetDirectoryName(exe.Location), ".."); + + CoreStartup c = new CoreStartup("SharpDevelop"); + c.ConfigDirectory = FileUtility.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), ".ICSharpCode", "SharpDevelop2") + Path.DirectorySeparatorChar; + LoggingService.Info("Starting core services..."); + c.StartCoreServices(); + ResourceService.RegisterNeutralStrings(new ResourceManager("Resources.StringResources", exe)); ResourceService.RegisterNeutralImages(new ResourceManager("Resources.BitmapResources", exe)); RegisterDoozers(); - InitializeCore(); + StringParser.RegisterStringTagProvider(new SharpDevelopStringTagProvider()); + + LoggingService.Info("Looking for AddIns..."); + c.AddAddInsFromDirectory(FileUtility.Combine(FileUtility.ApplicationRootPath, "AddIns")); + c.RunInitialization(); + + LoggingService.Info("Initializing workbench..."); + // .NET base autostarts + // taken out of the add-in tree for performance reasons (every tick in startup counts) + WorkbenchSingleton.InitializeWorkbench(); // initialize workbench-dependent services: ProjectService.InitializeService(); @@ -234,24 +247,5 @@ namespace ICSharpCode.SharpDevelop MenuCommand.LinkCommandCreator = delegate(string link) { return new LinkCommand(link); }; } - - static void InitializeCore() - { - StringParser.RegisterStringTagProvider(new SharpDevelopStringTagProvider()); - - LoggingService.Info("Loading AddInTree..."); - AddInTree.Load(); - - // run workspace autostart commands - LoggingService.Info("Running autostart commands..."); - foreach (ICommand command in AddInTree.BuildItems("/Workspace/Autostart", null, false)) { - command.Run(); - } - - LoggingService.Info("Initializing workbench..."); - // .NET base autostarts - // taken out of the add-in tree for performance reasons (every tick in startup counts) - WorkbenchSingleton.InitializeWorkbench(); - } } }