//-----------------------------------------------------------------------------
#ifndef PropViewFrameH
#define PropViewFrameH PropViewFrameH
//-----------------------------------------------------------------------------
#include "DevCtrl.h"
#include <mvIMPACT_CPP/mvIMPACT_acquire.h>
#ifdef BUILD_WITH_PLUGIN_SUPPORT
#	include <mvPluginManager/Include/mvPluginManager.h>
#endif // #ifdef BUILD_WITH_PLUGIN_SUPPORT
#include "PropGridFrameBase.h"
#include "ValuesFromUserDlg.h"
#include <wx/filename.h>
#include <wx/grid.h>
#include <wx/notebook.h>
#include <wx/spinctrl.h>

class DevicePropertyHandler;
class ImageAnalysisPlotCanvas;
class ImageCanvas;
class InfoPlotCanvas;

class wxConfigBase;
class wxNotebook;
class wxSlider;
class wxSplitterEvent;
class wxSplitterWindow;
class wxSpinCtrl;

DECLARE_EVENT_TYPE(imageReadyEvent, -1)
DECLARE_EVENT_TYPE(imageSkippedEvent, -2)
DECLARE_EVENT_TYPE(toggleDisplayArea, -3)
DECLARE_EVENT_TYPE(liveModeAborted, -4)
DECLARE_EVENT_TYPE(eventNotified, -5)
DECLARE_EVENT_TYPE(sequenceReadyEvent, -6)
DECLARE_EVENT_TYPE(imageInfoEvent, -7)
DECLARE_EVENT_TYPE(refreshAOIControls, -8)
DECLARE_EVENT_TYPE(refreshCurrentPixelData, -9)
DECLARE_EVENT_TYPE(imageCanvasSelected, -10)
DECLARE_EVENT_TYPE(imageCanvasFullScreen, -11)

#define PLOT_WINDOW_ID_RANGE 0x100
#define BUILD_PLOT_WINDOW_START_ID(PLOT) wid##PLOT = ( iap##PLOT + 1 ) * PLOT_WINDOW_ID_RANGE

//-----------------------------------------------------------------------------
enum TFileFormat
//-----------------------------------------------------------------------------
{
	ffBMP,
	ffPNG,
	ffRAW
};

//-----------------------------------------------------------------------------
struct HarddiscRecordingParameters
//-----------------------------------------------------------------------------
{
	bool boActive_;
	wxString targetDirectory_;
	TFileFormat fileFormat_;
	explicit HarddiscRecordingParameters() : boActive_(false), targetDirectory_(), fileFormat_(ffBMP) {}
};

//-----------------------------------------------------------------------------
struct ImageAnalysisPlotControls
//-----------------------------------------------------------------------------
{
	wxCheckBox*					m_pCBAOIFullMode;
	wxCheckBox*					m_pCBProcessBayerParity;
	wxSpinCtrl*					m_pSCAOIx;
	wxSpinCtrl*					m_pSCAOIy;
	wxSpinCtrl*					m_pSCAOIw;
	wxSpinCtrl*					m_pSCAOIh;
	wxComboBox*					m_pCoBPlotSelection;
	wxSpinCtrl*					m_pSCHistoryDepth;
	wxSpinCtrl*					m_pSCDrawStart_percent;
	wxSpinCtrl*					m_pSCDrawWindow_percent;
	wxSpinCtrl*					m_pSCDrawStepWidth;
	wxSpinCtrl*					m_pSCUpdateSpeed;
	wxSpinCtrl*					m_pSCGridStepsX;
	wxSpinCtrl*					m_pSCGridStepsY;
	wxNotebook*					m_pNBDisplayMethod;
	ImageAnalysisPlotCanvas*	m_pPlotCanvas;
	void						Load( wxConfigBase* pConfig );
	void						Save( wxConfigBase* pConfig );
	void						UpdateControls( void );
	explicit ImageAnalysisPlotControls() : m_pCBAOIFullMode(0), m_pCBProcessBayerParity(0),
		m_pSCAOIx(0), m_pSCAOIy(0), m_pSCAOIw(0), m_pSCAOIh(0), m_pCoBPlotSelection(0), m_pSCHistoryDepth(0),
		m_pSCDrawStart_percent(0), m_pSCDrawWindow_percent(0), m_pSCDrawStepWidth(0),
		m_pSCUpdateSpeed(0), m_pSCGridStepsX(0), m_pSCGridStepsY(0), m_pNBDisplayMethod(0), m_pPlotCanvas(0) {}
};

