PageRenderTime 50ms CodeModel.GetById 22ms RepoModel.GetById 0ms app.codeStats 0ms

/pascalscript/Source/uPSC_menus.pas

https://bitbucket.org/sas_team/sas.requires
Pascal | 214 lines | 177 code | 26 blank | 11 comment | 1 complexity | 316db4fdb207d89980fe7073e195282d MD5 | raw file
Possible License(s): GPL-3.0, Apache-2.0, BSD-3-Clause, LGPL-3.0, LGPL-2.1
  1. { Menus Import Unit }
  2. Unit uPSC_menus;
  3. {$I PascalScript.inc}
  4. Interface
  5. Uses uPSCompiler;
  6. procedure SIRegisterTMENUITEMSTACK(CL: TPSPascalCompiler);
  7. procedure SIRegisterTPOPUPLIST(CL: TPSPascalCompiler);
  8. procedure SIRegisterTPOPUPMENU(CL: TPSPascalCompiler);
  9. procedure SIRegisterTMAINMENU(CL: TPSPascalCompiler);
  10. procedure SIRegisterTMENU(CL: TPSPascalCompiler);
  11. procedure SIRegisterTMENUITEM(CL: TPSPascalCompiler);
  12. procedure SIRegister_Menus(Cl: TPSPascalCompiler);
  13. implementation
  14. procedure SIRegisterTMENUITEMSTACK(CL: TPSPascalCompiler);
  15. begin
  16. With cl.AddClassN(Cl.FindClass('TStack'),'TMenuItemStack') do
  17. begin
  18. RegisterMethod('procedure ClearItem(AItem: TMenuItem)');
  19. end;
  20. end;
  21. procedure SIRegisterTPOPUPLIST(CL: TPSPascalCompiler);
  22. begin
  23. With cl.AddClassN(Cl.FindClass('TList'),'TPopupList') do
  24. begin
  25. RegisterProperty('Window', 'HWND', iptr);
  26. RegisterMethod('procedure Add(Popup: TPopupMenu)');
  27. RegisterMethod('procedure Remove(Popup: TPopupMenu)');
  28. end;
  29. end;
  30. procedure SIRegisterTPOPUPMENU(CL: TPSPascalCompiler);
  31. var
  32. cc: TPSCompileTimeClass;
  33. begin
  34. With cl.AddClassN(Cl.FindClass('TMenu'),'TPopupMenu') do
  35. begin
  36. cc := Cl.FindClass('TLabel');
  37. if cc <> nil then
  38. RegisterProperty('PopupMenu', 'TPopupMenu', iptRW);
  39. with Cl.FindClass('TForm') do
  40. begin
  41. RegisterProperty('PopupMenu', 'TPopupMenu', iptRW);
  42. end;
  43. RegisterMethod('constructor Create(AOwner: TComponent)');
  44. RegisterMethod('procedure Popup(X, Y: Integer)');
  45. RegisterProperty('PopupComponent', 'TComponent', iptrw);
  46. RegisterProperty('Alignment', 'TPopupAlignment', iptrw);
  47. RegisterProperty('AutoPopup', 'Boolean', iptrw);
  48. RegisterProperty('HelpContext', 'THelpContext', iptrw);
  49. RegisterProperty('MenuAnimation', 'TMenuAnimation', iptrw);
  50. RegisterProperty('TrackButton', 'TTrackButton', iptrw);
  51. RegisterProperty('OnPopup', 'TNotifyEvent', iptrw);
  52. end;
  53. end;
  54. procedure SIRegisterTMAINMENU(CL: TPSPascalCompiler);
  55. begin
  56. With cl.AddClassN(Cl.FindClass('TMenu'),'TMainMenu') do
  57. begin
  58. RegisterMethod('procedure Merge(Menu: TMainMenu)');
  59. RegisterMethod('procedure Unmerge(Menu: TMainMenu)');
  60. RegisterMethod('procedure PopulateOle2Menu(SharedMenu: HMENU; Groups: array of Integer; var Widths: array of LongInt)');
  61. RegisterMethod('procedure GetOle2AcceleratorTable(var AccelTable: HACCEL; var AccelCount: Integer; Groups: array of Integer)');
  62. RegisterMethod('procedure SetOle2MenuHandle(Handle: HMENU)');
  63. RegisterProperty('AutoMerge', 'Boolean', iptrw);
  64. end;
  65. end;
  66. procedure SIRegisterTMENU(CL: TPSPascalCompiler);
  67. begin
  68. With cl.AddClassN(Cl.FindClass('TComponent'),'TMenu') do
  69. begin
  70. RegisterMethod('constructor Create(AOwner: TComponent)');
  71. RegisterMethod('function DispatchCommand(ACommand: Word): Boolean');
  72. RegisterMethod('function DispatchPopup(AHandle: HMENU): Boolean');
  73. RegisterMethod('function FindItem(Value: Integer; Kind: TFindItemKind): TMenuItem');
  74. RegisterMethod('function GetHelpContext(Value: Integer; ByCommand: Boolean): THelpContext');
  75. RegisterProperty('Images', 'TCustomImageList', iptrw);
  76. RegisterMethod('function IsRightToLeft: Boolean');
  77. RegisterMethod('procedure ParentBiDiModeChanged(AControl: TObject)');
  78. RegisterMethod('procedure ProcessMenuChar(var Message: TWMMenuChar)');
  79. RegisterProperty('AutoHotkeys', 'TMenuAutoFlag', iptrw);
  80. RegisterProperty('AutoLineReduction', 'TMenuAutoFlag', iptrw);
  81. RegisterProperty('BiDiMode', 'TBiDiMode', iptrw);
  82. RegisterProperty('Handle', 'HMENU', iptr);
  83. RegisterProperty('OwnerDraw', 'Boolean', iptrw);
  84. RegisterProperty('ParentBiDiMode', 'Boolean', iptrw);
  85. RegisterProperty('WindowHandle', 'HWND', iptrw);
  86. RegisterProperty('Items', 'TMenuItem', iptr);
  87. end;
  88. end;
  89. procedure SIRegisterTMENUITEM(CL: TPSPascalCompiler);
  90. begin
  91. With cl.AddClassN(Cl.FindClass('TComponent'),'TMenuItem') do
  92. begin
  93. RegisterMethod('constructor Create(AOwner: TComponent)');
  94. RegisterMethod('procedure InitiateAction');
  95. RegisterMethod('procedure Insert(Index: Integer; Item: TMenuItem)');
  96. RegisterMethod('procedure Delete(Index: Integer)');
  97. RegisterMethod('procedure Clear');
  98. RegisterMethod('procedure Click');
  99. RegisterMethod('function Find(ACaption: string): TMenuItem');
  100. RegisterMethod('function IndexOf(Item: TMenuItem): Integer');
  101. RegisterMethod('function IsLine: Boolean');
  102. RegisterMethod('function GetImageList: TCustomImageList');
  103. RegisterMethod('function GetParentComponent: TComponent');
  104. RegisterMethod('function GetParentMenu: TMenu');
  105. RegisterMethod('function HasParent: Boolean');
  106. RegisterMethod('function NewTopLine: Integer');
  107. RegisterMethod('function NewBottomLine: Integer');
  108. RegisterMethod('function InsertNewLineBefore(AItem: TMenuItem): Integer');
  109. RegisterMethod('function InsertNewLineAfter(AItem: TMenuItem): Integer');
  110. RegisterMethod('procedure Add(Item: TMenuItem)');
  111. RegisterMethod('procedure Remove(Item: TMenuItem)');
  112. RegisterMethod('function RethinkHotkeys: Boolean');
  113. RegisterMethod('function RethinkLines: Boolean');
  114. RegisterProperty('Command', 'Word', iptr);
  115. RegisterProperty('Handle', 'HMENU', iptr);
  116. RegisterProperty('Count', 'Integer', iptr);
  117. RegisterProperty('Items', 'TMenuItem Integer', iptr);
  118. RegisterProperty('MenuIndex', 'Integer', iptrw);
  119. RegisterProperty('Parent', 'TMenuItem', iptr);
  120. {$IFDEF DELPHI5UP}
  121. RegisterProperty('Action', 'TBasicAction', iptrw);
  122. {$ENDIF}
  123. RegisterProperty('AutoHotkeys', 'TMenuItemAutoFlag', iptrw);
  124. RegisterProperty('AutoLineReduction', 'TMenuItemAutoFlag', iptrw);
  125. RegisterProperty('Bitmap', 'TBitmap', iptrw);
  126. RegisterProperty('Caption', 'string', iptrw);
  127. RegisterProperty('Checked', 'Boolean', iptrw);
  128. RegisterProperty('SubMenuImages', 'TCustomImageList', iptrw);
  129. RegisterProperty('Default', 'Boolean', iptrw);
  130. RegisterProperty('Enabled', 'Boolean', iptrw);
  131. RegisterProperty('GroupIndex', 'Byte', iptrw);
  132. RegisterProperty('HelpContext', 'THelpContext', iptrw);
  133. RegisterProperty('Hint', 'string', iptrw);
  134. RegisterProperty('ImageIndex', 'TImageIndex', iptrw);
  135. RegisterProperty('RadioItem', 'Boolean', iptrw);
  136. RegisterProperty('ShortCut', 'TShortCut', iptrw);
  137. RegisterProperty('Visible', 'Boolean', iptrw);
  138. RegisterProperty('OnClick', 'TNotifyEvent', iptrw);
  139. {$IFNDEF FPC} RegisterProperty('OnDrawItem', 'TMenuDrawItemEvent', iptrw);
  140. RegisterProperty('OnAdvancedDrawItem', 'TAdvancedMenuDrawItemEvent', iptrw);
  141. RegisterProperty('OnMeasureItem', 'TMenuMeasureItemEvent', iptrw);{$ENDIF}
  142. end;
  143. end;
  144. procedure SIRegister_Menus(Cl: TPSPascalCompiler);
  145. begin
  146. Cl.AddTypeS('HMENU', 'Cardinal');
  147. Cl.AddTypeS('HACCEL', 'Cardinal');
  148. cl.addClassN(cl.FindClass('Exception'),'EMenuError');
  149. Cl.addTypeS('TMenuBreak', '(mbNone, mbBreak, mbBarBreak)');
  150. {$IFNDEF FPC}
  151. Cl.addTypeS('TMenuDrawItemEvent', 'procedure (Sender: TObject; ACanvas: TCanvas; ARect: TRect; Selected: Boolean)');
  152. Cl.addTypeS('TAdvancedMenuDrawItemEvent', 'procedure (Sender: TObject; ACanvas: TCanvas; ARect: TRect; State: TOwnerDrawState)');
  153. Cl.addTypeS('TMenuMeasureItemEvent', 'procedure (Sender: TObject; ACanvas: TCanvas; var Width, Height: Integer)');
  154. {$ENDIF}
  155. Cl.addTypeS('TMenuItemAutoFlag', '(maAutomatic, maManual, maParent)');
  156. Cl.AddTypeS('TMenuAutoFlag', 'TMenuItemAutoFlag');
  157. Cl.addTypeS('TShortCut', 'Word');
  158. cl.addClassN(cl.FindClass('TActionLink'),'TMenuActionLink');
  159. SIRegisterTMENUITEM(Cl);
  160. Cl.addTypeS('TMenuChangeEvent', 'procedure (Sender: TObject; Source: TMenuItem; Rebuild: Boolean)');
  161. Cl.addTypeS('TFindItemKind', '(fkCommand, fkHandle, fkShortCut)');
  162. SIRegisterTMENU(Cl);
  163. SIRegisterTMAINMENU(Cl);
  164. Cl.addTypeS('TPopupAlignment', '(paLeft, paRight, paCenter)');
  165. Cl.addTypeS('TTrackButton', '(tbRightButton, tbLeftButton)');
  166. Cl.addTypeS('TMenuAnimations', '(maLeftToRight, maRightToLeft, maTopToBottom, maBottomToTop, maNone)');
  167. Cl.addTypeS('TMenuAnimation', 'set of TMenuAnimations');
  168. SIRegisterTPOPUPMENU(Cl);
  169. SIRegisterTPOPUPLIST(Cl);
  170. SIRegisterTMENUITEMSTACK(Cl);
  171. Cl.addTypeS('TCMenuItem', 'TMenuItem');
  172. {$IFNDEF FPC}
  173. //TODO: it should work,but somehow TShiftState is not defined
  174. Cl.AddDelphiFunction('function ShortCut(Key: Word; Shift: TShiftState): TShortCut');
  175. Cl.AddDelphiFunction('procedure ShortCutToKey(ShortCut: TShortCut; var Key: Word; var Shift: TShiftState)');
  176. {$ENDIF}
  177. Cl.AddDelphiFunction('function ShortCutToText(ShortCut: TShortCut): string');
  178. Cl.AddDelphiFunction('function TextToShortCut(Text: string): TShortCut');
  179. Cl.AddDelphiFunction('function NewMenu(Owner: TComponent; const AName: string; Items: array of TMenuItem): TMainMenu');
  180. Cl.AddDelphiFunction('function NewPopupMenu(Owner: TComponent; const AName: string; Alignment: TPopupAlignment; AutoPopup: Boolean; const Items: array of TCMenuItem): TPopupMenu');
  181. Cl.AddDelphiFunction('function NewSubMenu(const ACaption: string; HCTX: Word; const AName: string; Items: array of TMenuItem; AEnabled: Boolean): TMenuItem');
  182. Cl.AddDelphiFunction('function NewItem(const ACaption: string; AShortCut: TShortCut; Achecked, AEnabled: Boolean; AOnClick: TNotifyEvent; HCTX: Word; const AName: string): TMenuItem');
  183. Cl.AddDelphiFunction('function NewLine: TMenuItem');
  184. {$IFNDEF FPC}
  185. Cl.AddDelphiFunction('procedure DrawMenuItem(MenuItem: TMenuItem; ACanvas: TCanvas; ARect: TRect; State: TOwnerDrawState)');
  186. {$ENDIF}
  187. end;
  188. end.