// For GUIDebugStepExe Debugging Only - Uncomment this #define
#define GUIDEBUGSTEPEXE
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Runtime.InteropServices;
using System.Windows.Interop;
using System.EnterpriseServices;
using System.Reflection;
using Foo.Platform;
using Foo.Platform.Win32;
using System.Windows;
namespace Foo.ClientServices.GUIWPForms
{
///
/// GUIWPForms - Com Callable Wrapper Class exposed to ButtonHook.
/// This class is responsible for creating the ButtonWPForm (a form created in response to a ButtonHook W32 Click)
///
[Guid("481C24F8-D619-460b-955A-22055571430C")]
[ClassInterface(ClassInterfaceType.None)]
[ProgId("Foo.ClientServices.GUIWPForms")]
[ComVisible(true)]
[ObjectPooling(Enabled = true, MinPoolSize = 1, MaxPoolSize = 2500, CreationTimeout = 5000)]
#if GUIDEBUGSTEPEXE
public class GUIWPForms : IGUIPWPForms
#else
public class GUIWPForms : ServicedComponent, IProcessInitializer, IGUIPWPForms
#endif
{
// Declare the Log4net Variable
private static log4net.ILog Log = Logger.GetLog4NetInterface(MethodBase.GetCurrentMethod().DeclaringType);
#region Construction / Destruction
public GUIWPForms() {}
~GUIWPForms() { }
#endregion
#if GUIDEBUGSTEPEXE
#region GuiDebugStepCustomStarterStopers
public void Start()
{
Log.Info(string.Format("{0}() - ComponentState Application Is being started", MethodBase.GetCurrentMethod().Name));
ComponentState.ApplicationIsRunning = true;
}
public void Stop()
{
Log.Info(string.Format("{0}() - ComponentState Application Is being stopped", MethodBase.GetCurrentMethod().Name));
ComponentState.ApplicationIsRunning = false;
}
#endregion
#else
#region IProcessInitializer Members
public void Startup(object punkProcessControl)
{
Log.Info(string.Format("{0}() - ComponentState Application Is being started", MethodBase.GetCurrentMethod().Name));
ComponentState.ApplicationIsRunning = true;
}
public void Shutdown()
{
Log.Info(string.Format("{0}() - ComponentState Application Is being stopped", MethodBase.GetCurrentMethod().Name));
ComponentState.ApplicationIsRunning = false;
}
#endregion
#endif
#region IGUIPWPForms Members
///
/// Launches the ArtifactWall WPForm (if one already exists, relaunches)
///
/// handle to the Button on the Deskband (used for positioning)
/// true if successful, false otherwise
public bool LaunchArtifactWall(IntPtr hDeskbandButtonWnd)
{
try
{
RECT rect;
bool bFillRect = false;
if (hDeskbandButtonWnd != IntPtr.Zero)
bFillRect = Win32Functions.GetWindowRect(hDeskbandButtonWnd, out rect);
// First Step - Create the WpfForm
ComponentState.GUIFormsMgr.Create_WpfFormDISP(WPForms.ArtifactWall);
// Second Step - If we have a Rect, set the location
if (bFillRect)
{
//GUIFormsMgr._Action action = new GUIFormsMgr._Action(delegate(Window wpfForm)
//{
// wpfForm.Height = nHeight;
// wpfForm.Width = nWidth;
//});
//ComponentState.GUIFormsMgr.RunAction_WpfFormDISP(WPForms.ArtifactWall, action);
}
// Third Step - Show the WpfForm
ComponentState.GUIFormsMgr.Show_WpfFormDISP(WPForms.ArtifactWall);
}
catch (Exception e)
{
Log.Error(string.Format("{0}() - Error Occured", MethodBase.GetCurrentMethod().Name), e);
}
return true;
}
///
/// Closes the ArtifactWall if exists
///
/// true if closed, false if not existent
public bool CloseArtifactWall()
{
try
{
return ComponentState.GUIFormsMgr.Delete_WpfFormDISP(WPForms.ArtifactWall);
}
catch (Exception e)
{
Log.Error(string.Format("{0}() - Error Occured", MethodBase.GetCurrentMethod().Name), e);
}
return false;
}
///
/// Launches the WorkspaceSelector WPForm (if one already exists, relaunches)
///
/// handle to the Button on the Deskband (used for positioning)
/// true if successful, false otherwise
public bool LaunchWorkspaceSelector(IntPtr hDeskbandButtonWnd)
{
try
{
RECT rect = new RECT();
rect.top = 0;
rect.left = 0;
bool bSuccess = false;
bool bFillRect = false;
if (hDeskbandButtonWnd != IntPtr.Zero)
bFillRect = Win32Functions.GetWindowRect(hDeskbandButtonWnd, out rect);
// First Step - Create the WpfForm
bSuccess = ComponentState.GUIFormsMgr.Create_WpfFormDISP(WPForms.WorkspaceSelector);
if (!bSuccess)
return false;
// Second Step - If we have a Rect, set the location of the Workspace Selector
if (bFillRect)
{
GUIFormsMgr._Action action = new GUIFormsMgr._Action(delegate(Window wpfForm)
{
wpfForm.Top = rect.top + rect.AsRectangle.Height + 2;
wpfForm.Left = rect.left - 200;
});
bSuccess = ComponentState.GUIFormsMgr.RunAction_WpfFormDISP(WPForms.WorkspaceSelector, action);
if (!bSuccess)
return false;
}
// Third Step - Show the WpfForm
bSuccess = ComponentState.GUIFormsMgr.Show_WpfFormDISP(WPForms.WorkspaceSelector);
if (!bSuccess)
return false;
}
catch (Exception e)
{
Log.Error(string.Format("{0}() - Error Occured", MethodBase.GetCurrentMethod().Name), e);
return false;
}
return true;
}
///
/// Closes the WorkspaceSelector if exists
///
///
/// true if closed, false if not existent
public bool CloseWorkspaceSelector()
{
try
{
return ComponentState.GUIFormsMgr.Delete_WpfFormDISP(WPForms.WorkspaceSelector);
}
catch (Exception e)
{
Log.Error(string.Format("{0}() - Error Occured", MethodBase.GetCurrentMethod().Name), e);
}
return false;
}
///
/// Launches the Settings and Abouts WPForm (if one already exists, relaunches)
///
/// handle to the Button on the Deskband (used for positioning)
/// true if successful, false otherwise
public bool LaunchSettingsNAboutUs(IntPtr hDeskbandButtonWnd)
{
try
{
// First Step - Create the WpfForm
ComponentState.GUIFormsMgr.Create_WpfFormDISP(WPForms.SettingsNAboutUs);
// Second Step - Show the WpfForm
ComponentState.GUIFormsMgr.Show_WpfFormDISP(WPForms.SettingsNAboutUs);
}
catch (Exception e)
{
Log.Error(string.Format("{0}() - Error Occured", MethodBase.GetCurrentMethod().Name), e);
}
return true;
}
///
/// Closes the Settings And About us
///
/// true if closed, false if not existent
public bool CloseSettingsNAboutUs()
{
try
{
return ComponentState.GUIFormsMgr.Delete_WpfFormDISP(WPForms.WorkspaceSelector);
}
catch (Exception e)
{
Log.Error(string.Format("{0}() - Error Occured", MethodBase.GetCurrentMethod().Name), e);
}
return false;
}
#endregion
}
}