home *** CD-ROM | disk | FTP | other *** search
/ Otherware / Otherware_1_SB_Development.iso / amiga / comms / comprgs / term232.lha / Source_Code / termSource / SpeechPanel.c < prev    next >
Encoding:
C/C++ Source or Header  |  1992-08-18  |  11.1 KB  |  411 lines

  1. /*
  2. **    $Id: SpeechPanel.c,v 1.8 92/08/15 20:13:24 olsen Sta Locker: olsen $
  3. **    $Revision: 1.8 $
  4. **    $Date: 92/08/15 20:13:24 $
  5. **
  6. **    Editing panel for speech configuration
  7. **
  8. **    Copyright ⌐ 1990-1992 by Olaf `Olsen' Barthel & MXM
  9. **        All Rights Reserved
  10. */
  11.  
  12. #include "termGlobal.h"
  13.  
  14. enum    {    GAD_RATE,GAD_PITCH,GAD_FREQUENCY,GAD_VOLUME,
  15.         GAD_SEX,GAD_SPEECH,GAD_SPEAK,
  16.         GAD_USE,GAD_LOAD,GAD_SAVE,GAD_CANCEL };
  17.  
  18. STATIC UBYTE *Sex[3] =
  19. {
  20.     NULL,
  21.     NULL,
  22.     NULL
  23. };
  24.  
  25. STATIC struct Gadget *
  26. CreateAllGadgets(struct SpeechConfig *SpeechConfig,struct Gadget **GadgetArray,struct Gadget **GadgetList,APTR VisualInfo,UWORD TopEdge)
  27. {
  28.     struct Gadget        *Gadget;
  29.     struct NewGadget     NewGadget;
  30.     LONG             Counter = 0,Width;
  31.  
  32.     SZ_SizeSetup(Screen,&UserFont,TRUE);
  33.  
  34.     LocalizeString(Sex,MSG_SPEECHPANEL_MALE_TXT,MSG_SPEECHPANEL_FEMALE_TXT);
  35.  
  36.     memset(&NewGadget,0,sizeof(struct NewGadget));
  37.  
  38.     if(Gadget = CreateContext(GadgetList))
  39.     {
  40.         extern APTR LocaleBase;
  41.  
  42.         SZ_AddLeftOffset(SZ_LeftOffsetDelta(MSG_SPEECHPANEL_RATE_GAD,MSG_SPEECHPANEL_SPEECH_ENABLED_GAD));
  43.  
  44.         SZ_ResetMaxWidth();
  45.  
  46.         SZ_UpdateMaxWidth(CYCLE_KIND,NULL,0,Sex);
  47.         SZ_UpdateMaxWidth(BUTTON_KIND,LocaleString(MSG_SPEECHPANEL_SPEAK_GAD),0,NULL);
  48.  
  49.         Width = SZ_ResetMaxWidth();
  50.  
  51.         if(Width < 200)
  52.             Width = 200;
  53.  
  54.         SZ_SetWidth(Width);
  55.  
  56.         NewGadget . ng_GadgetText    = LocaleString(MSG_SPEECHPANEL_RATE_GAD);
  57.         NewGadget . ng_TextAttr        = &UserFont;
  58.         NewGadget . ng_VisualInfo    = VisualInfo;
  59.         NewGadget . ng_GadgetID        = Counter;
  60.  
  61.         GadgetArray[Counter++] = Gadget = CreateGadget(SLIDER_KIND,Gadget,&NewGadget,
  62.             SZ_Adjust,    TRUE,
  63.             SZ_AutoWidth,    TRUE,
  64.  
  65.             GT_Underscore,        '_',
  66.             GTSL_Min,        MINRATE,
  67.             GTSL_Max,        MAXRATE,
  68.             GTSL_Level,        SpeechConfig -> Rate,
  69.             GTSL_LevelFormat,    "%3ld",
  70.             GTSL_MaxLevelLen,    3,
  71.         TAG_DONE);
  72.  
  73.         NewGadget . ng_GadgetText    = LocaleString(MSG_SPEECHPANEL_PITCH_GAD);
  74.         NewGadget . ng_GadgetID        = Counter;
  75.  
  76.         GadgetArray[Counter++] = Gadget = CreateGadget(SLIDER_KIND,Gadget,&NewGadget,
  77.             SZ_Adjust,        TRUE,
  78.             SZ_AutoWidth,        TRUE,
  79.  
  80.             GT_Underscore,        '_',
  81.             GTSL_Min,        MINPITCH,
  82.             GTSL_Max,        MAXPITCH,
  83.             GTSL_Level,        SpeechConfig -> Pitch,
  84.             GTSL_LevelFormat,    "%3ld",
  85.             GTSL_MaxLevelLen,    3,
  86.         TAG_DONE);
  87.  
  88.         NewGadget . ng_GadgetText    = LocaleString(MSG_SPEECHPANEL_FREQUENCY_GAD);
  89.         NewGadget . ng_GadgetID        = Counter;
  90.  
  91.         GadgetArray[Counter++] = Gadget = CreateGadget(SLIDER_KIND,Gadget,&NewGadget,
  92.             SZ_Adjust,        TRUE,
  93.             SZ_AutoWidth,        TRUE,
  94.  
  95.             GT_Underscore,        '_',
  96.             GTSL_Min,        MINFREQ,
  97.             GTSL_Max,        MAXFREQ,
  98.             GTSL_Level,        SpeechConfig -> Frequency,
  99.             GTSL_LevelFormat,    LocaleBase ? "%6lD" : "%6ld",
  100.             GTSL_MaxLevelLen,    6,
  101.         TAG_DONE);
  102.  
  103.         NewGadget . ng_GadgetText    = LocaleString(MSG_SPEECHPANEL_VOLUME_GAD);
  104.         NewGadget . ng_GadgetID        = Counter;
  105.  
  106.         GadgetArray[Counter++] = Gadget = CreateGadget(SLIDER_KIND,Gadget,&NewGadget,
  107.             SZ_Adjust,        TRUE,
  108.             SZ_AutoWidth,        TRUE,
  109.  
  110.             GT_Underscore,        '_',
  111.             GTSL_Min,        MINVOL,
  112.             GTSL_Max,        MAXVOL,
  113.             GTSL_Level,        SpeechConfig -> Volume,
  114.             GTSL_LevelFormat,    "%2ld",
  115.             GTSL_MaxLevelLen,    2,
  116.         TAG_DONE);
  117.  
  118.         NewGadget . ng_GadgetText    = LocaleString(MSG_SPEECHPANEL_SEX_GAD);
  119.         NewGadget . ng_GadgetID        = Counter;
  120.  
  121.         GadgetArray[Counter++] = Gadget = CreateGadget(CYCLE_KIND,Gadget,&NewGadget,
  122.             SZ_Adjust,        TRUE,
  123.             SZ_AutoWidth,        TRUE,
  124.  
  125.             GT_Underscore,        '_',
  126.             GTCY_Labels,        Sex,
  127.             GTCY_Active,        SpeechConfig -> Sex,
  128.         TAG_DONE);
  129.  
  130.         NewGadget . ng_GadgetText    = LocaleString(MSG_SPEECHPANEL_SPEECH_ENABLED_GAD);
  131.         NewGadget . ng_GadgetID        = Counter;
  132.  
  133.         GadgetArray[Counter++] = Gadget = CreateGadget(CHECKBOX_KIND,Gadget,&NewGadget,
  134.             SZ_Adjust,        TRUE,
  135.             SZ_AutoWidth,        TRUE,
  136.  
  137.             GT_Underscore,        '_',
  138.             GTCB_Checked,        SpeechConfig -> Enabled,
  139.         TAG_DONE);
  140.  
  141.         NewGadget . ng_GadgetText    = LocaleString(MSG_SPEECHPANEL_SPEAK_GAD);
  142.         NewGadget . ng_GadgetID        = Counter;
  143.  
  144.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  145.             SZ_Adjust,        TRUE,
  146.             SZ_AutoWidth,        TRUE,
  147.  
  148.             GT_Underscore,        '_',
  149.             GA_Disabled,        SpeechConfig -> Enabled == FALSE,
  150.         TAG_DONE);
  151.  
  152.         SZ_UpdateMaxWidth(BUTTON_KIND,LocaleString(MSG_GLOBAL_USE_GAD),0,NULL);
  153.         SZ_UpdateMaxWidth(BUTTON_KIND,LocaleString(MSG_GLOBAL_LOAD_GAD),0,NULL);
  154.         SZ_UpdateMaxWidth(BUTTON_KIND,LocaleString(MSG_GLOBAL_SAVE_GAD),0,NULL);
  155.         SZ_UpdateMaxWidth(BUTTON_KIND,LocaleString(MSG_GLOBAL_CANCEL_GAD),0,NULL);
  156.  
  157.         SZ_SetWidth(SZ_ResetMaxWidth());
  158.  
  159.         NewGadget . ng_GadgetText    = LocaleString(MSG_GLOBAL_USE_GAD);
  160.         NewGadget . ng_GadgetID        = Counter;
  161.         NewGadget . ng_Flags        = 0;
  162.  
  163.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  164.             SZ_Adjust,    TRUE,
  165.             SZ_AutoWidth,    TRUE,
  166.             SZ_AlignExtra,    TRUE,
  167.             SZ_AlignBottom,    TRUE,
  168.             SZ_GroupCount,    4,
  169.  
  170.             GT_Underscore,    '_',
  171.         TAG_DONE);
  172.  
  173.         NewGadget . ng_GadgetText    = LocaleString(MSG_GLOBAL_LOAD_GAD);
  174.         NewGadget . ng_GadgetID        = Counter;
  175.  
  176.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  177.             SZ_Adjust,    TRUE,
  178.             SZ_AutoWidth,    TRUE,
  179.             SZ_GroupNext,    TRUE,
  180.  
  181.             GT_Underscore,    '_',
  182.         TAG_DONE);
  183.  
  184.         NewGadget . ng_GadgetText    = LocaleString(MSG_GLOBAL_SAVE_GAD);
  185.         NewGadget . ng_GadgetID        = Counter;
  186.  
  187.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  188.             SZ_Adjust,    TRUE,
  189.             SZ_AutoWidth,    TRUE,
  190.             SZ_GroupNext,    TRUE,
  191.  
  192.             GT_Underscore,    '_',
  193.         TAG_DONE);
  194.  
  195.         NewGadget . ng_GadgetText    = LocaleString(MSG_GLOBAL_CANCEL_GAD);
  196.         NewGadget . ng_GadgetID        = Counter;
  197.  
  198.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  199.             SZ_Adjust,    TRUE,
  200.             SZ_AutoWidth,    TRUE,
  201.             SZ_GroupNext,    TRUE,
  202.  
  203.             GT_Underscore,    '_',
  204.         TAG_DONE);
  205.     }
  206.  
  207.     return(Gadget);
  208. }
  209.  
  210. VOID
  211. SpeechPanel()
  212. {
  213.     struct Window        *PanelWindow;
  214.     struct Gadget        *GadgetList = NULL;
  215.     struct Gadget        *GadgetArray[GAD_CANCEL + 1];
  216.     struct SpeechConfig     PrivateConfig;
  217.     UBYTE              DummyBuffer[256],*DummyChar;
  218.     struct FileRequest    *FileRequest;
  219.  
  220.     CopyMem(&SpeechConfig,&PrivateConfig,sizeof(struct SpeechConfig));
  221.  
  222.     if(CreateAllGadgets(&SpeechConfig,&GadgetArray[0],&GadgetList,VisualInfo,Screen -> WBorTop + Screen -> Font -> ta_YSize + 1))
  223.     {
  224.         if(PanelWindow = OpenWindowTags(NULL,
  225.             WA_Left,    (Screen -> Width    - SZ_GetWindowWidth())    / 2,
  226.             WA_Top,        (Screen -> Height    - SZ_GetWindowHeight())    / 2,
  227.             WA_Width,    SZ_GetWindowWidth(),
  228.             WA_Height,    SZ_GetWindowHeight(),
  229.  
  230.             WA_Activate,    TRUE,
  231.             WA_DragBar,    TRUE,
  232.             WA_DepthGadget,    TRUE,
  233.             WA_RMBTrap,    TRUE,
  234.             WA_DepthGadget,    TRUE,
  235.             WA_CloseGadget,    TRUE,
  236.             WA_CustomScreen,Screen,
  237.  
  238.             WA_IDCMP,    IDCMP_CLOSEWINDOW | IDCMP_VANILLAKEY | SLIDERIDCMP | CHECKBOXIDCMP | BUTTONIDCMP | CYCLEIDCMP,
  239.  
  240.             WA_Title,    LocaleString(MSG_SPEECHPANEL_SPEECH_PREFERENCES_TXT),
  241.         TAG_DONE))
  242.         {
  243.             struct IntuiMessage    *Massage;
  244.             ULONG             Class,Code;
  245.             struct Gadget        *Gadget;
  246.             BYTE             Terminated = FALSE;
  247.  
  248.             PushWindow(PanelWindow);
  249.  
  250.             AddGList(PanelWindow,GadgetList,(UWORD)-1,(UWORD)-1,NULL);
  251.             RefreshGList(GadgetList,PanelWindow,NULL,(UWORD)-1);
  252.             GT_RefreshWindow(PanelWindow,NULL);
  253.  
  254.             while(!Terminated)
  255.             {
  256.                 WaitPort(PanelWindow -> UserPort);
  257.  
  258.                 while(!Terminated && (Massage = (struct IntuiMessage *)GT_GetIMsg(PanelWindow -> UserPort)))
  259.                 {
  260.                     Class    = Massage -> Class;
  261.                     Code    = Massage -> Code;
  262.                     Gadget    = (struct Gadget *)Massage -> IAddress;
  263.  
  264.                     GT_ReplyIMsg(Massage);
  265.  
  266.                     if(Class == IDCMP_VANILLAKEY)
  267.                         KeySelect(GadgetArray,GAD_CANCEL,Code,PanelWindow,&Gadget,&Class,&Code);
  268.  
  269.                     if(Class == IDCMP_CLOSEWINDOW)
  270.                         Terminated = TRUE;
  271.  
  272.                     if(Class == IDCMP_MOUSEMOVE)
  273.                     {
  274.                         switch(Gadget -> GadgetID)
  275.                         {
  276.                             case GAD_RATE:        SpeechConfig . Rate = Code;
  277.                                         break;
  278.  
  279.                             case GAD_PITCH:        SpeechConfig . Pitch = Code;
  280.                                         break;
  281.  
  282.                             case GAD_FREQUENCY:    SpeechConfig . Frequency = Code;
  283.                                         break;
  284.  
  285.                             case GAD_VOLUME:    SpeechConfig . Volume = Code;
  286.                                         break;
  287.                         }
  288.                     }
  289.  
  290.                     if(Class == IDCMP_GADGETUP)
  291.                     {
  292.                         BYTE OldEnglish = English;
  293.  
  294.                         switch(Gadget -> GadgetID)
  295.                         {
  296.                             case GAD_USE:        Terminated = TRUE;
  297.                                         break;
  298.  
  299.                             case GAD_CANCEL:    Terminated = TRUE;
  300.                                         CopyMem(&PrivateConfig,&SpeechConfig,sizeof(struct SpeechConfig));
  301.                                         SpeechSetup();
  302.                                         break;
  303.  
  304.                             case GAD_SEX:        SpeechConfig . Sex = Code;
  305.                                         break;
  306.  
  307.                             case GAD_SPEECH:    SpeechConfig . Enabled = GT_CHECKED(Gadget);
  308.  
  309.                                         GT_SetGadgetAttrs(GadgetArray[GAD_SPEAK],PanelWindow,NULL,
  310.                                             GA_Disabled,    SpeechConfig . Enabled == FALSE,
  311.                                         TAG_DONE);
  312.  
  313.                                         break;
  314.  
  315.                             case GAD_LOAD:        strcpy(DummyBuffer,LastSpeech);
  316.  
  317.                                         DummyChar = PathPart(DummyBuffer);
  318.  
  319.                                         *DummyChar = 0;
  320.  
  321.                                         BlockWindow(PanelWindow);
  322.  
  323.                                         if(FileRequest = GetFile(LocaleString(MSG_SPEECHPANEL_LOAD_SPEECH_SETTINGS_TXT),DummyBuffer,FilePart(LastSpeech),DummyBuffer,"#?.prefs",FALSE,FALSE,FALSE,LocaleString(MSG_GLOBAL_LOAD_TXT)))
  324.                                         {
  325.                                             if(!ReadIFFData(DummyBuffer,&SpeechConfig,sizeof(struct SpeechConfig),'SPEK'))
  326.                                                 MyEasyRequest(Window,LocaleString(MSG_SPEECHPANEL_COULD_NOT_LOAD_SPEECH_SETTINGS_TXT),LocaleString(MSG_GLOBAL_CONTINUE_TXT),DummyBuffer);
  327.                                             else
  328.                                             {
  329.                                                 strcpy(LastSpeech,DummyBuffer);
  330.  
  331.                                                 GT_SetGadgetAttrs(GadgetArray[GAD_RATE],PanelWindow,NULL,
  332.                                                     GTSL_Level,SpeechConfig . Rate,
  333.                                                 TAG_DONE);
  334.  
  335.                                                 GT_SetGadgetAttrs(GadgetArray[GAD_PITCH],PanelWindow,NULL,
  336.                                                     GTSL_Level,SpeechConfig . Pitch,
  337.                                                 TAG_DONE);
  338.  
  339.                                                 GT_SetGadgetAttrs(GadgetArray[GAD_FREQUENCY],PanelWindow,NULL,
  340.                                                     GTSL_Level,SpeechConfig . Frequency,
  341.                                                 TAG_DONE);
  342.  
  343.                                                 GT_SetGadgetAttrs(GadgetArray[GAD_VOLUME],PanelWindow,NULL,
  344.                                                     GTSL_Level,SpeechConfig . Volume,
  345.                                                 TAG_DONE);
  346.  
  347.                                                 GT_SetGadgetAttrs(GadgetArray[GAD_SEX],PanelWindow,NULL,
  348.                                                     GTCY_Active,SpeechConfig . Sex,
  349.                                                 TAG_DONE);
  350.  
  351.                                                 GT_SetGadgetAttrs(GadgetArray[GAD_SPEECH],PanelWindow,NULL,
  352.                                                     GTCB_Checked,SpeechConfig . Enabled,
  353.                                                 TAG_DONE);
  354.  
  355.                                                 GT_SetGadgetAttrs(GadgetArray[GAD_SPEAK],PanelWindow,NULL,
  356.                                                     GA_Disabled,    SpeechConfig . Enabled == FALSE,
  357.                                                 TAG_DONE);
  358.  
  359.                                                 SpeechSetup();
  360.                                             }
  361.                                         }
  362.  
  363.                                         ReleaseWindow(PanelWindow);
  364.  
  365.                                         break;
  366.  
  367.                             case GAD_SAVE:        strcpy(DummyBuffer,LastSpeech);
  368.  
  369.                                         DummyChar = PathPart(DummyBuffer);
  370.  
  371.                                         *DummyChar = 0;
  372.  
  373.                                         BlockWindow(PanelWindow);
  374.  
  375.                                         if(FileRequest = GetFile(LocaleString(MSG_SPEECHPANEL_SAVE_SPEECH_SETTINGS_TXT),DummyBuffer,FilePart(LastSpeech),DummyBuffer,"#?.prefs",TRUE,FALSE,FALSE,LocaleString(MSG_GLOBAL_SAVE_TXT)))
  376.                                         {
  377.                                             if(!WriteIFFData(DummyBuffer,&SpeechConfig,sizeof(struct SpeechConfig),'SPEK'))
  378.                                                 MyEasyRequest(Window,LocaleString(MSG_SPEECHPANEL_COULD_NOT_SAVE_SPEECH_SETTINGS_TXT),LocaleString(MSG_GLOBAL_CONTINUE_TXT),DummyBuffer);
  379.                                             else
  380.                                                 strcpy(LastSpeech,DummyBuffer);
  381.                                         }
  382.  
  383.                                         ReleaseWindow(PanelWindow);
  384.  
  385.                                         break;
  386.  
  387.                             case GAD_SPEAK:        SpeechSetup();
  388.  
  389.                                         English = TRUE;
  390.  
  391.                                         Say(LocaleString(MSG_SPEECHPANEL_THIS_IS_TERM_SPEAKING_TXT));
  392.  
  393.                                         English = OldEnglish;
  394.  
  395.                                         break;
  396.                         }
  397.                     }
  398.                 }
  399.             }
  400.  
  401.             RemoveGList(PanelWindow,GadgetList,(UWORD)-1);
  402.  
  403.             PopWindow();
  404.  
  405.             CloseWindow(PanelWindow);
  406.         }
  407.     }
  408.  
  409.     FreeGadgets(GadgetList);
  410. }
  411.