/[RomCheater]/trunk/RomCheater.RVAScratchPad/Form1.cs
ViewVC logotype

Diff of /trunk/RomCheater.RVAScratchPad/Form1.cs

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

--- trunk/RomCheater.RVAScratchPad/Form1.cs	2013/06/18 07:04:57	707
+++ trunk/RomCheater.RVAScratchPad/Form1.cs	2013/06/18 20:22:08	724
@@ -5,14 +5,238 @@
 using System.Drawing;
 using System.Text;
 using System.Windows.Forms;
+using RomCheater.Logging;
+using RomCheater.Docking;
+using WeifenLuo.WinFormsUI.Docking;
+using System.IO;
+using RomCheater.PluginFramework.Core;
+using RomCheater.Core;
+using RomCheater.UserSettingsSupport;
 
 namespace RomCheater.RVAScratchPad
 {
     public partial class Form1 : Form
     {
-        public Form1()
+        private SettingSubscriber SettingsSubscriber = null;
+        private bool m_bSaveLayout = true;
+        PluginLoader loader = null;
+        IConfigPlugin ConfigPlugin = null;
+
+        IUserControlPlugin RVACalcPlugin = null;
+        IUserControlPlugin ScratchPadPlugin = null;
+
+        private DeserializeDockContent m_deserializeDockContent;
+        private FloatingLogWindow m_LogWindow = new FloatingLogWindow();
+        private FloatingWebBrowser m_wb = new FloatingWebBrowser();
+
+        #region LogWriterSupport
+        static LogWriter _LoggerInstance;
+        static LogWriter LoggerInstance
+        {
+            get { return _LoggerInstance; }
+            set { _LoggerInstance = value; }
+        }
+        #endregion
+
+        public Form1() : this(false) { }
+        public Form1(bool no_console_redirect)
         {
             InitializeComponent();
+            SettingsSubscriber = new SettingSubscriber();
+            SettingsSubscriber.AddSubscriber(this, RomCheater.Properties.Settings.Default);              
+            load_loggerflags();
+            SetupDocks();
+            LoggerInstance = m_LogWindow.Logwriter;
+            LoggerInstance.CreateNewLog(false);
+            logger.ForceLog.Info.WriteLine("LoggingFlags = 0x{0:x4} ({1})", logger.GetLoggingFlags().Value, logger.GetLoggingFlags().Name);
+            load_plugins();
+            if (no_console_redirect)
+                LoggerInstance.RedirectConsoleOutput = false;           
+        }
+        private void load_loggerflags()
+        {
+            logger.SetLoggingFlags(Logging.Properties.Settings.Default.LoggingFlags);
+#if FORCE_ALL_LOGGING_FLAGS
+            logger.SetLoggingFlags(loggerflags.ALL);
+#endif
+        }
+        private void load_plugins() { load_plugins(false); }
+        private void load_plugins_silent() { load_plugins(true); }
+        private void load_plugins(bool silent)
+        {
+            loader = new PluginLoader();
+            loader.LoadPlugins(silent);
+
+            var LastConfigPlugin = SettingsSubscriber.GetValue("LastConfigPlugin").ToString();
+            if (LastConfigPlugin != null)
+            {
+                ConfigPlugin = loader.GetConfigPlugin(LastConfigPlugin.ToString());
+            }
+            else
+            {
+                var config = PluginCollection.GetPluginByName(PluginNames.GenericConfig);
+                ConfigPlugin = loader.GetPluginByGuid<IConfigPlugin>(config.ID.ToString());
+            }
+
+            SettingsSubscriber.SetValue("LastConfigPlugin", ConfigPlugin.ToString());
+
+            var scratchpad = PluginCollection.GetPluginByName(PluginNames.ScratchPadPlugin);
+            var rvacalc = PluginCollection.GetPluginByName(PluginNames.RVACalculatorPlugin);            
+            ScratchPadPlugin = loader.GetPluginByGuid<IUserControlPlugin>(scratchpad.ID.ToString());
+            RVACalcPlugin = loader.GetPluginByGuid<IUserControlPlugin>(rvacalc.ID.ToString());
+        }
+
+
+
+        #region Dock Support
+        private IDockContent GetContentFromPersistString(string persistString)
+        {
+            if (persistString == typeof(FloatingLogWindow).ToString()) { return m_LogWindow; }
+            if (persistString == typeof(FloatingWebBrowser).ToString()) { return m_wb; }
+            if (RVACalcPlugin != null) { if (persistString == RVACalcPlugin.IDockContentTypeName) { return RVACalcPlugin.DockContent; } }
+            if (ScratchPadPlugin != null) { if (persistString == ScratchPadPlugin.IDockContentTypeName) { return ScratchPadPlugin.DockContent; } }            
+            return null;
+        }
+        public void SetupDocks()
+        {
+            m_LogWindow = new FloatingLogWindow();
+            m_LogWindow.CloseButton = false;
+            m_LogWindow.CloseButtonVisible = false;
+
+            m_wb = new FloatingWebBrowser();
+            m_wb.CloseButton = false;
+            m_wb.CloseButtonVisible = false;
+
+            m_deserializeDockContent = new DeserializeDockContent(GetContentFromPersistString);
+        }
+        #region SetupDockWindowHandler support
+        public void SetupDockWindowHandler()
+        {
+            SetupLogWindowHandler();
+            SetupWebBrowserWindowHandler();
+            SetupPluginWindowHandlers();
+        }
+        private void SetupPluginWindowHandlers()
+        {
+            if (RVACalcPlugin != null)
+            {
+                RVACalcPlugin.Activate();
+            }
+            if (ScratchPadPlugin != null)
+            {
+                ScratchPadPlugin.Activate();
+            }
+        }
+        private void SetupLogWindowHandler()
+        {
+            if (m_LogWindow == null) return;
+            //m_LogWindow.Shown += new EventHandler(AddDockToWindowList);
+            //m_LogWindow.FormClosed += new FormClosedEventHandler(RemoveDockFromWindowList);
+            m_LogWindow.Activate();
+        }
+        private void SetupWebBrowserWindowHandler()
+        {
+            if (m_wb == null) return;
+            //m_wb.Shown += new EventHandler(AddDockToWindowList);
+            //m_wb.FormClosed += new FormClosedEventHandler(RemoveDockFromWindowList);
+            m_wb.Activate();
+        }
+        #endregion
+        public void ShowDocks()
+        {
+            ShowLogWindow();
+            SetupLogWindowHandler();
+            ShowWebBrowser();
+            SetupWebBrowserWindowHandler();
+            ShowPluginWindows();
+            SetupPluginWindowHandlers();
+
+            if (RVACalcPlugin != null)
+                RVACalcPlugin.Activate();
+        }
+        public void ShowLogWindow()
+        {
+            if (m_LogWindow == null || m_LogWindow.IsDisposed) { m_LogWindow = new FloatingLogWindow(); }
+            LoggerInstance = m_LogWindow.Logwriter;
+            LoggerInstance.CreateNewLog(false);
+            m_LogWindow.CloseButton = false;
+            m_LogWindow.CloseButtonVisible = false;
+            m_LogWindow.Show(dockPanel, DockState.DockBottom);
+        }
+
+
+        public void ShowWebBrowser()
+        {
+            //load_plugins_silent();
+            m_wb = new FloatingWebBrowser();
+            m_wb.CloseButton = false;
+            m_wb.CloseButtonVisible = false;
+            m_wb.Show(dockPanel);
+        }
+        public void ShowPluginWindows()
+        {
+            // RVA Calc
+            RVACalcPlugin.Show(dockPanel);
+            // ScratchPad
+            ScratchPadPlugin.Show(dockPanel);     
+        }
+        #endregion
+
+        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
+        {
+            SettingsSubscriber.SaveSettings();
+            string configFile = Path.Combine(Path.GetDirectoryName(Application.ExecutablePath), "RVAScratchPad-DockPanel.config");
+            if (m_bSaveLayout)
+                dockPanel.SaveAsXml(configFile);
+            else if (File.Exists(configFile))
+                File.Delete(configFile);
+            // notify any docked windows of formclosing
+            foreach (var t in this.dockPanel.Contents)
+            {
+                t.OnDeactivate<FormClosingEventArgs>(e);
+            }
+        }
+
+        private void Form1_Shown(object sender, EventArgs e)
+        {
+            //dockPanel.SuspendLayout(true);
+            //ShowDocks();
+            string configFile = Path.Combine(Path.GetDirectoryName(Application.ExecutablePath), "RVAScratchPad-DockPanel.config");
+            if (File.Exists(configFile))
+            {
+                try
+                {
+                    dockPanel.LoadFromXml(configFile, m_deserializeDockContent);
+                    SetupDockWindowHandler();
+                }
+                catch (Exception)
+                {
+                    this.Controls.Remove(dockPanel);
+                    dockPanel = new DockPanel();
+                    dockPanel.Dock = DockStyle.Fill;
+                    dockPanel.DocumentStyle = DocumentStyle.DockingWindow;
+                    this.Controls.Add(dockPanel);
+                    ShowDocks();
+                }
+            }
+            else
+            {
+                ShowDocks();
+            }
+
+            if (RVACalcPlugin != null)
+                RVACalcPlugin.Activate();
+            //dockPanel.ResumeLayout(true, true);
+        }
+
+        private void mnuItemExit_Click(object sender, EventArgs e)
+        {
+            this.Close();
+        }
+
+        private void Form1_Load(object sender, EventArgs e)
+        {
+            SettingsSubscriber.SaveSettings();
         }
     }
 }

 

  ViewVC Help
Powered by ViewVC 1.1.22