home *** CD-ROM | disk | FTP | other *** search
/ Gold Fish 2 / goldfish_vol2_cd1.bin / files / dev / gui / mui / developer / oberon / txt / muisupport.mod < prev    next >
Text File  |  1994-07-02  |  10KB  |  338 lines

  1. (*------------------------------------------
  2.  
  3.   :Module.      MuiSupport.mod
  4.   :Author.      Albert Weinert  [awn]
  5.   :Address.     Krähenweg 21 , 50829 Köln, Germany
  6.   :EMail.       Usenet_> aweinert@darkness.gun.de
  7.   :EMail.       Z-Netz_> A.WEINERT@DARKNESS.ZER
  8.   :Phone.       0221 / 580 29 84
  9.   :Revision.    $Revision: 1.2 $
  10.   :Date.        $Date: 1993/09/15 17:31:16 $
  11.   :Copyright.   Albert Weinert
  12.   :Language.    Oberon-2
  13.   :Translator.  Amiga Oberon 3.00d
  14.   :Contents.    Eine Nützliche Mui Prozeduren und Hooks.
  15.   :Imports.     <Importiertes, Name/ShortCut des Autors>
  16.   :Remarks.     <Was Du willst, evtl. Usage>
  17.   :Bugs.        <Bekannte Fehler>
  18.   :Usage.       <Angaben zur Anwendung>
  19.   :RCSId.       $Id: MuiSupport.mod,v 1.2 1993/09/15 17:31:16 A_Weinert Exp A_Weinert $
  20.   :History.
  21.   $Log: MuiSupport.mod,v $
  22. # Revision 1.2  1993/09/15  17:31:16  A_Weinert
  23. # PopupString geändert, nun wird keine CallBack mehr für an das Poup Object
  24. # gehängt (muss von hand gemacht werden, ist flexibler). Und LabelPopupString()
  25. # erstellt, dieses erstellt vor der Eingabezeile noch ein Label.
  26. #
  27. # Revision 1.1  1993/09/13  21:20:39  A_Weinert
  28. # Initial revision
  29. #
  30.  
  31. --------------------------------------------*)
  32. MODULE MuiSupport;
  33.  
  34. IMPORT  m := Mui,
  35.         Strings,
  36.         e := Exec,
  37.         u := Utility,
  38.         y := SYSTEM,
  39.         mb := MuiBasics;
  40.  
  41.   PROCEDURE LimitInteger*( hook : mb.Hook; obj : m.Object; args : mb.Args ):LONGINT;
  42.   (*------------------------------------------
  43.     :Input.     obj = Zu überprüfendes String-Objekt
  44.     :Input.     args = minValue, maxValue, DestObject, DestAttr
  45.     :Output.    0
  46.     :Semantic.  Überprüft den Wert eine Integer-String-Objektes ob er in dem
  47.     :Semantic.  Bereich von "minValue" und "MaxValue" liegt, wenn ein "DestObject"
  48.     :Semantic.  angegeben ist dann wird dem Objekt über das "DestAttr" den
  49.     :Semantic.  aktuellen Wert übergeben.
  50.     :Note.      Wenn man nur den Bereich überprüfen will, so muss als DestObject
  51.     :Note.      ein NIL übergeben werden.
  52.     :Update.    06-Sep-1993 [awn] - erstellt.
  53.   --------------------------------------------*)
  54.  
  55.     TYPE arg = STRUCT ( foo : mb.ArgsDesc);
  56.                  min       : LONGINT;
  57.                  max       : LONGINT;
  58.                  object    : m.Object;
  59.                  attribute : LONGINT;
  60.                END;
  61.  
  62.     VAR value : LONGINT;
  63.  
  64.     BEGIN
  65.       mb.Get( obj, m.aStringInteger, value );
  66.  
  67.       IF value < args(arg).min THEN value := args(arg).min;
  68.       ELSIF value > args(arg).max THEN value := args(arg).max END;
  69.  
  70.       mb.Set( obj, m.aStringInteger, value );
  71.  
  72.       IF args(arg).object # NIL THEN
  73.         mb.Set( args(arg).object, args(arg).attribute, value );
  74.       END;
  75.  
  76.       RETURN 0;
  77.     END LimitInteger;
  78.  
  79.   PROCEDURE HorizDash*();
  80.   (*------------------------------------------
  81.     :Semantic.  Erstellt eine Horizontale Trennlinie
  82.     :Note.
  83.     :Update.    06-Sep-1993 [awn] - erstellt.
  84.   --------------------------------------------*)
  85.     BEGIN
  86.       mb.RectangleObject;
  87.         mb.TextFrame;
  88.         mb.TagItem( m.aInnerTop,    0 );
  89.         mb.TagItem( m.aInnerBottom, 0 );
  90.         mb.TagItem( m.aVertWeight,  0 );
  91.       mb.end ;
  92.     END HorizDash;
  93.  
  94.   PROCEDURE VertDash*();
  95.   (*------------------------------------------
  96.     :Semantic.  Erstellt eine Vertikale Trennlinie
  97.     :Note.
  98.     :Update.    06-Sep-1993 [awn] - erstellt.
  99.   --------------------------------------------*)
  100.     BEGIN
  101.       mb.RectangleObject;
  102.         mb.TextFrame;
  103.         mb.TagItem( m.aInnerLeft,   0 );
  104.         mb.TagItem( m.aInnerRight,  0 );
  105.         mb.TagItem( m.aHorizWeight, 0 );
  106.       mb.end ;
  107.     END VertDash;
  108.  
  109.   PROCEDURE KeyButton*( s : ARRAY OF CHAR ): m.Object;
  110.     VAR pos : LONGINT;
  111.         key : CHAR;
  112.     BEGIN
  113.       pos := Strings.Occurs( s, "_" );
  114.       IF pos = -1 THEN
  115.         key := "\o";
  116.       ELSE
  117.         Strings.Delete( s, pos, 1 );
  118.         key := u.ToLower( s[pos] );
  119.       END;
  120.  
  121.       RETURN mb.KeyButton( s, key );
  122.     END KeyButton;
  123.  
  124.   PROCEDURE UpperKeyButton*( s : ARRAY OF CHAR ): m.Object;
  125.     VAR pos : LONGINT;
  126.         key : CHAR;
  127.     BEGIN
  128.       pos := Strings.Occurs( s, "_" );
  129.       IF pos = -1 THEN
  130.         key := "\o";
  131.       ELSE
  132.         Strings.Delete( s, pos, 1 );
  133.         key := u.ToUpper( s[pos] );
  134.       END;
  135.  
  136.       RETURN mb.KeyButton( s, key );
  137.     END UpperKeyButton;
  138.  
  139.   PROCEDURE KeyCheckMark*( s : ARRAY OF CHAR; checked : BOOLEAN ): m.Object;
  140.     VAR pos : LONGINT;
  141.         key : CHAR;
  142.     BEGIN
  143.       pos := Strings.Occurs( s, "_" );
  144.       IF pos = -1 THEN
  145.         key := "\o";
  146.       ELSE
  147.         Strings.Delete( s, pos, 1 );
  148.         key := u.ToLower( s[pos] );
  149.       END;
  150.  
  151.       mb.keyLabel1( s, key );
  152.       mb.Child; RETURN mb.KeyCheckMark( y.VAL( SHORTINT,checked ), key );
  153.     END KeyCheckMark;
  154.  
  155.   PROCEDURE KeyLabelString*( s : ARRAY OF CHAR; maxLen : LONGINT): m.Object;
  156.     VAR pos : LONGINT;
  157.         key : CHAR;
  158.     BEGIN
  159.       pos := Strings.Occurs( s, "_" );
  160.       IF pos = -1 THEN
  161.         key := "\o";
  162.       ELSE
  163.         Strings.Delete( s, pos, 1 );
  164.         key := u.ToLower( s[pos] );
  165.       END;
  166.         mb.keyLabel2( s, key );
  167.         mb.Child; mb.StringObject( m.aControlChar,  ORD( key ),
  168.                                    m.aStringMaxLen, maxLen,
  169.                                    m.aFrame,        m.vFrameString,
  170.                                    u.end);
  171.                   RETURN mb.End();
  172.     END KeyLabelString;
  173.  
  174.   PROCEDURE KeyLabel*( s : ARRAY OF CHAR; what : LONGINT );
  175.     VAR pos : LONGINT;
  176.         key : CHAR;
  177.     BEGIN
  178.       pos := Strings.Occurs( s, "_" );
  179.       IF pos = -1 THEN
  180.         key := "\o";
  181.       ELSE
  182.         Strings.Delete( s, pos, 1 );
  183.         key := u.ToLower( s[pos] );
  184.       END;
  185.       CASE what OF
  186.        | 0 : mb.keyLabel( s, key );
  187.        | 1 : mb.keyLabel1( s, key );
  188.        | 2 : mb.keyLabel2( s, key );
  189.       ELSE HALT (20) END;
  190.     END KeyLabel;
  191.  
  192.   PROCEDURE ImageButton*( img : LONGINT ):m.Object;
  193.     BEGIN
  194.       mb.ImageObject;
  195.         mb.ImageButtonFrame;
  196.         mb.Tags( m.aImageSpec, img,
  197.                  m.aImageFontMatchWidth, e.true,
  198.                  m.aImageFreeVert, e.true,
  199.                  m.aInputMode, m.vInputModeRelVerify,
  200.                  u.end );
  201.       RETURN mb.End();
  202.     END ImageButton;
  203.  
  204.   PROCEDURE PopupString*( s : ARRAY OF CHAR; maxLen : LONGINT; hook : mb.Hook; img : LONGINT ):m.Object;
  205.  
  206.     VAR pos : LONGINT;
  207.         key : CHAR;
  208.         str : m.Object;
  209.         dummy : m.Object;
  210.     BEGIN
  211.       pos := Strings.Occurs( s, "_" );
  212.       IF pos = -1 THEN
  213.         key := "\o";
  214.       ELSE
  215.         Strings.Delete( s, pos, 1 );
  216.         key := u.ToLower( s[pos] );
  217.       END;
  218.         mb.HGroup; mb.GroupSpacing( 1 );
  219.           mb.Child; mb.StringObject( m.aControlChar,  ORD( key ),
  220.                                      m.aStringMaxLen, maxLen,
  221.                                      m.aFrame,        m.vFrameString,
  222.                                      u.end);
  223.                     str := mb.End();
  224.           mb.Child; dummy := ImageButton( img );
  225.                     IF (dummy # NIL) & (hook # NIL) THEN
  226.                       mb.SetHookObject( hook, dummy );
  227.                     END;
  228.         mb.end;
  229.       RETURN str;
  230.  
  231.     END PopupString;
  232.  
  233.   PROCEDURE LabelPopupString*( s : ARRAY OF CHAR; maxLen : LONGINT; hook : mb.Hook; img : LONGINT ):m.Object;
  234.   (*------------------------------------------
  235.     :Input.     s : Zeichenkette die vor der Eingabezeile stehen soll
  236.     :Input.     hook : Hook welcher ausgeführt werden soll, wenn das Popup Objekt gedrückt wurde
  237.     :Output.    StringObject
  238.     :Semantic.
  239.     :Note.
  240.     :Update.    14-Sep-1993 [awn] - erstellt.
  241.   --------------------------------------------*)
  242.     VAR pos : LONGINT;
  243.         s2  : ARRAY 64 OF CHAR;
  244.         key : CHAR;
  245.     BEGIN
  246.       COPY (s, s2 );
  247.       pos := Strings.Occurs( s2, "_" );
  248.       IF pos = -1 THEN
  249.         key := "\o";
  250.       ELSE
  251.         Strings.Delete( s2, pos, 1 );
  252.         key := u.ToLower( s2[pos] );
  253.       END;
  254.       mb.keyLabel( s2, key ); mb.Child; RETURN PopupString( s, maxLen, hook, img );
  255.     END LabelPopupString;
  256.  
  257.   PROCEDURE LabelCycle*( s : ARRAY OF CHAR; entries : e.APTR ):m.Object;
  258.     VAR pos : LONGINT;
  259.         key : CHAR;
  260.     BEGIN
  261.       pos := Strings.Occurs( s, "_" );
  262.       IF pos = -1 THEN
  263.         key := "\o";
  264.       ELSE
  265.         Strings.Delete( s, pos, 1 );
  266.         key := u.ToLower( s[pos] );
  267.       END;
  268.       mb.keyLabel( s, key ); mb.Child; RETURN mb.KeyCycle( entries,key );
  269.     END LabelCycle;
  270.  
  271.   PROCEDURE CheckMarkString*( s : ARRAY OF CHAR ):m.Object;
  272.     VAR obj : m.Object;
  273.         pos : LONGINT;
  274.         key : CHAR;
  275.     BEGIN
  276.       pos := Strings.Occurs( s, "_" );
  277.       IF pos = -1 THEN
  278.         key := "\o";
  279.       ELSE
  280.         Strings.Delete( s, pos, 1 );
  281.         key := u.ToLower( s[pos] );
  282.       END;
  283.       mb.HGroup;
  284.         mb.Child; obj := mb.KeyCheckMark( e.false, key );
  285.         mb.Child; mb.TextObject( m.aTextContents, y.ADR( s ),
  286.                                  m.aTextHiChar, ORD( key ),
  287.                                  u.end );
  288.                   mb.end;
  289.       mb.end;
  290.       RETURN obj;
  291.     END CheckMarkString;
  292.  
  293.   PROCEDURE Slider*( s : ARRAY OF CHAR; min, max : LONGINT ):m.Object;
  294.     VAR pos : LONGINT;
  295.         key : CHAR;
  296.     BEGIN
  297.       pos := Strings.Occurs( s, "_" );
  298.       IF pos = -1 THEN
  299.         key := "\o";
  300.       ELSE
  301.         key := u.ToLower( s[pos] );
  302.       END;
  303.       RETURN mb.KeySlider( min, max, 0, key );
  304.     END Slider;
  305.  
  306.   PROCEDURE LabelSlider*( s : ARRAY OF CHAR; min, max : LONGINT ):m.Object;
  307.     BEGIN
  308.       KeyLabel( s, 1 ); mb.Child; RETURN Slider( s, min, max );
  309.     END LabelSlider;
  310.  
  311.   PROCEDURE ListDown*( list : m.Object );
  312.     VAR max, act : LONGINT;
  313.     BEGIN
  314.       mb.Get( list, m.aListEntries, max );
  315.       mb.Get( list, m.aListActive, act );
  316.       IF act < (max-1)  THEN
  317.         m.DoMethod( list, m.mListExchange, act, act+1 );
  318.         mb.Set( list, m.aListActive, act+1 );
  319.       END;
  320.     END ListDown;
  321.  
  322.   PROCEDURE ListUp*( list : m.Object );
  323.     VAR act : LONGINT;
  324.     BEGIN
  325.       mb.Get( list, m.aListActive, act );
  326.       IF act > 0  THEN
  327.         m.DoMethod( list, m.mListExchange, act, act-1 );
  328.         mb.Set( list, m.aListActive, act-1 );
  329.       END;
  330.     END ListUp;
  331.  
  332.   PROCEDURE ListRemove*( list : m.Object );
  333.     BEGIN
  334.       m.DoMethod( list, m.mListRemove, m.vListRemoveActive );
  335.     END ListRemove;
  336.  
  337. END MuiSupport.
  338.