////////////////////////////////////////////////////////////////////////////////
//
// gaykadlg.cpp -  
//
////////////////////////////////////////////////////////////////////////////////
#include "stdafx.h"

#ifndef __LIBDB_H
#include <libdb.h>
#endif 

#ifndef  _INC_MATH
#include "math.h"
#endif  

#ifndef __GAYKA_H
#include "Gayka.h"
#endif
    
#ifndef __GAYKADLG_H 
#include "GaykaDlg.h"
#endif 

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif



//-------------------------------------------------------------------------------
//  
// ---
static int ChoiceBMP( int drawType, int f ) 
{
	int bmpId = 0;
  switch ( drawType ) 
  {
		case ID_VID     : bmpId = f & SIMPLE ? G5915_5 : f & ISPOLN ? G5915_9  : G5915_1; break;
    case ID_SIDEVID : bmpId = f & SIMPLE ? G5915_6 : f & ISPOLN ? G5915_10 : G5915_2; break;
    case ID_TOPVID  : bmpId = f & SIMPLE ? G5915_7 : G5915_3;                         break;
    case ID_VIDSEC  : bmpId = f & SIMPLE ? G5915_8 : f & ISPOLN ? G5915_11 : G5915_4; break;
  }
  return bmpId;
}


//-------------------------------------------------------------------------------
//  
// ---
GaykaDlg::GaykaDlg(Gayka5915& gayka, SimpleBase& base, CWnd* pParent /*=NULL*/)
	: CDialog(GaykaDlg::IDD, pParent),
		m_gayka(gayka),
    m_base(base)
{
	//{{AFX_DATA_INIT(GaykaDlg)
	m_stepHatch  = m_gayka.GetParamGayka().hatchStep;
	m_angleHatch = m_gayka.GetParamGayka().hatchAngle;
	//}}AFX_DATA_INIT

	m_bitMapId = 0;
}


//-------------------------------------------------------------------------------
// 
// ---
void GaykaDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(GaykaDlg)
	DDX_Control(pDX, IDC_DIAM,     m_diam);
	DDX_Control(pDX, IDC_ADDKEY,   m_key);
	DDX_Control(pDX, IDC_H_STEP,   m_stepEdit);
	DDX_Control(pDX, IDC_H_ANGLE,  m_angEdit);
	DDX_Control(pDX, IDC_SLIMSTEP, m_slimStep);
	DDX_Control(pDX, IDC_SIMPLE,   m_simple);
  DDX_Control(pDX, IDC_SPCOBJ,   m_spcObj);    
	DDX_Control(pDX, IDC_SHOW,     m_showStatic);
	DDX_Text   (pDX, IDC_H_STEP,   m_stepHatch);
	DDV_MinMaxFloat(pDX, m_stepHatch, 1.e-002f, 100.f);
  DDX_Text   (pDX, IDC_H_ANGLE,  m_angleHatch); 
	DDV_MinMaxFloat(pDX, m_angleHatch, -360.f, 360.f);
	//}}AFX_DATA_MAP
}


//-------------------------------------------------------------------------------
// 
// ---
BEGIN_MESSAGE_MAP(GaykaDlg, CDialog)
	//{{AFX_MSG_MAP(GaykaDlg)
	ON_WM_PAINT()
	ON_BN_CLICKED   (IDC_VIEW,        OnView)
	ON_BN_CLICKED   (IDC_SECVIEW,     OnSecview)
	ON_BN_CLICKED   (IDC_SIDEVIEW,    OnSideview)
	ON_BN_CLICKED   (IDC_TOPVIEW,     OnTopview)
	ON_BN_CLICKED   (IDC_PERF1,       OnPerf1)
	ON_BN_CLICKED   (IDC_PERF2,       OnPerf2)
  ON_BN_CLICKED   (IDC_SPCOBJ,      OnSpcObj)
	ON_BN_CLICKED   (IDC_DRAWAXIS,    OnDrawaxis)
	ON_BN_CLICKED   (IDC_SIMPLE,      OnSimple)
	ON_BN_CLICKED   (IDC_SLIMSTEP,    OnSlimstep)
	ON_EN_CHANGE    (IDC_H_ANGLE,     OnChangeHAng)
	ON_EN_CHANGE    (IDC_H_STEP,      OnChangeHShag)
	ON_BN_CLICKED   (IDC_ADDKEY,      OnAddkey)
	ON_CBN_SELCHANGE(IDC_DIAM,        OnSelchangeDiam)
	ON_BN_CLICKED   (IDC_HELP_BUTTON, OnHelpButton)
	ON_EN_UPDATE    (IDC_H_ANGLE,     OnUpdateHAngle)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()


