/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2013 Raytrix GmbH. All rights reserved.
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#pragma once

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// namespace: Rx.Interop.Runtime30
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
namespace Rx
{
	namespace Interop
	{
		namespace Runtime30
		{
			/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
			/// \brief
			/// 	This interface is used to send messages from the Devices to the Server.
			/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
			class IStatusCameraCallback
			{
			protected:

				virtual ~IStatusCameraCallback() { };

			public:

				/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
				/// <summary>
				/// 	Function to call for "info level" messages.
				/// </summary>
				///
				/// <param name="pcSourceName"> The message. </param>
				/// <param name="pcMessage">    Message describing the PC. </param>
				/// <param name="iLevel">	    Zero-based indent level for the message. </param>
				/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
				virtual void Info(const char* pcSourceName, const char* pcMessage, int iLevel) = 0;

				/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
				/// <summary>
				/// 	Function to call for "error level" messages.
				/// </summary>
				///
				/// <param name="pcSourceName"> The message. </param>
				/// <param name="pcMessage">    Message describing the PC. </param>
				/// <param name="iLevel">	    Zero-based indent level for the message. </param>
				/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
				virtual void Error(const char* pcSourceName, const char* pcMessage, int iLevel) = 0;

				/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
				/// <summary>
				/// 	Function to call for "warning level" messages.
				/// </summary>
				///
				/// <param name="pcSourceName"> The message. </param>
				/// <param name="pcMessage">    Message describing the PC. </param>
				/// <param name="iLevel">	    Zero-based indent level for the message. </param>
				/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
				virtual void Warning(const char* pcSourceName, const char* pcMessage, int iLevel) = 0;

				/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
				/// <summary>
				/// 	Signals the beginning of a progress. This progress can be shown in a progress bar.
				/// </summary>
				///
				/// <param name="iStepCount"> Number of steps. </param>
				/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
				virtual void ProgressInit(int iStepCount) = 0;

				/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
				/// <summary>
				/// 	Increments the initialized progress by iIncrement.
				/// </summary>
				///
				/// <param name="iIncrement"> Amount to increment by. </param>
				/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
				virtual void ProgressIncrement(int iIncrement) = 0;

				/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
				/// <summary>
				/// 	Set the value of the initialized progress to iValue.
				/// </summary>
				///
				/// <param name="iValue"> Progress value. </param>
				/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
				virtual void ProgressValue(int iValue) = 0;

				/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
				/// <summary>
				/// 	Signals the finish of the initialized progress.
				/// </summary>
				/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
				virtual void ProgressFinished() = 0;
			};
		}
	}
}

#pragma make_public(Rx::Interop::Runtime30::IStatusCameraCallback)
