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