home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 18 / amigaformatcd18.iso / mui / mui_developer / extclasses / mcc_tron / developer / source / tronp.c < prev   
C/C++ Source or Header  |  1997-03-10  |  9KB  |  394 lines

  1. /*
  2.  
  3.         Tron.mcc (c) Copyright 1995-96 by kmel, Klaus Melchior
  4.  
  5.         Registered MUI class, Serial Number: 0002
  6.  
  7.         tronp.c
  8.  
  9. */
  10.  
  11.  
  12.  
  13.  
  14. /* SMAKE */
  15.  
  16. /*** includes ***/
  17.  
  18.  
  19.  
  20. #ifdef __KMEL
  21.     #include <kmel/kmel.h>
  22.     #include <kmel/kmel_debug.h>
  23.  
  24.     #include <mui/tron_mcc.h>
  25. #else
  26.     #include <clib/alib_protos.h>
  27.     #include <clib/graphics_protos.h>
  28.     #include <clib/utility_protos.h>
  29.     #include <clib/muimaster_protos.h>
  30.     #include <pragmas/muimaster_pragmas.h>
  31.     #include <libraries/mui.h>
  32.  
  33.     #if MUIMASTER_VLATEST <= 14
  34.         #include "mui/mui33_mcc.h"
  35.     #endif
  36.  
  37.     #include "mui/tron_mcc_private.h"
  38.  
  39.     #define DB / ## /
  40. #endif
  41.  
  42. #define D / ## /
  43.  
  44.  
  45. #define CLASS       MUIC_TronP
  46. #define SUPERCLASSP MUIC_Mccprefs
  47.  
  48. struct DataP
  49. {
  50.     Object *gr_prefs;
  51.     Object *tr_sample;
  52.     Object *pp_player1, *pp_background, *pp_player2, *sl_speed;
  53. };
  54.  
  55. #include "rev/Tron.mcp.rev"
  56.  
  57. #define UserLibID "$VER: " __VERS " (" __DATE ") " __VERSCR
  58. #define VERSION __VERSION
  59. #define REVISION __REVISION
  60. #define MASTERVERSION 14
  61.  
  62. #define USE_PREFS_IMAGE_COLORS
  63. #define USE_PREFS_IMAGE_BODY
  64. #include "prefs_image.c"
  65.  
  66. #define PREFSIMAGEOBJECT prefs_image_object()
  67. Object *prefs_image_object(void);
  68.  
  69. #include "mui/mccheader.c"
  70.  
  71.  
  72. Object *prefs_image_object(void)
  73. {
  74.     Object *ret;
  75.  
  76.     ret = BodychunkObject,
  77.         MUIA_FixWidth             , PREFS_IMAGE_WIDTH,
  78.         MUIA_FixHeight            , PREFS_IMAGE_HEIGHT,
  79.         MUIA_Bitmap_Width         , PREFS_IMAGE_WIDTH,
  80.         MUIA_Bitmap_Height        , PREFS_IMAGE_HEIGHT,
  81.         MUIA_Bodychunk_Depth      , PREFS_IMAGE_DEPTH,
  82.         MUIA_Bodychunk_Body       , (UBYTE *)prefs_image_body,
  83.         MUIA_Bodychunk_Compression, PREFS_IMAGE_COMPRESSION,
  84.         MUIA_Bodychunk_Masking    , PREFS_IMAGE_MASKING,
  85.         MUIA_Bitmap_SourceColors  , (ULONG *)prefs_image_colors,
  86.         MUIA_Bitmap_Transparent   , 0,
  87.         End;
  88.  
  89.     return(ret);
  90. }
  91.  
  92.  
  93.  
  94.  
  95.  
  96.  
  97. ULONG ASM _NewP(REG(a0) struct IClass *cl, REG(a2) Object *obj, REG(a1) Msg msg)
  98. {
  99.     struct DataP *data;
  100.  
  101.     if(!(obj = (Object *)DoSuperMethodA(cl, obj, msg)))
  102.         return(0);
  103.  
  104.     DB("_NewP\n");
  105.  
  106.     /*** init data ***/
  107.     data = INST_DATA(cl,obj);
  108.  
  109.     /*** make group ***/
  110.     data->gr_prefs = VGroup,
  111.  
  112.         Child, MUI_MakeObject(MUIO_BarTitle, "Sample"),
  113.         Child, data->tr_sample = TronObject,
  114.             VirtualFrame,
  115.             MUIA_ShortHelp, "The Tron object sample,\nreacts on preferences below.",
  116.             End,
  117.  
  118.         Child, VSpace(8),
  119.  
  120.         Child, MUI_MakeObject(MUIO_BarTitle, "Preferences"),
  121.         Child, VGroup,
  122.  
  123.             Child, HGroup,
  124.                 Child, FreeKeyLabel("Player 1", '1'),
  125.                 Child, data->pp_player1 = MUI_NewObject(MUIC_Poppen,
  126.                     MUIA_Window_Title, "Adjust Pen for Player 1",
  127.                     MUIA_ControlChar, '1',
  128.                     MUIA_Draggable, TRUE,
  129.                     MUIA_ShortHelp, "Color of Player 1.",
  130.                     End,
  131.  
  132.                 Child, HSpace(8),
  133.  
  134.                 Child, FreeKeyLabel("Background", 'b'),
  135.                 Child, data->pp_background = MUI_NewObject(MUIC_Poppen,
  136.                     MUIA_Window_Title, "Adjust Pen for Background",
  137.                     MUIA_ControlChar, 'b',
  138.                     MUIA_Draggable, TRUE,
  139.                     MUIA_ShortHelp, "Color of Background.",
  140.                     End,
  141.  
  142.                 Child, HSpace(8),
  143.  
  144.                 Child, FreeKeyLabel("Player 2", '2'),
  145.                 Child, data->pp_player2 = MUI_NewObject(MUIC_Poppen,
  146.                     MUIA_Window_Title, "Adjust Pen for Player 2",
  147.                     MUIA_ControlChar, '2',
  148.                     MUIA_Draggable, TRUE,
  149.                     MUIA_ShortHelp, "Color of Player 2.",
  150.                     End,
  151.                 End,
  152.  
  153.             Child, HGroup,
  154.                 Child, FreeKeyLabel("Speed", 's'),
  155.                 Child, VGroup,
  156.                     Child, VSpace(0),
  157.                     Child, data->sl_speed = KeySlider(4, 20, 0, 's'),
  158.                     Child, VSpace(0),
  159.                     MUIA_ShortHelp, "Speed of the game.",
  160.                     End,
  161.                 End,
  162.  
  163.             Child, TextObject,
  164.                 TextFrame,
  165.                 MUIA_Background, MUII_TextBack,
  166.                 MUIA_FixHeightTxt, "\n",
  167.                 MUIA_Text_Contents, MUIX_C __VSTRING "\n" __VERSCR,
  168.                 End,
  169.  
  170.             End,
  171.  
  172.         End;
  173.  
  174.     if(!data->gr_prefs)
  175.     {
  176.         CoerceMethod(cl, obj, OM_DISPOSE);
  177.         return(0);
  178.     }
  179.  
  180.     DoMethod(obj, OM_ADDMEMBER, data->gr_prefs);
  181.  
  182.  
  183.     /*** Colors ***/
  184.     DoMethod(data->pp_player1, MUIM_Notify, MUIA_Pendisplay_Spec, MUIV_EveryTime,
  185.         data->tr_sample, 3,
  186.         MUIM_Set, MUIA_Tron_PenSpec1, MUIV_TriggerValue);
  187.     DoMethod(data->pp_player2, MUIM_Notify, MUIA_Pendisplay_Spec, MUIV_EveryTime,
  188.         data->tr_sample, 3,
  189.         MUIM_Set, MUIA_Tron_PenSpec2, MUIV_TriggerValue);
  190.     DoMethod(data->pp_background, MUIM_Notify, MUIA_Pendisplay_Spec, MUIV_EveryTime,
  191.         data->tr_sample, 3,
  192.         MUIM_Set, MUIA_Tron_PenSpecB, MUIV_TriggerValue);
  193.  
  194.     /*** Speed ***/
  195.     DoMethod(data->sl_speed, MUIM_Notify, MUIA_Slider_Level, MUIV_EveryTime,
  196.         data->tr_sample, 3,
  197.         MUIM_Set, MUIA_Tron_Speed, MUIV_TriggerValue);
  198.  
  199.     return((ULONG)obj);
  200. }
  201.  
  202.  
  203. ULONG ASM _DisposeP(REG(a0) struct IClass *cl, REG(a2) Object *obj, REG(a1) Msg msg)
  204. {
  205.     return(DoSuperMethodA(cl,obj,msg));
  206. }
  207.  
  208.  
  209. ULONG ASM _SetupP(REG(a0) struct IClass *cl, REG(a2) Object *obj, REG(a1) struct MUIP_Setup *msg)
  210. {
  211.     struct DataP *data = INST_DATA(cl, obj);
  212.     ULONG d;
  213.  
  214.     if(!(DoSuperMethodA(cl,obj,(Msg)msg)))
  215.         return(FALSE);
  216.  
  217.     DB("SetupP\n");
  218.  
  219.     /*** Colors ***/
  220.     get(data->pp_player1, MUIA_Pendisplay_Spec, &d);
  221.     set(data->pp_player1, MUIA_Pendisplay_Spec, d);
  222.     get(data->pp_player2, MUIA_Pendisplay_Spec, &d);
  223.     set(data->pp_player2, MUIA_Pendisplay_Spec, d);
  224.     get(data->pp_background, MUIA_Pendisplay_Spec, &d);
  225.     set(data->pp_background, MUIA_Pendisplay_Spec, d);
  226.  
  227.     /*** Speed ***/
  228.     get(data->sl_speed, MUIA_Slider_Level, &d);
  229.     set(data->sl_speed, MUIA_Slider_Level, d);
  230.  
  231.     return(TRUE);
  232. }
  233.  
  234.  
  235. ULONG ASM _CleanupP(REG(a0) struct IClass *cl, REG(a2) Object *obj, REG(a1) struct MUIP_Setup *msg)
  236. {
  237. //    struct DataP *data = INST_DATA(cl, obj);
  238.  
  239.     if(!(DoSuperMethodA(cl,obj,(Msg)msg)))
  240.         return(FALSE);
  241.  
  242.     DB("CleanupP\n");
  243.  
  244.     return(TRUE);
  245. }
  246.  
  247.  
  248. ULONG ASM _ConfigToGadgets(REG(a0) struct IClass *cl, REG(a2) Object *obj, REG(a1) struct MUIP_Settingsgroup_ConfigToGadgets *msg)
  249. {
  250.     struct DataP *data = INST_DATA(cl, obj);
  251.     Object *pd_obj;
  252.     ULONG d;
  253.  
  254.     DB("ConfigToGadgets\n");
  255.  
  256.     /*** create objects ***/
  257.     pd_obj = MUI_NewObject(MUIC_Pendisplay, TAG_DONE);
  258.  
  259.     DB("pd_obj:%08lx\n", pd_obj);
  260.  
  261.     /*** set colors ***/
  262.     if(d = DoMethod(msg->configdata, MUIM_Dataspace_Find, MUICFG_Tron_Pen1))
  263.     {
  264.         DB("Color1: '%s'\n", (char *)d);
  265.         set(data->pp_player1, MUIA_Pendisplay_Spec, d);
  266.     }
  267.     else
  268.     {
  269.         if(pd_obj)
  270.         {
  271.             struct MUI_PenSpec *pen;
  272.  
  273.             DoMethod(pd_obj, MUIM_Pendisplay_SetMUIPen, DEFAULT_PEN1);
  274.             get(pd_obj, MUIA_Pendisplay_Spec, &pen);
  275.             set(data->pp_player1, MUIA_Pendisplay_Spec, pen);
  276.  
  277.             DB("pen:'%s'\n", pen);
  278.         }
  279.     }
  280.  
  281.     if(d = DoMethod(msg->configdata, MUIM_Dataspace_Find, MUICFG_Tron_Pen2))
  282.     {
  283.         DB("Color2: '%s'\n", (char *)d);
  284.         set(data->pp_player2, MUIA_Pendisplay_Spec, d);
  285.     }
  286.     else
  287.     {
  288.         if(pd_obj)
  289.         {
  290.             struct MUI_PenSpec *pen;
  291.  
  292.             DoMethod(pd_obj, MUIM_Pendisplay_SetMUIPen, DEFAULT_PEN2);
  293.             get(pd_obj, MUIA_Pendisplay_Spec, &pen);
  294.             set(data->pp_player2, MUIA_Pendisplay_Spec, pen);
  295.         }
  296.     }
  297.  
  298.     if(d = DoMethod(msg->configdata, MUIM_Dataspace_Find, MUICFG_Tron_PenB))
  299.     {
  300.         DB("ColorB: '%s'\n", (char *)d);
  301.         set(data->pp_background, MUIA_Pendisplay_Spec, d);
  302.     }
  303.     else
  304.     {
  305.         if(pd_obj)
  306.         {
  307.             struct MUI_PenSpec *pen;
  308.  
  309.             DoMethod(pd_obj, MUIM_Pendisplay_SetMUIPen, DEFAULT_PENB);
  310.             get(pd_obj, MUIA_Pendisplay_Spec, &pen);
  311.             set(data->pp_background, MUIA_Pendisplay_Spec, pen);
  312.         }
  313.     }
  314.  
  315.     /*** set speed ***/
  316.     if(d = DoMethod(msg->configdata, MUIM_Dataspace_Find, MUICFG_Tron_Speed))
  317.         set(data->sl_speed, MUIA_Slider_Level, *(ULONG *)d);
  318.     else
  319.         set(data->sl_speed, MUIA_Slider_Level, DEFAULT_SPEED);
  320.  
  321.     /*** dispose created objects ***/
  322.     if(pd_obj)
  323.         MUI_DisposeObject(pd_obj);
  324.  
  325.     return(0);
  326. }
  327.  
  328.  
  329. ULONG ASM _GadgetsToConfig(REG(a0) struct IClass *cl, REG(a2) Object *obj, REG(a1) struct MUIP_Settingsgroup_GadgetsToConfig *msg)
  330. {
  331.     struct DataP *data = INST_DATA(cl, obj);
  332.     ULONG d;
  333.  
  334.     DB("GadgetsToConfig\n");
  335.  
  336.     /*** Colors ***/
  337.     get(data->pp_player1, MUIA_Pendisplay_Spec, &d);
  338.     if(d)
  339.         DoMethod(msg->configdata, MUIM_Dataspace_Add, d, sizeof(struct MUI_PenSpec), MUICFG_Tron_Pen1);
  340.     DB("Color1: '%s'\n", (char *)d);
  341.     get(data->pp_player2, MUIA_Pendisplay_Spec, &d);
  342.     if(d)
  343.         DoMethod(msg->configdata, MUIM_Dataspace_Add, d, sizeof(struct MUI_PenSpec), MUICFG_Tron_Pen2);
  344.     DB("Color2: '%s'\n", (char *)d);
  345.     get(data->pp_background, MUIA_Pendisplay_Spec, &d);
  346.     if(d)
  347.         DoMethod(msg->configdata, MUIM_Dataspace_Add, d, sizeof(struct MUI_PenSpec), MUICFG_Tron_PenB);
  348.     DB("ColorB: '%s'\n", (char *)d);
  349.  
  350.     /*** Speed ***/
  351.     get(data->sl_speed, MUIA_Slider_Level, &d);
  352.     DoMethod(msg->configdata, MUIM_Dataspace_Add, &d, 4, MUICFG_Tron_Speed);
  353.     DB("Speed: %ld\n", d);
  354.  
  355.     return(0);
  356. }
  357.  
  358.  
  359. ULONG ASM _HandleInputP(REG(a0) struct IClass *cl, REG(a2) Object *obj, REG(a1) struct MUIP_HandleInput *msg)
  360. {
  361. //    struct DataP *data = INST_DATA(cl, obj);
  362.  
  363.     if(msg->imsg)
  364.     {
  365.         switch(msg->imsg->Class)
  366.         {
  367.             case IDCMP_INTUITICKS:
  368.             {
  369.             }
  370.             break;
  371.         }
  372.     }
  373.  
  374.     return(DoSuperMethodA(cl,obj,(Msg)msg));
  375. }
  376.  
  377. ULONG ASM SAVEDS _DispatcherP(REG(a0) struct IClass *cl, REG(a2) Object *obj, REG(a1) Msg msg)
  378. {
  379.     switch(msg->MethodID)
  380.     {
  381.         case OM_NEW                       : return(_NewP           (cl,obj,(APTR)msg));
  382.         case OM_DISPOSE                   : return(_DisposeP       (cl,obj,(APTR)msg));
  383.         case MUIM_Setup                   : return(_SetupP         (cl,obj,(APTR)msg));
  384.         case MUIM_Cleanup                 : return(_CleanupP       (cl,obj,(APTR)msg));
  385.  
  386.         case MUIM_Settingsgroup_ConfigToGadgets: return(_ConfigToGadgets(cl,obj,(APTR)msg));
  387.         case MUIM_Settingsgroup_GadgetsToConfig: return(_GadgetsToConfig(cl,obj,(APTR)msg));
  388.  
  389.         case MUIM_HandleInput             : return(_HandleInputP   (cl,obj,(APTR)msg));
  390.     }
  391.  
  392.     return(DoSuperMethodA(cl,obj,msg));
  393. }
  394.