home *** CD-ROM | disk | FTP | other *** search
/ Large Pack of OldSkool DOS MOD Trackers / beaversweeper_v101.zip / src / EffectSlider1.cpp < prev    next >
C/C++ Source or Header  |  2003-01-06  |  4KB  |  191 lines

  1. // EffectSlider1.cpp : implementation file
  2. //
  3.  
  4. #include "stdafx.h"
  5. #include "tracker.h"
  6. #include "EffectSlider1.h"
  7.  
  8. #ifdef _DEBUG
  9. #define new DEBUG_NEW
  10. #undef THIS_FILE
  11. static char THIS_FILE[] = __FILE__;
  12. #endif
  13.  
  14. /////////////////////////////////////////////////////////////////////////////
  15. // CEffectSlider dialog
  16.  
  17.  
  18. CEffectSlider::CEffectSlider(CWnd* pParent /*=NULL*/)
  19.     : CDialog(CEffectSlider::IDD, pParent)
  20. {
  21.     //{{AFX_DATA_INIT(CEffectSlider)
  22.     m_edit = _T("");
  23.     //}}AFX_DATA_INIT
  24.     m_float = 0;
  25.     m_rangestart = 0;
  26.     m_rangestop = 1000;
  27.     m_value = 0;
  28.     m_int = 0;
  29.     m_ccb_recurse_count = 0;
  30.     m_ccb = 0;
  31.     m_ccb_passed = 0;
  32. }
  33.  
  34.  
  35. void CEffectSlider::DoDataExchange(CDataExchange* pDX)
  36. {
  37.     CDialog::DoDataExchange(pDX);
  38.     //{{AFX_DATA_MAP(CEffectSlider)
  39.     DDX_Control(pDX, IDC_SLIDER1, m_scroller);
  40.     DDX_Text(pDX, IDC_EDIT1, m_edit);
  41.     //}}AFX_DATA_MAP
  42. }
  43.  
  44.  
  45. BEGIN_MESSAGE_MAP(CEffectSlider, CDialog)
  46.     //{{AFX_MSG_MAP(CEffectSlider)
  47.     ON_NOTIFY(NM_CUSTOMDRAW, IDC_SLIDER1, OnCustomdrawSlider1)
  48.     ON_EN_CHANGE(IDC_EDIT1, OnChangeEdit1)
  49.     ON_NOTIFY(NM_RELEASEDCAPTURE, IDC_SLIDER1, OnReleasedcaptureSlider1)
  50.     ON_EN_KILLFOCUS(IDC_EDIT1, OnKillfocusEdit1)
  51.     //}}AFX_MSG_MAP
  52. END_MESSAGE_MAP()
  53.  
  54. /////////////////////////////////////////////////////////////////////////////
  55. // CEffectSlider message handlers
  56.  
  57. BOOL CEffectSlider::OnCommand(WPARAM wParam, LPARAM lParam) 
  58. {
  59.     // TODO: Add your specialized code here and/or call the base class
  60.     if (wParam == IDCANCEL || wParam == IDOK)
  61.         return FALSE;
  62.     
  63.     return CDialog::OnCommand(wParam, lParam);
  64. }
  65.  
  66. void CEffectSlider::setRange( float start, float stop )
  67. {
  68.     m_rangestart = start;
  69.     m_rangestop = stop;
  70.     m_value = start + stop / 2;
  71.     setValue( m_value );
  72. }
  73.  
  74. void CEffectSlider::setFloat( float *_float )
  75. {    
  76.     m_float = _float;
  77.     setValue( *m_float );
  78. }
  79.  
  80. void CEffectSlider::setInt( int *_int )
  81. {    
  82.     m_int = _int;
  83.     setValue( *m_int );
  84. }
  85.  
  86. void CEffectSlider::setValue( float value, bool change_edit)
  87. {
  88.     if (value < m_rangestart)
  89.         value = m_rangestart;
  90.     if (value > m_rangestop)
  91.         value = m_rangestop;
  92.     if (m_float)
  93.         *m_float = value;
  94.     if (m_int)
  95.         *m_int = value;
  96.  
  97.     // Anropa callback
  98.     if (m_ccb && m_ccb_recurse_count<1) {
  99.         m_ccb_recurse_count++;
  100.         if (m_value != value)
  101.             m_ccb( m_ccb_passed, m_value );
  102.         m_ccb_recurse_count--;
  103.     }
  104.  
  105.     m_value = value;
  106.     m_scroller.SetPos( 10000 * (float)(m_value-m_rangestart)/(float)(m_rangestop-m_rangestart) );
  107.     if (true == change_edit) {
  108.         if (!m_float)
  109.             m_edit.Format(_T("%d"),(int)value);
  110.         else
  111.             m_edit.Format(_T("%f"),value);
  112.         UpdateData(FALSE);
  113.     }
  114. }
  115.  
  116. void CEffectSlider::setTitle( CString title )
  117. {
  118.     GetDlgItem( IDC_STATIC_EFF_DESC )->SetWindowText( title );
  119. }
  120.  
  121. BOOL CEffectSlider::OnInitDialog() 
  122. {
  123.     CDialog::OnInitDialog();
  124.     
  125.     // TODO: Add extra initialization here
  126.     m_scroller.SetRange( 0, 10000, FALSE );
  127.     setRange(-100,100);
  128.     if (m_float)
  129.         setValue( *m_float );
  130.     if (m_int)
  131.         setValue( *m_int );
  132.  
  133.     UpdateData(FALSE);
  134.     
  135.     return TRUE;  // return TRUE unless you set the focus to a control
  136.                   // EXCEPTION: OCX Property Pages should return FALSE
  137. }
  138.  
  139. void CEffectSlider::OnCustomdrawSlider1(NMHDR* pNMHDR, LRESULT* pResult) 
  140. {
  141.     // TODO: Add your control notification handler code here
  142.     setValue( (float)m_scroller.GetPos() / 10000.0f * (m_rangestop - m_rangestart) + m_rangestart );        
  143.     *pResult = 0;
  144. }
  145.  
  146. void CEffectSlider::OnChangeEdit1() 
  147. {
  148.     // TODO: If this is a RICHEDIT control, the control will not
  149.     // send this notification unless you override the CDialog::OnInitDialog()
  150.     // function and call CRichEditCtrl().SetEventMask()
  151.     // with the ENM_CHANGE flag ORed into the mask.
  152.     
  153.     
  154.  
  155.     if (GetFocus() != GetDlgItem( IDC_EDIT1 )) 
  156.     {
  157.  
  158.     }
  159.     
  160.     // TODO: Add your control notification handler code here
  161.     
  162. }
  163.  
  164. void CEffectSlider::OnReleasedcaptureSlider1(NMHDR* pNMHDR, LRESULT* pResult) 
  165. {
  166.     // TODO: Add your control notification handler code here
  167.     
  168.     *pResult = 0;
  169. }
  170.  
  171. void CEffectSlider::OnKillfocusEdit1() 
  172. {
  173.     UpdateData(TRUE);
  174.  
  175.     for (int i=0;i<m_edit.GetLength();i++) {
  176.         char t = m_edit[i];
  177.         if ( t != '.' && (!(t >= '0' && t <= '9')))
  178.             return;
  179.     }
  180.  
  181.     // TODO: Add your control notification handler code here
  182.     float newfloat = atof( m_edit );
  183.     setValue( newfloat );
  184. }
  185.  
  186. void CEffectSlider::setChangeCallback( EFFECTSLIDER_CALLBACK cb, LPVOID passed )
  187. {
  188.     m_ccb = cb;
  189.     m_ccb_passed = passed;
  190. }
  191.