#include "ordeviceskeleton_device.h"
#include "ordeviceskeleton_layout.h"
#define ORDEVICESKELETON_LAYOUT ORDeviceSkeletonLayout
ORDEVICESKELETON_CLASSSTR,
bool ORDeviceSkeletonLayout::FBCreate()
{
mDevice = ((ORDeviceSkeleton *)(FBDevice *)Device);
UICreate ();
UIConfigure ();
UIReset ();
mDevice->OnStatusChange.Add (
this,(
FBCallback)&ORDeviceSkeletonLayout::EventDeviceStatusChange );
mSystem.OnUIIdle.Add (
this,(
FBCallback)&ORDeviceSkeletonLayout::EventUIIdle );
return true;
}
void ORDeviceSkeletonLayout::FBDestroy()
{
mSystem.OnUIIdle.Remove (
this,(
FBCallback)&ORDeviceSkeletonLayout::EventUIIdle );
mDevice->OnStatusChange.Remove (
this,(
FBCallback)&ORDeviceSkeletonLayout::EventDeviceStatusChange );
}
void ORDeviceSkeletonLayout::UICreate()
{
int lS, lH;
lS = 4;
lH = 25;
AddRegion (
"MainLayout",
"MainLayout", lS,
kFBAttachLeft,
"TabPanel", 1.00,
SetControl ( "TabPanel", mTabPanel );
SetControl ( "MainLayout", mLayoutMarkers );
UICreateLayout0();
UICreateLayout1();
}
void ORDeviceSkeletonLayout::UICreateLayout0()
{
mLayoutMarkers.AddRegion( "SpreadMarkers", "SpreadMarkers",
mLayoutMarkers.SetControl( "SpreadMarkers", mSpreadMarkers );
}
void ORDeviceSkeletonLayout::UICreateLayout1()
{
int lS, lW, lH;
lS = 4;
lW = 250;
lH = 18;
mLayoutSetup.AddRegion ( "LabelSetup", "LabelSetup",
mLayoutSetup.SetControl( "LabelSetup", mLabelSetup );
mLayoutSetup.AddRegion ( "CharacterizeButton", "CharacterizeButton",
mLayoutSetup.SetControl( "CharacterizeButton", mButtonCharacterize );
int lS_y = -15;
lW = 100;
lH = 25;
int lHlr = 100;
int lWlr = 250;
int lWrb = 140;
int lSlbx = 30;
int lSlby = 12;
int lWlb = 80;
mLayoutSetup.AddRegion( "NetworkSetup", "NetworkSetup",
mLayoutCommunication.AddRegion( "LayoutRegionNetwork", "LayoutRegionNetwork",
mLayoutCommunication.AddRegion( "ButtonNetworkEnable", "ButtonNetworkEnable",
mLayoutCommunication.AddRegion( "LabelNetworkAddress", "LabelNetworkAddress",
mLayoutCommunication.AddRegion( "EditNetworkAddress", "EditNetworkAddress",
mLayoutCommunication.AddRegion( "LabelNetworkPort", "LabelNetworkPort",
mLayoutCommunication.AddRegion( "EditNetworkPort", "EditNetworkPort",
mLayoutCommunication.SetControl( "ButtonNetworkEnable", mButtonNetworkEnable );
mLayoutCommunication.SetControl( "LabelNetworkAddress", mLabelNetworkAddress );
mLayoutCommunication.SetControl( "EditNetworkAddress", mEditNetworkAddress );
mLayoutCommunication.SetControl( "LabelNetworkPort", mLabelNetworkPort );
mLayoutCommunication.SetControl( "EditNetworkPort", mEditNetworkPort );
mLayoutSetup.SetControl ( "NetworkSetup", mLayoutCommunication );
}
void ORDeviceSkeletonLayout::UIConfigure()
{
mTabPanel.Items.SetString("Markers~Setup");
mTabPanel.OnChange.Add(
this, (
FBCallback)&ORDeviceSkeletonLayout::EventTabPanelChange );
UIConfigureLayout0();
UIConfigureLayout1();
}
void ORDeviceSkeletonLayout::UIConfigureLayout0()
{
}
void ORDeviceSkeletonLayout::UIConfigureLayout1()
{
mLabelSetup.Caption = "Character setup according to device template";
mButtonCharacterize.Caption = "Characterize";
mButtonCharacterize.OnClick.Add(
this, (
FBCallback)&ORDeviceSkeletonLayout::EventSetupCharacter );
mLayoutCommunication.SetBorder(
"LayoutRegionNetwork",
kFBEmbossBorder,
false,
true,2,1,90.0,0);
mButtonNetworkEnable.Caption = "Use skeleton test server";
mButtonNetworkEnable.State = mDevice->GetNetworkUse();
mButtonNetworkEnable.OnClick.Add(
this,(
FBCallback) &ORDeviceSkeletonLayout::EventButtonNetworkEnableClick );
mLayoutCommunication.SetBorder(
"EditNetworkAddress",
kFBStandardBorder,
false,
true, 1, 0,90,0);
mLayoutCommunication.SetBorder(
"EditNetworkPort",
kFBStandardBorder,
false,
true, 1, 0,90,0);
mLabelNetworkAddress.Caption = "Address :";
mEditNetworkAddress.Text = mDevice->GetNetworkAddress();
mEditNetworkAddress.OnChange.Add(
this, (
FBCallback) &ORDeviceSkeletonLayout::EventEditNetworkAddressChange );
mLabelNetworkPort.Caption = "Port :";
char lBuffer[40];
sprintf(lBuffer, "%d", mDevice->GetNetworkPort() );
mEditNetworkPort.Text = lBuffer;
mEditNetworkPort.OnChange.Add(
this, (
FBCallback) &ORDeviceSkeletonLayout::EventEditNetworkPortChange );
}
void ORDeviceSkeletonLayout::UIRefresh()
{
UIRefreshSpreadSheet();
}
void ORDeviceSkeletonLayout::UIRefreshSpreadSheet()
{
for(
int i=0;
i<mDevice->GetChannelCount();
i++)
{
mSpreadMarkers.SetCell(
i, 0, mDevice->GetDataTX(
i) );
mSpreadMarkers.SetCell(
i, 1, mDevice->GetDataTY(
i) );
mSpreadMarkers.SetCell(
i, 2, mDevice->GetDataTZ(
i) );
mSpreadMarkers.SetCell(
i, 3, mDevice->GetDataRX(
i) );
mSpreadMarkers.SetCell(
i, 4, mDevice->GetDataRY(
i) );
mSpreadMarkers.SetCell(
i, 5, mDevice->GetDataRZ(
i) );
}
}
void ORDeviceSkeletonLayout::UIReset()
{
UIResetSpreadSheet();
}
void ORDeviceSkeletonLayout::UIResetSpreadSheet()
{
mSpreadMarkers.Clear();
int lColumnIndex = -1;
mSpreadMarkers.GetColumn(lColumnIndex).Width = 200;
mSpreadMarkers.ColumnAdd ("PosX");
lColumnIndex++;
mSpreadMarkers.GetColumn(lColumnIndex).Width = 60;
mSpreadMarkers.ColumnAdd ("PosY");
lColumnIndex++;
mSpreadMarkers.GetColumn(lColumnIndex).Width = 60;
mSpreadMarkers.ColumnAdd ("PosZ");
lColumnIndex++;
mSpreadMarkers.GetColumn(lColumnIndex).Width = 60;
mSpreadMarkers.ColumnAdd ("RotX");
lColumnIndex++;
mSpreadMarkers.GetColumn(lColumnIndex).Width = 60;
mSpreadMarkers.ColumnAdd ("RotY");
lColumnIndex++;
mSpreadMarkers.GetColumn(lColumnIndex).Width = 60;
mSpreadMarkers.ColumnAdd ("RotZ");
lColumnIndex++;
mSpreadMarkers.GetColumn(lColumnIndex).Width = 60;
for (i=0;i<mDevice->GetChannelCount();i++)
{
mSpreadMarkers.RowAdd( mDevice->GetChannelName(i),
i );
mSpreadMarkers.GetCell(i,lColumnIndex).ReadOnly = true;
}
}
void ORDeviceSkeletonLayout::EventTabPanelChange(
HISender pSender,
HKEvent pEvent )
{
switch( mTabPanel.ItemIndex )
{
case 0: SetControl("MainLayout", mLayoutMarkers ); break;
case 1: SetControl("MainLayout", mLayoutSetup ); break;
}
}
void ORDeviceSkeletonLayout::EventButtonNetworkEnableClick(
HISender pSender,
HKEvent pEvent )
{
mDevice->SetNetworkUse(((int)mButtonNetworkEnable.State)==1);
}
void ORDeviceSkeletonLayout::EventEditNetworkPortChange(
HISender pSender,
HKEvent pEvent )
{
int lPort;
char lBuffer[40];
sscanf(mEditNetworkPort.Text.AsString(), "%d", &lPort);
mDevice->SetNetworkPort(lPort);
lPort = mDevice->GetNetworkPort();
sprintf(lBuffer, "%d", lPort );
mEditNetworkPort.Text = lBuffer;
}
void ORDeviceSkeletonLayout::EventEditNetworkAddressChange(
HISender pSender,
HKEvent pEvent )
{
mDevice->SetNetworkAddress(mEditNetworkAddress.Text.AsString());
mEditNetworkAddress.Text = mDevice->GetNetworkAddress();
}
void ORDeviceSkeletonLayout::EventDeviceStatusChange(
HISender pSender,
HKEvent pEvent )
{
UIReset();
}
void ORDeviceSkeletonLayout::EventUIIdle(
HISender pSender,
HKEvent pEvent )
{
if( mDevice->Online )
{
UIRefresh();
}
}
static void SetupMapping(FBCharacter* pCharacter, FBModel* pParent)
{
FBString lName = (const char*)pParent->Name; lName += "Link";
FBProperty* lLink = pCharacter->PropertyList.Find(lName,false);
if(lLink && lLink->IsList())
{
((FBPropertyListComponent*)lLink)->Add(pParent);
}
for(int i = 0; i < pParent->Children.GetCount(); i++)
{
SetupMapping(pCharacter,pParent->Children[i]);
}
}
void ORDeviceSkeletonLayout::EventSetupCharacter(
HISender pSender,
HKEvent pEvent )
{
if(mDevice && mDevice->ReadyForCharacterize())
{
FBCharacter* lCharacter = new FBCharacter("DeviceCharacter");
FBModel* lReference = mDevice->mRootTemplate->Model;
if(lReference)
{
SetupMapping(lCharacter,lReference);
lCharacter->SetCharacterizeOn(true);
}
}
}