home *** CD-ROM | disk | FTP | other *** search
- (*------------------------------------------
-
- :Module. MuiSupport.mod
- :Author. Albert Weinert [awn]
- :Address. Krähenweg 21 , 50829 Köln, Germany
- :EMail. Usenet_> aweinert@darkness.gun.de
- :EMail. Z-Netz_> A.WEINERT@DARKNESS.ZER
- :Phone. 0221 / 580 29 84
- :Revision. $Revision: 1.2 $
- :Date. $Date: 1993/09/15 17:31:16 $
- :Copyright. Albert Weinert
- :Language. Oberon-2
- :Translator. Amiga Oberon 3.00d
- :Contents. Eine Nützliche Mui Prozeduren und Hooks.
- :Imports. <Importiertes, Name/ShortCut des Autors>
- :Remarks. <Was Du willst, evtl. Usage>
- :Bugs. <Bekannte Fehler>
- :Usage. <Angaben zur Anwendung>
- :RCSId. $Id: MuiSupport.mod,v 1.2 1993/09/15 17:31:16 A_Weinert Exp A_Weinert $
- :History.
- $Log: MuiSupport.mod,v $
- # Revision 1.2 1993/09/15 17:31:16 A_Weinert
- # PopupString geändert, nun wird keine CallBack mehr für an das Poup Object
- # gehängt (muss von hand gemacht werden, ist flexibler). Und LabelPopupString()
- # erstellt, dieses erstellt vor der Eingabezeile noch ein Label.
- #
- # Revision 1.1 1993/09/13 21:20:39 A_Weinert
- # Initial revision
- #
-
- --------------------------------------------*)
- MODULE MuiSupport;
-
- IMPORT m := Mui,
- Strings,
- e := Exec,
- u := Utility,
- y := SYSTEM,
- mb := MuiBasics;
-
- PROCEDURE LimitInteger*( hook : mb.Hook; obj : m.Object; args : mb.Args ):LONGINT;
- (*------------------------------------------
- :Input. obj = Zu überprüfendes String-Objekt
- :Input. args = minValue, maxValue, DestObject, DestAttr
- :Output. 0
- :Semantic. Überprüft den Wert eine Integer-String-Objektes ob er in dem
- :Semantic. Bereich von "minValue" und "MaxValue" liegt, wenn ein "DestObject"
- :Semantic. angegeben ist dann wird dem Objekt über das "DestAttr" den
- :Semantic. aktuellen Wert übergeben.
- :Note. Wenn man nur den Bereich überprüfen will, so muss als DestObject
- :Note. ein NIL übergeben werden.
- :Update. 06-Sep-1993 [awn] - erstellt.
- --------------------------------------------*)
-
- TYPE arg = STRUCT ( foo : mb.ArgsDesc);
- min : LONGINT;
- max : LONGINT;
- object : m.Object;
- attribute : LONGINT;
- END;
-
- VAR value : LONGINT;
-
- BEGIN
- mb.Get( obj, m.aStringInteger, value );
-
- IF value < args(arg).min THEN value := args(arg).min;
- ELSIF value > args(arg).max THEN value := args(arg).max END;
-
- mb.Set( obj, m.aStringInteger, value );
-
- IF args(arg).object # NIL THEN
- mb.Set( args(arg).object, args(arg).attribute, value );
- END;
-
- RETURN 0;
- END LimitInteger;
-
- PROCEDURE HorizDash*();
- (*------------------------------------------
- :Semantic. Erstellt eine Horizontale Trennlinie
- :Note.
- :Update. 06-Sep-1993 [awn] - erstellt.
- --------------------------------------------*)
- BEGIN
- mb.RectangleObject;
- mb.TextFrame;
- mb.TagItem( m.aInnerTop, 0 );
- mb.TagItem( m.aInnerBottom, 0 );
- mb.TagItem( m.aVertWeight, 0 );
- mb.end ;
- END HorizDash;
-
- PROCEDURE VertDash*();
- (*------------------------------------------
- :Semantic. Erstellt eine Vertikale Trennlinie
- :Note.
- :Update. 06-Sep-1993 [awn] - erstellt.
- --------------------------------------------*)
- BEGIN
- mb.RectangleObject;
- mb.TextFrame;
- mb.TagItem( m.aInnerLeft, 0 );
- mb.TagItem( m.aInnerRight, 0 );
- mb.TagItem( m.aHorizWeight, 0 );
- mb.end ;
- END VertDash;
-
- PROCEDURE KeyButton*( s : ARRAY OF CHAR ): m.Object;
- VAR pos : LONGINT;
- key : CHAR;
- BEGIN
- pos := Strings.Occurs( s, "_" );
- IF pos = -1 THEN
- key := "\o";
- ELSE
- Strings.Delete( s, pos, 1 );
- key := u.ToLower( s[pos] );
- END;
-
- RETURN mb.KeyButton( s, key );
- END KeyButton;
-
- PROCEDURE UpperKeyButton*( s : ARRAY OF CHAR ): m.Object;
- VAR pos : LONGINT;
- key : CHAR;
- BEGIN
- pos := Strings.Occurs( s, "_" );
- IF pos = -1 THEN
- key := "\o";
- ELSE
- Strings.Delete( s, pos, 1 );
- key := u.ToUpper( s[pos] );
- END;
-
- RETURN mb.KeyButton( s, key );
- END UpperKeyButton;
-
- PROCEDURE KeyCheckMark*( s : ARRAY OF CHAR; checked : BOOLEAN ): m.Object;
- VAR pos : LONGINT;
- key : CHAR;
- BEGIN
- pos := Strings.Occurs( s, "_" );
- IF pos = -1 THEN
- key := "\o";
- ELSE
- Strings.Delete( s, pos, 1 );
- key := u.ToLower( s[pos] );
- END;
-
- mb.keyLabel1( s, key );
- mb.Child; RETURN mb.KeyCheckMark( y.VAL( SHORTINT,checked ), key );
- END KeyCheckMark;
-
- PROCEDURE KeyLabelString*( s : ARRAY OF CHAR; maxLen : LONGINT): m.Object;
- VAR pos : LONGINT;
- key : CHAR;
- BEGIN
- pos := Strings.Occurs( s, "_" );
- IF pos = -1 THEN
- key := "\o";
- ELSE
- Strings.Delete( s, pos, 1 );
- key := u.ToLower( s[pos] );
- END;
- mb.keyLabel2( s, key );
- mb.Child; mb.StringObject( m.aControlChar, ORD( key ),
- m.aStringMaxLen, maxLen,
- m.aFrame, m.vFrameString,
- u.end);
- RETURN mb.End();
- END KeyLabelString;
-
- PROCEDURE KeyLabel*( s : ARRAY OF CHAR; what : LONGINT );
- VAR pos : LONGINT;
- key : CHAR;
- BEGIN
- pos := Strings.Occurs( s, "_" );
- IF pos = -1 THEN
- key := "\o";
- ELSE
- Strings.Delete( s, pos, 1 );
- key := u.ToLower( s[pos] );
- END;
- CASE what OF
- | 0 : mb.keyLabel( s, key );
- | 1 : mb.keyLabel1( s, key );
- | 2 : mb.keyLabel2( s, key );
- ELSE HALT (20) END;
- END KeyLabel;
-
- PROCEDURE ImageButton*( img : LONGINT ):m.Object;
- BEGIN
- mb.ImageObject;
- mb.ImageButtonFrame;
- mb.Tags( m.aImageSpec, img,
- m.aImageFontMatchWidth, e.true,
- m.aImageFreeVert, e.true,
- m.aInputMode, m.vInputModeRelVerify,
- u.end );
- RETURN mb.End();
- END ImageButton;
-
- PROCEDURE PopupString*( s : ARRAY OF CHAR; maxLen : LONGINT; hook : mb.Hook; img : LONGINT ):m.Object;
-
- VAR pos : LONGINT;
- key : CHAR;
- str : m.Object;
- dummy : m.Object;
- BEGIN
- pos := Strings.Occurs( s, "_" );
- IF pos = -1 THEN
- key := "\o";
- ELSE
- Strings.Delete( s, pos, 1 );
- key := u.ToLower( s[pos] );
- END;
- mb.HGroup; mb.GroupSpacing( 1 );
- mb.Child; mb.StringObject( m.aControlChar, ORD( key ),
- m.aStringMaxLen, maxLen,
- m.aFrame, m.vFrameString,
- u.end);
- str := mb.End();
- mb.Child; dummy := ImageButton( img );
- IF (dummy # NIL) & (hook # NIL) THEN
- mb.SetHookObject( hook, dummy );
- END;
- mb.end;
- RETURN str;
-
- END PopupString;
-
- PROCEDURE LabelPopupString*( s : ARRAY OF CHAR; maxLen : LONGINT; hook : mb.Hook; img : LONGINT ):m.Object;
- (*------------------------------------------
- :Input. s : Zeichenkette die vor der Eingabezeile stehen soll
- :Input. hook : Hook welcher ausgeführt werden soll, wenn das Popup Objekt gedrückt wurde
- :Output. StringObject
- :Semantic.
- :Note.
- :Update. 14-Sep-1993 [awn] - erstellt.
- --------------------------------------------*)
- VAR pos : LONGINT;
- s2 : ARRAY 64 OF CHAR;
- key : CHAR;
- BEGIN
- COPY (s, s2 );
- pos := Strings.Occurs( s2, "_" );
- IF pos = -1 THEN
- key := "\o";
- ELSE
- Strings.Delete( s2, pos, 1 );
- key := u.ToLower( s2[pos] );
- END;
- mb.keyLabel( s2, key ); mb.Child; RETURN PopupString( s, maxLen, hook, img );
- END LabelPopupString;
-
- PROCEDURE LabelCycle*( s : ARRAY OF CHAR; entries : e.APTR ):m.Object;
- VAR pos : LONGINT;
- key : CHAR;
- BEGIN
- pos := Strings.Occurs( s, "_" );
- IF pos = -1 THEN
- key := "\o";
- ELSE
- Strings.Delete( s, pos, 1 );
- key := u.ToLower( s[pos] );
- END;
- mb.keyLabel( s, key ); mb.Child; RETURN mb.KeyCycle( entries,key );
- END LabelCycle;
-
- PROCEDURE CheckMarkString*( s : ARRAY OF CHAR ):m.Object;
- VAR obj : m.Object;
- pos : LONGINT;
- key : CHAR;
- BEGIN
- pos := Strings.Occurs( s, "_" );
- IF pos = -1 THEN
- key := "\o";
- ELSE
- Strings.Delete( s, pos, 1 );
- key := u.ToLower( s[pos] );
- END;
- mb.HGroup;
- mb.Child; obj := mb.KeyCheckMark( e.false, key );
- mb.Child; mb.TextObject( m.aTextContents, y.ADR( s ),
- m.aTextHiChar, ORD( key ),
- u.end );
- mb.end;
- mb.end;
- RETURN obj;
- END CheckMarkString;
-
- PROCEDURE Slider*( s : ARRAY OF CHAR; min, max : LONGINT ):m.Object;
- VAR pos : LONGINT;
- key : CHAR;
- BEGIN
- pos := Strings.Occurs( s, "_" );
- IF pos = -1 THEN
- key := "\o";
- ELSE
- key := u.ToLower( s[pos] );
- END;
- RETURN mb.KeySlider( min, max, 0, key );
- END Slider;
-
- PROCEDURE LabelSlider*( s : ARRAY OF CHAR; min, max : LONGINT ):m.Object;
- BEGIN
- KeyLabel( s, 1 ); mb.Child; RETURN Slider( s, min, max );
- END LabelSlider;
-
- PROCEDURE ListDown*( list : m.Object );
- VAR max, act : LONGINT;
- BEGIN
- mb.Get( list, m.aListEntries, max );
- mb.Get( list, m.aListActive, act );
- IF act < (max-1) THEN
- m.DoMethod( list, m.mListExchange, act, act+1 );
- mb.Set( list, m.aListActive, act+1 );
- END;
- END ListDown;
-
- PROCEDURE ListUp*( list : m.Object );
- VAR act : LONGINT;
- BEGIN
- mb.Get( list, m.aListActive, act );
- IF act > 0 THEN
- m.DoMethod( list, m.mListExchange, act, act-1 );
- mb.Set( list, m.aListActive, act-1 );
- END;
- END ListUp;
-
- PROCEDURE ListRemove*( list : m.Object );
- BEGIN
- m.DoMethod( list, m.mListRemove, m.vListRemoveActive );
- END ListRemove;
-
- END MuiSupport.
-