//-------------------------------------------------------------------------------
//   
// ---
BOOL GaykaDlg::OnInitDialog() 
{
	CDialog::OnInitDialog(); 	
	TCHAR buf[256];

	m_simple.SetCheck( m_gayka.GetParamGayka().maskAdjustment & SIMPLE ); // 
	m_slimStep.SetCheck( m_gayka.GetParamGayka().maskAdjustment & PITCH );  //  
  if ( m_gayka.GetParamGayka().maskAdjustment & PITCHOFF )
    m_slimStep.EnableWindow( false );
	
	bool check = !!(m_gayka.GetParamGayka().maskAdjustment & ISPOLN);
	CheckDlgButton( IDC_PERF1,   !check );
	CheckDlgButton( IDC_PERF2,    check );
  CheckDlgButton( IDC_SPCOBJ,   m_gayka.GetParamMacro().flagSpcCreate                );
	CheckDlgButton( IDC_SECVIEW,  m_gayka.GetDrawType() == ID_VIDSEC                   );
	CheckDlgButton( IDC_TOPVIEW,  m_gayka.GetDrawType() == ID_TOPVID                   );
	CheckDlgButton( IDC_SIDEVIEW, m_gayka.GetDrawType() == ID_SIDEVID                  );
	CheckDlgButton( IDC_VIEW,			m_gayka.GetDrawType() == ID_VID                      );   
  CheckDlgButton( IDC_DRAWAXIS, !(m_gayka.GetParamGayka().maskAdjustment & AXIS_OFF) );
  CheckDlgButton( IDC_ADDKEY,		m_gayka.GetParamGayka().maskAdditional & KEY_S       );
                                

  m_key.EnableWindow( m_gayka.GetParamGayka().maskAdditional & KEY_S_GRAY ); 

	m_stepHatch = m_gayka.GetParamGayka().hatchStep;
	m_angleHatch  = m_gayka.GetParamGayka().hatchAngle;
	SetHatchWindowEnable( m_gayka.GetDrawType() == ID_VIDSEC );                                                                

	bool flagRepeat = true;
  struct { char s[20]; float dr; } record;
	while ( flagRepeat ) 
  {
		flagRepeat = !!ReadRecord( m_base.bg, m_base.rg1, &record );
		if ( flagRepeat ) 
    {
			m_diam.AddString( _bstr_t(record.s) );
		}
	}
  _stprintf( buf, _T("%g"), m_gayka.GetParamGayka().dr );
	m_diam.SelectString( -1, buf );

	m_bitMapId = ChoiceBMP( m_gayka.GetDrawType(), m_gayka.GetParamGayka().maskAdjustment );
	m_showStatic.Invalidate();
	
  UpdateData( FALSE );
  
  ksConvertLangWindow( m_hWnd );

	return TRUE;
}


//-------------------------------------------------------------------------------
//   
// ---
void GaykaDlg::OnPaint() 
{
  CPaintDC dc(this);
  DrawSlide( m_showStatic.m_hWnd, m_bitMapId );
}


