--- trunk/RomCheater.RVAScratchPad/Form1.cs 2013/06/18 07:04:57 707 +++ trunk/RomCheater.RVAScratchPad/Form1.cs 2013/06/18 07:23:04 708 @@ -5,14 +5,180 @@ using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; +using RomCheater.Logging; +using RomCheater.Docking; +using WeifenLuo.WinFormsUI.Docking; +using System.IO; namespace RomCheater.RVAScratchPad { public partial class Form1 : Form { - public Form1() + private bool m_bSaveLayout = true; + 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(); + 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) + { + } + + + + #region Dock Support + //void AddDockToWindowList(object sender, EventArgs e) + //{ + // DockContent dc; + // TypeBinder.Bind(sender, out dc); + // ToolStripMenuItem tsmi = new ToolStripMenuItem(dc.Text); + // tsmi.Name = dc.Name; + // tsmi.Tag = dc; + // tsmi.Click += new EventHandler(tsmi_Click); + // mnuWindows.DropDownItems.Add(tsmi); + //} + //void tsmi_Click(object sender, EventArgs e) + //{ + // ToolStripMenuItem tsmi; + // TypeBinder.Bind(sender, out tsmi); + // DockContent dc; + // TypeBinder.Bind(tsmi.Tag, out dc); + // dc.Activate(); + //} + //void RemoveDockFromWindowList(object sender, FormClosedEventArgs e) + //{ + // DockContent dc; + // TypeBinder.Bind(sender, out dc); + // mnuWindows.DropDownItems.RemoveByKey(dc.Name); + //} + private IDockContent GetContentFromPersistString(string persistString) + { + if (persistString == typeof(FloatingLogWindow).ToString()) { return m_LogWindow; } + if (persistString == typeof(FloatingWebBrowser).ToString()) { return m_wb; } + else { return null; } + } + public void SetupDocks() + { + m_LogWindow = new FloatingLogWindow(); + m_wb = new FloatingWebBrowser(); + } + #region SetupDockWindowHandler support + public void SetupDockWindowHandler() + { + SetupLogWindowHandler(); + SetupWebBrowserWindowHandler(); + } + 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_msv.Activate(); + } + #endregion + public void ShowDocks() + { + ShowLogWindow(); + SetupLogWindowHandler(); + ShowWebBrowser(); + SetupWebBrowserWindowHandler(); + } + public void ShowLogWindow() + { + if (m_LogWindow == null || m_LogWindow.IsDisposed) { m_LogWindow = new FloatingLogWindow(); } + LoggerInstance = m_LogWindow.Logwriter; + LoggerInstance.CreateNewLog(false); + m_LogWindow.Show(dockPanel, DockState.DockBottom); + } + + + public void ShowWebBrowser() + { + //load_plugins_silent(); + m_wb = new FloatingWebBrowser(); + m_wb.Show(dockPanel); + } + #endregion + + private void Form1_FormClosing(object sender, FormClosingEventArgs e) + { + 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(e); + } + } + + private void Form1_Shown(object sender, EventArgs e) + { + //dockPanel.SuspendLayout(true); + //ShowDocks(); + string configFile = Path.Combine(Path.GetDirectoryName(Application.ExecutablePath), "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(); + } + + //dockPanel.ResumeLayout(true, true); } } }