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

  1. /*
  2. **    ScreenPanel.c
  3. **
  4. **    Editing panel for screen 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_MODES,GAD_MODE,GAD_NEWMODE,GAD_COLOUR,GAD_PALETTE,GAD_RED,GAD_GREEN,GAD_BLUE,GAD_STANDARD,
  13.         GAD_CURRENTFONT,GAD_NEWFONT,GAD_MAKEPUBLIC,GAD_SHANGHAI,GAD_BLINKING,GAD_FASTER_LAYOUT,
  14.         GAD_TITLEBAR,GAD_USE_WORKBENCH,GAD_PUBSCREEN_NAME,GAD_STATUS_LINE,
  15.         GAD_TIMEDISPLAY,GAD_USE,GAD_CANCEL,GAD_DEFAULT };
  16.  
  17. struct ModeNode
  18. {
  19.     struct Node    VanillaNode;
  20.     ULONG        DisplayID;
  21. };
  22.  
  23. STATIC STRPTR        StatusType[4],
  24.             ColourType[5],
  25.             TimeType[4];
  26.  
  27. STATIC struct List    ModeList;
  28. STATIC BYTE        ModeLimited;
  29.  
  30. STATIC ULONG __saveds __asm
  31. ModeFilter(register __a1 ULONG ID)
  32. {
  33.     struct DimensionInfo DimensionInfo;
  34.  
  35.     if(GetDisplayInfoData(NULL,(APTR)&DimensionInfo,sizeof(struct DimensionInfo),DTAG_DIMS,ID))
  36.     {
  37.         if(DimensionInfo . TxtOScan . MaxX - DimensionInfo . TxtOScan . MinX + 1 >= 640)
  38.         {
  39.             if(ModeLimited)
  40.                 return((ULONG)ModeOkay(ID));
  41.             else
  42.                 return(TRUE);
  43.         }
  44.     }
  45.  
  46.     return(FALSE);
  47. }
  48.  
  49. STATIC BYTE __regargs
  50. SelectDisplayMode(struct Window *Window,ULONG *Mode)
  51. {
  52.     struct ScreenModeRequester    *Request;
  53.     struct Hook             FilterHook;
  54.     BYTE                 Result = FALSE;
  55.  
  56.     FilterHook . h_Entry    = (LONG (*)())ModeFilter;
  57.     FilterHook . h_SubEntry    = NULL;
  58.     FilterHook . h_Data    = NULL;
  59.  
  60.     if(Request = (struct ScreenModeRequester *)AllocAslRequestTags(ASL_ScreenModeRequest,
  61.         ASLSM_Window,        Window,
  62.         ASLSM_InitialDisplayID,    *Mode,
  63.         ASLSM_FilterFunc,    &FilterHook,
  64.         ASLSM_PrivateIDCMP,    TRUE,
  65.     TAG_DONE))
  66.     {
  67.         if(AslRequestTags(Request,TAG_DONE))
  68.         {
  69.             *Mode = Request -> sm_DisplayID;
  70.  
  71.             Result = TRUE;
  72.         }
  73.  
  74.         FreeAslRequest(Request);
  75.     }
  76.  
  77.     return(Result);
  78. }
  79.  
  80. STATIC struct Gadget *
  81. CreateAllGadgets(LONG *NumModes,struct Configuration *LocalConfig,struct Gadget **GadgetArray,struct Gadget **GadgetList,BYTE WrongMode,BYTE *Default)
  82. {
  83.     struct Gadget        *Gadget;
  84.     struct NewGadget     NewGadget;
  85.     UWORD             Counter = 0;
  86.     LONG             Mode;
  87.  
  88.     LocalizeString(StatusType,MSG_SCREENPANEL_STATUS_DISABLED_TXT,MSG_SCREENPANEL_STATUS_COMPACT_TXT);
  89.     LocalizeString(ColourType,MSG_SCREENPANEL_COLOUR_AMIGA_TXT,MSG_SCREENPANEL_COLOUR_MONO_TXT);
  90.     LocalizeString(TimeType,MSG_SCREENPANEL_TIME_ONLINETIME_TXT,MSG_SCREENPANEL_TIME_BOTH_TXT);
  91.  
  92.     SZ_SizeSetup(Window -> WScreen,&UserFont,TRUE);
  93.  
  94.     memset(&NewGadget,0,sizeof(struct NewGadget));
  95.  
  96.     if(Gadget = CreateContext(GadgetList))
  97.     {
  98.         NewList(&ModeList);
  99.  
  100.         if(LocalConfig -> ScreenConfig -> ColourMode == COLOUR_EIGHT || LocalConfig -> ScreenConfig -> ColourMode == COLOUR_SIXTEEN)
  101.             ModeLimited = TRUE;
  102.         else
  103.             ModeLimited = FALSE;
  104.  
  105.         SZ_ResetMaxWidth();
  106.  
  107.         SZ_UpdateMaxWidth(BUTTON_KIND,LocaleString(MSG_GLOBAL_SELECT_NEW_DISPLAY_MODE_TXT),0,NULL);
  108.         SZ_UpdateMaxWidth(BUTTON_KIND,LocaleString(MSG_SCREENPANEL_USE_DEFAULT_TXT),0,NULL);
  109.         SZ_UpdateMaxWidth(BUTTON_KIND,LocaleString(MSG_SCREENPANEL_SELECT_NEW_FONT_TXT),0,NULL);
  110.         SZ_UpdateMaxWidth(CYCLE_KIND,NULL,0,ColourType);
  111.  
  112.         if(AslBase -> lib_Version < 38)
  113.         {
  114.             ULONG             SomeMode = INVALID_ID;
  115.             struct DisplayInfo     DisplayInfo;
  116.             LONG             Len,Max = 0;
  117.  
  118.             *NumModes = Mode = 0;
  119.  
  120.             while((SomeMode = NextDisplayInfo(SomeMode)) != INVALID_ID)
  121.             {
  122.                 if(ModeLimited)
  123.                 {
  124.                     if(!ModeOkay(SomeMode))
  125.                         continue;
  126.                 }
  127.  
  128.                 if(GetDisplayInfoData(NULL,(APTR)&DisplayInfo,sizeof(struct DisplayInfo),DTAG_DISP,SomeMode))
  129.                 {
  130.                     if(DisplayInfo . PropertyFlags & DIPF_IS_WB)
  131.                     {
  132.                         struct ModeNode    *Node;
  133.                         STRPTR         Name;
  134.  
  135.                         Name = GetModeName(SomeMode);
  136.  
  137.                         if((Len = strlen(Name)) > Max)
  138.                             Max = Len;
  139.  
  140.                         if(Node = (struct ModeNode *)AllocVec(sizeof(struct ModeNode) + Len + 1,MEMF_ANY | MEMF_CLEAR))
  141.                         {
  142.                             Node -> VanillaNode . ln_Name    = (char *)(Node + 1);
  143.                             Node -> DisplayID        = SomeMode;
  144.  
  145.                             strcpy(Node -> VanillaNode . ln_Name,Name);
  146.  
  147.                             AddTail(&ModeList,&Node -> VanillaNode);
  148.  
  149.                             if(LocalConfig -> ScreenConfig -> DisplayMode == SomeMode)
  150.                                 Mode = *NumModes;
  151.  
  152.                             *NumModes = *NumModes + 1;
  153.                         }
  154.                     }
  155.                 }
  156.             }
  157.  
  158.             SZ_UpdateMaxWidth(LISTVIEW_KIND,NULL,Max,NULL);
  159.             SZ_SetWidth(SZ_ResetMaxWidth());
  160.  
  161.             SZ_AddLeftOffset(SZ_LeftOffsetN(MSG_SCREENPANEL_AVAILABLE_DISPLAY_MODES_GAD,MSG_SCREENPANEL_COLOUR_GAD,MSG_SCREENPANEL_EDIT_SCREEN_PALETTE_GAD,MSG_SCREENPANEL_RED_GAD,MSG_SCREENPANEL_GREEN_GAD,MSG_SCREENPANEL_BLUE_GAD,MSG_SCREENPANEL_SCREEN_FONT_GAD,-1));
  162.  
  163.             NewGadget . ng_GadgetText    = LocaleString(MSG_SCREENPANEL_AVAILABLE_DISPLAY_MODES_GAD);
  164.             NewGadget . ng_GadgetID        = Counter;
  165.             NewGadget . ng_Flags        = PLACETEXT_LEFT;
  166.  
  167.             GadgetArray[Counter] = Gadget = CreateGadget(LISTVIEW_KIND,Gadget,&NewGadget,
  168.                 SZ_Adjust,        TRUE,
  169.                 SZ_AutoWidth,        TRUE,
  170.                 SZ_Lines,        5,
  171.  
  172.                 GTLV_Labels,        &ModeList,
  173.                 GTLV_ShowSelected,    NULL,
  174.                 GTLV_Selected,        Mode,
  175.                 GTLV_Top,        Mode,
  176.             TAG_DONE);
  177.         }
  178.         else
  179.         {
  180.             ULONG             SomeMode = INVALID_ID;
  181.             struct DisplayInfo     DisplayInfo;
  182.             LONG             Len,Max = 0;
  183.  
  184.             while((SomeMode = NextDisplayInfo(SomeMode)) != INVALID_ID)
  185.             {
  186.                 if(ModeLimited)
  187.                 {
  188.                     if(!ModeOkay(SomeMode))
  189.                         continue;
  190.                 }
  191.  
  192.                 if(GetDisplayInfoData(NULL,(APTR)&DisplayInfo,sizeof(struct DisplayInfo),DTAG_DISP,SomeMode))
  193.                 {
  194.                     if(DisplayInfo . PropertyFlags & DIPF_IS_WB)
  195.                     {
  196.                         if((Len = strlen(GetModeName(SomeMode))) > Max)
  197.                             Max = Len;
  198.                     }
  199.                 }
  200.             }
  201.  
  202.             SZ_UpdateMaxWidth(TEXT_KIND,NULL,Max,NULL);
  203.  
  204.             SZ_SetWidth(SZ_ResetMaxWidth());
  205.  
  206.             SZ_AddLeftOffset(SZ_LeftOffsetN(MSG_SCREENPANEL_CURRENT_DISPLAY_MODE_GAD,MSG_SCREENPANEL_COLOUR_GAD,MSG_SCREENPANEL_EDIT_SCREEN_PALETTE_GAD,MSG_SCREENPANEL_RED_GAD,MSG_SCREENPANEL_GREEN_GAD,MSG_SCREENPANEL_BLUE_GAD,MSG_SCREENPANEL_SCREEN_FONT_GAD,-1));
  207.  
  208.             Counter = GAD_MODE;
  209.  
  210.             NewGadget . ng_GadgetText    = LocaleString(MSG_SCREENPANEL_CURRENT_DISPLAY_MODE_GAD);
  211.             NewGadget . ng_GadgetID        = Counter;
  212.             NewGadget . ng_Flags        = PLACETEXT_LEFT;
  213.  
  214.             if(ModeNotAvailable(LocalConfig -> ScreenConfig -> DisplayMode))
  215.                 LocalConfig -> ScreenConfig -> DisplayMode = HIRES_KEY;
  216.  
  217.             GadgetArray[Counter++] = Gadget = CreateGadget(TEXT_KIND,Gadget,&NewGadget,
  218.                 SZ_Adjust,    TRUE,
  219.                 SZ_AutoWidth,    TRUE,
  220.  
  221.                 GTTX_Text,    GetModeName(LocalConfig -> ScreenConfig -> DisplayMode),
  222.                 GTTX_Border,    TRUE,
  223.             TAG_DONE);
  224.  
  225.             NewGadget . ng_GadgetText    = LocaleString(MSG_GLOBAL_SELECT_NEW_DISPLAY_MODE_TXT);
  226.             NewGadget . ng_GadgetID        = Counter;
  227.             NewGadget . ng_Flags        = 0;
  228.  
  229.             GadgetArray[Counter] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  230.                 SZ_Adjust,    TRUE,
  231.                 SZ_AutoWidth,    TRUE,
  232.             TAG_DONE);
  233.         }
  234.  
  235.         Counter = GAD_COLOUR;
  236.  
  237.         NewGadget . ng_GadgetText    = LocaleString(MSG_SCREENPANEL_COLOUR_GAD);
  238.         NewGadget . ng_GadgetID        = Counter;
  239.  
  240.         GadgetArray[Counter++] = Gadget = CreateGadget(CYCLE_KIND,Gadget,&NewGadget,
  241.             SZ_Adjust,    TRUE,
  242.             SZ_AutoWidth,    TRUE,
  243.  
  244.             GTCY_Labels,    ColourType,
  245.             GTCY_Active,    LocalConfig -> ScreenConfig -> ColourMode,
  246.         TAG_DONE);
  247.  
  248.         NewGadget . ng_GadgetText    = LocaleString(MSG_SCREENPANEL_EDIT_SCREEN_PALETTE_GAD);
  249.         NewGadget . ng_GadgetID        = Counter;
  250.  
  251.         GadgetArray[Counter++] = Gadget = CreateGadget(PALETTE_KIND,Gadget,&NewGadget,
  252.             SZ_Adjust,        TRUE,
  253.             SZ_AutoWidth,        TRUE,
  254.             SZ_AlignExtra,        TRUE,
  255.  
  256.             GTPA_Depth,        Config -> ScreenConfig -> ColourMode == COLOUR_EIGHT ? 3 : Window -> WScreen -> RastPort . BitMap -> Depth,
  257.             GTPA_Color,        0,
  258.             GA_Disabled,        WrongMode,
  259.         TAG_DONE);
  260.  
  261.         NewGadget . ng_GadgetText    = LocaleString(MSG_SCREENPANEL_RED_GAD);
  262.         NewGadget . ng_GadgetID        = Counter;
  263.  
  264.         GadgetArray[Counter++] = Gadget = CreateGadget(SLIDER_KIND,Gadget,&NewGadget,
  265.             SZ_Adjust,        TRUE,
  266.             SZ_AutoWidth,        TRUE,
  267.  
  268.             GTSL_Min,        0,
  269.             GTSL_Max,        15,
  270.             GTSL_Level,        0,
  271.             GTSL_LevelFormat,    "%2ld",
  272.             GTSL_MaxLevelLen,    2,
  273.             GA_Disabled,        WrongMode,
  274.         TAG_DONE);
  275.  
  276.         NewGadget . ng_GadgetText    = LocaleString(MSG_SCREENPANEL_GREEN_GAD);
  277.         NewGadget . ng_GadgetID        = Counter;
  278.  
  279.         GadgetArray[Counter++] = Gadget = CreateGadget(SLIDER_KIND,Gadget,&NewGadget,
  280.             SZ_Adjust,        TRUE,
  281.             SZ_AutoWidth,        TRUE,
  282.  
  283.             GTSL_Min,        0,
  284.             GTSL_Max,        15,
  285.             GTSL_Level,        0,
  286.             GTSL_LevelFormat,    "%2ld",
  287.             GTSL_MaxLevelLen,    2,
  288.             GA_Disabled,        WrongMode,
  289.         TAG_DONE);
  290.  
  291.         NewGadget . ng_GadgetText    = LocaleString(MSG_SCREENPANEL_BLUE_GAD);
  292.         NewGadget . ng_GadgetID        = Counter;
  293.  
  294.         GadgetArray[Counter++] = Gadget = CreateGadget(SLIDER_KIND,Gadget,&NewGadget,
  295.             SZ_Adjust,        TRUE,
  296.             SZ_AutoWidth,        TRUE,
  297.  
  298.             GTSL_Min,        0,
  299.             GTSL_Max,        15,
  300.             GTSL_Level,        0,
  301.             GTSL_LevelFormat,    "%2ld",
  302.             GTSL_MaxLevelLen,    2,
  303.             GA_Disabled,        WrongMode,
  304.         TAG_DONE);
  305.  
  306.         NewGadget . ng_GadgetText    = LocaleString(MSG_SCREENPANEL_USE_DEFAULT_TXT);
  307.         NewGadget . ng_GadgetID        = Counter;
  308.         NewGadget . ng_Flags        = 0;
  309.  
  310.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  311.             SZ_Adjust,    TRUE,
  312.             SZ_AutoWidth,    TRUE,
  313.  
  314.             GA_Disabled,    WrongMode,
  315.         TAG_DONE);
  316.  
  317.         NewGadget . ng_GadgetText    = LocaleString(MSG_SCREENPANEL_SCREEN_FONT_GAD);
  318.         NewGadget . ng_GadgetID        = Counter;
  319.  
  320.         GadgetArray[Counter++] = Gadget = CreateGadget(TEXT_KIND,Gadget,&NewGadget,
  321.             SZ_Adjust,    TRUE,
  322.             SZ_AutoWidth,    TRUE,
  323.             SZ_AlignExtra,    TRUE,
  324.  
  325.             GTTX_Border,    TRUE,
  326.         TAG_DONE);
  327.  
  328.         NewGadget . ng_GadgetText    = LocaleString(MSG_SCREENPANEL_SELECT_NEW_FONT_TXT);
  329.         NewGadget . ng_GadgetID        = Counter;
  330.         NewGadget . ng_Flags        = 0;
  331.  
  332.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  333.             SZ_Adjust,    TRUE,
  334.             SZ_AutoWidth,    TRUE,
  335.             GA_Disabled,    LocalConfig -> ScreenConfig -> UseWorkbench,
  336.         TAG_DONE);
  337.  
  338.         SZ_AddLeftOffset(SZ_LeftOffsetDelta(MSG_SCREENPANEL_MAKE_SCREEN_PUBLIC_GAD,MSG_SCREENPANEL_STATUS_LINE_GAD));
  339.  
  340.         SZ_ResetMaxWidth();
  341.  
  342.         SZ_UpdateMaxWidth(CYCLE_KIND,NULL,0,StatusType);
  343.         SZ_UpdateMaxWidth(CYCLE_KIND,NULL,0,TimeType);
  344.  
  345.         SZ_SetWidth(SZ_ResetMaxWidth());
  346.  
  347.         NewGadget . ng_GadgetText    = LocaleString(MSG_SCREENPANEL_MAKE_SCREEN_PUBLIC_GAD);
  348.         NewGadget . ng_GadgetID        = Counter;
  349.  
  350.         GadgetArray[Counter++] = Gadget = CreateGadget(CHECKBOX_KIND,Gadget,&NewGadget,
  351.             SZ_Adjust,    TRUE,
  352.             SZ_AutoWidth,    TRUE,
  353.             SZ_NewColumn,    TRUE,
  354.  
  355.             GTCB_Checked,    LocalConfig -> ScreenConfig -> MakeScreenPublic,
  356.             GA_Disabled,    LocalConfig -> ScreenConfig -> UseWorkbench,
  357.         TAG_DONE);
  358.  
  359.         NewGadget . ng_GadgetText    = LocaleString(MSG_SCREENPANEL_SHANGHAI_WINDOWS_GAD);
  360.         NewGadget . ng_GadgetID        = Counter;
  361.  
  362.         GadgetArray[Counter++] = Gadget = CreateGadget(CHECKBOX_KIND,Gadget,&NewGadget,
  363.             SZ_Adjust,    TRUE,
  364.             SZ_AutoWidth,    TRUE,
  365.  
  366.             GTCB_Checked,    LocalConfig -> ScreenConfig -> ShanghaiWindows,
  367.             GA_Disabled,    !LocalConfig -> ScreenConfig -> MakeScreenPublic || LocalConfig -> ScreenConfig -> UseWorkbench,
  368.         TAG_DONE);
  369.  
  370.         NewGadget . ng_GadgetText    = LocaleString(MSG_SCREENPANEL_BLINKING_GAD);
  371.         NewGadget . ng_GadgetID        = Counter;
  372.  
  373.         GadgetArray[Counter++] = Gadget = CreateGadget(CHECKBOX_KIND,Gadget,&NewGadget,
  374.             SZ_Adjust,    TRUE,
  375.             SZ_AutoWidth,    TRUE,
  376.             SZ_AlignExtra,    TRUE,
  377.  
  378.             GTCB_Checked,    LocalConfig -> ScreenConfig -> Blinking,
  379.             GA_Disabled,    LocalConfig -> ScreenConfig -> ColourMode == COLOUR_MONO || LocalConfig -> ScreenConfig -> ColourMode == COLOUR_SIXTEEN || LocalConfig -> ScreenConfig -> UseWorkbench,
  380.         TAG_DONE);
  381.  
  382.         NewGadget . ng_GadgetText    = LocaleString(MSG_SCREENPANEL_FASTER_LAYOUT_GAD);
  383.         NewGadget . ng_GadgetID        = Counter;
  384.  
  385.         GadgetArray[Counter++] = Gadget = CreateGadget(CHECKBOX_KIND,Gadget,&NewGadget,
  386.             SZ_Adjust,    TRUE,
  387.             SZ_AutoWidth,    TRUE,
  388.  
  389.             GTCB_Checked,    LocalConfig -> ScreenConfig -> FasterLayout,
  390.             GA_Disabled,    LocalConfig -> ScreenConfig -> UseWorkbench,
  391.         TAG_DONE);
  392.  
  393.         NewGadget . ng_GadgetText    = LocaleString(MSG_SCREENPANEL_SCREEN_TITLE_GAD);
  394.         NewGadget . ng_GadgetID        = Counter;
  395.  
  396.         GadgetArray[Counter++] = Gadget = CreateGadget(CHECKBOX_KIND,Gadget,&NewGadget,
  397.             SZ_Adjust,    TRUE,
  398.             SZ_AutoWidth,    TRUE,
  399.  
  400.             GTCB_Checked,    LocalConfig -> ScreenConfig -> TitleBar,
  401.             GA_Disabled,    LocalConfig -> ScreenConfig -> UseWorkbench,
  402.         TAG_DONE);
  403.  
  404.         NewGadget . ng_GadgetText    = LocaleString(MSG_SCREENPANEL_USE_WORKBENCH_GAD);
  405.         NewGadget . ng_GadgetID        = Counter;
  406.  
  407.         GadgetArray[Counter++] = Gadget = CreateGadget(CHECKBOX_KIND,Gadget,&NewGadget,
  408.             SZ_Adjust,    TRUE,
  409.             SZ_AutoWidth,    TRUE,
  410.  
  411.             GTCB_Checked,    LocalConfig -> ScreenConfig -> UseWorkbench,
  412.         TAG_DONE);
  413.  
  414.         NewGadget . ng_GadgetText    = LocaleString(MSG_SCREENPANEL_PUBSCREEN_NAME_GAD);
  415.         NewGadget . ng_GadgetID        = Counter;
  416.  
  417.         GadgetArray[Counter++] = Gadget = CreateGadget(STRING_KIND,Gadget,&NewGadget,
  418.             SZ_Adjust,    TRUE,
  419.             SZ_AutoWidth,    TRUE,
  420.  
  421.             GTST_MaxChars,    MAXPUBSCREENNAME,
  422.             GTST_String,    LocalConfig -> ScreenConfig -> PubScreenName,
  423.             GA_Disabled,    !LocalConfig -> ScreenConfig -> UseWorkbench,
  424.         TAG_DONE);
  425.  
  426.         NewGadget . ng_GadgetText    = LocaleString(MSG_SCREENPANEL_STATUS_LINE_GAD);
  427.         NewGadget . ng_GadgetID        = Counter;
  428.  
  429.         GadgetArray[Counter++] = Gadget = CreateGadget(CYCLE_KIND,Gadget,&NewGadget,
  430.             SZ_Adjust,    TRUE,
  431.             SZ_AutoWidth,    TRUE,
  432.  
  433.             GTCY_Labels,    StatusType,
  434.             GTCY_Active,    LocalConfig -> ScreenConfig -> StatusLine,
  435.         TAG_DONE);
  436.  
  437.         NewGadget . ng_GadgetText    = LocaleString(MSG_SCREENPANEL_ONLINE_TIME_GAD);
  438.         NewGadget . ng_GadgetID        = Counter;
  439.  
  440.         GadgetArray[Counter++] = Gadget = CreateGadget(CYCLE_KIND,Gadget,&NewGadget,
  441.             SZ_Adjust,    TRUE,
  442.             SZ_AutoWidth,    TRUE,
  443.             SZ_AlignExtra,    TRUE,
  444.  
  445.             GTCY_Labels,    TimeType,
  446.             GTCY_Active,    LocalConfig -> ScreenConfig -> TimeMode,
  447.         TAG_DONE);
  448.  
  449.         NewGadget . ng_GadgetText    = LocaleString(MSG_GLOBAL_USE_GAD);
  450.         NewGadget . ng_GadgetID        = Counter;
  451.         NewGadget . ng_Flags        = 0;
  452.  
  453.         SZ_UpdateMaxWidth(BUTTON_KIND,LocaleString(MSG_GLOBAL_USE_GAD),0,NULL);
  454.         SZ_UpdateMaxWidth(BUTTON_KIND,LocaleString(MSG_GLOBAL_CANCEL_GAD),0,NULL);
  455.         SZ_UpdateMaxWidth(BUTTON_KIND,LocaleString(MSG_GLOBAL_DEFAULT_GAD),0,NULL);
  456.  
  457.         SZ_SetWidth(SZ_ResetMaxWidth());
  458.  
  459.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  460.             SZ_Adjust,    TRUE,
  461.             SZ_AutoWidth,    TRUE,
  462.             SZ_AlignExtra,    TRUE,
  463.             SZ_AlignLeft,    TRUE,
  464.             SZ_AlignBottom,    TRUE,
  465.         TAG_DONE);
  466.  
  467.         NewGadget . ng_GadgetText    = LocaleString(MSG_GLOBAL_CANCEL_GAD);
  468.         NewGadget . ng_GadgetID        = Counter;
  469.  
  470.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  471.             SZ_Adjust,    TRUE,
  472.             SZ_AutoWidth,    TRUE,
  473.             SZ_AlignRight,    TRUE,
  474.         TAG_DONE);
  475.  
  476.         if(Default)
  477.         {
  478.             NewGadget . ng_GadgetText    = LocaleString(MSG_GLOBAL_DEFAULT_GAD);
  479.             NewGadget . ng_GadgetID        = Counter;
  480.  
  481.             GadgetArray[Counter] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  482.                 SZ_Adjust,    TRUE,
  483.                 SZ_AutoWidth,    TRUE,
  484.                 SZ_AlignCentre,    TRUE,
  485.             TAG_DONE);
  486.         }
  487.     }
  488.  
  489.     return(Gadget);
  490. }
  491.  
  492. STATIC BYTE
  493. IsWrongMode(struct Configuration *MyConfig,WORD OriginalMode)
  494. {
  495.     if(Config -> ScreenConfig -> ColourMode != OriginalMode || MyConfig -> ScreenConfig -> UseWorkbench || Config -> ScreenConfig -> UseWorkbench || !Screen)
  496.         return(TRUE);
  497.     else
  498.     {
  499.         switch(MyConfig -> ScreenConfig -> ColourMode)
  500.         {
  501.             case COLOUR_AMIGA:
  502.  
  503.                 if(Window -> WScreen -> RastPort . BitMap -> Depth < 2)
  504.                     return(TRUE);
  505.  
  506.                 break;
  507.  
  508.             case COLOUR_EIGHT:
  509.  
  510.                 if(Window -> WScreen -> RastPort . BitMap -> Depth < 3)
  511.                     return(TRUE);
  512.  
  513.                 break;
  514.  
  515.             case COLOUR_SIXTEEN:
  516.  
  517.                 if(Window -> WScreen -> RastPort . BitMap -> Depth < 4)
  518.                     return(TRUE);
  519.  
  520.                 break;
  521.  
  522.             case COLOUR_MONO:
  523.  
  524.                 if(Window -> WScreen -> RastPort . BitMap -> Depth > 1)
  525.                     return(TRUE);
  526.  
  527.                 break;
  528.         }
  529.  
  530.         return(FALSE);
  531.     }
  532. }
  533.  
  534. BYTE
  535. ScreenPanel(struct Configuration *MyConfig,BYTE *Default)
  536. {
  537.     struct Window    *PanelWindow;
  538.     struct Gadget    *GadgetList = NULL;
  539.     struct Gadget    *GadgetArray[GAD_DEFAULT + 1];
  540.     LONG         NumModes;
  541.  
  542.     BYTE         WrongMode;
  543.     WORD         i;
  544.     struct ModeNode    *Node,*Next;
  545.  
  546.     SaveConfig(MyConfig,PrivateConfig);
  547.  
  548.     WrongMode = IsWrongMode(MyConfig,PrivateConfig -> ScreenConfig -> ColourMode);
  549.  
  550.     if(CreateAllGadgets(&NumModes,MyConfig,GadgetArray,&GadgetList,WrongMode,Default))
  551.     {
  552.         if(PanelWindow = OpenWindowTags(NULL,
  553.             WA_Left,    GetScreenLeft(Window) + (GetScreenWidth(Window) - SZ_GetWindowWidth()) / 2,
  554.             WA_Top,        GetScreenTop(Window) + (GetScreenHeight(Window) - SZ_GetWindowHeight())    / 2,
  555.             WA_Width,    SZ_GetWindowWidth(),
  556.             WA_Height,    SZ_GetWindowHeight(),
  557.  
  558.             WA_Activate,    TRUE,
  559.             WA_DragBar,    TRUE,
  560.             WA_DepthGadget,    TRUE,
  561.             WA_RMBTrap,    TRUE,
  562.             WA_DepthGadget,    TRUE,
  563.             WA_CloseGadget,    TRUE,
  564.             WA_CustomScreen,Window -> WScreen,
  565.  
  566.             WA_IDCMP,    IDCMP_GADGETDOWN | IDCMP_ACTIVEWINDOW | IDCMP_CLOSEWINDOW | IDCMP_VANILLAKEY | IDCMP_RAWKEY | STRINGIDCMP | SLIDERIDCMP | CHECKBOXIDCMP | LISTVIEWIDCMP | PALETTEIDCMP | BUTTONIDCMP | CYCLEIDCMP,
  567.  
  568.             WA_Title,    LocaleString(MSG_SCREENPANEL_SCREEN_PREFERENCES_TXT),
  569.         TAG_DONE))
  570.         {
  571.             struct IntuiMessage    *Massage;
  572.             ULONG             IClass,Code;
  573.             struct Gadget        *Gadget;
  574.             BYTE             Terminated = FALSE;
  575.  
  576.             LONG             ColourNumber = 0;
  577.             BYTE             Red,Green,Blue;
  578.  
  579.             GuideContext(CONTEXT_SCREEN);
  580.  
  581.             PushWindow(PanelWindow);
  582.  
  583.             AddGList(PanelWindow,GadgetList,(UWORD)-1,(UWORD)-1,NULL);
  584.             RefreshGList(GadgetList,PanelWindow,NULL,(UWORD)-1);
  585.             GT_RefreshWindow(PanelWindow,NULL);
  586.  
  587.             if(!WrongMode)
  588.             {
  589.                 Red    = (MyConfig -> ScreenConfig -> Colours[ColourNumber] >> 8) & 0xF;
  590.                 Green    = (MyConfig -> ScreenConfig -> Colours[ColourNumber] >> 4) & 0xF;
  591.                 Blue    = (MyConfig -> ScreenConfig -> Colours[ColourNumber]     ) & 0xF;
  592.  
  593.                 GT_SetGadgetAttrs(GadgetArray[GAD_RED],PanelWindow,NULL,
  594.                     GTSL_Level,Red,
  595.                 TAG_DONE);
  596.  
  597.                 GT_SetGadgetAttrs(GadgetArray[GAD_GREEN],PanelWindow,NULL,
  598.                     GTSL_Level,Green,
  599.                 TAG_DONE);
  600.  
  601.                 GT_SetGadgetAttrs(GadgetArray[GAD_BLUE],PanelWindow,NULL,
  602.                     GTSL_Level,Blue,
  603.                 TAG_DONE);
  604.             }
  605.  
  606.             SPrintf(SharedBuffer,"%s %ld",MyConfig -> ScreenConfig -> FontName,MyConfig -> ScreenConfig -> FontHeight);
  607.  
  608.             GT_SetGadgetAttrs(GadgetArray[GAD_CURRENTFONT],PanelWindow,NULL,
  609.                 GTTX_Text,    SharedBuffer,
  610.             TAG_DONE);
  611.  
  612.             if(!WrongMode && Screen)
  613.                 LoadRGB4(VPort,MyConfig -> ScreenConfig -> Colours,16);
  614.  
  615.             ActiveGadget = NULL;
  616.  
  617.             ClrSignal(SIG_BREAK);
  618.  
  619.             while(!Terminated)
  620.             {
  621.                 if(Wait(PORTMASK(PanelWindow -> UserPort) | SIG_BREAK) & SIG_BREAK)
  622.                 {
  623.                     SaveConfig(PrivateConfig,MyConfig);
  624.  
  625.                     if(!Config -> ScreenConfig -> UseWorkbench && Screen)
  626.                     {
  627.                         if(!memcmp(Config -> ScreenConfig -> Colours,MyConfig -> ScreenConfig -> Colours,sizeof(UWORD) * 16))
  628.                             LoadRGB4(VPort,MyConfig -> ScreenConfig -> Colours,16);
  629.                         else
  630.                             LoadRGB4(VPort,Config -> ScreenConfig -> Colours,16);
  631.                     }
  632.  
  633.                     break;
  634.                 }
  635.  
  636.                 while(!Terminated && (Massage = (struct IntuiMessage *)GT_GetIMsg(PanelWindow -> UserPort)))
  637.                 {
  638.                     IClass    = Massage -> Class;
  639.                     Code    = Massage -> Code;
  640.                     Gadget    = (struct Gadget *)Massage -> IAddress;
  641.  
  642.                     GT_ReplyIMsg(Massage);
  643.  
  644.                     KeySelect(GadgetArray,GAD_CANCEL,Code,PanelWindow,&Gadget,&IClass,&Code);
  645.  
  646.                     if(IClass == IDCMP_ACTIVEWINDOW && ActiveGadget)
  647.                         ActivateGadget(ActiveGadget,PanelWindow,NULL);
  648.  
  649.                     if(IClass == IDCMP_GADGETDOWN)
  650.                     {
  651.                         if((Gadget -> GadgetType & GTYP_GTYPEMASK) == GTYP_STRGADGET)
  652.                             ActiveGadget = Gadget;
  653.                     }
  654.  
  655.                     if(IClass == IDCMP_CLOSEWINDOW)
  656.                     {
  657.                         SaveConfig(PrivateConfig,MyConfig);
  658.  
  659.                         if(!MyConfig -> ScreenConfig -> UseWorkbench && Screen)
  660.                         {
  661.                             if(!memcmp(Config -> ScreenConfig -> Colours,MyConfig -> ScreenConfig -> Colours,sizeof(UWORD) * 16))
  662.                                 LoadRGB4(VPort,MyConfig -> ScreenConfig -> Colours,16);
  663.                             else
  664.                                 LoadRGB4(VPort,Config -> ScreenConfig -> Colours,16);
  665.                         }
  666.  
  667.                         Terminated = TRUE;
  668.                     }
  669.  
  670.                     if(IClass == IDCMP_MOUSEMOVE)
  671.                     {
  672.                         switch(Gadget -> GadgetID)
  673.                         {
  674.                             case GAD_RED:
  675.  
  676.                                 Red = Code;
  677.  
  678.                                 MyConfig -> ScreenConfig -> Colours[ColourNumber] = (Red << 8) | (Green << 4) | (Blue);
  679.  
  680.                                 LoadRGB4(VPort,MyConfig -> ScreenConfig -> Colours,DepthMask + 1);
  681.  
  682.                                 break;
  683.  
  684.                             case GAD_GREEN:
  685.  
  686.                                 Green = Code;
  687.  
  688.                                 MyConfig -> ScreenConfig -> Colours[ColourNumber] = (Red << 8) | (Green << 4) | (Blue);
  689.  
  690.                                 LoadRGB4(VPort,MyConfig -> ScreenConfig -> Colours,DepthMask + 1);
  691.  
  692.                                 break;
  693.  
  694.                             case GAD_BLUE:
  695.  
  696.                                 Blue = Code;
  697.  
  698.                                 MyConfig -> ScreenConfig -> Colours[ColourNumber] = (Red << 8) | (Green << 4) | (Blue);
  699.  
  700.                                 LoadRGB4(VPort,MyConfig -> ScreenConfig -> Colours,DepthMask + 1);
  701.  
  702.                                 break;
  703.                         }
  704.                     }
  705.  
  706.                     if(IClass == IDCMP_GADGETUP)
  707.                     {
  708.                         switch(Gadget -> GadgetID)
  709.                         {
  710.                             case GAD_USE_WORKBENCH:
  711.  
  712.                                 if(SZ_GetChecked(Gadget))
  713.                                 {
  714.                                     MyConfig -> ScreenConfig -> UseWorkbench = TRUE;
  715.  
  716.                                     GT_SetGadgetAttrs(GadgetArray[GAD_NEWFONT],PanelWindow,NULL,
  717.                                         GA_Disabled,TRUE,
  718.                                     TAG_DONE);
  719.  
  720.                                     GT_SetGadgetAttrs(GadgetArray[GAD_BLINKING],PanelWindow,NULL,
  721.                                         GA_Disabled,    TRUE,
  722.                                         GTCB_Checked,    FALSE,
  723.                                     TAG_DONE);
  724.  
  725.                                     GT_SetGadgetAttrs(GadgetArray[GAD_FASTER_LAYOUT],PanelWindow,NULL,
  726.                                         GA_Disabled,    TRUE,
  727.                                         GTCB_Checked,    FALSE,
  728.                                     TAG_DONE);
  729.  
  730.                                     GT_SetGadgetAttrs(GadgetArray[GAD_TITLEBAR],PanelWindow,NULL,
  731.                                         GA_Disabled,TRUE,
  732.                                     TAG_DONE);
  733.  
  734.                                     GT_SetGadgetAttrs(GadgetArray[GAD_MAKEPUBLIC],PanelWindow,NULL,
  735.                                         GA_Disabled,TRUE,
  736.                                     TAG_DONE);
  737.  
  738.                                     GT_SetGadgetAttrs(GadgetArray[GAD_SHANGHAI],PanelWindow,NULL,
  739.                                         GA_Disabled,TRUE,
  740.                                     TAG_DONE);
  741.  
  742.                                     GT_SetGadgetAttrs(GadgetArray[GAD_PUBSCREEN_NAME],PanelWindow,NULL,
  743.                                         GA_Disabled,FALSE,
  744.                                     TAG_DONE);
  745.                                 }
  746.                                 else
  747.                                 {
  748.                                     MyConfig -> ScreenConfig -> UseWorkbench = FALSE;
  749.  
  750.                                     GT_SetGadgetAttrs(GadgetArray[GAD_NEWFONT],PanelWindow,NULL,
  751.                                         GA_Disabled,FALSE,
  752.                                     TAG_DONE);
  753.  
  754.                                     GT_SetGadgetAttrs(GadgetArray[GAD_BLINKING],PanelWindow,NULL,
  755.                                         GA_Disabled,FALSE,
  756.                                     TAG_DONE);
  757.  
  758.                                     GT_SetGadgetAttrs(GadgetArray[GAD_FASTER_LAYOUT],PanelWindow,NULL,
  759.                                         GA_Disabled,FALSE,
  760.                                     TAG_DONE);
  761.  
  762.                                     GT_SetGadgetAttrs(GadgetArray[GAD_TITLEBAR],PanelWindow,NULL,
  763.                                         GA_Disabled,FALSE,
  764.                                     TAG_DONE);
  765.  
  766.                                     GT_SetGadgetAttrs(GadgetArray[GAD_MAKEPUBLIC],PanelWindow,NULL,
  767.                                         GA_Disabled,FALSE,
  768.                                     TAG_DONE);
  769.  
  770.                                     GT_SetGadgetAttrs(GadgetArray[GAD_SHANGHAI],PanelWindow,NULL,
  771.                                         GA_Disabled,!MyConfig -> ScreenConfig -> MakeScreenPublic,
  772.                                     TAG_DONE);
  773.  
  774.                                     GT_SetGadgetAttrs(GadgetArray[GAD_PUBSCREEN_NAME],PanelWindow,NULL,
  775.                                         GA_Disabled,TRUE,
  776.                                     TAG_DONE);
  777.                                 }
  778.  
  779.                                 break;
  780.  
  781.                             case GAD_STATUS_LINE:
  782.  
  783.                                 MyConfig -> ScreenConfig -> StatusLine = Code;
  784.                                 break;
  785.  
  786.                             case GAD_TIMEDISPLAY:
  787.  
  788.                                 MyConfig -> ScreenConfig -> TimeMode = Code;
  789.                                 break;
  790.  
  791.                             case GAD_COLOUR:
  792.  
  793.                                 MyConfig -> ScreenConfig -> ColourMode = Code;
  794.  
  795.                                 if(!ModeOkay(MyConfig -> ScreenConfig -> DisplayMode) && MyConfig -> ScreenConfig -> ColourMode > COLOUR_AMIGA)
  796.                                 {
  797.                                     MyConfig -> ScreenConfig -> ColourMode = COLOUR_MONO;
  798.  
  799.                                     GT_SetGadgetAttrs(GadgetArray[GAD_COLOUR],PanelWindow,NULL,
  800.                                         GTCY_Active,COLOUR_MONO,
  801.                                     TAG_DONE);
  802.                                 }
  803.  
  804.                                 WrongMode = IsWrongMode(MyConfig,PrivateConfig -> ScreenConfig -> ColourMode);
  805.  
  806.                                 GT_SetGadgetAttrs(GadgetArray[GAD_PALETTE],PanelWindow,NULL,
  807.                                     GA_Disabled,WrongMode,
  808.                                 TAG_DONE);
  809.  
  810.                                 GT_SetGadgetAttrs(GadgetArray[GAD_RED],PanelWindow,NULL,
  811.                                     GA_Disabled,WrongMode,
  812.                                 TAG_DONE);
  813.  
  814.                                 GT_SetGadgetAttrs(GadgetArray[GAD_GREEN],PanelWindow,NULL,
  815.                                     GA_Disabled,WrongMode,
  816.                                 TAG_DONE);
  817.  
  818.                                 GT_SetGadgetAttrs(GadgetArray[GAD_BLUE],PanelWindow,NULL,
  819.                                     GA_Disabled,WrongMode,
  820.                                 TAG_DONE);
  821.  
  822.                                 GT_SetGadgetAttrs(GadgetArray[GAD_STANDARD],PanelWindow,NULL,
  823.                                     GA_Disabled,WrongMode,
  824.                                 TAG_DONE);
  825.  
  826.                                 if(MyConfig -> ScreenConfig -> UseWorkbench)
  827.                                 {
  828.                                     GT_SetGadgetAttrs(GadgetArray[GAD_BLINKING],PanelWindow,NULL,
  829.                                         GA_Disabled,    TRUE,
  830.                                         GTCB_Checked,    FALSE,
  831.                                     TAG_DONE);
  832.                                 }
  833.                                 else
  834.                                 {
  835.                                     GT_SetGadgetAttrs(GadgetArray[GAD_BLINKING],PanelWindow,NULL,
  836.                                         GA_Disabled,    MyConfig -> ScreenConfig -> ColourMode == COLOUR_MONO || MyConfig -> ScreenConfig -> ColourMode == COLOUR_SIXTEEN,
  837.                                         GTCB_Checked,    !(MyConfig -> ScreenConfig -> ColourMode == COLOUR_MONO || MyConfig -> ScreenConfig -> ColourMode == COLOUR_SIXTEEN),
  838.                                     TAG_DONE);
  839.                                 }
  840.  
  841.                                 break;
  842.  
  843.                             case GAD_RED:
  844.  
  845.                                 Red = Code;
  846.  
  847.                                 MyConfig -> ScreenConfig -> Colours[ColourNumber] = (Red << 8) | (Green << 4) | (Blue);
  848.  
  849.                                 LoadRGB4(VPort,MyConfig -> ScreenConfig -> Colours,DepthMask + 1);
  850.  
  851.                                 break;
  852.  
  853.                             case GAD_GREEN:
  854.  
  855.                                 Green = Code;
  856.  
  857.                                 MyConfig -> ScreenConfig -> Colours[ColourNumber] = (Red << 8) | (Green << 4) | (Blue);
  858.  
  859.                                 LoadRGB4(VPort,MyConfig -> ScreenConfig -> Colours,DepthMask + 1);
  860.  
  861.                                 break;
  862.  
  863.                             case GAD_BLUE:
  864.  
  865.                                 Blue = Code;
  866.  
  867.                                 MyConfig -> ScreenConfig -> Colours[ColourNumber] = (Red << 8) | (Green << 4) | (Blue);
  868.  
  869.                                 LoadRGB4(VPort,MyConfig -> ScreenConfig -> Colours,DepthMask + 1);
  870.  
  871.                                 break;
  872.  
  873.                             case GAD_STANDARD:
  874.  
  875.                                 switch(MyConfig -> ScreenConfig -> ColourMode)
  876.                                 {
  877.                                     case COLOUR_AMIGA:
  878.  
  879.                                         CopyMem(DefaultColours,MyConfig -> ScreenConfig -> Colours,16 * sizeof(UWORD));
  880.                                         break;
  881.  
  882.                                     case COLOUR_EIGHT:
  883.  
  884.                                         CopyMem(ANSIColours,MyConfig -> ScreenConfig -> Colours,16 * sizeof(UWORD));
  885.                                         break;
  886.  
  887.                                     case COLOUR_SIXTEEN:
  888.  
  889.                                         CopyMem(EGAColours,MyConfig -> ScreenConfig -> Colours,16 * sizeof(UWORD));
  890.                                         break;
  891.  
  892.                                     case COLOUR_MONO:
  893.  
  894.                                         CopyMem(AtomicColours,MyConfig -> ScreenConfig -> Colours,16 * sizeof(UWORD));
  895.                                         break;
  896.                                 }
  897.  
  898.                                 Red    = (MyConfig -> ScreenConfig -> Colours[ColourNumber] >> 8) & 0xF;
  899.                                 Green    = (MyConfig -> ScreenConfig -> Colours[ColourNumber] >> 4) & 0xF;
  900.                                 Blue    = (MyConfig -> ScreenConfig -> Colours[ColourNumber]     ) & 0xF;
  901.  
  902.                                 GT_SetGadgetAttrs(GadgetArray[GAD_RED],PanelWindow,NULL,
  903.                                     GTSL_Level,Red,
  904.                                 TAG_DONE);
  905.  
  906.                                 GT_SetGadgetAttrs(GadgetArray[GAD_GREEN],PanelWindow,NULL,
  907.                                     GTSL_Level,Green,
  908.                                 TAG_DONE);
  909.  
  910.                                 GT_SetGadgetAttrs(GadgetArray[GAD_BLUE],PanelWindow,NULL,
  911.                                     GTSL_Level,Blue,
  912.                                 TAG_DONE);
  913.  
  914.                                 LoadRGB4(VPort,MyConfig -> ScreenConfig -> Colours,DepthMask + 1);
  915.  
  916.                                 break;
  917.  
  918.                             case GAD_MAKEPUBLIC:
  919.  
  920.                                 if(!SZ_GetChecked(Gadget))
  921.                                 {
  922.                                     GT_SetGadgetAttrs(GadgetArray[GAD_SHANGHAI],PanelWindow,NULL,
  923.                                         GTCB_Checked,    FALSE,
  924.                                         GA_Disabled,    TRUE,
  925.                                     TAG_DONE);
  926.                                 }
  927.                                 else
  928.                                 {
  929.                                     GT_SetGadgetAttrs(GadgetArray[GAD_SHANGHAI],PanelWindow,NULL,
  930.                                         GA_Disabled,    FALSE,
  931.                                     TAG_DONE);
  932.                                 }
  933.  
  934.                                 break;
  935.  
  936.                             case GAD_MODES:    
  937.  
  938.                                 if(Node = (struct ModeNode *)GetListNode(Code,&ModeList))
  939.                                 {
  940.                                     MyConfig -> ScreenConfig -> DisplayMode = Node -> DisplayID;
  941.  
  942.                                     if(!ModeOkay(MyConfig -> ScreenConfig -> DisplayMode) && MyConfig -> ScreenConfig -> ColourMode > COLOUR_AMIGA)
  943.                                     {
  944.                                         MyConfig -> ScreenConfig -> ColourMode = COLOUR_AMIGA;
  945.  
  946.                                         GT_SetGadgetAttrs(GadgetArray[GAD_COLOUR],PanelWindow,NULL,
  947.                                             GTCY_Active,COLOUR_AMIGA,
  948.                                         TAG_DONE);
  949.                                     }
  950.                                 }
  951.  
  952.                                 break;
  953.  
  954.                             case GAD_NEWMODE:
  955.  
  956.                                 BlockWindow(PanelWindow);
  957.  
  958.                                 if(SelectDisplayMode(PanelWindow,&MyConfig -> ScreenConfig -> DisplayMode))
  959.                                 {
  960.                                     GT_SetGadgetAttrs(GadgetArray[GAD_MODE],PanelWindow,NULL,
  961.                                         GTTX_Text,    GetModeName(MyConfig -> ScreenConfig -> DisplayMode),
  962.                                     TAG_DONE);
  963.  
  964.                                     if(!ModeOkay(MyConfig -> ScreenConfig -> DisplayMode) && MyConfig -> ScreenConfig -> ColourMode > COLOUR_AMIGA)
  965.                                     {
  966.                                         MyConfig -> ScreenConfig -> ColourMode = COLOUR_AMIGA;
  967.  
  968.                                         GT_SetGadgetAttrs(GadgetArray[GAD_COLOUR],PanelWindow,NULL,
  969.                                             GTCY_Active,COLOUR_AMIGA,
  970.                                         TAG_DONE);
  971.                                     }
  972.                                 }
  973.  
  974.                                 ReleaseWindow(PanelWindow);
  975.  
  976.                                 break;
  977.  
  978.                             case GAD_PALETTE:
  979.  
  980.                                 ColourNumber = Code;
  981.  
  982. SetPalette:                            Red    = (MyConfig -> ScreenConfig -> Colours[ColourNumber] >> 8) & 0xF;
  983.                                 Green    = (MyConfig -> ScreenConfig -> Colours[ColourNumber] >> 4) & 0xF;
  984.                                 Blue    = (MyConfig -> ScreenConfig -> Colours[ColourNumber]     ) & 0xF;
  985.  
  986.                                 GT_SetGadgetAttrs(GadgetArray[GAD_RED],PanelWindow,NULL,
  987.                                     GTSL_Level,Red,
  988.                                 TAG_DONE);
  989.  
  990.                                 GT_SetGadgetAttrs(GadgetArray[GAD_GREEN],PanelWindow,NULL,
  991.                                     GTSL_Level,Green,
  992.                                 TAG_DONE);
  993.  
  994.                                 GT_SetGadgetAttrs(GadgetArray[GAD_BLUE],PanelWindow,NULL,
  995.                                     GTSL_Level,Blue,
  996.                                 TAG_DONE);
  997.  
  998.                                 break;
  999.  
  1000.                             case GAD_NEWFONT:
  1001.  
  1002.                                 BlockWindow(PanelWindow);
  1003.  
  1004.                                 if(PickFont(PanelWindow,MyConfig -> ScreenConfig -> FontName,&MyConfig -> ScreenConfig -> FontHeight,!Kick30))
  1005.                                 {
  1006.                                     SPrintf(SharedBuffer,"%s %ld",MyConfig -> ScreenConfig -> FontName,MyConfig -> ScreenConfig -> FontHeight);
  1007.  
  1008.                                     GT_SetGadgetAttrs(GadgetArray[GAD_CURRENTFONT],PanelWindow,NULL,
  1009.                                         GTTX_Text,    SharedBuffer,
  1010.                                     TAG_DONE);
  1011.                                 }
  1012.  
  1013.                                 ReleaseWindow(PanelWindow);
  1014.  
  1015.                                 break;
  1016.  
  1017.                             case GAD_USE:
  1018.  
  1019.                                 Terminated = TRUE;
  1020.  
  1021.                                 if(!WrongMode)
  1022.                                 {
  1023.                                     CopyMem(MyConfig -> ScreenConfig -> Colours,BlinkColours,sizeof(UWORD) * 16);
  1024.  
  1025.                                     switch(MyConfig -> ScreenConfig -> ColourMode)
  1026.                                     {
  1027.                                         case COLOUR_EIGHT:
  1028.  
  1029.                                             CopyMem(MyConfig -> ScreenConfig -> Colours,ANSIColours,16 * sizeof(UWORD));
  1030.  
  1031.                                             for(i = 0 ; i < 8 ; i++)
  1032.                                                 BlinkColours[i + 8] = BlinkColours[0];
  1033.  
  1034.                                             break;
  1035.  
  1036.                                         case COLOUR_SIXTEEN:
  1037.  
  1038.                                             CopyMem(MyConfig -> ScreenConfig -> Colours,EGAColours,16 * sizeof(UWORD));
  1039.                                             break;
  1040.  
  1041.                                         case COLOUR_AMIGA:
  1042.  
  1043.                                             CopyMem(MyConfig -> ScreenConfig -> Colours,DefaultColours,16 * sizeof(UWORD));
  1044.  
  1045.                                             BlinkColours[3] = BlinkColours[0];
  1046.  
  1047.                                             break;
  1048.  
  1049.                                         case COLOUR_MONO:
  1050.  
  1051.                                             CopyMem(MyConfig -> ScreenConfig -> Colours,AtomicColours,16 * sizeof(UWORD));
  1052.                                             break;
  1053.                                     }
  1054.                                 }
  1055.                                 else
  1056.                                 {
  1057.                                     if(MyConfig -> ScreenConfig -> ColourMode != PrivateConfig -> ScreenConfig -> ColourMode)
  1058.                                     {
  1059.                                         switch(MyConfig -> ScreenConfig -> ColourMode)
  1060.                                         {
  1061.                                             case COLOUR_EIGHT:
  1062.  
  1063.                                                 CopyMem(ANSIColours,MyConfig -> ScreenConfig -> Colours,16 * sizeof(UWORD));
  1064.                                                 break;
  1065.  
  1066.                                             case COLOUR_SIXTEEN:
  1067.  
  1068.                                                 CopyMem(EGAColours,MyConfig -> ScreenConfig -> Colours,16 * sizeof(UWORD));
  1069.                                                 break;
  1070.  
  1071.                                             case COLOUR_AMIGA:
  1072.  
  1073.                                                 CopyMem(DefaultColours,MyConfig -> ScreenConfig -> Colours,16 * sizeof(UWORD));
  1074.                                                 break;
  1075.  
  1076.                                             case COLOUR_MONO:
  1077.  
  1078.                                                 CopyMem(AtomicColours,MyConfig -> ScreenConfig -> Colours,16 * sizeof(UWORD));
  1079.                                                 break;
  1080.                                         }
  1081.                                     }
  1082.                                 }
  1083.  
  1084.                                 MyConfig -> ScreenConfig -> MakeScreenPublic    = SZ_GetChecked(GadgetArray[GAD_MAKEPUBLIC]);
  1085.                                 MyConfig -> ScreenConfig -> ShanghaiWindows    = SZ_GetChecked(GadgetArray[GAD_SHANGHAI]);
  1086.                                 MyConfig -> ScreenConfig -> Blinking        = SZ_GetChecked(GadgetArray[GAD_BLINKING]);
  1087.                                 MyConfig -> ScreenConfig -> FasterLayout    = SZ_GetChecked(GadgetArray[GAD_FASTER_LAYOUT]);
  1088.                                 MyConfig -> ScreenConfig -> TitleBar        = SZ_GetChecked(GadgetArray[GAD_TITLEBAR]);
  1089.                                 MyConfig -> ScreenConfig -> UseWorkbench    = SZ_GetChecked(GadgetArray[GAD_USE_WORKBENCH]);
  1090.  
  1091.                                 strcpy(MyConfig -> ScreenConfig -> PubScreenName,SZ_GetString(GadgetArray[GAD_PUBSCREEN_NAME]));
  1092.  
  1093.                                 break;
  1094.  
  1095.                             case GAD_CANCEL:
  1096.  
  1097.                                 Terminated = TRUE;
  1098.  
  1099.                                 SaveConfig(PrivateConfig,MyConfig);
  1100.  
  1101.                                 if(!Config -> ScreenConfig -> UseWorkbench && Screen)
  1102.                                 {
  1103.                                     if(!memcmp(Config -> ScreenConfig -> Colours,MyConfig -> ScreenConfig -> Colours,sizeof(UWORD) * 16))
  1104.                                         LoadRGB4(VPort,MyConfig -> ScreenConfig -> Colours,16);
  1105.                                     else
  1106.                                         LoadRGB4(VPort,Config -> ScreenConfig -> Colours,16);
  1107.                                 }
  1108.  
  1109.                                 break;
  1110.  
  1111.                             case GAD_DEFAULT:
  1112.  
  1113.                                 *Default    = TRUE;
  1114.  
  1115.                                 Terminated    = TRUE;
  1116.  
  1117.                                 SaveConfig(PrivateConfig,MyConfig);
  1118.  
  1119.                                 if(!Config -> ScreenConfig -> UseWorkbench && Screen)
  1120.                                 {
  1121.                                     if(!memcmp(Config -> ScreenConfig -> Colours,MyConfig -> ScreenConfig -> Colours,sizeof(UWORD) * 16))
  1122.                                         LoadRGB4(VPort,MyConfig -> ScreenConfig -> Colours,16);
  1123.                                     else
  1124.                                         LoadRGB4(VPort,Config -> ScreenConfig -> Colours,16);
  1125.                                 }
  1126.  
  1127.                                 break;
  1128.                         }
  1129.                     }
  1130.                 }
  1131.             }
  1132.  
  1133.             RemoveGList(PanelWindow,GadgetList,(UWORD)-1);
  1134.  
  1135.             PopWindow();
  1136.  
  1137.             CloseWindow(PanelWindow);
  1138.         }
  1139.     }
  1140.  
  1141.     FreeGadgets(GadgetList);
  1142.  
  1143.     Node = (struct ModeNode *)ModeList . lh_Head;
  1144.  
  1145.     while(Next = (struct ModeNode *)Node -> VanillaNode . ln_Succ)
  1146.     {
  1147.         FreeVec(Node);
  1148.  
  1149.         Node = Next;
  1150.     }
  1151.  
  1152.     if(PrivateConfig -> ScreenConfig -> DisplayMode != MyConfig -> ScreenConfig -> DisplayMode || Stricmp(PrivateConfig -> ScreenConfig -> FontName,MyConfig -> ScreenConfig -> FontName) || PrivateConfig -> ScreenConfig -> FontHeight != MyConfig -> ScreenConfig -> FontHeight || PrivateConfig -> ScreenConfig -> ColourMode != MyConfig -> ScreenConfig -> ColourMode)
  1153.         return(TRUE);
  1154.  
  1155.     if(PrivateConfig -> ScreenConfig -> MakeScreenPublic != MyConfig -> ScreenConfig -> MakeScreenPublic || PrivateConfig -> ScreenConfig -> ShanghaiWindows != MyConfig -> ScreenConfig -> ShanghaiWindows)
  1156.         return(TRUE);
  1157.  
  1158.     if(PrivateConfig -> ScreenConfig -> Blinking != MyConfig -> ScreenConfig -> Blinking && MyConfig -> ScreenConfig -> ColourMode == COLOUR_EIGHT)
  1159.         return(TRUE);
  1160.  
  1161.     if(PrivateConfig -> ScreenConfig -> FasterLayout != MyConfig -> ScreenConfig -> FasterLayout && MyConfig -> ScreenConfig -> ColourMode != COLOUR_MONO)
  1162.         return(TRUE);
  1163.  
  1164.     if(PrivateConfig -> ScreenConfig -> TitleBar != MyConfig -> ScreenConfig -> TitleBar || PrivateConfig -> ScreenConfig -> StatusLine != MyConfig -> ScreenConfig -> StatusLine || PrivateConfig -> ScreenConfig -> UseWorkbench != MyConfig -> ScreenConfig -> UseWorkbench)
  1165.         return(TRUE);
  1166.  
  1167.     if(strcmp(PrivateConfig -> ScreenConfig -> PubScreenName,MyConfig -> ScreenConfig -> PubScreenName) && MyConfig -> ScreenConfig -> UseWorkbench)
  1168.         return(TRUE);
  1169.  
  1170.     return(FALSE);
  1171. }
  1172.