form_ringComposer.cpp
上传用户:gelin96
上传日期:2017-01-08
资源大小:20993k
文件大小:20k
源码类别:

MTK

开发平台:

C++ Builder

  1. /*****************************************************************************
  2. *  Copyright Statement:
  3. *  --------------------
  4. *  This software is protected by Copyright and the information contained
  5. *  herein is confidential. The software may not be copied and the information
  6. *  contained herein may not be used or disclosed except with the written
  7. *  permission of MediaTek Inc. (C) 2005
  8. *
  9. *  BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
  10. *  THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
  11. *  RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
  12. *  AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
  13. *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
  14. *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
  15. *  NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
  16. *  SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
  17. *  SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
  18. *  THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
  19. *  NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
  20. *  SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
  21. *
  22. *  BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
  23. *  LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
  24. *  AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
  25. *  OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
  26. *  MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
  27. *
  28. *  THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
  29. *  WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
  30. *  LAWS PRINCIPLES.  ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
  31. *  RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
  32. *  THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
  33. *
  34. *****************************************************************************/
  35. /*****************************************************************************
  36.  *
  37.  * Filename:
  38.  * ---------
  39.  *   form_RingComposer.cpp
  40.  *
  41.  * Project:
  42.  * --------
  43.  *   Maui META APP
  44.  *
  45.  * Description:
  46.  * ------------
  47.  *   Ring composer form source
  48.  *
  49.  * Author:
  50.  * -------
  51.  *  Andy Ueng (mtk00490)
  52.  *
  53.  *============================================================================
  54.  *             HISTORY
  55.  * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
  56.  *------------------------------------------------------------------------------
  57.  * $Revision$
  58.  * $Modtime$
  59.  * $Log$
  60.  * 
  61.  *------------------------------------------------------------------------------
  62.  * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
  63.  *============================================================================
  64.  ****************************************************************************/
  65. //---------------------------------------------------------------------------
  66. #include <vcl.h>
  67. #pragma hdrstop
  68. #include "Form_RingComposer.h"
  69. //---------------------------------------------------------------------------
  70. #pragma package(smart_init)
  71. #pragma resource "*.dfm"
  72. static int Default_Repeats = 1;
  73. static int Default_SpeakerVolume = 128;
  74. static int Default_BuzzerVolume = 4;
  75. TfrmRingComposer *frmRingComposer;
  76. static void  imelody_play_cnf_cb( FT_IMELODY_PLAY_CNF cnf, short token, void *usrData)
  77. {  frmRingComposer->imelody_play_cnf_cb( cnf, token, usrData);
  78. }
  79. static void  imelody_play_over_ind_cb(short token, void *usrData)
  80. {  frmRingComposer->imelody_play_over_ind_cb( token, usrData);
  81. }
  82. static void  imelody_stop_cnf_cb( FT_IMELODY_STOP_CNF cnf, short token, void *usrData)
  83. {
  84.  frmRingComposer->imelody_stop_cnf_cb( cnf, token, usrData);
  85. }
  86. void  TfrmRingComposer::ShowHintLabel( TControl *sender, char* hint )
  87. {
  88.    TPoint pt0 = this->ClientOrigin;
  89.    TPoint pt1 = sender->ClientOrigin;
  90.    lblHint->Left = (pt1.x-pt0.x);
  91.    lblHint->Top  = (pt1.y-pt0.y)+sender->Height+3;
  92.    lblHint->Caption = hint;
  93.    lblHint->Visible = true;
  94.    HintTimer->Enabled = true;
  95. }
  96. //---------------------------------------------------------------------------
  97. __fastcall TfrmRingComposer::TfrmRingComposer(TComponent* Owner)
  98.         : TForm(Owner)
  99. {
  100.  int j;
  101.  edtNotes->ReadOnly = true;
  102.  memoRingComposer->ReadOnly = true;
  103.  NotesBuf[0]= '';
  104.  IsFirstOctave = true;
  105.  strcpy(lastOctave, ComboBoxOctave->Text.c_str());
  106.  // marked by Andy Ueng
  107.  //ComboBoxVolume->Items->Add("V0");
  108.  //ComboBoxVolume->Items->Add("V1");
  109.  //ComboBoxVolume->Items->Add("V2");
  110.  //ComboBoxVolume->Items->Add("V3");
  111.  //ComboBoxVolume->Items->Add("V4");
  112.  //ComboBoxVolume->Items->Add("V5");
  113.  //ComboBoxVolume->Items->Add("V6");
  114.  //ComboBoxVolume->Items->Add("V7");
  115.  //ComboBoxVolume->Items->Add("V8");
  116.  //ComboBoxVolume->Items->Add("V9");
  117.  //ComboBoxVolume->Items->Add("V10");
  118.  //ComboBoxVolume->Items->Add("V11");
  119.  //ComboBoxVolume->Items->Add("V12");
  120.  //ComboBoxVolume->Items->Add("V13");
  121.  //ComboBoxVolume->Items->Add("V14");
  122.  //ComboBoxVolume->Items->Add("V15");
  123.  // end of marked
  124. // for(j=0; j<MAX_RING_COMPSER_SIZE; j++)
  125. //   {
  126. //    RingComposerBuf[j] = ' ';
  127. //   }
  128. // strcpy(RingComposerBuf, "BEGIN:IMELODY");
  129. // strcat(RingComposerBuf, "nVERSION:1.2");
  130. // strcat(RingComposerBuf, "nFORMAT:CLASS1.0");
  131. // strcat(RingComposerBuf, "nMELODY: ");
  132. }
  133. //---------------------------------------------------------------------------
  134.  void TfrmRingComposer::imelody_play_cnf_cb( FT_IMELODY_PLAY_CNF cnf, short token, void *usrData)
  135.    {
  136.       // modified by Andy Ueng
  137.      // if ( cnf->ok != 0)
  138.      if ( cnf.status == STATUS_IMELODY_PLAY_SUCCESS)
  139.      // end of modified
  140.       {
  141.        sb_L1sp->Panels->Items[0]->Text = (AnsiString) "  Play iMelody successfully";
  142.        sb_L1sp->Panels->Items[1]->Text = "";
  143.       } else
  144.       {
  145.        Application->MessageBox( "Play iMelody Failure", "FAILURE", MB_OK );
  146.        btnPlayiMelody->Enabled = true;
  147.        btnStopPlayiMelody->Enabled = false;
  148.       }
  149.    }
  150. void TfrmRingComposer::imelody_play_over_ind_cb(short token, void *usrData)
  151.    {
  152.      sb_L1sp->Panels->Items[0]->Text = (AnsiString) "  play iMelody finish";
  153.      sb_L1sp->Panels->Items[1]->Text = "";
  154.      btnPlayiMelody->Enabled = true;
  155.      btnStopPlayiMelody->Enabled = false;
  156.    }
  157.  void TfrmRingComposer::imelody_stop_cnf_cb( FT_IMELODY_STOP_CNF cnf, short token, void *usrData)
  158.    {
  159.      if ( cnf.status == STATUS_IMELODY_STOP_SUCCESS)
  160.       {
  161.        sb_L1sp->Panels->Items[0]->Text = (AnsiString) "  Stop play iMelody successfully";
  162.        sb_L1sp->Panels->Items[1]->Text = "";
  163.        btnPlayiMelody->Enabled = true;
  164.        btnStopPlayiMelody->Enabled = false;
  165.       } else
  166.       {
  167.         Application->MessageBox( "Stop play iMelody failure", "FAILURE", MB_OK );
  168.         sb_L1sp->Panels->Items[0]->Text = (AnsiString) "  Stop play Melody failure";
  169.         sb_L1sp->Panels->Items[1]->Text = "";
  170.         btnPlayiMelody->Enabled = true;
  171.         btnStopPlayiMelody->Enabled = false;
  172.       }
  173.    }
  174. //---------------------------------------------------------------------------
  175. void __fastcall TfrmRingComposer::btnDoClick(TObject *Sender)
  176. {
  177.  IsContinueOctaveChange = false;
  178.  if(IsFirstOctave == true)
  179.    {
  180.     strcat(NotesBuf, ComboBoxOctave->Text.c_str());
  181.     IsFirstOctave = false;
  182.     IsContinueOctaveChange = true;
  183.    }
  184.  if(RadioButtonBasicNotes->Checked)
  185.    {
  186.    // strcat(RingComposerBuf, "c");
  187.     strcat(NotesBuf, "c");
  188.    } 
  189.  if(RadioButtonFlatNotes->Checked)
  190.    {
  191.    // strcat(RingComposerBuf, "&c");
  192.     strcat(NotesBuf, "&c");
  193.    }
  194.  if(RadioButtonSharpNotes->Checked)
  195.    {
  196.    // strcat(RingComposerBuf, "#c");
  197.     strcat(NotesBuf, "#c");
  198.    }
  199.  strcat(NotesBuf, ComboBoxDuration->Text.c_str());
  200.  edtNotes->Text= NotesBuf;
  201. }
  202.    
  203. void __fastcall TfrmRingComposer::btnReClick(TObject *Sender)
  204. {
  205.  IsContinueOctaveChange = false;
  206.  if(IsFirstOctave == true)
  207.    {
  208.     strcat(NotesBuf, ComboBoxOctave->Text.c_str());
  209.     IsFirstOctave = false;
  210.     IsContinueOctaveChange = true;
  211.    }
  212.    
  213.  if(RadioButtonBasicNotes->Checked)
  214.    {
  215.   //  strcat(RingComposerBuf, "d");
  216.     strcat(NotesBuf, "d");
  217.    }
  218.  if(RadioButtonFlatNotes->Checked)
  219.    {
  220.    // strcat(RingComposerBuf, "&d");
  221.     strcat(NotesBuf, "&d");
  222.    }
  223.  if(RadioButtonSharpNotes->Checked)
  224.    {
  225.     strcat(RingComposerBuf, "#d");
  226.     strcat(NotesBuf, "#d");
  227.    }
  228.  strcat(NotesBuf, ComboBoxDuration->Text.c_str());
  229.  edtNotes->Text= NotesBuf;
  230. }
  231. //---------------------------------------------------------------------------
  232. void __fastcall TfrmRingComposer::BtnMiClick(TObject *Sender)
  233. {
  234.  IsContinueOctaveChange = false;
  235.   if(IsFirstOctave == true)
  236.    {
  237.     strcat(NotesBuf, ComboBoxOctave->Text.c_str());
  238.     IsFirstOctave = false;
  239.     IsContinueOctaveChange = true;
  240.    }
  241.    
  242.   if(RadioButtonBasicNotes->Checked)
  243.     {
  244.     // strcat(RingComposerBuf, "e");
  245.      strcat(NotesBuf, "e");
  246.     }
  247.  if(RadioButtonFlatNotes->Checked)
  248.    {
  249.    // strcat(RingComposerBuf, "&e");
  250.     strcat(NotesBuf, "&e");
  251.    }
  252.  if(RadioButtonSharpNotes->Checked)
  253.    {
  254.  //   strcat(RingComposerBuf, "#e");
  255.     strcat(NotesBuf, "#e");
  256.    }
  257.  strcat(NotesBuf, ComboBoxDuration->Text.c_str());
  258.  edtNotes->Text= NotesBuf;
  259. }
  260. //---------------------------------------------------------------------------
  261. void __fastcall TfrmRingComposer::btnFaClick(TObject *Sender)
  262. {
  263.  IsContinueOctaveChange = false;
  264.  if(IsFirstOctave == true)
  265.    {
  266.     strcat(NotesBuf, ComboBoxOctave->Text.c_str());
  267.     IsFirstOctave = false;
  268.     IsContinueOctaveChange = true;
  269.    }
  270.    
  271.  if(RadioButtonBasicNotes->Checked)
  272.    {
  273.   //  strcat(RingComposerBuf, "f");
  274.     strcat(NotesBuf, "f");
  275.    }
  276.  if(RadioButtonFlatNotes->Checked)
  277.    {
  278.    // strcat(RingComposerBuf, "&f");
  279.     strcat(NotesBuf, "&f");
  280.    }
  281.  if(RadioButtonSharpNotes->Checked)
  282.    {
  283.    // strcat(RingComposerBuf, "#f");
  284.     strcat(NotesBuf, "#f");
  285.    }
  286.  strcat(NotesBuf, ComboBoxDuration->Text.c_str());
  287.  edtNotes->Text= NotesBuf;
  288. }
  289. //---------------------------------------------------------------------------
  290. void __fastcall TfrmRingComposer::btnSoClick(TObject *Sender)
  291. {
  292.  IsContinueOctaveChange = false;
  293.  if(IsFirstOctave == true)
  294.    {
  295.     strcat(NotesBuf, ComboBoxOctave->Text.c_str());
  296.     IsFirstOctave = false;
  297.     IsContinueOctaveChange = true;
  298.    }
  299.    
  300.  if(RadioButtonBasicNotes->Checked)
  301.    {
  302.    // strcat(RingComposerBuf, "g");
  303.     strcat(NotesBuf, "g");
  304.    }
  305.  if(RadioButtonFlatNotes->Checked)
  306.    {
  307.    // strcat(RingComposerBuf, "&g");
  308.     strcat(NotesBuf, "&g");
  309.    }
  310.  if(RadioButtonSharpNotes->Checked)
  311.    {
  312.    // strcat(RingComposerBuf, "#g");
  313.     strcat(NotesBuf, "#g");
  314.    }
  315.  strcat(NotesBuf, ComboBoxDuration->Text.c_str());
  316.  edtNotes->Text= NotesBuf;
  317. }
  318. //---------------------------------------------------------------------------
  319. void __fastcall TfrmRingComposer::btnLaClick(TObject *Sender)
  320. {
  321.  IsContinueOctaveChange = false;
  322.  if(IsFirstOctave == true)
  323.    {
  324.     strcat(NotesBuf, ComboBoxOctave->Text.c_str());
  325.     IsFirstOctave = false;
  326.     IsContinueOctaveChange = true;
  327.    }
  328.  if(RadioButtonBasicNotes->Checked)
  329.    {
  330.    // strcat(RingComposerBuf, "a");
  331.     strcat(NotesBuf, "a");
  332.    }
  333.  if(RadioButtonFlatNotes->Checked)
  334.    {
  335.   //  strcat(RingComposerBuf, "&a");
  336.     strcat(NotesBuf, "&a");
  337.    }
  338.  if(RadioButtonSharpNotes->Checked)
  339.    {
  340.    // strcat(RingComposerBuf, "#a");
  341.     strcat(NotesBuf, "#a");
  342.    }
  343.  strcat(NotesBuf, ComboBoxDuration->Text.c_str());
  344.  edtNotes->Text= NotesBuf;
  345. }
  346. //---------------------------------------------------------------------------
  347. void __fastcall TfrmRingComposer::btnSiClick(TObject *Sender)
  348. {
  349.   IsContinueOctaveChange = false;
  350.   if(IsFirstOctave == true)
  351.    {
  352.     strcat(NotesBuf, ComboBoxOctave->Text.c_str());
  353.     IsFirstOctave = false;
  354.     IsContinueOctaveChange = true;
  355.    }
  356.   if(RadioButtonBasicNotes->Checked)
  357.     {
  358.     // strcat(RingComposerBuf, "b");
  359.       strcat(NotesBuf, "b");
  360.     }
  361.  if(RadioButtonFlatNotes->Checked)
  362.    {
  363.    // strcat(RingComposerBuf, "&b");
  364.      strcat(NotesBuf, "&b");
  365.    }
  366.  if(RadioButtonSharpNotes->Checked)
  367.    {
  368.    // strcat(RingComposerBuf, "#b");
  369.     strcat(NotesBuf, "#b");
  370.    }
  371.  strcat(NotesBuf, ComboBoxDuration->Text.c_str());  
  372.  edtNotes->Text= NotesBuf;  
  373. }
  374. //---------------------------------------------------------------------------
  375. void __fastcall TfrmRingComposer::btnPlayiMelodyClick(TObject *Sender)
  376. {
  377.   unsigned char repeats;
  378.  unsigned char SpeakerVolume;
  379.  unsigned char BuzzerVolume;
  380.  unsigned int buf_len = 0;
  381.  int i, j;
  382.  unsigned char LineFeed ='n';
  383.  unsigned char SpaceChar = ' ';
  384.  unsigned char NullChar ='';
  385.  unsigned char MemoLine[MAX_IMELODY_FILE_SIZE];
  386.  unsigned char iMelodyBuf[MAX_IMELODY_FILE_SIZE];
  387.  AnsiString AnsiBuf;
  388.  bool flag_imelody_song_end=true;
  389.  MemoLine[0]='';
  390.  iMelodyBuf[0]='';
  391.  sb_L1sp->Panels->Items[0]->Text = (AnsiString) "  Play iMelody";
  392.  sb_L1sp->Panels->Items[1]->Text = "";
  393.     if( !IsValidRepeats( edtRepeats->Text, repeats ) )      {  edtRepeatsCheck(edtRepeats);      return;   }
  394.     imelody_play_req.repeats = edtRepeats->Text.ToInt();
  395.     if(RadioButtonSpeaker->Checked)
  396.       {
  397.        if( !IsValidSpeakerVolume( edtSpeakerVolume->Text, SpeakerVolume ) )      {  edtSpeakerVolumeCheck(edtSpeakerVolume);      return;   }
  398.           imelody_play_req.Speaker_Buzzer_volume = edtSpeakerVolume->Text.ToInt();
  399.        imelody_play_req.Output_Inf = IMY_TO_GMI;
  400.       }
  401.     if(RadioButtonBuzzer->Checked)
  402.       {
  403.        if( !IsValidBuzzerVolume( edtBuzzerVolume->Text, BuzzerVolume ) )      {  edtSpeakerVolumeCheck(edtSpeakerVolume);      return;   }
  404.           imelody_play_req.Speaker_Buzzer_volume = edtBuzzerVolume->Text.ToInt();
  405.        imelody_play_req.Output_Inf = IMY_TO_BUZZER;
  406.       }
  407.     for(i=0; i<memoRingComposer->Lines->Count;i++)
  408.       {
  409.        for(j=0; j<100; j++)
  410.          {
  411.           MemoLine[j] = ' ';
  412.          }
  413.      strcpy(MemoLine, memoRingComposer->Lines->Strings[i].c_str());
  414.       strcat(MemoLine, &NullChar);
  415.       if(strncmp(MemoLine, "MELODY:", 7)==0)
  416.         {
  417.          flag_imelody_song_end = false;
  418.         }
  419.       if(strncmp(MemoLine, "END:IMELODY", 11)==0)
  420.         {
  421.          flag_imelody_song_end = true;
  422.         }
  423.       strcat(iMelodyBuf, MemoLine);
  424.       
  425.        buf_len =  buf_len + strlen(MemoLine);
  426.        if(i != memoRingComposer->Lines->Count -1 && flag_imelody_song_end == true )
  427.          {
  428.           strcat(iMelodyBuf, "n");
  429.           buf_len++;
  430.          }
  431.       }
  432.     strcat(iMelodyBuf, &NullChar);
  433.    imelody_play_req.buf = iMelodyBuf;
  434.     imelody_play_req.buf_len = buf_len;
  435.     // end of modified
  436.      if ( Sender != NULL )
  437.      {
  438.        dynamic_cast <TControl *>(Sender)->Enabled = false;
  439.      }
  440.    
  441.       META_RESULT mr1 = META_iMelody_Play( imelody_play_req,
  442.                                          ::imelody_play_cnf_cb,
  443.                                          ::imelody_play_over_ind_cb,
  444.                                          &IMELODY_PLAY_token,
  445.                                          NULL );
  446.    
  447.     if ( mr1 != META_SUCCESS )
  448.     {
  449.        META_result_handler( mr1 );
  450.        if ( Sender != NULL )
  451.        {
  452.           dynamic_cast <TControl *>(Sender)->Enabled = true;
  453.        }
  454.        return;
  455.     }
  456.    btnPlayiMelody->Enabled = false;
  457.    btnStopPlayiMelody->Enabled = true;
  458. // imelody_play_req.buf = RingComposerBuf;
  459. // imelody_play_req.buf_len = strlen(RingComposerBuf);
  460. //META_RESULT mr1 = META_iMelody_Play( imelody_play_req,
  461. //                                         ::imelody_play_cnf_cb,
  462. //                                         ::imelody_play_over_ind_cb,
  463. //                                         &IMELODY_PLAY_token,
  464. //                                         NULL );
  465. }
  466. //---------------------------------------------------------------------------
  467. void __fastcall TfrmRingComposer::btnStopPlayiMelodyClick(TObject *Sender)
  468. {
  469.   // added by Andy Ueng
  470.   sb_L1sp->Panels->Items[0]->Text = (AnsiString) "  Stop play iMelody";
  471.     sb_L1sp->Panels->Items[1]->Text = "";
  472.    META_Cancel_r (IMELODY_PLAY_token);
  473.     META_RESULT  mr1 = META_iMelody_Stop(::imelody_stop_cnf_cb, &IMELODY_STOP_token, NULL);
  474.     if ( mr1 != META_SUCCESS )
  475.     {
  476.        META_result_handler( mr1 );
  477.        return;
  478.     }
  479.  btnPlayiMelody->Enabled = true;
  480.    btnStopPlayiMelody->Enabled = false;
  481.  // end of added      
  482. }
  483. //---------------------------------------------------------------------------
  484. void __fastcall TfrmRingComposer::btnLoadFromFileClick(TObject *Sender)
  485. {
  486.    bool ok;
  487.    ok = OpenDialog->Execute();
  488.    if( !ok )
  489.       return;
  490.    else
  491.      {
  492.       memoRingComposer->Lines->LoadFromFile(OpenDialog->FileName);
  493.       btnPlayiMelody->Enabled = true;
  494.      }      
  495. }
  496. //---------------------------------------------------------------------------
  497. void __fastcall TfrmRingComposer::btnSaveMemotoFileClick(TObject *Sender)
  498. {
  499.  bool ok;
  500.    ok = SaveDialog->Execute();
  501.    if( !ok )
  502.       return;
  503.    else
  504.      {
  505.       memoRingComposer->Lines->SaveToFile(SaveDialog->FileName );
  506.      }
  507. }
  508. //---------------------------------------------------------------------------
  509. void __fastcall TfrmRingComposer::btnLoadFromEditorClick(TObject *Sender)
  510. {
  511.   char temp_StyleBuf[10];
  512.   char temp_NotesBuf[MAX_NOTES_BUF_SIZE];
  513.   edtNotes->Text = "";
  514.   memoRingComposer->Clear();
  515.  // strcat(RingComposerBuf, "nEND:IMELODY");
  516.   //memoRingComposer->Lines->Add(RingComposerBuf);
  517.   memoRingComposer->Lines->Add("BEGIN:IMELODY");
  518.   memoRingComposer->Lines->Add("VERSION:1.2");
  519.   memoRingComposer->Lines->Add("FORMAT:CLASS1.0");
  520.   strcpy(temp_StyleBuf, "STYLE:");
  521.   strcat(temp_StyleBuf, ComboBoxStyle->Text.c_str());
  522.   memoRingComposer->Lines->Add(temp_StyleBuf);
  523.   strcpy(temp_NotesBuf, "MELODY:");
  524.  // strcat(temp_NotesBuf, ComboBoxOctave->Text.c_str());
  525.   strcat(temp_NotesBuf, NotesBuf);
  526.   memoRingComposer->Lines->Add(temp_NotesBuf);
  527.   memoRingComposer->Lines->Add("END:IMELODY");
  528.   NotesBuf[0]= '';
  529.   IsFirstOctave = true;
  530. }
  531. //---------------------------------------------------------------------------
  532. void __fastcall TfrmRingComposer::edtRepeatsCheck(TObject *Sender)
  533. {
  534.    int  i;
  535.    int  data;
  536.    AnsiString  text;
  537.    TEdit *edit = (TEdit*)Sender;
  538.    char  hint[256] =
  539.    {   " value shall be 0~255 "
  540.    };
  541.    text = edit->Text;
  542.    if( !IsValidRepeats( text, data ) )
  543.    {
  544.       edit->Text = Default_Repeats;
  545.       ShowHintLabel( edit, hint );
  546.       edit->SetFocus();
  547.       return;
  548.    }
  549. }
  550. //---------------------------------------------------------------------------
  551. void __fastcall TfrmRingComposer::edtSpeakerVolumeCheck(TObject *Sender)
  552. {
  553.  // added by Andy Ueng
  554.    int  i;
  555.    int  data;
  556.    AnsiString  text;
  557.    TEdit *edit = (TEdit*)Sender;
  558.    char  hint[256] =
  559.    {   " value shall be 0~255 "
  560.    };
  561.    text = edit->Text;
  562.    if( !IsValidSpeakerVolume( text, data ) )
  563.    {
  564.       edit->Text = Default_SpeakerVolume;
  565.       ShowHintLabel( edit, hint );
  566.       edit->SetFocus();
  567.       return;
  568.    }
  569.   // end of added      
  570. }
  571. //---------------------------------------------------------------------------
  572. void __fastcall TfrmRingComposer::edtBuzzerVolumeCheck(TObject *Sender)
  573. {
  574.  // added by Andy Ueng
  575.    int  i;
  576.    int  data;
  577.    AnsiString  text;
  578.    TEdit *edit = (TEdit*)Sender;
  579.    char  hint[256] =
  580.    {   " value shall be 0~7 "
  581.    };
  582.    text = edit->Text;
  583.    if( !IsValidBuzzerVolume( text, data ) )
  584.    {
  585.       edit->Text = Default_BuzzerVolume;
  586.       ShowHintLabel( edit, hint );
  587.       edit->SetFocus();
  588.       return;
  589.    }
  590.   // end of added      
  591. }
  592. //---------------------------------------------------------------------------
  593. void __fastcall TfrmRingComposer::OctaveOnChange(TObject *Sender)
  594. {
  595.   // added by Andy Ueng
  596.   char temp_buf[10];
  597.  IsFirstOctave = false;
  598.   
  599.  if(IsContinueOctaveChange == true)
  600.    {
  601.     if(strcmp(lastOctave, ComboBoxOctave->Text.c_str())!=0)
  602.       {
  603.        sprintf(temp_buf, "%s", ComboBoxOctave->Text.c_str());
  604.        NotesBuf[strlen(NotesBuf)-1] = temp_buf[1];
  605.        //strcat(NotesBuf, ComboBoxOctave->Text.c_str());
  606.       }
  607.    }
  608.  else
  609.    {
  610.     strcat( NotesBuf, ComboBoxOctave->Text.c_str());
  611.    }
  612.  strcpy(lastOctave, ComboBoxOctave->Text.c_str());
  613.  edtNotes->Text= NotesBuf;
  614.  IsContinueOctaveChange = true;
  615.   // end of added      
  616. }
  617. //---------------------------------------------------------------------------