//-------------------------------------------------------------------------------
// 
// ---
void GaykaDlg::OnView() 
{
	if ( IsDlgButtonChecked(IDC_VIEW) ) 
  {
		m_gayka.GetDrawType() = ID_VID;	
		SetHatchWindowEnable( false );
		m_bitMapId = ChoiceBMP( m_gayka.GetDrawType(), m_gayka.GetParamGayka().maskAdjustment );
		OnPaint();
	}
}


//-------------------------------------------------------------------------------
// /
// ---
void GaykaDlg::OnSecview() 
{
	if ( IsDlgButtonChecked(IDC_SECVIEW) ) 
  {
		m_gayka.GetDrawType() = ID_VIDSEC;	
		SetHatchWindowEnable( true );
		m_bitMapId = ChoiceBMP( m_gayka.GetDrawType(), m_gayka.GetParamGayka().maskAdjustment );
		OnPaint();
	}
}


//-------------------------------------------------------------------------------
//  
// ---
void GaykaDlg::OnSideview() 
{
	if ( IsDlgButtonChecked(IDC_SIDEVIEW) ) 
  {
		m_gayka.GetDrawType() = ID_SIDEVID;	
		SetHatchWindowEnable( false );
		m_bitMapId = ChoiceBMP( m_gayka.GetDrawType(), m_gayka.GetParamGayka().maskAdjustment );
		OnPaint();
	}
}


//-------------------------------------------------------------------------------
//  
// ---
void GaykaDlg::OnTopview() 
{
	if ( IsDlgButtonChecked(IDC_TOPVIEW) ) 
  {
		m_gayka.GetDrawType() = ID_TOPVID;	
		SetHatchWindowEnable( false );
		m_bitMapId = ChoiceBMP( m_gayka.GetDrawType(), m_gayka.GetParamGayka().maskAdjustment );
		OnPaint();
	}
}


//-------------------------------------------------------------------------------
//  1
// ---
void GaykaDlg::OnPerf1() 
{
	if ( IsDlgButtonChecked(IDC_PERF1) ) 
  {
		m_gayka.GetParamGayka().maskAdjustment &= ~ISPOLN;	
	}
	else
		m_gayka.GetParamGayka().maskAdjustment |= ISPOLN;
	m_bitMapId = ChoiceBMP( m_gayka.GetDrawType(), m_gayka.GetParamGayka().maskAdjustment );
	OnPaint();
}


//-------------------------------------------------------------------------------
//  2
// ---
void GaykaDlg::OnPerf2() 
{
	if ( IsDlgButtonChecked(IDC_PERF2) ) 
		m_gayka.GetParamGayka().maskAdjustment |= ISPOLN;
	else
		m_gayka.GetParamGayka().maskAdjustment &= ~ISPOLN;	
	m_bitMapId = ChoiceBMP( m_gayka.GetDrawType(), m_gayka.GetParamGayka().maskAdjustment );
	OnPaint();
}


//-------------------------------------------------------------------------------
//    
// ---
void GaykaDlg::SetHatchWindowEnable(bool enable)
{
	m_stepEdit.EnableWindow( enable );
	m_angEdit.EnableWindow( enable );
}


//-------------------------------------------------------------------------------
//  
// ---
void GaykaDlg::OnDrawaxis() 
{
	if ( !IsDlgButtonChecked(IDC_DRAWAXIS) )
		m_gayka.GetParamGayka().maskAdjustment |= AXIS_OFF;
	else
		m_gayka.GetParamGayka().maskAdjustment &=~ AXIS_OFF;
}


//-------------------------------------------------------------------------------
//  
// ---
void GaykaDlg::OnSimple() 
{
	!!m_simple.GetCheck() ? m_gayka.GetParamGayka().maskAdjustment |= SIMPLE 
												: m_gayka.GetParamGayka().maskAdjustment &= ~SIMPLE;
	m_bitMapId = ChoiceBMP( m_gayka.GetDrawType(), m_gayka.GetParamGayka().maskAdjustment );
	OnPaint();
}


//-------------------------------------------------------------------------------
//  
// ---
void GaykaDlg::OnSpcObj()
{
  bool check = !!IsDlgButtonChecked(IDC_SPCOBJ);
	m_gayka.GetParamMacro().flagSpcCreate = check;
}


