miniSql

创建
zgc123@gmail.com authored at 11/19/2023 1:40:15 AM
6136600
Tree
0 Parent(s)
Summary: 1 changed files with 212 additions and 0 deletions.
Added +212 -0
Added +212 -0
diff --git a/minisqlquery-master/src/MiniSqlQuery/PlugIns/CoreApplicationPlugIn.cs b/minisqlquery-master/src/MiniSqlQuery/PlugIns/CoreApplicationPlugIn.cs
new file mode 100644
index 0000000..ef57ebd
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery/PlugIns/CoreApplicationPlugIn.cs
@@ -0,0 +1,212 @@
+#region License
+
+// Copyright 2005-2019 Paul Kohler (https://github.com/paulkohler/minisqlquery). All rights reserved.
+// This source code is made available under the terms of the GNU Lesser General Public License v3.0
+// https://github.com/paulkohler/minisqlquery/blob/master/LICENSE
+#endregion
+
+using System;
+using System.Collections.Specialized;
+using System.Diagnostics;
+using System.Linq;
+using System.Windows.Forms;
+using MiniSqlQuery.Commands;
+using MiniSqlQuery.Core;
+using MiniSqlQuery.Core.Commands;
+
+namespace MiniSqlQuery.PlugIns
+{
+    /// <summary>The core application plug in.</summary>
+    public class CoreApplicationPlugIn : PluginLoaderBase
+    {
+        /// <summary>The _timer.</summary>
+        private Timer _timer;
+
+        /// <summary>Initializes a new instance of the <see cref="CoreApplicationPlugIn"/> class.</summary>
+        public CoreApplicationPlugIn()
+            : base("Mini SQL Query Core", "Plugin to setup the core features of Mini SQL Query.", 1)
+        {
+        }
+
+        /// <summary>Iinitialize the plug in.</summary>
+        public override void InitializePlugIn()
+        {
+            IApplicationServices services = Services;
+            IHostWindow hostWindow = services.HostWindow;
+
+            services.RegisterSingletonComponent<ICompletionProvider, NullCompletionProvider>("CompletionProvider");
+
+            services.RegisterEditor<BasicEditor>(new FileEditorDescriptor("Default text editor", "default-editor"));
+            services.RegisterEditor<QueryForm>(new FileEditorDescriptor("SQL Editor", "sql-editor", "sql"));
+            services.RegisterEditor<BasicCSharpEditor>(new FileEditorDescriptor("C# Editor", "cs-editor", "cs"));
+            services.RegisterEditor<BasicVbNetEditor>(new FileEditorDescriptor("VB/VB.NET Editor", "vb-editor", "vb"));
+            services.RegisterEditor<BasicXmlEditor>(new FileEditorDescriptor("XML Editor", "xml-editor", "xml"));
+            services.RegisterEditor<BasicHtmlEditor>(new FileEditorDescriptor("HTML Editor", "htm-editor", "htm", "html"));
+            services.RegisterEditor<BasicEditor>(new FileEditorDescriptor("Text Editor", "txt-editor", "txt"));
+
+            services.RegisterComponent<NewFileForm>("NewFileForm");
+            services.RegisterComponent<OptionsForm>("OptionsForm");
+            services.RegisterSingletonComponent<IMostRecentFilesService, MostRecentFilesService>("MostRecentFilesService");
+            services.RegisterConfigurationObject<CoreMiniSqlQueryConfiguration>();
+
+            ToolStripMenuItem fileMenu = hostWindow.GetMenuItem("File");
+            ToolStripMenuItem editMenu = hostWindow.GetMenuItem("edit");
+            ToolStripMenuItem queryMenu = hostWindow.GetMenuItem("query");
+            ToolStripMenuItem helpMenu = hostWindow.GetMenuItem("help");
+
+            fileMenu.DropDownItems.Add(CommandControlBuilder.CreateToolStripMenuItem<NewQueryFormCommand>());
+            fileMenu.DropDownItems.Add(CommandControlBuilder.CreateToolStripMenuItem<NewFileCommand>());
+            fileMenu.DropDownItems.Add(CommandControlBuilder.CreateToolStripMenuItemSeparator());
+            fileMenu.DropDownItems.Add(CommandControlBuilder.CreateToolStripMenuItem<OpenFileCommand>());
+            fileMenu.DropDownItems.Add(CommandControlBuilder.CreateToolStripMenuItem<SaveFileCommand>());
+            fileMenu.DropDownItems.Add(CommandControlBuilder.CreateToolStripMenuItem<SaveFileAsCommand>());
+            fileMenu.DropDownItems.Add(CommandControlBuilder.CreateToolStripMenuItem<CloseActiveWindowCommand>());
+            fileMenu.DropDownItems.Add(CommandControlBuilder.CreateToolStripMenuItemSeparator());
+            fileMenu.DropDownItems.Add(CommandControlBuilder.CreateToolStripMenuItem<PrintCommand>());
+            fileMenu.DropDownItems.Add(CommandControlBuilder.CreateToolStripMenuItemSeparator());
+            fileMenu.DropDownItems.Add(CommandControlBuilder.CreateToolStripMenuItem<OpenRecentFile1Command>());
+            fileMenu.DropDownItems.Add(CommandControlBuilder.CreateToolStripMenuItem<OpenRecentFile2Command>());
+            fileMenu.DropDownItems.Add(CommandControlBuilder.CreateToolStripMenuItem<OpenRecentFile3Command>());
+            fileMenu.DropDownItems.Add(CommandControlBuilder.CreateToolStripMenuItem<OpenRecentFile4Command>());
+            fileMenu.DropDownItems.Add(CommandControlBuilder.CreateToolStripMenuItem<OpenRecentFile5Command>());
+            fileMenu.DropDownItems.Add(CommandControlBuilder.CreateToolStripMenuItem<OpenRecentFile6Command>());
+            fileMenu.DropDownItems.Add(CommandControlBuilder.CreateToolStripMenuItem<OpenRecentFile7Command>());
+            fileMenu.DropDownItems.Add(CommandControlBuilder.CreateToolStripMenuItem<OpenRecentFile8Command>());
+            fileMenu.DropDownItems.Add(CommandControlBuilder.CreateToolStripMenuItem<OpenRecentFile9Command>());
+            fileMenu.DropDownItems.Add(CommandControlBuilder.CreateToolStripMenuItem<OpenRecentFile10Command>());
+            fileMenu.DropDownItems.Add(CommandControlBuilder.CreateToolStripMenuItemSeparator());
+            fileMenu.DropDownItems.Add(CommandControlBuilder.CreateToolStripMenuItem<ExitApplicationCommand>());
+
+            queryMenu.DropDownItems.Add(CommandControlBuilder.CreateToolStripMenuItem<ExecuteTaskCommand>());
+            queryMenu.DropDownItems.Add(CommandControlBuilder.CreateToolStripMenuItem<CancelTaskCommand>());
+            queryMenu.DropDownItems.Add(CommandControlBuilder.CreateToolStripMenuItem<SaveResultsAsDataSetCommand>());
+            queryMenu.DropDownItems.Add(CommandControlBuilder.CreateToolStripMenuItem<RefreshDatabaseConnectionCommand>());
+            queryMenu.DropDownItems.Add(CommandControlBuilder.CreateToolStripMenuItem<CloseDatabaseConnectionCommand>());
+            queryMenu.DropDownItems.Add(CommandControlBuilder.CreateToolStripMenuItem<DisplayDbModelDependenciesCommand>());
+
+            // editMenu.DropDownItems.Add(CommandControlBuilder.CreateToolStripMenuItem<DuplicateLineCommand>());
+            editMenu.DropDownItems.Add(CommandControlBuilder.CreateToolStripMenuItem<PasteAroundSelectionCommand>());
+            editMenu.DropDownItems.Add(CommandControlBuilder.CreateToolStripMenuItem<ConvertTextToLowerCaseCommand>());
+            editMenu.DropDownItems.Add(CommandControlBuilder.CreateToolStripMenuItem<ConvertTextToUpperCaseCommand>());
+            editMenu.DropDownItems.Add(CommandControlBuilder.CreateToolStripMenuItem<ConvertTextToTitleCaseCommand>());
+            editMenu.DropDownItems.Add(CommandControlBuilder.CreateToolStripMenuItem<SetLeftPasteAroundSelectionCommand>());
+            editMenu.DropDownItems.Add(CommandControlBuilder.CreateToolStripMenuItem<SetRightPasteAroundSelectionCommand>());
+            editMenu.DropDownItems.Add(CommandControlBuilder.CreateToolStripMenuItem<ShowOptionsFormCommand>());
+            editMenu.DropDownItems.Add(CommandControlBuilder.CreateToolStripMenuItem<OpenConnectionFileCommand>());
+
+            // get the new item and make in invisible - the shortcut key is still available etc ;-)
+            ToolStripItem item = editMenu.DropDownItems["SetLeftPasteAroundSelectionCommandToolStripMenuItem"];
+            item.Visible = false;
+            item = editMenu.DropDownItems["SetRightPasteAroundSelectionCommandToolStripMenuItem"];
+            item.Visible = false;
+
+
+            helpMenu.DropDownItems.Add(CommandControlBuilder.CreateToolStripMenuItem<ShowHelpCommand>());
+            helpMenu.DropDownItems.Add(CommandControlBuilder.CreateToolStripMenuItem<ShowWebPageCommand>());
+            helpMenu.DropDownItems.Add(CommandControlBuilder.CreateToolStripMenuItem<EmailAuthorCommand>());
+            helpMenu.DropDownItems.Add(CommandControlBuilder.CreateToolStripMenuItemSeparator());
+            helpMenu.DropDownItems.Add(CommandControlBuilder.CreateToolStripMenuItem<ShowAboutCommand>());
+
+            CommandControlBuilder.MonitorMenuItemsOpeningForEnabling(hostWindow.Instance.MainMenuStrip);
+
+            // toolstrip
+            hostWindow.AddToolStripCommand<NewQueryFormCommand>(0);
+            hostWindow.AddToolStripCommand<OpenFileCommand>(1);
+            hostWindow.AddToolStripCommand<SaveFileCommand>(2);
+            hostWindow.AddToolStripSeperator(3);
+            hostWindow.AddToolStripCommand<ExecuteTaskCommand>(4);
+            hostWindow.AddToolStripCommand<CancelTaskCommand>(5);
+            hostWindow.AddToolStripSeperator(6);
+            hostWindow.AddToolStripSeperator(null);
+            hostWindow.AddToolStripCommand<RefreshDatabaseConnectionCommand>(null);
+
+            hostWindow.AddPluginCommand<InsertGuidCommand>();
+
+            ConfigureMostRecentFileList(services);
+
+            // watch tool strip enabled properties
+            // by simply iterating each one every second or so we avoid the need to track via events
+            _timer = new Timer();
+            _timer.Interval = 1000;
+            _timer.Tick += TimerTick;
+            _timer.Enabled = true;
+        }
+
+        protected void ConfigureMostRecentFileList(IApplicationServices services)
+        {
+            // get the files out of the settings and register them
+            var mostRecentFilesService = services.Resolve<IMostRecentFilesService>();
+            if (services.Settings.MostRecentFiles != null)
+            {
+                foreach (string mostRecentFile in services.Settings.MostRecentFiles)
+                {
+                    mostRecentFilesService.Filenames.Add(mostRecentFile);
+                }
+            }
+
+            // watch for changes
+            mostRecentFilesService.MostRecentFilesChanged += mostRecentFilesService_MostRecentFilesChanged;
+
+            // need to manually call the update - only required on first load
+            ((OpenRecentFileCommand)CommandManager.GetCommandInstance<OpenRecentFile1Command>()).UpdateName();
+            ((OpenRecentFileCommand)CommandManager.GetCommandInstance<OpenRecentFile2Command>()).UpdateName();
+            ((OpenRecentFileCommand)CommandManager.GetCommandInstance<OpenRecentFile3Command>()).UpdateName();
+            ((OpenRecentFileCommand)CommandManager.GetCommandInstance<OpenRecentFile4Command>()).UpdateName();
+            ((OpenRecentFileCommand)CommandManager.GetCommandInstance<OpenRecentFile5Command>()).UpdateName();
+            ((OpenRecentFileCommand)CommandManager.GetCommandInstance<OpenRecentFile6Command>()).UpdateName();
+            ((OpenRecentFileCommand)CommandManager.GetCommandInstance<OpenRecentFile7Command>()).UpdateName();
+            ((OpenRecentFileCommand)CommandManager.GetCommandInstance<OpenRecentFile8Command>()).UpdateName();
+            ((OpenRecentFileCommand)CommandManager.GetCommandInstance<OpenRecentFile9Command>()).UpdateName();
+            ((OpenRecentFileCommand)CommandManager.GetCommandInstance<OpenRecentFile10Command>()).UpdateName();
+        }
+
+        /// <summary>The unload plug in.</summary>
+        public override void UnloadPlugIn()
+        {
+            if (_timer != null)
+            {
+                _timer.Dispose();
+            }
+        }
+
+        /// <summary>Called frequently to run through all the commands on the toolstrip and check their enabled state. 
+        /// Marked as "DebuggerNonUserCode" because it can get in the way of a debug sesssion.</summary>
+        /// <param name="sender">The sender.</param>
+        /// <param name="e">The <see cref="System.EventArgs"/> instance containing the event data.</param>
+        [DebuggerNonUserCode]
+        private void TimerTick(object sender, EventArgs e)
+        {
+            try
+            {
+                _timer.Enabled = false;
+                foreach (ToolStripItem item in Services.HostWindow.ToolStrip.Items)
+                {
+                    ICommand cmd = item.Tag as ICommand;
+                    if (cmd != null)
+                    {
+                        item.Enabled = cmd.Enabled;
+                    }
+                }
+            }
+            finally
+            {
+                _timer.Enabled = true;
+            }
+        }
+
+        static void mostRecentFilesService_MostRecentFilesChanged(object sender, MostRecentFilesChangedEventArgs e)
+        {
+            var services = ApplicationServices.Instance;
+            var mostRecentFilesService = services.Resolve<IMostRecentFilesService>();
+            if (services.Settings.MostRecentFiles == null)
+            {
+                services.Settings.MostRecentFiles = new StringCollection();
+            }
+            else
+            {
+                services.Settings.MostRecentFiles.Clear();
+            }
+            services.Settings.MostRecentFiles.AddRange(mostRecentFilesService.Filenames.ToArray());
+        }
+    }
+}
\ No newline at end of file