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

  1.  
  2. #include "stdafx.h"
  3. #include "tracker.h"
  4.  
  5. #include "mainfrm.h"
  6. #include "gtkformat.h"
  7. #include "trackerDoc.h"
  8. #include "trackerView.h"
  9.  
  10. #ifdef _DEBUG
  11. #define new DEBUG_NEW
  12. #undef THIS_FILE
  13. static char THIS_FILE[] = __FILE__;
  14. #endif
  15.  
  16. #define SETHIBYTE(a,b) ((a)=((a)&0x0f)|(((b)<<4)&0xf0));
  17. #define SETLOWBYTE(a,b) ((a)=((a)&0xf0)|((b)&0x0f));
  18.  
  19. static char *legal_num_char="0123456789ABCDEF";
  20.  
  21.  
  22. void CPatternView::ModifySequencerData (int val)
  23. {
  24.     CTrackerDoc *pDoc = GetDocument ();
  25.  
  26.     GTK_SEQPOS *patpos;
  27.  
  28.     patpos = &pDoc->gtk->channels[seqCursor.col].positions[seqCursor.pos];
  29.     switch (seqCursor.rowcol)
  30.     {
  31.         case 0 :
  32.             SETHIBYTE (patpos->pattern,val);
  33.             break;
  34.         case 1 :
  35.             SETLOWBYTE (patpos->pattern,val);
  36.             break;
  37.  
  38.         case 2 :
  39.             SETHIBYTE (patpos->transpose,val);
  40.             break;
  41.         case 3 :
  42.             SETLOWBYTE (patpos->transpose,val);
  43.             break;
  44.         case 4 :
  45.             SETHIBYTE (patpos->fx,val);
  46.             break;
  47.         case 5 :
  48.             SETLOWBYTE (patpos->fx,val);
  49.             break;
  50.         case 6 :
  51.             SETHIBYTE (patpos->param1,val);
  52.             break;
  53.         case 7 :
  54.             SETLOWBYTE (patpos->param1,val);
  55.             break;
  56.         case 8 :
  57.             SETHIBYTE (patpos->param2,val);
  58.             break;
  59.         case 9 :
  60.             SETLOWBYTE (patpos->param2,val);
  61.             break;
  62.         case 10:
  63.             SETHIBYTE (patpos->param3,val);
  64.             break;
  65.         case 11:
  66.             SETLOWBYTE (patpos->param3,val);
  67.             break;
  68.     case 12 :
  69.       SETHIBYTE (patpos->param4,val);
  70.       break;
  71.     case 13 :
  72.       SETLOWBYTE (patpos->param4,val);
  73.       break;
  74.     case 14:
  75.       SETHIBYTE (patpos->param5,val);
  76.       break;
  77.     case 15:
  78.       SETLOWBYTE (patpos->param5,val);
  79.       break;
  80.     case 16:
  81.       SETHIBYTE (patpos->param6,val);
  82.       break;
  83.     case 17:
  84.       SETLOWBYTE (patpos->param6,val);
  85.       break;
  86.       
  87.       
  88.     }
  89. }
  90.  
  91. void CPatternView::MoveSequencerCursor (int val,int flag)
  92. {
  93.     CTrackerDoc *pDoc = GetDocument ();
  94.     GTK_SEQCHANNEL *schn;
  95.     schn = &pDoc->gtk->channels[seqCursor.col];
  96.     
  97.     switch (flag)
  98.     {
  99.         case 0 :
  100.             seqCursor.pos+=val;
  101.             if (seqCursor.pos > (schn->len-1)) seqCursor.pos = (schn->len-1);
  102.             if (seqCursor.pos < 0) seqCursor.pos = 0;    
  103.             break;
  104.         case 1:
  105.             seqCursor.rowcol+=val;
  106.             if (seqCursor.rowcol > 17) seqCursor.rowcol = 0;
  107.             if (seqCursor.rowcol < 0) seqCursor.rowcol = 17;
  108.             break;
  109.         case 2 :
  110.             seqCursor.col+=val;
  111.             if (seqCursor.col > 15) seqCursor.col = 0;
  112.             if (seqCursor.col < 0) seqCursor.col = 15;
  113.             break;
  114.     }
  115. }
  116. void CPatternView::SetSequencerCursor (int val,int flag)
  117. {
  118. /*
  119.     if (!flag)
  120.     {
  121.         seqCursor.pos=val;
  122.     } else
  123.         {
  124.             seqCursor.rowcol = val;            
  125.         }
  126. */
  127.     switch (flag)
  128.     {
  129.         case 0 :
  130.             seqCursor.pos=val;
  131.             break;
  132.         case 1 :
  133.             seqCursor.rowcol = val;            
  134.             break;
  135.         case 2 :
  136.             seqCursor.col = val;
  137.             break;
  138.  
  139.     }
  140. }
  141.  
  142. void CPatternView::ProcessSequencerKey(UINT nChar, UINT nRepCnt, UINT nFlags) 
  143. {
  144.   CTrackerDoc *pDoc = GetDocument ();
  145.   EDITDATA *edt;
  146.   edt = &pDoc->editData;
  147.   if (pDoc != NULL)
  148.   {
  149.     switch (nChar)
  150.     {
  151.     case VK_HOME :
  152.       SetSequencerCursor (0,0);
  153.       break;
  154.     case VK_END :
  155.       SetSequencerCursor (63,0);
  156.       break;
  157.     case VK_DOWN :
  158.       if (!(GetKeyState (VK_CONTROL) & 0x8000))
  159.         MoveSequencerCursor (1,0);
  160.       else
  161.         isPatternEdit=1;
  162.       break;
  163.     case VK_UP :
  164.       if (!(GetKeyState (VK_CONTROL) & 0x8000))
  165.         MoveSequencerCursor (-1,0);
  166.       else
  167.         isPatternEdit=1;
  168.       break;
  169.     case VK_NEXT :
  170.       MoveSequencerCursor (16,0);
  171.       break;
  172.     case VK_PRIOR :
  173.       MoveSequencerCursor (-16,0);
  174.       break;
  175.     case VK_RIGHT :
  176.       if (!(GetKeyState (VK_CONTROL) & 0x8000))
  177.         MoveSequencerCursor (1,1);
  178.       else
  179.       {
  180.         MoveSequencerCursor (1,2);
  181.         SetSequencerCursor (0,1);
  182.       }
  183.       break;
  184.     case VK_LEFT :
  185.       if (!(GetKeyState (VK_CONTROL) & 0x8000)) 
  186.         MoveSequencerCursor (-1,1);
  187.       else
  188.       {
  189.         if (!seqCursor.rowcol) MoveSequencerCursor (-1,2);
  190.         SetSequencerCursor (0,1);
  191.       }
  192.       break;
  193.     case VK_DELETE :
  194.       ModifySequencerData (0);
  195.       MoveSequencerCursor (1,0);
  196.       break;
  197.     case VK_TAB :
  198.       if (!(GetKeyState (VK_RSHIFT) & 0x8000))
  199.       {
  200.         if (GetKeyState (VK_LSHIFT) & 0x8000)
  201.           MoveSequencerCursor (-1,2);
  202.         else MoveSequencerCursor (1,2);
  203.       } else
  204.       {
  205.         isPatternEdit = 1;
  206.       }
  207.       break;
  208.     default :
  209.       {
  210.         char *ptr;
  211.         if ((ptr = strchr (legal_num_char,nChar))!=NULL)
  212.         {
  213.           int val = ptr - (char *)legal_num_char;
  214.           
  215.           ModifySequencerData (val);
  216.           MoveSequencerCursor (1,0);
  217.           
  218.         } // if 
  219.       } // block
  220.       
  221.       break;    // default
  222.     } // switch
  223. //  pDoc->UpdateAllViews (NULL);
  224.     Invalidate();
  225.     UpdateWindow();
  226.   }
  227.   
  228. } // on chn key
  229.