(*------------------------------------------

  :Module.      RBMainWindowClass.mod
  :Author.      Albert Weinert  [awn]
  :Address.     Moltkestr. 83 , 50859 Köln, Germany
  :EMail.       a.weinert@darkness.gun.de
  :Phone.       +49-221-480800
  :Revision.    R.0
  :Date.        10-Apr-1995
  :Copyright.   Albert Weinert
  :Language.    Oberon-2
  :Translator.  AmigaOberon V3.20
  :Contents.    <Kurzbeschreibung>
  :Imports.     <Importiertes, Name/ShortCut des Autors>
  :Remarks.     <Was Du willst, evtl. Usage>
  :Bugs.        <Bekannte Fehler>
  :Usage.       <Angaben zur Anwendung>
  :RCSId.       $Id$
  :History.     .0     [awn] 10-Apr-1995 : Erstellt

--------------------------------------------*)
MODULE RBMainWindowClass;

IMPORT
  e := Exec,
  I := Intuition,
  rc := RootClass,
  m := Mui,
  ms := MuiSimple,
  mw := MUIWindow,
  el := EditListClass,
  u := Utility,
  y := SYSTEM;

TYPE
  Class = UNTRACED POINTER TO ClassDesc;
  ClassDesc = RECORD( mw.ClassDesc );
	      END;

  pClose = STRUCT( msg : I.Msg );
	     level : LONGINT;
	   END;

CONST
  tagBase = u.user + (64*65536);

  mClose = tagBase +1 ;

VAR
  class -: I.IClassPtr;

  PROCEDURE ( VAR c: ClassDesc ) New*( VAR msg : I.OpSet ):e.APTR;
    VAR win : e.APTR;
	group, commandGroup, parameterGroup, resultGroup : m.Object;
	tags : u.Tags2;
    BEGIN
      commandGroup := I.NewObject( el.class, NIL,
				   m.aFrame, m.vFrameGroup,
				   m.aFrameTitle, y.ADR( "Befehle" ),
				   el.aNewText,    y.ADR("_Neu"),
				   el.aRemoveText, y.ADR("_Entfernen"),
				   el.aNewMenuText,    y.ADR("Neu"),
				   el.aRemoveMenuText, y.ADR("Entfernen"),
				   el.aHelpMenuText, y.ADR("Hilfe"),
				   m.aShortHelp, y.ADR( "List der Befehle die der ARexx-Port versteht" ),
				   u.end );
      parameterGroup := I.NewObject( el.class, NIL,
				   m.aFrame, m.vFrameGroup,
				   m.aFrameTitle, y.ADR( "Parameter" ),
				   el.aNewText,    y.ADR("Ne_u"),
				   el.aRemoveText, y.ADR("Ent_fernen"),
				   el.aUpText,    y.ADR("_Hoch"),
				   el.aDownText, y.ADR("_Runter"),
				   el.aNewMenuText,    y.ADR("Neu"),
				   el.aRemoveMenuText, y.ADR("Entfernen"),
				   el.aUpMenuText,    y.ADR("Hoch"),
				   el.aDownMenuText, y.ADR("Runter"),
				   el.aHelpMenuText, y.ADR("Hilfe"),
				   m.aShortHelp, y.ADR( "Parameter des ausgewählten ARexx-Befehls" ),
				   u.end );
      resultGroup := I.NewObject( el.class, NIL,
				   m.aFrame, m.vFrameGroup,
				   m.aFrameTitle, y.ADR( "Resultate" ),
				   el.aNewText,    y.ADR("Neu"),
				   el.aRemoveText, y.ADR("Entfernen"),
				   el.aUpText,    y.ADR("H_och"),
				   el.aDownText, y.ADR("Run_ter"),
				   el.aNewMenuText,    y.ADR("Neu"),
				   el.aRemoveMenuText, y.ADR("Entfernen"),
				   el.aUpMenuText,    y.ADR("Hoch"),
				   el.aDownMenuText, y.ADR("Runter"),
				   el.aHelpMenuText, y.ADR("Hilfe"),
				   m.aShortHelp, y.ADR( "Rückgabewerte des ausgewählten ARexx-Befehls" ),
				   u.end );
      group := ms.HGroup( m.aGroupChild, commandGroup,
			  m.aGroupChild, parameterGroup,
			  m.aGroupChild, resultGroup,
			  u.end );
      tags[1].tag := u.more;
      tags[1].data := msg.attrList;
      tags[0].tag := m.aWindowRootObject;
      tags[0].data := group;
      msg.attrList := y.ADR(tags);

      win := c.New^( msg );
      IF win # NIL THEN
	c.CopyClass( win );
	m.DoMethod( win, m.mNotify, m.aWindowCloseRequest, e.true, win, 2, mClose, 0 );
      END;
      RETURN win;
    END New;

  PROCEDURE ( VAR c : ClassDesc ) Close*( VAR msg : pClose ): e.APTR;
    VAR app : m.Object;
    BEGIN
      ms.Get( c.object, m.aWindowApplication, app );
      m.DoMethod( app, m.mApplicationReturnID, m.vApplicationReturnIDQuit );
      RETURN NIL;
    END Close;

  PROCEDURE Dispatch * ( cl : I.IClassPtr; obj : I.ObjectPtr; msg : I.MsgPtr ):e.APTR;
    VAR c : Class;
    BEGIN
      IF msg.methodID # I.new THEN
	c := rc.BoopsiToObj( cl, obj )(Class);
      END;               
      CASE msg.methodID OF
	| mClose       : RETURN c.Close( msg^(pClose ) );
      ELSE
	RETURN mw.Dispatch( cl, obj, msg );
      END;         
    END Dispatch;     

BEGIN
  class := rc.InitPrivFromClass( mw.class, Dispatch, SIZE( ClassDesc ), y.TYPEDESC( ClassDesc ) );
  IF class = NIL THEN HALT(205) END;
CLOSE
  IF class # NIL THEN IF I.FreeClass( class ) THEN END END;
END RBMainWindowClass.
