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

  1. // ChannelMixer.cpp : implementation file
  2. //
  3.  
  4. #include "stdafx.h"
  5. #include "tracker.h"
  6. #include "ChannelMixer.h"
  7. #include "roundsliderctrl.h"
  8.  
  9. #ifdef _DEBUG
  10. #define new DEBUG_NEW
  11. #undef THIS_FILE
  12. static char THIS_FILE[] = __FILE__;
  13. #endif
  14. #define FloatIntMAX 1024
  15. #define uFloatToInt(a) ((a)*1024)
  16. #define sFloatToInt(a) ((a)*1024+1024)
  17.  
  18. #define uIntToFloat(a) ((a)/1024.0f)
  19. #define sIntToFloat(a) (((a)-1024)/1024.0f)
  20.  
  21.  
  22. /////////////////////////////////////////////////////////////////////////////
  23. // CChannelMixer dialog
  24.  
  25.  
  26. CChannelMixer::CChannelMixer(CWnd* pParent /*=NULL*/)
  27.     : CDialog(CChannelMixer::IDD, pParent)
  28. {
  29.     //{{AFX_DATA_INIT(CChannelMixer)
  30.         // NOTE: the ClassWizard will add member initialization here
  31.     //}}AFX_DATA_INIT
  32. }
  33.  
  34.  
  35. void CChannelMixer::DoDataExchange(CDataExchange* pDX)
  36. {
  37.     CDialog::DoDataExchange(pDX);
  38.     //{{AFX_DATA_MAP(CChannelMixer)
  39.     DDX_Control(pDX, IDC_ROUNDSLIDER_KNOBVOL, m_volKnob);
  40.     DDX_Control(pDX, IDC_ROUNDSLIDER_KNOBPAN, m_panKnob);
  41.     DDX_Control(pDX, IDC_ROUNDSLIDER_KNOBFX3, m_fx3Knob);
  42.     DDX_Control(pDX, IDC_ROUNDSLIDER_KNOBFX2, m_fx2Knob);
  43.     DDX_Control(pDX, IDC_ROUNDSLIDER_KNOBFX1, m_fx1Knob);
  44.     //}}AFX_DATA_MAP
  45. }
  46.  
  47.  
  48. BEGIN_MESSAGE_MAP(CChannelMixer, CDialog)
  49.     //{{AFX_MSG_MAP(CChannelMixer)
  50.     ON_WM_PAINT()
  51.     ON_WM_HSCROLL()
  52.     //}}AFX_MSG_MAP
  53. END_MESSAGE_MAP()
  54.  
  55. /////////////////////////////////////////////////////////////////////////////
  56. // CChannelMixer message handlers
  57.  
  58. void CChannelMixer::OnPaint() 
  59. {
  60.     CPaintDC dc(this); // device context for painting
  61.     
  62.     // TODO: Add your message handler code here
  63.   CRect rect;
  64.   CDC *pDC;
  65.   int xp;
  66.   pDC=GetDC ();
  67.   
  68.  
  69.   pDC->SetBkMode(TRANSPARENT);
  70.   GetClientRect(&rect);
  71.   CSize sz = pDC->GetTextExtent(m_caption);
  72.  
  73.   xp = (rect.Width()/2) - (sz.cx/2);
  74.  
  75.   pDC->TextOut (xp,0,m_caption);
  76.     
  77.     // Do not call CDialog::OnPaint() for painting messages
  78. }
  79. void CChannelMixer::SetSynth(isSynth *_s,int ch)
  80. {
  81.   synth=_s;
  82.   chnr=ch;
  83.   m_caption.Format("ch %.2d",ch);  
  84. }
  85.  
  86. void CChannelMixer::UpdateSynthData()
  87. {  
  88.   m_volKnob.SetPos (uFloatToInt (synth->volume[chnr]));
  89.   m_panKnob.SetPos (uFloatToInt (synth->panning[chnr]));
  90.   m_fx1Knob.SetPos (uFloatToInt (synth->fx1Gain[chnr]));
  91.   m_fx2Knob.SetPos (uFloatToInt (synth->fx2Gain[chnr]));
  92.   m_fx3Knob.SetPos (uFloatToInt (synth->fx3Gain[chnr]));
  93. }
  94.  
  95. void CChannelMixer::SetSynthData()
  96. {
  97.   synth->volume[chnr] = uIntToFloat(m_volKnob.GetPos());
  98.   synth->panning[chnr] = uIntToFloat(m_panKnob.GetPos());
  99.   synth->fx1Gain[chnr] = uIntToFloat(m_fx1Knob.GetPos());
  100.   synth->fx2Gain[chnr] = uIntToFloat(m_fx2Knob.GetPos());
  101.   synth->fx3Gain[chnr] = uIntToFloat(m_fx3Knob.GetPos());
  102. }
  103.  
  104. BOOL CChannelMixer::OnInitDialog() 
  105. {
  106.     CDialog::OnInitDialog();
  107.     
  108.     // TODO: Add extra initialization here
  109.  
  110.   m_volKnob.SetRange(0,4096);
  111.   m_panKnob.SetRange(0,1024);
  112.   m_fx1Knob.SetRange(0,1024);
  113.   m_fx2Knob.SetRange(0,1024);
  114.   m_fx3Knob.SetRange(0,1024);
  115.   
  116.   
  117.   
  118.   m_volKnob.SetText ("%4.3f");
  119.   m_panKnob.SetText ("%4.3f");
  120.   m_fx1Knob.SetText ("%4.3f");
  121.   m_fx2Knob.SetText ("%4.3f");
  122.   m_fx3Knob.SetText ("%4.3f");
  123.  
  124.   m_volKnob.SetZero(180);
  125.   m_panKnob.SetZero(180);
  126.   m_fx1Knob.SetZero(180);
  127.   m_fx2Knob.SetZero(180);
  128.   m_fx3Knob.SetZero(180);
  129.   
  130.   m_volKnob.SetScale (1.0/1024.0);
  131.   m_panKnob.SetScale (1.0/1024.0);
  132.   m_fx1Knob.SetScale (1.0/1024.0);
  133.   m_fx2Knob.SetScale (1.0/1024.0);
  134.   m_fx3Knob.SetScale (1.0/1024.0);
  135.   
  136.     return TRUE;  // return TRUE unless you set the focus to a control
  137.                   // EXCEPTION: OCX Property Pages should return FALSE
  138. }
  139.  
  140. void CChannelMixer::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) 
  141. {
  142.     // TODO: Add your message handler code here and/or call default
  143.     SetSynthData();
  144.     CDialog::OnHScroll(nSBCode, nPos, pScrollBar);
  145. }
  146.