class MonitorDisplay;

//-----------------------------------------------------------------------------
class PropViewFrame : public PropGridFrameBase
//-----------------------------------------------------------------------------
{
public:
	explicit PropViewFrame( const wxString& title, const wxPoint& pos, const wxSize& size, int argc, wxChar** argv );
	~PropViewFrame();
	void EndFullScreenMode( void );
	bool SetCurrentImage( const wxFileName& fileName, ImageCanvas* pImageCanvas );
	void WriteErrorMessage( const wxString& msg );
	void WriteLogMessage( const wxString& msg, const wxTextAttr& style = wxTextAttr(*wxBLACK) );
protected:
	// event handlers (these functions should _not_ be virtual)
	void OnHelp_About( wxCommandEvent& e );
	void OnHelp_DriverInformation( wxCommandEvent& e );
	void OnActivateDisplay( wxCommandEvent& e );
	void OnBtnAbort( wxCommandEvent& e );
	void OnBtnLive( wxCommandEvent& e );
	void OnBtnRecord( wxCommandEvent& e );
	void OnIncDecRecordDisplay( wxCommandEvent& e );
	void OnUseDevice( wxCommandEvent& e );
	void OnBtnSnap( wxCommandEvent& e );
	void OnAnalysisPlotCBAOIFullMode( wxCommandEvent& e );
	void OnAnalysisPlotCBProcessBayerParity( wxCommandEvent& e );
	void OnCBEnableInfoPlot( wxCommandEvent& );
	void OnClose( wxCloseEvent& e );
	void OnConnectedOnly( wxCommandEvent& e );
	void OnContinuousRecording( wxCommandEvent& e );
	void OnDevComboTextChanged( wxCommandEvent& e );
	void OnEventNotified( wxCommandEvent& e );
	void OnExportActiveDevice( wxCommandEvent& e );
	void OnAnalysisPlotAOIxChanged( wxSpinEvent& e );
	void OnAnalysisPlotAOIxTextChanged( wxCommandEvent& e );
	void OnAnalysisPlotAOIyChanged( wxSpinEvent& e );
	void OnAnalysisPlotAOIyTextChanged( wxCommandEvent& e );
	void OnAnalysisPlotAOIwChanged( wxSpinEvent& e );
	void OnAnalysisPlotAOIwTextChanged( wxCommandEvent& e );
	void OnAnalysisPlotAOIhChanged( wxSpinEvent& e );
	void OnAnalysisPlotAOIhTextChanged( wxCommandEvent& e );
	void OnAnalysisPlot_PlotSelectionChanged( wxCommandEvent& e );
	void OnAnalysisPlotHistoryDepthChanged( wxSpinEvent& e );
	void OnAnalysisPlotHistoryDepthTextChanged( wxCommandEvent& e );
	void OnAnalysisPlotDrawStartChanged( wxSpinEvent& e );
	void OnAnalysisPlotDrawStartTextChanged( wxCommandEvent& e );
	void OnAnalysisPlotDrawWindowChanged( wxSpinEvent& e );
	void OnAnalysisPlotDrawWindowTextChanged( wxCommandEvent& e );
	void OnAnalysisPlotDrawStepWidthChanged( wxSpinEvent& e );
	void OnAnalysisPlotDrawStepWidthTextChanged( wxCommandEvent& e );
	void OnAnalysisPlotGridXStepsChanged( wxSpinEvent& e );
	void OnAnalysisPlotGridXStepsTextChanged( wxCommandEvent& e );
	void OnAnalysisPlotGridYStepsChanged( wxSpinEvent& e );
	void OnAnalysisPlotGridYStepsTextChanged( wxCommandEvent& e );
	void OnAnalysisPlotUpdateSpeedChanged( wxSpinEvent& e );
	void OnAnalysisPlotUpdateSpeedTextChanged( wxCommandEvent& e );
	void OnImageCanvasSelected( wxCommandEvent& e );
	void OnImageCanvasFullScreen( wxCommandEvent& e );
	void OnImageInfo( wxCommandEvent& e );
	void OnImageReady( wxCommandEvent& e );
	void OnImageSkipped( wxCommandEvent& e );
	void OnImportActiveDevice( wxCommandEvent& e );
	void OnInfoPlot_PlotSelectionComboTextChanged( wxCommandEvent& e );
	void OnInfoPlotUpdateHistoryDepthChanged( wxSpinEvent& e );
	void OnInfoPlotUpdateHistoryDepthTextChanged( wxCommandEvent& e );
	void OnInfoPlotUpdateSpeedChanged( wxSpinEvent& e );
	void OnInfoPlotUpdateSpeedTextChanged( wxCommandEvent& e );
	void OnLiveModeAborted( wxCommandEvent& e );
	void OnLoadCurrentProduct( wxCommandEvent& e );
	void OnLoadActiveDevice( wxCommandEvent& e );
	void OnLoadFromDefault( wxCommandEvent& e );
	void OnManageSettings( wxCommandEvent& e );
	void OnNotebookPageChanged( wxNotebookEvent& e );
	void OnNBConfigurationMethodPageChanged( wxNotebookEvent& e );
	void OnNBDisplayMethodPageChanged( wxNotebookEvent& e );
	void OnQuit( wxCommandEvent& e );
	virtual void OnPropertyChangedCustom( wxPropertyGridEvent& e );
	virtual void OnPropertyRightClickedCustom( wxPropertyGridEvent& e );
	virtual void OnPropertyGridTimer( void );
	virtual void OnPropertySelectedCustom( wxPropertyGridEvent& e );
	void OnRefreshAOIControls( wxCommandEvent& e );
	void OnRefreshCurrentPixelData( wxCommandEvent& e );
	void OnSaveActiveDevice( wxCommandEvent& e );
	void OnSaveCurrentProduct( wxCommandEvent& e );
	void OnLoadImage( wxCommandEvent& e );
	void OnSaveImage( wxCommandEvent& e );
	void OnSaveImageSequenceToFiles( wxCommandEvent& e );
	void OnSaveImageSequenceToStream( wxCommandEvent& e );
	void OnSaveToDefault( wxCommandEvent& e );
	void OnSaveSystemToDefault( wxCommandEvent& e );
	void OnSequenceReady( wxCommandEvent& e );
	void OnSettings_Analysis_ShowControls( wxCommandEvent& );
	void OnSettingsPropGrid_Show( wxCommandEvent& );
	void OnSettingsPropGrid_UpdateViewMode( wxCommandEvent& );
	void OnSettingsPropGrid_ViewModeChanged( wxCommandEvent& e );
	void OnCapture_CaptureSettings_CreateCaptureSetting( wxCommandEvent& );
	void OnCapture_CaptureSettings_CaptureSettingHierarchy( wxCommandEvent& );
	void OnCapture_CaptureSettings_AssignToDisplays( wxCommandEvent& );
	void OnCapture_CaptureSettings_UsageMode_Changed( wxCommandEvent& e );
	void OnSettings_DefaultDeviceInterface_Changed( wxCommandEvent& e );
	void OnSetupCaptureQueueDepth( wxCommandEvent& e );
	void OnSetupRecordSequenceSize( wxCommandEvent& e );
	void OnSetupHarddiscRecording( wxCommandEvent& e );
	void OnShowIncompleteFrames( wxCommandEvent& e );
	void OnShowMonitorDisplay( wxCommandEvent& e );
	void OnShowStatusBar( wxCommandEvent& e );
	void OnShowToolBar( wxCommandEvent& e );
	void OnSize( wxSizeEvent& e );
	void OnSLRecordDisplay( wxScrollEvent& e );
	void OnSplitterSashPosChanged( wxSplitterEvent& e );
	void OnToggleDisplayWindowSize( wxCommandEvent& e );
	void OnToggleFullScreenMode( wxCommandEvent& e );
	void OnUpdateDeviceList( wxCommandEvent& e );
	void OnUserExperienceComboTextChanged( wxCommandEvent& e );
	void SetupDlgControls( void );
private:
	//-----------------------------------------------------------------------------
	enum TImageAnalysisPlot
	//-----------------------------------------------------------------------------
	{
		iapPixelHistogram,
		iapNoiseHistogram,
		iapLineProfile,
		iapIntensityPlot,
		iapVectorScope,
		iapLAST
	};
	//-----------------------------------------------------------------------------
	// IDs for the controls and the menu commands
	enum TMenuItem
	//-----------------------------------------------------------------------------
	{
		miQuit = mibLAST,
		miHelp_About,
		miHelp_DriverInformation,
		miAction_UseDevice,
		miAction_Settings_Save_ToDefault,
		miAction_Settings_Save_CurrentProduct,
		miAction_Settings_Save_SystemToDefault,
		miAction_Settings_Save_ActiveDevice,
		miAction_Settings_Save_ExportActiveDevice,
		miAction_Settings_Load_FromDefault,
		miAction_Settings_Load_CurrentProduct,
		miAction_Settings_Load_ActiveDevice,
		miAction_Settings_Load_ImportActiveDevice,
		miAction_Settings_Manage,
		miAction_LoadImage,
		miAction_SaveImage,
		miAction_SaveImageSequenceToFiles,
		miAction_SaveImageSequenceToStream,
		miAction_UpdateDeviceList,
		miCapture_Live,
		miCapture_Snap,
		miCapture_Abort,
		miCapture_Record,
		miCapture_Forward,
		miCapture_Backward,
		miCapture_Recording_SilentMode,
		miCapture_Recording_Continuous,
		miCapture_Recording_SetupSequenceSize,
		miCapture_Recording_SetupHarddiscRecording,
		miCapture_SetupCaptureQueueDepth,
		miSettings_PropGrid_Show,
		miSettings_PropGrid_DisplayPropIndicesAsHex,
		miSettings_PropGrid_UseDisplayNameIfAvailable,
		miSettings_PropGrid_UseSelectorGrouping,
		miSettings_PropGrid_StandardView,
		miSettings_PropGrid_DevelopersView,
		miCapture_CaptureSettings_CreateCaptureSetting,
		miCapture_CaptureSettings_CaptureSettingHierarchy,
		miCapture_CaptureSettings_AssignToDisplays,
		miCapture_CaptureSettings_UsageMode_Manual,
		miCapture_CaptureSettings_UsageMode_Automatic,
		miSettings_Display_Active,
		miSettings_Display_ShowMonitorImage,
		miSettings_Display_ShowIncompleteFrames,
		miSettings_ShowToolBar,
		miSettings_ShowStatusBar,
		miSettings_ToggleFullScreenMode,
		miSettings_ShowConnectedDevicesOnly,
		miSettings_DefaultDeviceInterface_DeviceSpecific,
		miSettings_DefaultDeviceInterface_Generic,
		miSettings_DefaultDeviceInterface_GenICam,
		miSettings_Analysis_ShowControls,
		widStatusBar,
		widVerSplitter,
		widDevCombo,
		widHorSplitter,
		widLogHistogramSplitter,
		widMainFrame,
		widInfoPlot_PlotSelectionCombo,
		widCBEnableInfoPlot,
		widSCInfoPlotUpdateSpeed,
		widSCInfoPlotHistoryDepth,
		widSLRecordDisplay,
		widNotebook,
		widUserExperienceCombo,
		widNBConfigurationMethod,

		BUILD_PLOT_WINDOW_START_ID(PixelHistogram),
		BUILD_PLOT_WINDOW_START_ID(NoiseHistogram),
		BUILD_PLOT_WINDOW_START_ID(LineProfile),
		BUILD_PLOT_WINDOW_START_ID(IntensityPlot),
		BUILD_PLOT_WINDOW_START_ID(VectorScope)
	};
	//-----------------------------------------------------------------------------
	enum TImageAnalysisPlotIDs
	//-----------------------------------------------------------------------------
	{
		iapidCBAOIFullMode,
		iapidCBProcessBayerParity,
		iapidSCAOIx,
		iapidSCAOIy,
		iapidSCAOIw,
		iapidSCAOIh,
		iapidCoBPlotSelection,
		iapidSCHistoryDepth,
		iapidSCDrawStart_percent,
		iapidSCDrawWindow_percent,
		iapidSCDrawStepWidth,
		iapidSCGridStepsX,
		iapidSCGridStepsY,
		iapidSCUpdateSpeed,
		iapidNBDisplayMethod,
		iapidGrid
	};
	//-----------------------------------------------------------------------------
	enum
	//-----------------------------------------------------------------------------
	{
		DISPLAY_COUNT_MAX = 5
	};
	//-----------------------------------------------------------------------------
	enum TStatusBarField
	//-----------------------------------------------------------------------------
	{
		sbfFPS,
		sbfFrameCount,
		sbfImageFormat,
		sbfErrorCount,
		sbfExposeTime,
		sbfGain,
		sbfPixelData,
		NO_OF_STATUSBAR_FIELDS
	};
	ImageAnalysisPlotControls			m_ImageAnalysisPlots[iapLAST];
	wxScrolledWindow* CreateImageAnalysisPlotControls( wxWindow* pParent, int windowIDOffset );
	bool								m_boCloseDeviceInProgress;
	bool								m_boDisplayWindowMaximized;
	bool								m_boShutdownInProgress;
	bool								m_boUpdateAOIInProgress;
	bool								m_boCurrentImageIsFromFile;
	bool								m_boImageCanvasInFullScreenMode;
	wxTextAttr							m_boldTextStyle;
	typedef std::vector<RequestData> RequestInfoContainer;
	RequestInfoContainer				m_CurrentRequestDataContainer;
	int									m_CurrentImageAnalysisControlIndex;
	unsigned int						m_DeviceListChangedCounter;
	unsigned int						m_DeviceCount;
	int									m_HorizontalSplitterPos;
	const wxString						m_NoDevStr;
	wxCheckBox*							m_pCBEnableInfoPlot;
	wxTextCtrl*							m_pTCTimestampAsTime;
	wxComboBox*							m_pDevCombo;
	wxSlider*							m_pRecordDisplaySlider;
	DevicePropertyHandler*				m_pDevPropHandler;
	DisplayWindowContainer				m_pDisplayAreas;
	SettingToDisplayDict				m_settingToDisplayDict;
	ImageCanvas*						m_pLastMouseHooverDisplay;
	ImageCanvas*						m_pCurrentAnalysisDisplay;
	int									m_CurrentRequestDataIndex;
	wxCriticalSection					m_CritSect;
	wxPanel*							m_pDisplayPanel;
	wxPanel*							m_pSettingsPanel;
	wxComboBox*							m_pUserExperienceCombo;
	MonitorDisplay*						m_pMonitorImage;
	wxSplitterWindow*					m_pHorizontalSplitter;
	InfoPlotCanvas*						m_pInfoPlotArea;
	wxComboBox*							m_pInfoPlotSelectionCombo;
	wxTextCtrl*							m_pLogWindow;
	wxNotebook*							m_pLowerRightWindow;
	wxNotebook*							m_pNBConfigurationMethod;
#ifdef BUILD_WITH_PLUGIN_SUPPORT
	PluginManager						m_pluginManager;
#endif // #ifdef BUILD_WITH_PLUGIN_SUPPORT
	wxMenuItem*							m_pMIAction_Use;
	wxMenuItem*							m_pMIAction_Settings_Save_ToDefault;
	wxMenuItem*							m_pMIAction_Settings_Save_SystemToDefault;
	wxMenuItem*							m_pMIAction_Settings_Save_CurrentProduct;
	wxMenuItem*							m_pMIAction_Settings_Save_ActiveDevice;
	wxMenuItem*							m_pMIAction_Settings_Save_ExportActiveDevice;
	wxMenuItem*							m_pMIAction_Settings_Load_FromDefault;
	wxMenuItem*							m_pMIAction_Settings_Load_CurrentProduct;
	wxMenuItem*							m_pMIAction_Settings_Load_ActiveDevice;
	wxMenuItem*							m_pMIAction_Settings_Load_ImportActiveDevice;
	wxMenuItem*							m_pMIAction_Settings_Manage;
	wxMenuItem*							m_pMIAction_LoadImage;
	wxMenuItem*							m_pMIAction_SaveImage;
	wxMenuItem*							m_pMIAction_SaveImageSequenceToFiles;
	wxMenuItem*							m_pMIAction_SaveImageSequenceToStream;
	wxMenuItem*							m_pMIAction_UpdateDeviceList;
	wxMenuItem*							m_pMICapture_Live;
	wxMenuItem*							m_pMICapture_Snap;
	wxMenuItem*							m_pMICapture_Abort;
	wxMenuItem*							m_pMICapture_Record;
	wxMenuItem*							m_pMICapture_Forward;
	wxMenuItem*							m_pMICapture_Backward;
	wxMenuItem*							m_pMICapture_Recording_SlientMode;
	wxMenuItem*							m_pMICapture_Recording_Continuous;
	wxMenuItem*							m_pMICapture_Recording_SetupSequenceSize;
	wxMenuItem*							m_pMICapture_Recording_SetupHarddiscRecording;
	wxMenuItem*							m_pMICapture_SetupCaptureQueueDepth;
	wxMenuItem*							m_pMISettings_Display_Active;
	wxMenuItem*							m_pMISettings_Display_ShowMonitorImage;
	wxMenuItem*							m_pMISettings_Display_ShowIncompleteFrames;
	wxMenuItem*							m_pMISettings_ShowConnectedOnly;
	wxMenuItem*							m_pMISettings_DefaultDeviceInterface_DeviceSpecific;
	wxMenuItem*							m_pMISettings_DefaultDeviceInterface_Generic;
	wxMenuItem*							m_pMISettings_DefaultDeviceInterface_GenICam;
	wxMenuItem*							m_pMISettings_Analysis_ShowControls;
	wxMenuItem*							m_pMISettings_Analysis_SynchroniseAOIs;
	wxMenuItem*							m_pMISettings_PropGrid_Show;
	wxMenuItem*							m_pMISettings_PropGrid_DisplayPropIndicesAsHex;
	wxMenuItem*							m_pMISettings_PropGrid_UseDisplayNameIfAvailable;
	wxMenuItem*							m_pMISettings_PropGrid_UseSelectorGrouping;
	wxMenuItem*							m_pMISettings_PropGrid_StandardView;
	wxMenuItem*							m_pMISettings_PropGrid_DevelopersView;
	wxMenuItem*							m_pMICapture_CaptureSettings_CreateCaptureSetting;
	wxMenuItem*							m_pMICapture_CaptureSettings_CaptureSettingHierarchy;
	wxMenuItem*							m_pMICapture_CaptureSettings_AssignToDisplays;
	wxMenuItem*							m_pMICapture_CaptureSettings_UsageMode_Manual;
	wxMenuItem*							m_pMICapture_CaptureSettings_UsageMode_Automatic;
	wxMenuItem*							m_pMISettings_ShowToolBar;
	wxMenuItem*							m_pMISettings_ShowStatusBar;
	wxMenuItem*							m_pMISettings_ToggleFullScreenMode;
	wxPanel*							m_pPanel;
	wxSpinCtrl*							m_pSCInfoPlotHistoryDepth;
	wxSpinCtrl*							m_pSCInfoPlotUpdateSpeed;
	wxStatusBar*						m_pStatusBar;
	wxToolBar*							m_pToolBar;
	wxTextCtrl*							m_pToolTipWindow;
	wxSplitterWindow*					m_pVerticalSplitter;
	int									m_VerticalSplitterPos;
	DevicePropertyHandler::TViewMode	m_ViewMode;
	mvIMPACT::acquire::TDeviceInterfaceLayout m_defaultDeviceInterfaceLayout;
	HarddiscRecordingParameters			m_harddiscRecordingParameters;
	void								Abort( void );
	void								AnalysisPlotUpdateSpeedChanged( void );
	template<typename _Ty> void			AppendYUV444DataPixelInfo( wxPoint pixel, wxString& pixelInfo, const ImageBuffer* pIB, const int order[3] ) const;
	template<typename _Ty> void			AppendYUVDataPixelInfo( wxPoint pixel, wxString& pixelInfo, const ImageBuffer* pIB ) const;
	template<typename _Ty> void			AppendUYVDataPixelInfo( wxPoint pixel, wxString& pixelInfo, const ImageBuffer* pIB ) const;
	mvIMPACT::acquire::TBayerMosaicParity BayerParityFromString( const wxString& value );
	static int							BuildPlotWindowStartID( int index ) { return ( index + 1 ) * PLOT_WINDOW_ID_RANGE; }
	void								ConfigureAnalysisPlot( const wxRect* pAOI = 0 );
	void								ConfigureAOI( ImageAnalysisPlotControls& controls, const wxRect& rect );
	void								ConfigureAOIControlLimits( ImageAnalysisPlotControls& controls );
	void								ConfigureLive( void );
	void								ConfigureSplitter( wxSplitterWindow* pSplitter, wxWindow* pWindowToRemove, wxWindow* pWindowToShow );
	void								ConfigureStatusBar( bool boShow );
	void								ConfigureToolBar( bool boShow );
	void								Deinit( void );
	ImageAnalysisPlotCanvas*			DeselectAnalysisPlot( void );
	void								DisplaySettingLoadSaveErrorMessage( const wxString& msgPrefix, int originalErrorCode );
	int									GetAnalysisControlIndex( void ) const;
	int									GetAnalysisControlIndex( int windowID ) const;
	int									GetDesiredDeviceIndex( wxString& serial ) const;
	wxString							GetSelectedDeviceSerial( void ) const;
	mvIMPACT::acquire::TImageBufferPixelFormat PixelFormatFromString( const wxString& value );
	void								RefreshCurrentPixelData( void );
	void								RefreshDisplays( bool boEraseBackground );
	template<class _Ty> void			RegisterAnalysisPlot( int index, wxWindowID id, wxWindowID gridID, const wxColour& AOIColour );
	void								SaveImage( const wxString& filenameAndPath, TFileFormat fileFilterIndex );
	void								SearchAndSelectImageCanvas( ImageCanvas* pImageCanvas );
	void								SelectImageCanvas( int index );
	void								SetupCaptureSettingsUsageMode( TCaptureSettingUsageMode mode );
	void								SetupDisplayLogSplitter( bool boForceSplit = false );
	void								SetupUpdateFrequencies( bool boCurrentValue );
	void								SetupVerSplitter( bool boSplit );
	void								UpdateDeviceComboBox( void );
	void								UpdateDeviceFromComboBox( void );
	void								UpdateDeviceInterfaceLayouts( void );
	void								UpdateData( bool boShowInfo = false, bool boForceUnlock = false );
	void								UpdatePropGridSplitter( void );
	void								UpdatePropGridViewMode( void );
	void								UpdateSettingTable( void );
	void								UpdateStatusBar( void );
	void								UpdateTitle( void );
	void								UpdateToolTipWindow( wxPGId prop );
	void								UpdateUserExperience( const wxString& userExperience );
	void								ToggleCurrentDevice( void );
	void								WriteToTextCtrl( wxTextCtrl* pTextCtrl, const wxString& msg, const wxTextAttr& style = wxTextAttr(*wxBLACK) );
	// any class wishing to process wxWidgets events must use this macro
	DECLARE_EVENT_TABLE()
};

#endif // PropViewFrameH
