123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288 |
- /*
- * Copyright (c) Contributors, http://opensimulator.org/
- * See CONTRIBUTORS.TXT for a full list of copyright holders.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * * Neither the name of the OpenSim Project nor the
- * names of its contributors may be used to endorse or promote products
- * derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
- using System;
- using System.Collections.Generic;
- using System.ComponentModel;
- using System.Data;
- using System.Diagnostics;
- using System.Drawing;
- using System.Text;
- using System.Windows.Forms;
- namespace OpenSim.GridLaunch.GUI.WinForm
- {
- public partial class ProcessPanel : Form, IGUI
- {
- public ProcessPanel()
- {
- Application.EnableVisualStyles();
- //Application.SetCompatibleTextRenderingDefault(false);
- InitializeComponent();
- Program.AppCreated += Program_AppCreated;
- Program.AppRemoved += Program_AppRemoved;
- Program.AppConsoleOutput += Program_AppConsoleOutput;
- Program.AppConsoleError += Program_AppConsoleError;
- log4netAppender.LogLine += log4netAppender_LogLine;
- }
- #region Module Start / Stop
- public void StartGUI()
- {
- Application.Run(this);
- }
- public void StopGUI()
- {
- this.Close();
- }
- #endregion
- #region Main log tab
- void log4netAppender_LogLine(Color color, string LogText)
- {
- ucLogWindow1.Write(color, LogText);
- }
- #endregion
- #region Form events
- private void btnShutdown_Click(object sender, EventArgs e)
- {
- Program.Shutdown();
- }
- #endregion
- #region GridLaunch Events
- public delegate void Program_AppCreatedDelegate(string App);
- public void Program_AppCreated(string App)
- {
- if (this.InvokeRequired) {
- this.Invoke(new Program_AppCreatedDelegate(Program_AppCreated), App);
- return;
- }
- Trace.WriteLine("Start: " + App);
- // Do we already have app window for that app?
- if (AppWindow_Get(App) != null)
- return;
- // New log window
- ucAppWindow aw = new ucAppWindow();
- // New tab page
- TabPage tp = new TabPage(App);
- // Add log window into tab page
- tp.Controls.Add(aw);
- // Add tab page into tab control
- tabControl1.TabPages.Add(tp);
- // Add it all to our internal list
- AppWindow_Add(App, aw);
- // Hook up events
- aw.LineEntered += AppWindow_LineEntered;
- // Fill log window fully inside tab page
- aw.Dock = DockStyle.Fill;
- }
- public delegate void Program_AppRemovedDelegate(string App);
- public void Program_AppRemoved(string App)
- {
- if (this.InvokeRequired) {
- this.Invoke(new Program_AppRemovedDelegate(Program_AppRemoved), App);
- return;
- }
- Trace.WriteLine("Stop: " + App);
- // Get app window
- ucAppWindow aw = AppWindow_Get(App);
- if (aw == null)
- return;
- // Get its tab page
- TabPage tp = aw.Parent as TabPage;
- if (tp != null)
- {
- // Remove tab page from tab control
- tabControl1.TabPages.Remove(tp);
- // Remove app window from tab
- tp.Controls.Remove(aw);
- }
- // Dispose of app window
- aw.Dispose();
- // Dispose of tab page
- if (tp != null)
- tp.Dispose();
- // Remove from our internal list
- AppWindow_Remove(App);
- }
- public delegate void Program_AppConsoleOutputDelegate(string App, string LogText);
- void Program_AppConsoleOutput(string App, string LogText)
- {
- if (this.InvokeRequired)
- {
- this.Invoke(new Program_AppConsoleOutputDelegate(Program_AppConsoleOutput), App, LogText);
- return;
- }
- // Get app window
- ucAppWindow aw = AppWindow_Get(App);
- // Write text to it
- if (aw != null)
- aw.Write(System.Drawing.Color.Black, LogText);
- }
- public delegate void Program_AppConsoleErrorDelegate(string App, string LogText);
- void Program_AppConsoleError(string App, string LogText)
- {
- if (this.InvokeRequired) {
- this.Invoke(new Program_AppConsoleErrorDelegate(Program_AppConsoleError), App, LogText);
- return;
- }
- // Get app window
- ucAppWindow aw = AppWindow_Get(App);
- // Write text to it
- if (aw != null)
- aw.Write(System.Drawing.Color.Red, LogText);
- }
- #endregion
- #region App Window events
- private void AppWindow_LineEntered(ucAppWindow AppWindow, string LogText)
- {
- Program.WriteLine(AppWindow_Get(AppWindow), LogText);
- }
- #endregion
- private void ProcessPanel_Load(object sender, EventArgs e)
- {
- string[] arr = new string[Program.Settings.Components.Keys.Count];
- Program.Settings.Components.Keys.CopyTo(arr, 0);
- cblStartupComponents.Items.AddRange(arr);
- // Now correct all check states
- for (int i = 0; i < cblStartupComponents.Items.Count; i++ )
- {
- string _name = cblStartupComponents.Items[i] as string;
- bool _checked = Program.Settings.Components[_name];
- cblStartupComponents.SetItemChecked(i, _checked);
- }
-
-
- }
- #region Internal App Window list and functions
- private Dictionary<string, ucAppWindow> _appWindows = new Dictionary<string, ucAppWindow>();
- private Dictionary<ucAppWindow, string> _appWindows_rev = new Dictionary<ucAppWindow, string>();
- private void AppWindow_Add(string AppWindowName, ucAppWindow AppWindow)
- {
- lock (_appWindows)
- {
- _appWindows.Add(AppWindowName, AppWindow);
- _appWindows_rev.Add(AppWindow, AppWindowName);
- // Hook events
- AppWindow.LineEntered += AppWindow_LineEntered;
- }
- }
- private void AppWindow_Remove(ucAppWindow AppWindow)
- {
- lock (_appWindows)
- {
- if (_appWindows_rev.ContainsKey(AppWindow))
- {
- // Unhook events
- AppWindow.LineEntered -= AppWindow_LineEntered;
- // Delete from list
- string name = _appWindows_rev[AppWindow];
- _appWindows.Remove(name);
- _appWindows_rev.Remove(AppWindow);
- }
- }
- }
- private void AppWindow_Remove(string AppWindowName)
- {
- lock (_appWindows)
- {
- if (_appWindows.ContainsKey(AppWindowName))
- {
- ucAppWindow AppWindow = _appWindows[AppWindowName];
- // Unhook events
- AppWindow.LineEntered -= AppWindow_LineEntered;
- // Delete from list
- _appWindows.Remove(AppWindowName);
- _appWindows_rev.Remove(AppWindow);
- }
- }
- }
- private string AppWindow_Get(ucAppWindow AppWindow)
- {
- lock (_appWindows)
- {
- if (_appWindows_rev.ContainsKey(AppWindow))
- return _appWindows_rev[AppWindow];
- }
- return null;
- }
- private ucAppWindow AppWindow_Get(string AppWindowName)
- {
- lock (_appWindows)
- {
- if (_appWindows.ContainsKey(AppWindowName))
- return _appWindows[AppWindowName];
- }
- return null;
- }
- #endregion
- private void btnSave_Click(object sender, EventArgs e)
- {
- Program.Settings.Components.Clear();
- for (int i = 0; i < cblStartupComponents.Items.Count; i++)
- {
- string _name = cblStartupComponents.Items[i] as string;
- bool _checked = cblStartupComponents.GetItemChecked(i);
- Program.Settings.Components.Add(_name, _checked);
- Program.Settings.SaveConfig();
- }
- }
- }
- }
|