home *** CD-ROM | disk | FTP | other *** search
/ Amiga Elysian Archive / AmigaElysianArchive.iso / comm / term33so.lha / SpeechPanel.c < prev    next >
C/C++ Source or Header  |  1993-04-30  |  12KB  |  446 lines

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