home *** CD-ROM | disk | FTP | other *** search
- Unit GVMenus;
-
-
- interface
-
- uses Objects, Drivers, Views, GVViews, Memory;
-
- Const
-
- { Color palettes }
-
- CMenuView = #2#3#4#5#6#7#8#9;
- CStatusLine = #2#3#4#5#6#7#8#9;
-
- { Disabled flags }
-
- dfDisabled = $01;
- dfMenuCheck = $02;
- dfRadio = $04;
- dfCheckState = $08;
- dfBitmap = $10;
-
- Type
-
- { TMenu types }
-
- TMenuStr = string[31];
-
- PMenu = ^TMenu;
-
- PMenuItem = ^TMenuItem;
- TMenuItem = record
- Next: PMenuItem;
- Name: Pointer; { als Name PString ; als Bitmap Pointer }
- Command: Word;
- Disabled: Byte;
- KeyCode: Word;
- HelpCtx: Word;
- case Integer of
- 0: (Param: PString);
- 1: (SubMenu: PMenu);
- end;
-
- TMenu = record
- Items: PMenuItem;
- Default: PMenuItem;
- end;
-
- { TMenuView object }
-
- { Palette layout }
- { 1 = Normal text }
- { 2 = Disabled text }
- { 3 = Shortcut text }
- { 4 = Normal selection }
- { 5 = Disabled selection }
- { 6 = Shortcut selection }
- { 7 = Normal background }
- { 8 = Selected background }
-
- PMenuView = ^TMenuView;
- TMenuView = object(TGView)
- ParentMenu: PMenuView;
- Menu: PMenu;
- Current: PMenuItem;
- constructor Init(var Bounds: TRect);
- constructor Load(var S: TStream);
- procedure DrawItem (Item: PMenuItem); virtual;
- function Execute: Word; virtual;
- function FindItem(Ch: Char): PMenuItem;
- procedure GetItemRect(Item: PMenuItem; var R: TRect); virtual;
- function GetHelpCtx: Word; virtual;
- function GetPalette: PPalette; virtual;
- procedure HandleEvent(var Event: TEvent); virtual;
- function HotKey(KeyCode: Word): PMenuItem;
- function NewSubView(var Bounds: TRect; AMenu: PMenu;
- AParentMenu: PMenuView): PMenuView; virtual;
- procedure Store(var S: TStream);
- private
- PopupFlag: Boolean;
- OldCurrent: PMenuItem;
- EndState: Word;
- procedure GetRect (Menus: PMenu; var Bounds: TRect);
- procedure DoSubMenu (var Item: PMenuItem; Mouse: Boolean;
- var Event: TEvent);
- end;
-
- { TMenuBar object }
-
- { Palette layout }
- { 1 = Normal text }
- { 2 = Disabled text }
- { 3 = Shortcut text }
- { 4 = Normal selection }
- { 5 = Disabled selection }
- { 6 = Shortcut selection }
- { 7 = Normal background }
- { 8 = Selected background }
-
- PMenuBar = ^TMenuBar;
- TMenuBar = object(TMenuView)
- constructor Init(var Bounds: TRect; AMenu: PMenu);
- destructor Done; virtual;
- procedure Draw; virtual;
- procedure DrawItem (Item: PMenuItem); virtual;
- procedure GetItemRect(Item: PMenuItem; var R: TRect); virtual;
- end;
-
- { TMenuBox object }
-
- { Palette layout }
- { 1 = Normal text }
- { 2 = Disabled text }
- { 3 = Shortcut text }
- { 4 = Normal selection }
- { 5 = Disabled selection }
- { 6 = Shortcut selection }
- { 7 = Normal background }
- { 8 = Selected background }
-
- PMenuBox = ^TMenuBox;
- TMenuBox = object(TMenuView)
- constructor Init(var Bounds: TRect; AMenu: PMenu;
- AParentMenu: PMenuView);
- procedure Draw; virtual;
- procedure DrawItem (Item: PMenuItem); virtual;
- procedure GetItemRect(Item: PMenuItem; var R: TRect); virtual;
- end;
-
- { TMenuPopup object }
-
- { Palette layout }
- { 1 = Normal text }
- { 2 = Disabled text }
- { 3 = Shortcut text }
- { 4 = Normal selection }
- { 5 = Disabled selection }
- { 6 = Shortcut selection }
- { 7 = Normal background }
- { 8 = Selected background }
-
- PMenuPopup = ^TMenuPopup;
- TMenuPopup = object(TMenuBox)
- constructor Init(var Bounds: TRect; AMenu: PMenu);
- function Execute: Word; virtual;
- procedure HandleEvent(var Event: TEvent); virtual;
- procedure SetState(AState: Word; Enable: Boolean); virtual;
- end;
-
- { TStatusItem }
-
- PStatusItem = ^TStatusItem;
- TStatusItem = record
- Next: PStatusItem;
- Text: PString;
- KeyCode: Word;
- Command: Word;
- end;
-
- { TStatusDef }
-
- PStatusDef = ^TStatusDef;
- TStatusDef = record
- Next: PStatusDef;
- Min, Max: Word;
- Items: PStatusItem;
- end;
-
- { TStatusLine }
-
- { Palette layout }
- { 1 = Normal text }
- { 2 = Disabled text }
- { 3 = Shortcut text }
- { 4 = Normal selection }
- { 5 = Disabled selection }
- { 6 = Shortcut selection }
- { 7 = Normal background }
- { 8 = Selected background }
-
- PStatusLine = ^TStatusLine;
- TStatusLine = object(TGView)
- Items: PStatusItem;
- Defs: PStatusDef;
- constructor Init (var Bounds: TRect; ADefs: PStatusDef);
- constructor Load (var S: TStream);
- destructor Done; virtual;
- procedure Draw; virtual;
- function GetPalette: PPalette; virtual;
- procedure HandleEvent(var Event: TEvent); virtual;
- function Hint (AHelpCtx: Word): String; virtual;
- procedure Store (var S: TStream);
- procedure Update; virtual;
- private
- HelpContext: Word;
- Current: PStatusDef;
- CItem: PStatusItem;
- procedure GetItemRect (Item: PStatusItem; var R: TRect);
- procedure DrawItem (Item: PStatusItem);
- procedure DrawHint;
- end;
-
- { TMenuItem routines }
-
- function NewItem(Name, Param: TMenuStr; KeyCode: Word; Command: Word;
- AHelpCtx: Word; Next: PMenuItem): PMenuItem;
- function NewBitmap(Bitmap: Pointer; 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;
- function NewBmpSubMenu(Bitmap: Pointer; 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: PStatusItem;
- ANext: PStatusDef): PStatusDef;
- function NewStatusKey(AText: String; AKeyCode: Word; ACommand: Word;
- ANext: PStatusItem): PStatusItem;
-
- { GVMenus registration procedure }
-
- procedure RegisterGVMenus;
-
- const
-
- { Stream registration records }
-
- RMenuBar: TStreamRec = (
- ObjType: 41;
- VmtLink: Ofs(TypeOf(TMenuBar)^);
- Load: @TMenuBar.Load;
- Store: @TMenuBar.Store);
-
- RMenuBox: TStreamRec = (
- ObjType: 42;
- VmtLink: Ofs(TypeOf(TMenuBox)^);
- Load: @TMenuBox.Load;
- Store: @TMenuBox.Store);
-
- RStatusLine: TStreamRec = (
- ObjType: 43;
- VmtLink: Ofs(TypeOf(TStatusLine)^);
- Load: @TStatusLine.Load;
- Store: @TStatusLine.Store);
-
- RMenuPopup: TStreamRec = (
- ObjType: 44;
- VmtLink: Ofs(TypeOf(TMenuPopup)^);
- Load: @TMenuPopup.Load;
- Store: @TMenuPopup.Store);
-
- implementation
-