home *** CD-ROM | disk | FTP | other *** search
/ BCI NET 2 / BCI NET 2.iso / archives / programming / source / term43-source.lha / Extras / Source / term-Source.lha / CursorPanel.c < prev    next >
Encoding:
C/C++ Source or Header  |  1995-02-07  |  7.9 KB  |  347 lines

  1. /*
  2. **    CursorPanel.c
  3. **
  4. **    Editing panel for cursor key configuration
  5. **
  6. **    Copyright © 1990-1995 by Olaf `Olsen' Barthel
  7. **        All Rights Reserved
  8. */
  9.  
  10. #include "termGlobal.h"
  11.  
  12. enum    {    GAD_QUALIFIER=1,GAD_UP,GAD_DOWN,GAD_RIGHT,GAD_LEFT,
  13.         GAD_USE,GAD_LOAD,GAD_SAVE,GAD_CANCEL };
  14.  
  15. BOOLEAN __regargs
  16. CursorPanel(struct CursorKeys *CursorKeys,STRPTR LastCursorKeys,struct Window *Parent)
  17. {
  18.     struct CursorKeys    *Keys;
  19.     ULONG             OldCRC;
  20.     BOOLEAN             CursorKeysChanged = FALSE;
  21.  
  22.     OldCRC = DoCRC(CursorKeys,sizeof(struct CursorKeys));
  23.  
  24.     if(Keys = (struct CursorKeys *)AllocVecPooled(sizeof(struct CursorKeys),MEMF_ANY))
  25.     {
  26.         struct LayoutHandle *Handle;
  27.  
  28.         CopyMem(CursorKeys,Keys,sizeof(struct CursorKeys));
  29.  
  30.         if(Handle = LT_CreateHandleTags(Window -> WScreen,
  31.             LH_LocaleHook,    &LocaleHook,
  32.         TAG_DONE))
  33.         {
  34.             struct Window *PanelWindow;
  35.  
  36.             LT_New(Handle,
  37.                 LA_Type,    VERTICAL_KIND,
  38.             TAG_DONE);
  39.             {
  40.                 LT_New(Handle,
  41.                     LA_Type,    VERTICAL_KIND,
  42.                     LA_LabelID,    MSG_V36_0029,
  43.                 TAG_DONE);
  44.                 {
  45.                     LT_New(Handle,
  46.                         LA_Type,        VERTICAL_KIND,
  47.                     TAG_DONE);
  48.                     {
  49.                         LT_New(Handle,
  50.                             LA_Type,    CYCLE_KIND,
  51.                             LA_LabelID,    MSG_MACROPANEL_KEY_MODIFIER_GAD,
  52.                             LA_ID,        GAD_QUALIFIER,
  53.                             LACY_FirstLabel,MSG_MACROPANEL_NONE_TXT,
  54.                             LACY_LastLabel,    MSG_MACROPANEL_CONTROL_TXT,
  55.                         TAG_DONE);
  56.  
  57.                         LT_New(Handle,
  58.                             LA_Type,    XBAR_KIND,
  59.                         TAG_DONE);
  60.  
  61.                         LT_EndGroup(Handle);
  62.                     }
  63.  
  64.                     LT_New(Handle,
  65.                         LA_Type,        VERTICAL_KIND,
  66.                     TAG_DONE);
  67.                     {
  68.                         LT_New(Handle,
  69.                             LA_Type,    STRING_KIND,
  70.                             LA_LabelID,    MSG_CURSORPANEL_CURSOR_UP_GAD,
  71.                             LA_Chars,    30,
  72.                             LA_ID,        GAD_UP,
  73.                             GTST_MaxChars,    255,
  74.                         TAG_DONE);
  75.  
  76.                         LT_New(Handle,
  77.                             LA_Type,    STRING_KIND,
  78.                             LA_LabelID,    MSG_CURSORPANEL_CURSOR_DOWN_GAD,
  79.                             LA_Chars,    30,
  80.                             LA_ID,        GAD_DOWN,
  81.                             GTST_MaxChars,    255,
  82.                         TAG_DONE);
  83.  
  84.                         LT_New(Handle,
  85.                             LA_Type,    STRING_KIND,
  86.                             LA_LabelID,    MSG_CURSORPANEL_CURSOR_RIGHT_GAD,
  87.                             LA_Chars,    30,
  88.                             LA_ID,        GAD_RIGHT,
  89.                             GTST_MaxChars,    255,
  90.                         TAG_DONE);
  91.  
  92.                         LT_New(Handle,
  93.                             LA_Type,    STRING_KIND,
  94.                             LA_LabelID,    MSG_CURSORPANEL_CURSOR_LEFT_GAD,
  95.                             LA_Chars,    30,
  96.                             LA_ID,        GAD_LEFT,
  97.                             GTST_MaxChars,    255,
  98.                         TAG_DONE);
  99.  
  100.                         LT_EndGroup(Handle);
  101.                     }
  102.  
  103.                     LT_EndGroup(Handle);
  104.                 }
  105.  
  106.                 LT_New(Handle,
  107.                     LA_Type,VERTICAL_KIND,
  108.                 TAG_DONE);
  109.                 {
  110.                     LT_New(Handle,
  111.                         LA_Type,    XBAR_KIND,
  112.                         LAXB_FullSize,    TRUE,
  113.                     TAG_DONE);
  114.     
  115.                     LT_EndGroup(Handle);
  116.                 }
  117.  
  118.                 LT_New(Handle,LA_Type,HORIZONTAL_KIND,
  119.                     LAGR_SameSize,    TRUE,
  120.                     LAGR_Spread,    TRUE,
  121.                 TAG_DONE);
  122.                 {
  123.                     LT_New(Handle,
  124.                         LA_Type,    BUTTON_KIND,
  125.                         LA_LabelID,    MSG_GLOBAL_USE_GAD,
  126.                         LA_ID,        GAD_USE,
  127.                         LABT_ReturnKey,    TRUE,
  128.                         LABT_ExtraFat,    TRUE,
  129.                     TAG_DONE);
  130.  
  131.                     LT_New(Handle,
  132.                         LA_Type,    BUTTON_KIND,
  133.                         LA_LabelID,    MSG_GLOBAL_LOAD_GAD,
  134.                         LA_ID,        GAD_LOAD,
  135.                         LABT_ExtraFat,    TRUE,
  136.                     TAG_DONE);
  137.  
  138.                     LT_New(Handle,
  139.                         LA_Type,    BUTTON_KIND,
  140.                         LA_LabelID,    MSG_GLOBAL_SAVE_GAD,
  141.                         LA_ID,        GAD_SAVE,
  142.                         LABT_ExtraFat,    TRUE,
  143.                     TAG_DONE);
  144.  
  145.                     LT_New(Handle,
  146.                         LA_Type,    BUTTON_KIND,
  147.                         LA_LabelID,    MSG_GLOBAL_CANCEL_GAD,
  148.                         LA_ID,        GAD_CANCEL,
  149.                         LABT_EscKey,    TRUE,
  150.                         LABT_ExtraFat,    TRUE,
  151.                     TAG_DONE);
  152.  
  153.                     LT_EndGroup(Handle);
  154.                 }
  155.  
  156.                 LT_EndGroup(Handle);
  157.             }
  158.  
  159.             if(PanelWindow = LT_Layout(Handle,LocaleString(MSG_CURSORPANEL_CURSOR_PREFERENCES_TXT),NULL,0,0,IDCMP_CLOSEWINDOW,0,
  160.                 LAWN_HelpHook,        &GuideHook,
  161.                 LAWN_Parent,        Parent,
  162.                 WA_DepthGadget,        TRUE,
  163.                 WA_CloseGadget,        TRUE,
  164.                 WA_DragBar,        TRUE,
  165.                 WA_RMBTrap,        TRUE,
  166.                 WA_Activate,        TRUE,
  167.             TAG_DONE))
  168.             {
  169.                 struct IntuiMessage    *Message;
  170.                 BOOLEAN             Done = FALSE;
  171.                 ULONG             MsgClass,
  172.                              MsgQualifier;
  173.                 UWORD             MsgCode;
  174.                 struct Gadget        *MsgGadget;
  175.                 UBYTE             DummyBuffer[MAX_FILENAME_LENGTH],
  176.                             *DummyChar;
  177.                 struct FileRequester    *FileRequest;
  178.                 LONG             Modifier = 0,i;
  179.  
  180.                 GuideContext(CONTEXT_CURSOR);
  181.  
  182.                 PushWindow(PanelWindow);
  183.  
  184.                 LT_ShowWindow(Handle,TRUE);
  185.  
  186.                 for(i = 0 ; i < 4 ; i++)
  187.                 {
  188.                     LT_SetAttributes(Handle,GAD_UP + i,
  189.                         GTST_String,Keys -> Keys[Modifier][i],
  190.                     TAG_DONE);
  191.                 }
  192.  
  193.                 do
  194.                 {
  195.                     if(Wait(PORTMASK(PanelWindow -> UserPort) | SIG_BREAK) & SIG_BREAK)
  196.                     {
  197.                         CopyMem(CursorKeys,Keys,sizeof(struct CursorKeys));
  198.  
  199.                         break;
  200.                     }
  201.  
  202.                     while(Message = (struct IntuiMessage *)GT_GetIMsg(PanelWindow -> UserPort))
  203.                     {
  204.                         MsgClass    = Message -> Class;
  205.                         MsgQualifier    = Message -> Qualifier;
  206.                         MsgCode        = Message -> Code;
  207.                         MsgGadget    = (struct Gadget *)Message -> IAddress;
  208.  
  209.                         GT_ReplyIMsg(Message);
  210.  
  211.                         LT_HandleInput(Handle,MsgQualifier,&MsgClass,&MsgCode,&MsgGadget);
  212.  
  213.                         if(MsgClass == IDCMP_CLOSEWINDOW)
  214.                         {
  215.                             CopyMem(CursorKeys,Keys,sizeof(struct CursorKeys));
  216.  
  217.                             Done = TRUE;
  218.                         }
  219.  
  220.                         if(MsgClass == IDCMP_GADGETUP)
  221.                         {
  222.                             switch(MsgGadget -> GadgetID)
  223.                             {
  224.                                 case GAD_QUALIFIER:
  225.  
  226.                                     for(i = 0 ; i < 4 ; i++)
  227.                                         strcpy(Keys -> Keys[Modifier][i],(STRPTR)LT_GetAttributes(Handle,GAD_UP + i,TAG_DONE));
  228.  
  229.                                     Modifier = MsgCode;
  230.  
  231.                                     for(i = 0 ; i < 4 ; i++)
  232.                                     {
  233.                                         LT_SetAttributes(Handle,GAD_UP + i,
  234.                                             GTST_String,Keys -> Keys[Modifier][i],
  235.                                         TAG_DONE);
  236.                                     }
  237.  
  238.                                     break;
  239.  
  240.                                 case GAD_USE:
  241.  
  242.                                     for(i = 0 ; i < 4 ; i++)
  243.                                         strcpy(Keys -> Keys[Modifier][i],(STRPTR)LT_GetAttributes(Handle,GAD_UP + i,TAG_DONE));
  244.  
  245.                                     CopyMem(Keys,CursorKeys,sizeof(struct CursorKeys));
  246.  
  247.                                     Done = TRUE;
  248.                                     break;
  249.  
  250.                                 case GAD_CANCEL:
  251.  
  252.                                     CopyMem(CursorKeys,Keys,sizeof(struct CursorKeys));
  253.  
  254.                                     Done = TRUE;
  255.                                     break;
  256.  
  257.                                 case GAD_LOAD:
  258.  
  259.                                     strcpy(DummyBuffer,LastCursorKeys);
  260.  
  261.                                     DummyChar = PathPart(DummyBuffer);
  262.  
  263.                                     *DummyChar = 0;
  264.  
  265.                                     LT_LockWindow(PanelWindow);
  266.  
  267.                                     if(FileRequest = GetFile(PanelWindow,LocaleString(MSG_CURSORPANEL_LOAD_CURSOR_KEYS_TXT),DummyBuffer,FilePart(LastCursorKeys),DummyBuffer,"#?.prefs",FALSE,FALSE,FALSE,LocaleString(MSG_GLOBAL_LOAD_TXT),TRUE))
  268.                                     {
  269.                                         if(!ReadIFFData(DummyBuffer,Keys,sizeof(struct CursorKeys),ID_KEYS))
  270.                                             ShowError(PanelWindow,ERR_LOAD_ERROR,IoErr(),DummyBuffer);
  271.                                         else
  272.                                         {
  273.                                             OldCRC = DoCRC(Keys,sizeof(struct CursorKeys));
  274.  
  275.                                             CursorKeysChanged = FALSE;
  276.  
  277.                                             strcpy(Config -> FileConfig -> CursorFileName,DummyBuffer);
  278.  
  279.                                             strcpy(LastCursorKeys,DummyBuffer);
  280.  
  281.                                             for(i = 0 ; i < 4 ; i++)
  282.                                             {
  283.                                                 LT_SetAttributes(Handle,GAD_UP + i,
  284.                                                     GTST_String,Keys -> Keys[Modifier][i],
  285.                                                 TAG_DONE);
  286.                                             }
  287.                                         }
  288.  
  289.                                         FreeAslRequest(FileRequest);
  290.                                     }
  291.  
  292.                                     LT_UnlockWindow(PanelWindow);
  293.  
  294.                                     break;
  295.  
  296.                                 case GAD_SAVE:
  297.  
  298.                                     strcpy(DummyBuffer,LastCursorKeys);
  299.  
  300.                                     DummyChar = PathPart(DummyBuffer);
  301.  
  302.                                     *DummyChar = 0;
  303.  
  304.                                     LT_LockWindow(PanelWindow);
  305.  
  306.                                     for(i = 0 ; i < 4 ; i++)
  307.                                         strcpy(Keys -> Keys[Modifier][i],(STRPTR)LT_GetAttributes(Handle,GAD_UP + i,TAG_DONE));
  308.  
  309.                                     if(FileRequest = GetFile(PanelWindow,LocaleString(MSG_CURSORPANEL_SAVE_CURSOR_KEYS_TXT),DummyBuffer,FilePart(LastCursorKeys),DummyBuffer,"#?.prefs",TRUE,FALSE,FALSE,LocaleString(MSG_GLOBAL_SAVE_TXT),TRUE))
  310.                                     {
  311.                                         if(!WriteIFFData(DummyBuffer,Keys,sizeof(struct CursorKeys),ID_KEYS))
  312.                                             ShowError(PanelWindow,ERR_SAVE_ERROR,IoErr(),DummyBuffer);
  313.                                         else
  314.                                         {
  315.                                             strcpy(LastCursorKeys,DummyBuffer);
  316.  
  317.                                             CursorKeysChanged = FALSE;
  318.  
  319.                                             OldCRC = DoCRC(Keys,sizeof(struct CursorKeys));
  320.                                         }
  321.  
  322.                                         FreeAslRequest(FileRequest);
  323.                                     }
  324.  
  325.                                     LT_UnlockWindow(PanelWindow);
  326.  
  327.                                     break;
  328.                             }
  329.                         }
  330.                     }
  331.                 }
  332.                 while(!Done);
  333.  
  334.                 PopWindow();
  335.             }
  336.  
  337.             LT_DeleteHandle(Handle);
  338.         }
  339.  
  340.         FreeVecPooled(Keys);
  341.     }
  342.  
  343.     CursorKeysChanged |= (OldCRC != DoCRC(CursorKeys,sizeof(struct CursorKeys)));
  344.  
  345.     return(CursorKeysChanged);
  346. }
  347.