home *** CD-ROM | disk | FTP | other *** search
- {$A+,B-,D-,E-,F-,G-,I-,L-,N-,O+,R-,S-,V+,X-}
- {$M 16384,0,655360}
- Unit EnhMenus;
-
- Interface
- Uses Objects, Drivers, Views;
-
- Type
-
- { TMenu types }
-
- TMenuStr = string[31];
-
- PMenu = ^TMenu;
- PMenuMetaView = ^TMenuMetaView;
-
- PMenuItem = ^TMenuItem;
- TMenuItem = Object (TObject)
- Next : PMenuItem;
- Name : PString;
- Param : PString;
- View : PView;
- KeyCode : Word;
- HelpCtx : Word;
-
- Constructor Init(aName, aParam:TMenuStr; aKeyCode, aHelpCtx:Word; aNext:PMenuItem);
- Constructor Load(var S:TStream);
- Destructor Done; virtual;
- Procedure Store(var S:TStream); virtual;
- Function Execute(ParentMenu:PMenuMetaView):Word; virtual;
- Procedure Pull(ParentMenu:PMenuMetaView; On:Boolean); virtual;
- Function HotKey(aKeyCode:Word):PMenuItem; virtual;
- Function Command:Word; virtual;
- End;
-
- PMenuCommand = ^TMenuCommand;
- TMenuCommand = Object(TMenuItem)
- Constructor Init(aName, aParam:TMenuStr; aKeyCode, aCommand, aHelpCtx:Word;
- aNext:PMenuItem);
- Constructor Load(var S:TStream);
- Procedure Store(var S:TStream); virtual;
- Function Command:Word; virtual;
-
- Private
- _Command : Word;
- End;
-
- PMenuSubMenu = ^TMenuSubMenu;
- TMenuSubMenu = Object (TMenuItem)
- SubMenu : PMenu;
-
- Constructor Init(aName, aParam:TMenuStr; aKeyCode, aHelpCtx:Word;
- aSubMenu:PMenu; aNext:PMenuItem);
- Constructor Load(var S:TStream);
- Destructor Done; virtual;
- Procedure Store(var S:TStream); virtual;
- Function Execute(ParentMenu:PMenuMetaView):Word; virtual;
- Procedure Pull(ParentMenu:PMenuMetaView; On:Boolean); virtual;
- Function HotKey(aKeyCode:Word):PMenuItem; virtual;
- End;
-
- TMenu = Object (TObject)
- Items : PMenuItem;
- Default : PMenuItem;
-
- Constructor Init(aItems:PMenuItem);
- Constructor Load(var S:TStream);
- Destructor Done; virtual;
- Procedure Store(var S:TStream); virtual;
- Function HotKey(aKeyCode:Word):PMenuItem; virtual;
- End;
-
- { TStatusDef }
-
- PStatusDef = ^TStatusDef;
- TStatusDef = Object (TMenu)
- Min, Max : Word;
- Next : PStatusDef;
-
- Constructor Init(aMin, aMax:Word; aItems:PMenuItem; aNext:PStatusDef);
- Constructor Load(var S:TStream);
- Procedure Store(var S:TStream); virtual;
- End;
-
- { TOptionView object }
-
- { Palette layout }
- { 1 = Normal text }
- { 2 = Disabled text }
- { 3 = Shortcut text }
- { 4 = Normal selection }
- { 5 = Disabled selection }
- { 6 = Shortcut selection }
-
- TMenuMetaView = Object(TView)
- Current : PMenuItem;
- ParentMenu : PMenuMetaView;
-
- Constructor Init(var Bounds:TRect);
- Constructor Load(var S:TStream);
- Function Menu:PMenu; virtual;
- Function Execute:Word; virtual;
- Procedure EndModal(Command:Word); virtual;
- Function FindItem(Ch:Char):PMenuItem;
- Procedure ChangeCurrent(Item:PMenuItem); virtual;
- Procedure GetItemRect(Item:PMenuItem; var R:TRect); virtual;
- Function ItemAt(P:TPoint):PMenuItem;
- Function GetHelpCtx:Word; virtual;
- Procedure HandleEvent(var Event:TEvent); virtual;
- Procedure Activate(Item:PMenuItem); virtual;
- Function HotKey(aKeyCode:Word):PMenuItem; virtual;
- Function MouseInMenus(Where:TPoint):Boolean;
-
- Private
- EndState : Word;
- End;
-
- PMenuView = ^TMenuView;
- TMenuView = Object(TMenuMetaView)
- TrapKeys : Byte;
-
- Constructor Init(var Bounds:TRect; aMenu:PMenu; aParentMenu:PMenuMetaView);
- Constructor Load(var S: TStream);
- Destructor Done; virtual;
- Procedure Store(var S:TStream); virtual;
- Function Menu:PMenu; virtual;
- Function GetPalette:PPalette; virtual;
- Procedure HandleEvent(var Event:TEvent); virtual;
-
- Private
- _Menu : PMenu;
- End;
-
- PMenuBar = ^TMenuBar;
- TMenuBar = Object(TMenuView)
- Constructor Init(var Bounds:TRect; aMenu:PMenu);
- Procedure HandleEvent(Var Event:TEvent); virtual;
- Procedure Draw; virtual;
- Procedure GetItemRect(Item:PMenuItem; var R:TRect); virtual;
- End;
-
- PMenuBox = ^TMenuBox;
- TMenuBox = Object(TMenuView)
- Constructor Init(var Bounds:TRect; aMenu:PMenu;
- aParentMenu:PMenuMetaView);
- Procedure HandleEvent(Var Event:TEvent); virtual;
- Procedure Draw; virtual;
- Procedure GetItemRect(Item:PMenuItem; var R:TRect); virtual;
- End;
-
- { TStatusLine }
-
- { Palette layout }
- { 1 = Normal text }
- { 2 = Disabled text }
- { 3 = Shortcut text }
- { 4 = Normal selection }
- { 5 = Disabled selection }
- { 6 = Shortcut selection }
-
- PStatusLine = ^TStatusLine;
- TStatusLine = Object(TMenuMetaView)
- Defs : PStatusDef;
- CurrentDef : PStatusDef;
-
- Constructor Init(var Bounds:TRect; aDefs:PStatusDef);
- Constructor Load(var S:TStream);
- Destructor Done; virtual;
- Procedure Store(var S:TStream); virtual;
- Function Menu:PMenu; virtual;
- Function GetPalette:PPalette; virtual;
- Procedure GetItemRect(Item:PMenuItem; var R:TRect); virtual;
- Procedure Draw; virtual;
- Procedure HandleEvent(var Event:TEvent); virtual;
- Function Hint(aHelpCtx:Word):String; virtual;
- Procedure Update; virtual;
- Procedure Activate(Item:PMenuItem); virtual;
-
- Private
- CurHelpCtx : Word;
- Procedure FindCurrent;
- End;
-
- Const
- { Color palettes }
- CMenuView = #2#3#4#5#6#7;
- CStatusLine = #2#3#4#5#6#7;
- sfPulled = $1000;
- sfUpdate = $2000;
- ofPull = $0400;
-
- { Stream registration records }
- RMenuItem: TStreamRec = (
- ObjType: 1000;
- VmtLink: Ofs(TypeOf(TMenuItem)^);
- Load: @TMenuItem.Load;
- Store: @TMenuItem.Store
- );
- RMenuSubMenu: TStreamRec = (
- ObjType: 1002;
- VmtLink: Ofs(TypeOf(TMenuSubMenu)^);
- Load: @TMenuSubMenu.Load;
- Store: @TMenuSubMenu.Store
- );
- RMenuCommand: TStreamRec = (
- ObjType: 1003;
- VmtLink: Ofs(TypeOf(TMenuCommand)^);
- Load: @TMenuCommand.Load;
- Store: @TMenuCommand.Store
- );
- RMenu: TStreamRec = (
- ObjType: 1004;
- VmtLink: Ofs(TypeOf(TMenu)^);
- Load: @TMenu.Load;
- Store: @TMenu.Store
- );
- RMenuBar: TStreamRec = (
- ObjType: 40;
- VmtLink: Ofs(TypeOf(TMenuBar)^);
- Load: @TMenuBar.Load;
- Store: @TMenuBar.Store
- );
- RMenuBox: TStreamRec = (
- ObjType: 41;
- VmtLink: Ofs(TypeOf(TMenuBox)^);
- Load: @TMenuBox.Load;
- Store: @TMenuBox.Store
- );
-
- RStatusDef: TStreamRec = (
- ObjType: 1005;
- VmtLink: Ofs(TypeOf(TStatusDef)^);
- Load: @TStatusDef.Load;
- Store: @TStatusDef.Store
- );
- RStatusLine: TStreamRec = (
- ObjType: 42;
- VmtLink: Ofs(TypeOf(TStatusLine)^);
- Load: @TStatusLine.Load;
- Store: @TStatusLine.Store
- );
-
-
- Procedure RegisterMenus;
-
- { TMenuItem routines }
-
- Function NewItem(Name, Param:TMenuStr; KeyCode:Word; Command:Word;
- aHelpCtx:Word; Next:PMenuItem):PMenuItem;
- Function NewLine(Next:PMenuItem):PMenuItem;
- Function NewSubMenu(Name:TMenuStr; aHelpCtx:Word; SubMenu:PMenu;
- Next:PMenuItem):PMenuItem;
-
- { TMenu routines }
-
- Function NewMenu(Items:PMenuItem):PMenu;
- Procedure DisposeMenu(Menu:PMenu);
-
- { TStatusLine routines }
-
- Function NewStatusDef(aMin, aMax:Word;
- aItems:PMenuItem; aNext:PStatusDef):PStatusDef;
- Function NewStatusKey(aText:String; aKeyCode:Word; aCommand:Word;
- aNext:PMenuItem):PMenuItem;
- Function NewStatusMenu(aText:String; aHelpCtx, aKeyCode:Word; SubMenu:PMenu;
- aNext:PMenuItem):PMenuItem;
-
- Implementation