//-------------------------------------------------------------------------------
//  
// ---
void GaykaDlg::OnSlimstep() 
{
  if ( !!m_slimStep.GetCheck() )
    m_gayka.GetParamGayka().maskAdjustment |= PITCH;
  else
    m_gayka.GetParamGayka().maskAdjustment &= ~PITCH;

  if ( !ReadGaykaBase ( m_gayka.GetParamGayka().dr, m_base, &m_gayka.GetParamGayka() ) )
    OnCancel();
}


//-------------------------------------------------------------------------------
//   - 
// ---
void GaykaDlg::OnChangeHAng() 
{
	UpdateData();
	if ( fabs(m_angleHatch - m_gayka.GetParamGayka().hatchAngle) > 0.001 ) 
		m_gayka.GetParamGayka().hatchAngle = m_angleHatch;
}


//-------------------------------------------------------------------------------
//   - 
// ---
void GaykaDlg::OnChangeHShag() 
{
	UpdateData();
	if ( ::fabs(m_stepHatch - m_gayka.GetParamGayka().hatchStep) > 0.001 ) 
		m_gayka.GetParamGayka().hatchStep = m_stepHatch;
}


//-------------------------------------------------------------------------------
//    
// ---
void GaykaDlg::OnAddkey() 
{
	if ( !!m_key.GetCheck() )
    m_gayka.GetParamGayka().maskAdditional |= KEY_S;
  else
    m_gayka.GetParamGayka().maskAdditional &=~ KEY_S;

  if ( !ReadGaykaBase ( m_gayka.GetParamGayka().dr, m_base, &m_gayka.GetParamGayka() ) )
    OnCancel();
}

//-------------------------------------------------------------------------------
//    
// ---
void GaykaDlg::OnSelchangeDiam() 
{
	CString str;
  m_diam.GetLBText( m_diam.GetCurSel(), str.GetBuffer(20) );
  str.ReleaseBuffer();
	float diam = (float)::_tcstod( str, NULL );
	if ( ::fabs(diam - m_gayka.GetParamGayka().dr) > 0.001 ) 
  {
		m_gayka.GetParamGayka().dr = diam;  

    if ( !ReadGaykaBase ( m_gayka.GetParamGayka().dr, m_base, &m_gayka.GetParamGayka() ) )
    {
      OnCancel(); 
      return;
    }

		m_key.EnableWindow( m_gayka.GetParamGayka().maskAdditional & KEY_S_GRAY );

		if ( m_gayka.GetParamGayka().maskAdjustment & PITCHOFF )
			m_slimStep.EnableWindow( false );
		else
			m_slimStep.EnableWindow( true );

		m_bitMapId = ChoiceBMP( m_gayka.GetDrawType(), m_gayka.GetParamGayka().maskAdjustment );
		OnPaint();
	}
}


//-------------------------------------------------------------------------------
//   
// ---
int GetHelpFileName( LPTSTR fileName ) 
{
  if ( GetModuleFileName( StepDLL.hModule, fileName, 255 ) ) 
  {
    TCHAR *c = ::_tcsrchr( fileName, _T('\\') );
    if ( c ) 
    {
      *(c + 1) = _T('\0');
      ::_tcscat( fileName, LIB_HELPFILE );
      OFSTRUCT ofs;
      if ( ::OpenFile(_bstr_t(fileName), &ofs, OF_EXIST) != HFILE_ERROR )
        return 1;
    }
  }
  return 0;
}


//-------------------------------------------------------------------------------
//  
// ---
void GaykaDlg::OnHelpButton() 
{
	TCHAR fName[255];
	if ( GetHelpFileName(fName) )
		ksOpenHelpFileT( fName, HELP_CONTEXT, 1 );
	else
		ErrorT( _T(" gayka.hlp  ") );
}



void GaykaDlg::OnUpdateHAngle() 
{

}
