home *** CD-ROM | disk | FTP | other *** search
/ Fresh Fish 8 / FreshFishVol8-CD2.bin / bbs / misc / aspringies-1.0.lha / ASpringies / src / SetUpMui.c < prev   
Encoding:
C/C++ Source or Header  |  1994-08-24  |  10.5 KB  |  302 lines

  1. /* SetUpMui.c -- set up the (magic) user interface
  2.  * Copyright (C) 1994  Torsten Klein
  3.  *
  4.  * This file is part of ASpringies, a mass and spring simulation system for the Amiga
  5.  *
  6.  * ASpringies is free software; you can redistribute it and/or modify
  7.  * it under the terms of the GNU General Public License as published by
  8.  * the Free Software Foundation; either version 1, or (at your option)
  9.  * any later version.
  10.  *
  11.  * ASpringies is distributed in the hope that it will be useful,
  12.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  14.  * GNU General Public License for more details.
  15.  *
  16.  * You should have received a copy of the GNU General Public License
  17.  * along with ASpringies; see the file COPYING.  If not, write to
  18.  * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
  19.  *
  20.  * $Id: SetUpMui.c,v 1.11 1994/08/19 11:55:43 Torsten_Klein Exp $ 
  21.  */
  22.  
  23. #include "main.h"
  24.  
  25. #define eN "\033n"
  26. #define eU "\033u"
  27.  
  28. #define SetID(obj, id, attrib, value) \
  29.   (DoMethod((obj), MUIM_Notify, (attrib), (value), \
  30.         AP_ASpringies, 2, MUIM_Application_ReturnID, (id)), obj)
  31.  
  32. #define SetRAID(obj) SetID(obj, ID_ ## obj, MUIA_Radio_Active,       MUIV_EveryTime)
  33. #define SetBTID(obj) SetID(obj, ID_ ## obj, MUIA_Pressed,            FALSE)
  34. #define SetCKID(obj) SetID(obj, ID_ ## obj, MUIA_Selected,           MUIV_EveryTime)
  35. #define SetSTID(obj) SetID(obj, ID_ ## obj, MUIA_String_Acknowledge, MUIV_EveryTime)
  36. #define SetSLID(obj) SetID(obj, ID_ ## obj, MUIA_Slider_Level,       MUIV_EveryTime)
  37.  
  38. static struct NewMenu Menu[] = 
  39. {
  40.   {NM_TITLE, "Project",      0, 0, 0, (APTR)0},
  41.   {NM_ITEM,  "About...",   "?", 0, 0, (APTR)ID_ME_About},
  42.   {NM_ITEM,  "Help...",    "H", 0, 0, (APTR)ID_ME_Help},
  43.   {NM_ITEM,  NM_BARLABEL,    0, 0 ,0, (APTR)0},
  44.   {NM_ITEM,  "Load...",    "L", 0, 0, (APTR)ID_ME_Load},
  45.   {NM_ITEM,  "Insert...",  "I", 0, 0, (APTR)ID_ME_Insert},
  46.   {NM_ITEM,  NM_BARLABEL,    0, 0 ,0, (APTR)0},
  47.   {NM_ITEM,  "Save",       "S", 0, 0, (APTR)ID_ME_Save},
  48.   {NM_ITEM,  "Save as...", "A", 0, 0, (APTR)ID_ME_SaveAs},
  49.   {NM_ITEM,  NM_BARLABEL,    0, 0 ,0, (APTR)0},
  50.   {NM_ITEM,  "Screen mode...","M",0,0,(APTR)ID_ME_ScreenMode},
  51.   {NM_ITEM,  NM_BARLABEL,    0, 0 ,0, (APTR)0},
  52.   {NM_ITEM,  "Quit...",    "Q", 0, 0, (APTR)MUIV_Application_ReturnID_Quit},
  53.  
  54.   {NM_TITLE, "Edit",         0, 0, 0, (APTR)0},
  55.   {NM_ITEM,  "Duplicate",  "D", 0, 0, (APTR)ID_ME_DupSel},
  56.   {NM_ITEM,  "Delete",     "X", 0, 0, (APTR)ID_ME_DeleteSel},
  57.  
  58.   {NM_TITLE, "State",        0, 0, 0, (APTR)0},
  59.   {NM_ITEM,  "Restore...", "R", 0, 0, (APTR)ID_ME_Restore},
  60.   {NM_ITEM,  "Snapshot",   "Z", 0, 0, (APTR)ID_ME_Snapshot},
  61.   {NM_ITEM,  "Reset...",   "N", 0, 0, (APTR)ID_ME_Reset},
  62.   {NM_END,   NULL,           0, 0, 0, (APTR)0},
  63. };
  64.  
  65. static const char *mode_labels[] = { " " eU "E" eN "dit", " " eU "M" eN "ass",
  66.                        " " eU "S" eN "pring", NULL};
  67.  
  68. APTR FloatString(APTR *obj, STRPTR label, int maxlen)
  69. {
  70.   return(
  71.      HGroup,
  72.       Child, Label2(label),
  73.       Child, HVSpace,
  74.       Child, *obj = StringObject, StringFrame,
  75.        MUIA_FixWidthTxt     , "0000000000",  
  76.        MUIA_Font            , MUIV_Font_Fixed, 
  77.        MUIA_String_MaxLen   , maxlen,
  78.        MUIA_String_Format   , MUIV_String_Format_Right,
  79.        MUIA_String_Accept   , "0123456789-.",
  80.        End,
  81.       End
  82.      );
  83. }
  84.  
  85. APTR LabKeyCheck(APTR *obj, STRPTR label, char control)
  86. {
  87.   return(
  88.      HGroup,
  89.       Child, KeyLabel1(label, control),
  90.       Child, HVSpace,
  91.       Child, *obj = ImageObject, ImageButtonFrame,
  92.        MUIA_InputMode        , MUIV_InputMode_Toggle,
  93.        MUIA_Image_Spec       , MUII_CheckMark,
  94.        MUIA_Image_FreeVert   , TRUE,
  95.        MUIA_Background       , MUII_ButtonBack,
  96.        MUIA_ShowSelState     , FALSE,
  97.        MUIA_ControlChar      , control,
  98.        End,
  99.       End
  100.      );
  101. }
  102.  
  103. void SetUpMui(void)
  104. {
  105.   AP_ASpringies = ApplicationObject,
  106.    MUIA_Application_Title         , "ASpringies",
  107.    MUIA_Application_Version       , "$VER: ASpringies 1.0 (29.07.94)",
  108.    MUIA_Application_Copyright     , "Copyright ©1994, Torsten Klein",
  109.    MUIA_Application_Author        , "Torsten Klein",
  110.    MUIA_Application_Description   , "Interactive mass & spring simulation",
  111.    MUIA_Application_Base          , "ASPRINGIES",
  112.    MUIA_Application_Menu          ,  Menu, 
  113.    MUIA_HelpFile                  ,  HELP_FILE,
  114.  
  115.    SubWindow, WI_ASpringies = WindowObject,
  116.     MUIA_HelpNode, "Main",
  117.     MUIA_Window_Title, "ASpringies V1.0 - "
  118.       "<space>: toggle screens - <help>: online help",
  119.     MUIA_Window_ID,    MAKE_ID('A', 'S', 'P', 'R'),
  120.  
  121.     WindowContents, VGroup,
  122.      Child, HGroup,
  123.       Child, VGroup,
  124.        Child, HGroup, GroupFrameT("Edit Mode"),
  125.         MUIA_HelpNode, "Editing Modes",
  126.         Child, RA_Mode = RadioObject,  MUIA_Radio_Entries, mode_labels, End,
  127.         Child, HVSpace,
  128.         End,
  129.        Child, HVSpace,
  130.        Child, ColGroup(3), GroupFrameT("Walls"),
  131.         MUIA_HelpNode, "Walls",
  132.         Child, HVSpace, Child, CK_WallTop = CheckMark(TRUE), Child, HVSpace,
  133.         Child, CK_WallLeft = CheckMark(TRUE), Child, HVSpace, 
  134.                                               Child, CK_WallRight = CheckMark(TRUE),
  135.         Child, HVSpace, Child, CK_WallBottom = CheckMark(TRUE), Child, HVSpace,
  136.         End,
  137.        Child, HVSpace, 
  138.        End,  
  139.  
  140.       Child, VGroup, GroupFrameT("Control"),
  141.        MUIA_HelpNode, "Control",
  142.        Child, BT_SelAll = KeyButton("Select All", 'l'),
  143.        Child, HVSpace,
  144.        Child, BT_SetCenter = KeyButton("Set Center", 'n'),
  145.        Child, HVSpace, 
  146.        Child, BT_SetRLen = KeyButton("SetRestLen",'r'),
  147.        Child, HVSpace,
  148.        Child, LabKeyCheck(&CK_DrawSpr, "Draw Spring", 'd'), 
  149.        Child, HVSpace, 
  150.        Child, LabKeyCheck(&CK_Action, "Action", 'a'), 
  151.        Child, HGroup, 
  152.         Child, Label2("Grid"), 
  153.         Child, SL_Grid = SliderObject, 
  154.          MUIA_Slider_Min, 1, MUIA_Slider_Max, 99, MUIA_Slider_Level, 1,
  155.          End,
  156.         End,
  157.        End,
  158.  
  159.       Child, VGroup, GroupFrameT("S&M Settings"),
  160.        MUIA_HelpNode, "S&M settings",
  161.        Child, FloatString(&ST_Mass, "Mass", 10),
  162.        Child, FloatString(&ST_Elas, "Elas", 10),
  163.        Child, FloatString(&ST_Kspr, "KSpr", 10),
  164.        Child, FloatString(&ST_Kdmp, "KDmp", 10),
  165.        Child, HVSpace,
  166.        Child, LabKeyCheck(&CK_FixedMass, "Fixed Mass", 'f'), 
  167.        End,
  168.  
  169.       Child, VGroup, GroupFrameT("Global Settings"),
  170.        MUIA_HelpNode, "Global Settings",
  171.        Child, FloatString(&ST_Visc, "Visc", 10),
  172.        Child, FloatString(&ST_Stic, "Stic", 10),
  173.        Child, FloatString(&ST_Step, "Step", 10),
  174.        Child, FloatString(&ST_Prec, "Prec", 10),
  175.        Child, HVSpace, 
  176.        Child, LabKeyCheck(&CK_AdaptTStep, "AdaptTimeStep", 't'), 
  177.        Child, HVSpace, 
  178.        Child, HGroup,
  179.         Child, Label1("Frames/sec"),
  180.         Child, HVSpace, 
  181.         Child, TX_Fps = TextObject, TextFrame,
  182.                MUIA_Text_Contents, "00",
  183.                MUIA_Text_SetMax,   TRUE,
  184.                End,
  185.         End,
  186.        End,
  187.       End,
  188.  
  189.      Child, HGroup, /*MUIA_Group_SameSize, TRUE, */ 
  190.       MUIA_HelpNode, "Forces",
  191.  
  192.       Child, VGroup, GroupFrameT("Gravity"),
  193.        Child, LabKeyCheck(&CK_GravActive, "Active (g)", 'g'),
  194.        Child, FloatString(&ST_GravGrav, "Grav", 10),
  195.        Child, FloatString(&ST_GravDir,  "Dir ", 10),
  196.        End,
  197.  
  198.       Child, VGroup, GroupFrameT("Center"),
  199.        Child, LabKeyCheck(&CK_CenterActive, "Active (x)", 'x'),
  200.        Child, FloatString(&ST_CenterMagn, "Magn", 10),
  201.        Child, FloatString(&ST_CenterDamp, "Damp", 10),
  202.        End,
  203.  
  204.       Child, VGroup, GroupFrameT("PtAttract"),
  205.        Child, LabKeyCheck(&CK_PtAttrActive, "Active (p)", 'p'),
  206.        Child, FloatString(&ST_PtAttrMagn, "Magn", 10),
  207.        Child, FloatString(&ST_PtAttrExpo, "Expo", 10),
  208.        End,
  209.  
  210.       Child, VGroup, GroupFrameT("WallForce"),
  211.        Child, LabKeyCheck(&CK_WallFActive, "Active (w)", 'w'),
  212.        Child, FloatString(&ST_WallFMagn, "Magn", 10),
  213.        Child, FloatString(&ST_WallFExpo, "Expo", 10),
  214.        End,
  215.       End,            /* HGroup (forces)          */
  216.      End,            /* VGroup (window contents) */
  217.     End,            /* Window                   */
  218.    End;                /* Application              */
  219.  
  220.   FAILOPEN("application object (MUI)", AP_ASpringies);
  221.  
  222.   DoMethod(WI_ASpringies, MUIM_Window_SetCycleChain,
  223.        SetRAID(RA_Mode),
  224.        SetCKID(CK_WallTop),
  225.        SetCKID(CK_WallLeft),
  226.        SetCKID(CK_WallRight),
  227.        SetCKID(CK_WallBottom),
  228.        SetBTID(BT_SelAll),
  229.        SetBTID(BT_SetCenter),
  230.        SetBTID(BT_SetRLen),
  231.        SetCKID(CK_DrawSpr),
  232.        SetCKID(CK_Action),
  233.        SetSLID(SL_Grid),
  234.        SetSTID(ST_Mass),
  235.        SetSTID(ST_Elas),
  236.               SetSTID(ST_Kspr),
  237.        SetSTID(ST_Kdmp),
  238.        SetCKID(CK_FixedMass),
  239.        SetSTID(ST_Visc),
  240.        SetSTID(ST_Stic),
  241.        SetSTID(ST_Step),
  242.        SetSTID(ST_Prec),
  243.        SetCKID(CK_AdaptTStep),
  244.  
  245.        SetCKID(CK_GravActive),
  246.        SetSTID(ST_GravGrav),
  247.        SetSTID(ST_GravDir),
  248.        SetCKID(CK_CenterActive),
  249.        SetSTID(ST_CenterMagn),
  250.        SetSTID(ST_CenterDamp),
  251.        SetCKID(CK_PtAttrActive),
  252.        SetSTID(ST_PtAttrMagn),
  253.        SetSTID(ST_PtAttrExpo),
  254.        SetCKID(CK_WallFActive),
  255.        SetSTID(ST_WallFMagn),
  256.        SetSTID(ST_WallFExpo),
  257.  
  258.        NULL
  259.        );
  260.  
  261.   DoMethod(CK_Action, MUIM_Notify, MUIA_Selected, TRUE, 
  262.        TX_Fps, 3, MUIM_Set, MUIA_Disabled, FALSE);
  263.   DoMethod(CK_Action, MUIM_Notify, MUIA_Selected, FALSE, 
  264.        TX_Fps, 3, MUIM_Set, MUIA_Disabled, TRUE);
  265.  
  266.   DoMethod(CK_AdaptTStep, MUIM_Notify, MUIA_Selected, TRUE, 
  267.        ST_Prec, 3, MUIM_Set, MUIA_Disabled, FALSE);
  268.   DoMethod(CK_AdaptTStep, MUIM_Notify, MUIA_Selected, FALSE, 
  269.        ST_Prec, 3, MUIM_Set, MUIA_Disabled, TRUE);
  270.   DoMethod(CK_AdaptTStep, MUIM_Notify, MUIA_Selected, MUIV_EveryTime, 
  271.        ST_Step, 3, MUIM_Set, MUIA_Disabled, MUIV_TriggerValue);
  272.  
  273.  
  274.   DoMethod(WI_ASpringies, MUIM_Notify, MUIA_Window_InputEvent, "control c",
  275.        AP_ASpringies, 2, MUIM_Application_ReturnID,MUIV_Application_ReturnID_Quit);
  276.   DoMethod(WI_ASpringies, MUIM_Notify, MUIA_Window_InputEvent, "e",
  277.        RA_Mode, 3, MUIM_Set, MUIA_Radio_Active, 0);
  278.   DoMethod(WI_ASpringies, MUIM_Notify, MUIA_Window_InputEvent, "m",
  279.        RA_Mode, 3, MUIM_Set, MUIA_Radio_Active, 1);
  280.   DoMethod(WI_ASpringies, MUIM_Notify, MUIA_Window_InputEvent, "s",
  281.        RA_Mode, 3, MUIM_Set, MUIA_Radio_Active, 2);
  282.  
  283.   DoMethod(WI_ASpringies, MUIM_Notify, MUIA_Window_InputEvent, "space",
  284.        AP_ASpringies, 2, MUIM_Application_ReturnID, ID_KY_AnimToFront);
  285.  
  286.   DoMethod(WI_ASpringies, MUIM_Notify, MUIA_Window_CloseRequest, TRUE,
  287.        AP_ASpringies, 2, MUIM_Application_ReturnID,MUIV_Application_ReturnID_Quit);
  288.  
  289.  
  290.   DoMethod(AP_ASpringies, MUIM_Notify, MUIA_Application_MenuHelp, MUIV_EveryTime, 
  291.        AP_ASpringies, 5, MUIM_Application_ShowHelp, WI_ASpringies, 
  292.        HELP_FILE, "Menus", 0);
  293.  
  294.   set(WI_ASpringies, MUIA_Window_Open, TRUE);
  295.   set(TX_Fps,  MUIA_Disabled, TRUE);
  296.   set(ST_Prec, MUIA_Disabled, TRUE);
  297. }
  298.  
  299.  
  300.  
  301.  
  302.