home *** CD-ROM | disk | FTP | other *** search
/ Frozen Fish 1: Amiga / FrozenFish-Apr94.iso / bbs / alib / d5xx / d534 / term.lha / Term / Source.LZH / SpeechPanel.c < prev    next >
C/C++ Source or Header  |  1991-07-20  |  12KB  |  414 lines

  1. /* $Revision Header * Header built automatically - do not edit! *************
  2.  *
  3.  *    (C) Copyright 1990 by Olaf 'Olsen' Barthel & MXM
  4.  *
  5.  *    Name .....: SpeechPanel.c
  6.  *    Created ..: Thursday 27-Jun-91 20:01
  7.  *    Revision .: 0
  8.  *
  9.  *    Date            Author          Comment
  10.  *    =========       ========        ====================
  11.  *    27-Jun-91       Olsen           Created this file!
  12.  *
  13.  * $Revision Header ********************************************************/
  14.  
  15. #include "TermGlobal.h"
  16.  
  17. #define WIDTH    319
  18. #define HEIGHT    118
  19.  
  20. enum    {    GAD_RATE,GAD_PITCH,GAD_FREQUENCY,GAD_VOLUME,
  21.         GAD_SEX,GAD_SPEECH,GAD_SPEAK,
  22.         GAD_USE,GAD_LOAD,GAD_SAVE,GAD_CANCEL };
  23.  
  24. enum    {    MEN_USE=1,MEN_LOAD,MEN_SAVESPEECH,MEN_CANCEL };
  25.  
  26. STATIC struct NewMenu SpeechMenu[] =
  27. {
  28.     { NM_TITLE, "Project",         0 , 0, 0, (APTR)0},
  29.     {  NM_ITEM, "Load",        "L", 0, 0, (APTR)MEN_LOAD},
  30.     {  NM_ITEM, "Save",        "S", 0, 0, (APTR)MEN_SAVESPEECH},
  31.     {  NM_ITEM, NM_BARLABEL,     0 , 0, 0, (APTR)0},
  32.     {  NM_ITEM, "Use",        "U", 0, 0, (APTR)MEN_USE},
  33.     {  NM_ITEM, "Cancel",        "C", 0, 0, (APTR)MEN_CANCEL},
  34.     {  NM_ITEM, NM_BARLABEL,     0 , 0, 0, (APTR)0},
  35.     {  NM_ITEM, "Quit",        "Q", 0, 0, (APTR)MEN_CANCEL},
  36.     { NM_END, 0,             0 , 0, 0, (APTR)0}
  37. };
  38.  
  39. STATIC UBYTE *Sex[3] =
  40. {
  41.     "Male",
  42.     "Female",
  43.     NULL
  44. };
  45.  
  46. STATIC struct Gadget *
  47. CreateAllGadgets(struct SpeechConfig *SpeechConfig,struct Gadget **GadgetArray,struct Gadget **GadgetList,APTR VisualInfo,UWORD TopEdge)
  48. {
  49.     struct Gadget        *Gadget;
  50.     struct NewGadget     NewGadget;
  51.     LONG             Counter = 0;
  52.  
  53.     if(Gadget = CreateContext(GadgetList))
  54.     {
  55.         NewGadget . ng_Width        = 100;
  56.         NewGadget . ng_Height        = 12;
  57.         NewGadget . ng_GadgetText    = "Rate (Words/Minute)    ";
  58.         NewGadget . ng_TextAttr        = &DefaultFont;
  59.         NewGadget . ng_VisualInfo    = VisualInfo;
  60.         NewGadget . ng_GadgetID        = Counter;
  61.         NewGadget . ng_Flags        = NG_HIGHLABEL;
  62.         NewGadget . ng_LeftEdge        = (strlen(NewGadget . ng_GadgetText) + 2) * 8 + 1;
  63.         NewGadget . ng_TopEdge        = 1 + TopEdge;
  64.  
  65.         GadgetArray[Counter++] = Gadget = CreateGadget(SLIDER_KIND,Gadget,&NewGadget,
  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    = "Pitch (Hz)    ";
  74.         NewGadget . ng_GadgetID        = Counter;
  75.         NewGadget . ng_TopEdge        = Gadget -> TopEdge + Gadget -> Height + 3;
  76.  
  77.         GadgetArray[Counter++] = Gadget = CreateGadget(SLIDER_KIND,Gadget,&NewGadget,
  78.             GTSL_Min,        MINPITCH,
  79.             GTSL_Max,        MAXPITCH,
  80.             GTSL_Level,        SpeechConfig -> Pitch,
  81.             GTSL_LevelFormat,    "%3ld",
  82.             GTSL_MaxLevelLen,    3,
  83.         TAG_DONE);
  84.  
  85.         NewGadget . ng_GadgetText    = "Frequency (Hz)      ";
  86.         NewGadget . ng_GadgetID        = Counter;
  87.         NewGadget . ng_TopEdge        = Gadget -> TopEdge + Gadget -> Height + 3;
  88.  
  89.         GadgetArray[Counter++] = Gadget = CreateGadget(SLIDER_KIND,Gadget,&NewGadget,
  90.             GTSL_Min,        MINFREQ,
  91.             GTSL_Max,        MAXFREQ,
  92.             GTSL_Level,        SpeechConfig -> Frequency,
  93.             GTSL_LevelFormat,    "%5ld",
  94.             GTSL_MaxLevelLen,    5,
  95.         TAG_DONE);
  96.  
  97.         NewGadget . ng_GadgetText    = "Volume   ";
  98.         NewGadget . ng_GadgetID        = Counter;
  99.         NewGadget . ng_TopEdge        = Gadget -> TopEdge + Gadget -> Height + 3;
  100.  
  101.         GadgetArray[Counter++] = Gadget = CreateGadget(SLIDER_KIND,Gadget,&NewGadget,
  102.             GTSL_Min,        MINVOL,
  103.             GTSL_Max,        MAXVOL,
  104.             GTSL_Level,        SpeechConfig -> Volume,
  105.             GTSL_LevelFormat,    "%2ld",
  106.             GTSL_MaxLevelLen,    2,
  107.         TAG_DONE);
  108.  
  109.         NewGadget . ng_GadgetText    = "Sex";
  110.         NewGadget . ng_GadgetID        = Counter;
  111.         NewGadget . ng_TopEdge        = Gadget -> TopEdge + Gadget -> Height + 3;
  112.  
  113.         GadgetArray[Counter++] = Gadget = CreateGadget(CYCLE_KIND,Gadget,&NewGadget,
  114.             GTCY_Labels,    Sex,
  115.             GTCY_Active,    SpeechConfig -> Sex,
  116.         TAG_DONE);
  117.  
  118.         NewGadget . ng_GadgetText    = "Speech enabled";
  119.         NewGadget . ng_GadgetID        = Counter;
  120.         NewGadget . ng_TopEdge        = Gadget -> TopEdge + Gadget -> Height + 1;
  121.  
  122.         GadgetArray[Counter++] = Gadget = CreateGadget(CHECKBOX_KIND,Gadget,&NewGadget,
  123.             GTCB_Checked,    SpeechConfig -> Enabled,
  124.         TAG_DONE);
  125.  
  126.         NewGadget . ng_GadgetText    = "Speak!";
  127.         NewGadget . ng_GadgetID        = Counter;
  128.         NewGadget . ng_LeftEdge        = 10;
  129.         NewGadget . ng_Width        = WIDTH - 20;
  130.         NewGadget . ng_TopEdge        = Gadget -> TopEdge + Gadget -> Height + 1;
  131.  
  132.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  133.         TAG_DONE);
  134.  
  135.         NewGadget . ng_Width        = 52;
  136.         NewGadget . ng_Height        = 12;
  137.         NewGadget . ng_GadgetText    = "_Use";
  138.         NewGadget . ng_GadgetID        = Counter;
  139.         NewGadget . ng_Flags        = 0;
  140.         NewGadget . ng_LeftEdge        = 10;
  141.         NewGadget . ng_TopEdge        = HEIGHT - 3 - NewGadget . ng_Height;
  142.  
  143.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  144.             GT_Underscore,    '_',
  145.         TAG_DONE);
  146.  
  147.         NewGadget . ng_GadgetText    = "_Load";
  148.         NewGadget . ng_GadgetID        = Counter;
  149.         NewGadget . ng_LeftEdge        = NewGadget . ng_LeftEdge + WIDTH / 4 + 4;
  150.  
  151.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  152.             GT_Underscore,    '_',
  153.         TAG_DONE);
  154.  
  155.         NewGadget . ng_GadgetText    = "_Save";
  156.         NewGadget . ng_GadgetID        = Counter;
  157.         NewGadget . ng_LeftEdge        = NewGadget . ng_LeftEdge + WIDTH / 4 + 4;
  158.  
  159.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  160.             GT_Underscore,    '_',
  161.         TAG_DONE);
  162.  
  163.         NewGadget . ng_GadgetText    = "_Cancel";
  164.         NewGadget . ng_GadgetID        = Counter;
  165.         NewGadget . ng_LeftEdge        = WIDTH - 10 - NewGadget . ng_Width;
  166.  
  167.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  168.             GT_Underscore,    '_',
  169.         TAG_DONE);
  170.     }
  171.  
  172.     return(Gadget);
  173. }
  174.  
  175. VOID
  176. SpeechPanel()
  177. {
  178.     struct Window        *PanelWindow;
  179.     struct Menu        *PanelMenu;
  180.     struct Gadget        *GadgetList;
  181.     struct Gadget        *GadgetArray[GAD_CANCEL + 1];
  182.     struct SpeechConfig     PrivateConfig;
  183.     UBYTE              DummyBuffer[256],*DummyChar;
  184.     struct FileRequest    *FileRequest;
  185.  
  186.     CopyMem(&SpeechConfig,&PrivateConfig,sizeof(struct SpeechConfig));
  187.  
  188.     if(CreateAllGadgets(&SpeechConfig,&GadgetArray[0],&GadgetList,VisualInfo,Screen -> WBorTop + Screen -> Font -> ta_YSize + 1))
  189.     {
  190.         if(PanelMenu = CreateMenus(SpeechMenu,
  191.             GTMN_FrontPen, 0,
  192.         TAG_DONE))
  193.         {
  194.             if(LayoutMenus(PanelMenu,VisualInfo,
  195.                 GTMN_TextAttr,&DefaultFont,
  196.             TAG_DONE))
  197.             {
  198.                 if(PanelWindow = OpenWindowTags(NULL,
  199.                     WA_Left,    (Screen -> Width - WIDTH) >> 1,
  200.                     WA_Top,        (Screen -> Height - HEIGHT) >> 1,
  201.                     WA_Width,    WIDTH,
  202.                     WA_Height,    HEIGHT,
  203.  
  204.                     WA_Activate,    TRUE,
  205.                     WA_DragBar,    TRUE,
  206.                     WA_DepthGadget,    TRUE,
  207.                     WA_RMBTrap,    TRUE,
  208.                     WA_DepthGadget,    TRUE,
  209.                     WA_CloseGadget,    TRUE,
  210.                     WA_CustomScreen,Screen,
  211.  
  212.                     WA_IDCMP,    IDCMP_CLOSEWINDOW | SLIDERIDCMP | CHECKBOXIDCMP | IDCMP_MENUPICK,
  213.  
  214.                     WA_Title,    "Speech Preferences",
  215.                 TAG_DONE))
  216.                 {
  217.                     struct IntuiMessage    *Massage;
  218.                     ULONG             Class,Code;
  219.                     struct Gadget        *Gadget;
  220.                     BYTE             Terminated = FALSE;
  221.  
  222.                     PushWindow(PanelWindow);
  223.  
  224.                     AddGList(PanelWindow,GadgetList,(UWORD)-1,(UWORD)-1,NULL);
  225.                     RefreshGList(GadgetList,PanelWindow,NULL,(UWORD)-1);
  226.                     GT_RefreshWindow(PanelWindow,NULL);
  227.  
  228.                     SetMenuStrip(PanelWindow,PanelMenu);
  229.  
  230.                     PanelWindow -> Flags &= ~WFLG_RMBTRAP;
  231.  
  232.                     while(!Terminated)
  233.                     {
  234.                         WaitPort(PanelWindow -> UserPort);
  235.  
  236.                         while(!Terminated && (Massage = (struct IntuiMessage *)GT_GetIMsg(PanelWindow -> UserPort)))
  237.                         {
  238.                             Class    = Massage -> Class;
  239.                             Code    = Massage -> Code;
  240.                             Gadget    = (struct Gadget *)Massage -> IAddress;
  241.  
  242.                             GT_ReplyIMsg(Massage);
  243.  
  244.                             if(Class == IDCMP_MENUPICK)
  245.                             {
  246.                                 struct MenuItem *MenuItem;
  247.  
  248.                                 while(Code != MENUNULL)
  249.                                 {
  250.                                     MenuItem = ItemAddress(PanelMenu,Code);
  251.  
  252.                                     switch((ULONG)MENU_USERDATA(MenuItem))
  253.                                     {
  254.                                         case MEN_CANCEL:    Class = IDCMP_CLOSEWINDOW;
  255.                                                     break;
  256.  
  257.                                         case MEN_USE:        Class = IDCMP_GADGETUP;
  258.                                                     Gadget = GadgetArray[GAD_USE];
  259.                                                     break;
  260.  
  261.                                         case MEN_LOAD:        Class = IDCMP_GADGETUP;
  262.                                                     Gadget = GadgetArray[GAD_LOAD];
  263.                                                     break;
  264.  
  265.                                         case MEN_SAVESPEECH:        Class = IDCMP_GADGETUP;
  266.                                                     Gadget = GadgetArray[GAD_SAVE];
  267.                                                     break;
  268.  
  269.                                         default:        break;
  270.                                     }
  271.  
  272.                                     Code = MenuItem -> NextSelect;
  273.                                 }
  274.                             }
  275.  
  276.                             if(Class == IDCMP_CLOSEWINDOW)
  277.                                 Terminated = TRUE;
  278.  
  279.                             if(Class == IDCMP_MOUSEMOVE)
  280.                             {
  281.                                 switch(Gadget -> GadgetID)
  282.                                 {
  283.                                     case GAD_RATE:        SpeechConfig . Rate = Code;
  284.                                                 break;
  285.  
  286.                                     case GAD_PITCH:        SpeechConfig . Pitch = Code;
  287.                                                 break;
  288.  
  289.                                     case GAD_FREQUENCY:    SpeechConfig . Frequency = Code;
  290.                                                 break;
  291.  
  292.                                     case GAD_VOLUME:    SpeechConfig . Volume = Code;
  293.                                                 break;
  294.                                 }
  295.                             }
  296.  
  297.                             if(Class == IDCMP_GADGETUP)
  298.                             {
  299.                                 switch(Gadget -> GadgetID)
  300.                                 {
  301.                                     case GAD_USE:        Terminated = TRUE;
  302.                                                 break;
  303.  
  304.                                     case GAD_CANCEL:    Terminated = TRUE;
  305.                                                 CopyMem(&PrivateConfig,&SpeechConfig,sizeof(struct SpeechConfig));
  306.                                                 SpeechSetup();
  307.                                                 break;
  308.  
  309.                                     case GAD_SEX:        SpeechConfig . Sex = Code;
  310.                                                 break;
  311.  
  312.                                     case GAD_SPEECH:    SpeechConfig . Enabled = (Gadget -> Flags & GFLG_SELECTED ? TRUE : FALSE);
  313.                                                 break;
  314.  
  315.                                     case GAD_LOAD:        strcpy(DummyBuffer,LastSpeech);
  316.  
  317.                                                 DummyChar = PathPart(DummyBuffer);
  318.  
  319.                                                 *DummyChar = 0;
  320.  
  321.                                                 SetWait(PanelWindow);
  322.  
  323.                                                 PanelWindow -> Flags |= WFLG_RMBTRAP;
  324.  
  325.                                                 if(FileRequest = GetFile("Load Speech Settings...",DummyBuffer,FilePart(LastSpeech),DummyBuffer,"#?.term",FALSE,FALSE))
  326.                                                 {
  327.                                                     if(!ReadIFFData(DummyBuffer,&SpeechConfig,sizeof(struct SpeechConfig),'SPEK'))
  328.                                                         MyEasyRequest(Window,"Couldn't load speech settings\n\"%s\"!","Continue",DummyBuffer);
  329.                                                     else
  330.                                                     {
  331.                                                         strcpy(LastSpeech,DummyBuffer);
  332.  
  333.                                                         GT_SetGadgetAttrs(GadgetArray[GAD_RATE],PanelWindow,NULL,
  334.                                                             GTSL_Level,SpeechConfig . Rate,
  335.                                                         TAG_DONE);
  336.  
  337.                                                         GT_SetGadgetAttrs(GadgetArray[GAD_PITCH],PanelWindow,NULL,
  338.                                                             GTSL_Level,SpeechConfig . Pitch,
  339.                                                         TAG_DONE);
  340.  
  341.                                                         GT_SetGadgetAttrs(GadgetArray[GAD_FREQUENCY],PanelWindow,NULL,
  342.                                                             GTSL_Level,SpeechConfig . Frequency,
  343.                                                         TAG_DONE);
  344.  
  345.                                                         GT_SetGadgetAttrs(GadgetArray[GAD_VOLUME],PanelWindow,NULL,
  346.                                                             GTSL_Level,SpeechConfig . Volume,
  347.                                                         TAG_DONE);
  348.  
  349.                                                         GT_SetGadgetAttrs(GadgetArray[GAD_SEX],PanelWindow,NULL,
  350.                                                             GTCY_Active,SpeechConfig . Sex,
  351.                                                         TAG_DONE);
  352.  
  353.                                                         GT_SetGadgetAttrs(GadgetArray[GAD_SPEECH],PanelWindow,NULL,
  354.                                                             GTCB_Checked,SpeechConfig . Enabled,
  355.                                                         TAG_DONE);
  356.  
  357.                                                         SpeechSetup();
  358.                                                     }
  359.                                                 }
  360.  
  361.                                                 ClearPointer(PanelWindow);
  362.                                                 PanelWindow -> Flags &= ~WFLG_RMBTRAP;
  363.  
  364.                                                 break;
  365.  
  366.                                     case GAD_SAVE:        strcpy(DummyBuffer,LastSpeech);
  367.  
  368.                                                 DummyChar = PathPart(DummyBuffer);
  369.  
  370.                                                 *DummyChar = 0;
  371.  
  372.                                                 SetWait(PanelWindow);
  373.                                                 PanelWindow -> Flags |= WFLG_RMBTRAP;
  374.  
  375.                                                 if(FileRequest = GetFile("Save Speech Settings...",DummyBuffer,FilePart(LastSpeech),DummyBuffer,"#?.term",TRUE,FALSE))
  376.                                                 {
  377.                                                     if(!WriteIFFData(DummyBuffer,&SpeechConfig,sizeof(struct SpeechConfig),'SPEK'))
  378.                                                         MyEasyRequest(Window,"Couldn't save speech settings\n\"%s\"!","Continue",DummyBuffer);
  379.                                                     else
  380.                                                         strcpy(LastSpeech,DummyBuffer);
  381.                                                 }
  382.  
  383.                                                 ClearPointer(PanelWindow);
  384.                                                 PanelWindow -> Flags &= ~WFLG_RMBTRAP;
  385.  
  386.                                                 break;
  387.  
  388.                                     case GAD_SPEAK:        SpeechSetup();
  389.                                                 Say("This is term speaking.");
  390.                                                 break;
  391.                                 }
  392.                             }
  393.                         }
  394.                     }
  395.  
  396.                     PanelWindow -> Flags |= WFLG_RMBTRAP;
  397.  
  398.                     ClearMenuStrip(PanelWindow);
  399.  
  400.                     RemoveGList(PanelWindow,GadgetList,(UWORD)-1);
  401.  
  402.                     PopWindow();
  403.  
  404.                     CloseWindow(PanelWindow);
  405.                 }
  406.             }
  407.  
  408.             FreeMenus(PanelMenu);
  409.         }
  410.  
  411.         FreeGadgets(GadgetList);
  412.     }
  413. }
  414.