#include <windows.h>
#include <stdio.h>
#include <bncs_string.h>
#include <bncs_config.h>
#include "StatusDisplayUMD.h"

#define PNL_MAIN	1

#define TIMER_SETUP	1

// this nasty little macro to make our class visible to the outside world
EXPORT_BNCS_SCRIPT( StatusDisplayUMD )

// constructor - equivalent to ApplCore STARTUP
StatusDisplayUMD::StatusDisplayUMD( bncs_client_callback * parent, const char * path ) : bncs_script_helper( parent, path )
{
	// show a panel from file p1.bncs_ui and we'll know it as our panel PNL_MAIN
	panelShow( PNL_MAIN, "UMD.bncs_ui" );
	infoRegister(2, 1, 4000, false);
	infoPoll(2, 1, 12);
	infoPoll(2, 1000, 1012);


	// you may need this call to set the size of this component 
	//  if it's used in a popup window 
//	setSize( 1024,668 );		// set the size explicitly
//	setSize( PNL_MAIN );		// set the size to the same as the specified panel
}

// destructor - equivalent to ApplCore CLOSEDOWN
StatusDisplayUMD::~StatusDisplayUMD()
{
}

// all button pushes and notifications come here
void StatusDisplayUMD::buttonCallback( buttonNotify *b )
{

}

// all revertives come here
int StatusDisplayUMD::revertiveCallback( revertiveNotify * r )
{
	switch( r->device() )
	{
		case 2:
			if (r->index() <= 1000) //this is text
			{
				bncs_string labelName;
				labelName = "UMD" + bncs_string(r->index());
				textPut("text", r->sInfo(), PNL_MAIN, labelName);
			}
			else //this is tally
			{
				if (r->sInfo() == "0")
				{
					bncs_string labelName1;
					bncs_string labelName2;
					bncs_string labelNumber;
					labelNumber = bncs_string(r->index() - 1000);
					labelName1 = "UMD" + labelNumber + "TallyLeft";
					labelName2 = "UMD" + labelNumber + "TallyRight";
					textPut("colour.background", "grey", PNL_MAIN, labelName1);
					textPut("colour.background", "grey", PNL_MAIN, labelName2);

				}
				if (r->sInfo() == "1")
				{
				bncs_string labelName1;
				bncs_string labelName2;
				bncs_string labelNumber;
				labelNumber = bncs_string(r->index() - 1000);
				labelName1 = "UMD" + labelNumber + "TallyLeft";
				labelName2 = "UMD" + labelNumber + "TallyRight";
				textPut("colour.background", "red", PNL_MAIN, labelName1);
				textPut("colour.background", "grey", PNL_MAIN, labelName2);
				}
				if (r->sInfo() == "2")
				{
					bncs_string labelName1;
					bncs_string labelName2;
					bncs_string labelNumber;
					labelNumber = bncs_string(r->index() - 1000);
					labelName1 = "UMD" + labelNumber + "TallyLeft";
					labelName2 = "UMD" + labelNumber + "TallyRight";
					textPut("colour.background", "grey", PNL_MAIN, labelName1);
					textPut("colour.background", "red", PNL_MAIN, labelName2);
				}
				if (r->sInfo() == "3")
				{
					bncs_string labelName1;
					bncs_string labelName2;
					bncs_string labelNumber;
					labelNumber = bncs_string(r->index() - 1000);
					labelName1 = "UMD" + labelNumber + "TallyLeft";
					labelName2 = "UMD" + labelNumber + "TallyRight";
					textPut("colour.background", "red", PNL_MAIN, labelName1);
					textPut("colour.background", "red", PNL_MAIN, labelName2);
				}


				

			}






 			//textPut( "text", r->sInfo(), PNL_MAIN, 3 );
			break;
	}
	return 0;
}

// all database name changes come back here
void StatusDisplayUMD::databaseCallback( revertiveNotify * r )
{
}

// all parent notifications come here i.e. when this script is just one 
//  component of another dialog then our host might want to tell us things
bncs_string StatusDisplayUMD::parentCallback( parentNotify *p )
{
	if( p->command() == "return" )
	{
		if( p->value() == "all" )
		{	// Persisting values for bncs_vis_ed
			bncs_stringlist sl;
			
			sl << bncs_string( "myParam=%1" ).arg( m_myParam );
			
			return sl.toString( '\n' );
		}

		else if( p->value() == "myParam" )
		{	// Specific value being asked for by a textGet
			return( bncs_string( "%1=%2" ).arg( p->value() ).arg( m_myParam ) );
		}

	}
	else if( p->command() == "instance" && p->value() != m_instance )
	{	// Our instance is being set/changed
		m_instance = p->value();
		//Do something instance-change related here
	}

	else if( p->command() == "myParam" )
	{	// Persisted value or 'Command' being set here
		m_myParam = p->value();
	}

	// ***** CONNECTIONS EVENTS HELPER LIST *****
	else if( p->command() == "_events" )
	{	// Helper-list of everything in this component generated by hostNotify's
		bncs_stringlist sl;

		sl << "notify=*";		
		
		return sl.toString( '\n' );
	}

	// ***** CONNECTIONS COMMANDS HELPER LIST *****
	else if( p->command() == "_commands" )
	{	// Helper-list of any commands/parameters you might want to set at run-time
		bncs_stringlist sl;
		
		sl << "myParam=[value]";
		
		return sl.toString( '\n' );
	}

	return "";
}

// timer events come here
void StatusDisplayUMD::timerCallback( int id )
{
	switch( id )
	{
	case TIMER_SETUP:
		timerStop(id);
		break;

	default:	// Unhandled timer event
		timerStop(id);
		break;
	}
}


///////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////// Callbacks above - Methods below ///////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////////


