home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 9 / 09.iso / l / l044 / 2.ddi / INTRFACE.ZIP / MENUS.INT < prev    next >
Encoding:
Text File  |  1990-10-23  |  5.0 KB  |  207 lines

  1.  
  2. {*******************************************************}
  3. {                                                       }
  4. {       Turbo Pascal Version 6.0                        }
  5. {       Turbo Vision Unit                               }
  6. {                                                       }
  7. {       Copyright (c) 1990 Borland International        }
  8. {                                                       }
  9. {*******************************************************}
  10.  
  11. unit Menus;
  12.  
  13. {$F+,O+,S-}
  14.  
  15. interface
  16.  
  17. uses Objects, Drivers, Views;
  18.  
  19. const
  20.  
  21. { Color palettes }
  22.  
  23.   CMenuView   = #2#3#4#5#6#7;
  24.   CStatusLine = #2#3#4#5#6#7;
  25.  
  26. type
  27.  
  28. { TMenu types }
  29.  
  30.   TMenuStr = string[31];
  31.  
  32.   PMenu = ^TMenu;
  33.  
  34.   PMenuItem = ^TMenuItem;
  35.   TMenuItem = record
  36.     Next: PMenuItem;
  37.     Name: PString;
  38.     Command: Word;
  39.     Disabled: Boolean;
  40.     KeyCode: Word;
  41.     HelpCtx: Word;
  42.     case Integer of
  43.       0: (Param: PString);
  44.       1: (SubMenu: PMenu);
  45.   end;
  46.  
  47.   TMenu = record
  48.     Items: PMenuItem;
  49.     Default: PMenuItem;
  50.   end;
  51.  
  52. { TMenuView object }
  53.  
  54.   { Palette layout }
  55.   { 1 = Normal text }
  56.   { 2 = Disabled text }
  57.   { 3 = Shortcut text }
  58.   { 4 = Normal selection }
  59.   { 5 = Disabled selection }
  60.   { 6 = Shortcut selection }
  61.  
  62.   PMenuView = ^TMenuView;
  63.   TMenuView = object(TView)
  64.     ParentMenu: PMenuView;
  65.     Menu: PMenu;
  66.     Current: PMenuItem;
  67.     constructor Init(var Bounds: TRect);
  68.     constructor Load(var S: TStream);
  69.     function Execute: Word; virtual;
  70.     function FindItem(Ch: Char): PMenuItem;
  71.     procedure GetItemRect(Item: PMenuItem; var R: TRect); virtual;
  72.     function GetHelpCtx: Word; virtual;
  73.     function GetPalette: PPalette; virtual;
  74.     procedure HandleEvent(var Event: TEvent); virtual;
  75.     function HotKey(KeyCode: Word): PMenuItem;
  76.     function NewSubView(var Bounds: TRect; AMenu: PMenu;
  77.       AParentMenu: PMenuView): PMenuView; virtual;
  78.     procedure Store(var S: TStream);
  79.   end;
  80.  
  81. { TMenuBar object }
  82.  
  83.   { Palette layout }
  84.   { 1 = Normal text }
  85.   { 2 = Disabled text }
  86.   { 3 = Shortcut text }
  87.   { 4 = Normal selection }
  88.   { 5 = Disabled selection }
  89.   { 6 = Shortcut selection }
  90.  
  91.   PMenuBar = ^TMenuBar;
  92.   TMenuBar = object(TMenuView)
  93.     constructor Init(var Bounds: TRect; AMenu: PMenu);
  94.     destructor Done; virtual;
  95.     procedure Draw; virtual;
  96.     procedure GetItemRect(Item: PMenuItem; var R: TRect); virtual;
  97.   end;
  98.  
  99. { TMenuBox object }
  100.  
  101.   { Palette layout }
  102.   { 1 = Normal text }
  103.   { 2 = Disabled text }
  104.   { 3 = Shortcut text }
  105.   { 4 = Normal selection }
  106.   { 5 = Disabled selection }
  107.   { 6 = Shortcut selection }
  108.  
  109.   PMenuBox = ^TMenuBox;
  110.   TMenuBox = object(TMenuView)
  111.     constructor Init(var Bounds: TRect; AMenu: PMenu;
  112.       AParentMenu: PMenuView);
  113.     procedure Draw; virtual;
  114.     procedure GetItemRect(Item: PMenuItem; var R: TRect); virtual;
  115.   end;
  116.  
  117. { TStatusItem }
  118.  
  119.   PStatusItem = ^TStatusItem;
  120.   TStatusItem = record
  121.     Next: PStatusItem;
  122.     Text: PString;
  123.     KeyCode: Word;
  124.     Command: Word;
  125.   end;
  126.  
  127. { TStatusDef }
  128.  
  129.   PStatusDef = ^TStatusDef;
  130.   TStatusDef = record
  131.     Next: PStatusDef;
  132.     Min, Max: Word;
  133.     Items: PStatusItem;
  134.   end;
  135.  
  136. { TStatusLine }
  137.  
  138.   { Palette layout }
  139.   { 1 = Normal text }
  140.   { 2 = Disabled text }
  141.   { 3 = Shortcut text }
  142.   { 4 = Normal selection }
  143.   { 5 = Disabled selection }
  144.   { 6 = Shortcut selection }
  145.  
  146.   PStatusLine = ^TStatusLine;
  147.   TStatusLine = object(TView)
  148.     Items: PStatusItem;
  149.     Defs: PStatusDef;
  150.     constructor Init(var Bounds: TRect; ADefs: PStatusDef);
  151.     constructor Load(var S: TStream);
  152.     destructor Done; virtual;
  153.     procedure Draw; virtual;
  154.     function GetPalette: PPalette; virtual;
  155.     procedure HandleEvent(var Event: TEvent); virtual;
  156.     function Hint(AHelpCtx: Word): String; virtual;
  157.     procedure Store(var S: TStream);
  158.     procedure Update; virtual;
  159.   end;
  160.  
  161. { TMenuItem routines }
  162.  
  163. function NewItem(Name, Param: TMenuStr; KeyCode: Word; Command: Word;
  164.   AHelpCtx: Word; Next: PMenuItem): PMenuItem;
  165. function NewLine(Next: PMenuItem): PMenuItem;
  166. function NewSubMenu(Name: TMenuStr; AHelpCtx: Word; SubMenu: PMenu;
  167.   Next: PMenuItem): PMenuItem;
  168.  
  169. { TMenu routines }
  170.  
  171. function NewMenu(Items: PMenuItem): PMenu;
  172. procedure DisposeMenu(Menu: PMenu);
  173.  
  174. { TStatusLine routines }
  175.  
  176. function NewStatusDef(AMin, AMax: Word; AItems: PStatusItem;
  177.   ANext: PStatusDef): PStatusDef;
  178. function NewStatusKey(AText: String; AKeyCode: Word; ACommand: Word;
  179.   ANext: PStatusItem): PStatusItem;
  180.  
  181. { Menus registration procedure }
  182.  
  183. procedure RegisterMenus;
  184.  
  185. const
  186.  
  187. { Stream registration records }
  188.  
  189.   RMenuBar: TStreamRec = (
  190.      ObjType: 40;
  191.      VmtLink: Ofs(TypeOf(TMenuBar)^);
  192.      Load:    @TMenuBar.Load;
  193.      Store:   @TMenuBar.Store
  194.   );
  195.   RMenuBox: TStreamRec = (
  196.      ObjType: 41;
  197.      VmtLink: Ofs(TypeOf(TMenuBox)^);
  198.      Load:    @TMenuBox.Load;
  199.      Store:   @TMenuBox.Store
  200.   );
  201.   RStatusLine: TStreamRec = (
  202.      ObjType: 42;
  203.      VmtLink: Ofs(TypeOf(TStatusLine)^);
  204.      Load:    @TStatusLine.Load;
  205.      Store:   @TStatusLine.Store
  206.   );
  207.