DesignerMenu.cs 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821
  1. using System;
  2. using System.Windows.Forms;
  3. using System.ComponentModel;
  4. using FastReport.Utils;
  5. using FastReport.Design.ToolWindows;
  6. using FastReport.Design.Toolbars;
  7. using FastReport.Forms;
  8. using FastReport.DevComponents.DotNetBar;
  9. namespace FastReport.Design.StandardDesigner
  10. {
  11. /// <summary>
  12. /// Represents the designer's main menu.
  13. /// </summary>
  14. /// <remarks>
  15. /// To get this menu, use the following code:
  16. /// <code>
  17. /// Designer designer;
  18. /// DesignerMenu menu = designer.Plugins.FindType("DesignerMenu") as DesignerMenu;
  19. /// </code>
  20. /// </remarks>
  21. [ToolboxItem(false)]
  22. public class DesignerMenu : Bar, IDesignerPlugin
  23. {
  24. #region Fields
  25. private Designer designer;
  26. /// <summary>
  27. /// The "File" menu.
  28. /// </summary>
  29. public ButtonItem miFile;
  30. /// <summary>
  31. /// The "File|New..." menu.
  32. /// </summary>
  33. public ButtonItem miFileNew;
  34. /// <summary>
  35. /// The "File|Open..." menu.
  36. /// </summary>
  37. public ButtonItem miFileOpen;
  38. /// <summary>
  39. /// The "File|Close" menu.
  40. /// </summary>
  41. public ButtonItem miFileClose;
  42. /// <summary>
  43. /// The "File|Save" menu.
  44. /// </summary>
  45. public ButtonItem miFileSave;
  46. /// <summary>
  47. /// The "File|Save as..." menu.
  48. /// </summary>
  49. public ButtonItem miFileSaveAs;
  50. /// <summary>
  51. /// The "File|Save with random data..." menu.
  52. /// </summary>
  53. public ButtonItem miFileSaveWithRandomData;
  54. /// <summary>
  55. /// The "File|Save All" menu.
  56. /// </summary>
  57. public ButtonItem miFileSaveAll;
  58. /// <summary>
  59. /// The "File|Page Setup..." menu.
  60. /// </summary>
  61. public ButtonItem miFilePageSetup;
  62. /// <summary>
  63. /// The "File|Printer Setup..." menu.
  64. /// </summary>
  65. public ButtonItem miFilePrinterSetup;
  66. /// <summary>
  67. /// The "File|Preview..." menu.
  68. /// </summary>
  69. public ButtonItem miFilePreview;
  70. /// <summary>
  71. /// The "File|Select Language" menu.
  72. /// </summary>
  73. public ButtonItem miFileSelectLanguage;
  74. /// <summary>
  75. /// The "File|Exit" menu.
  76. /// </summary>
  77. public ButtonItem miFileExit;
  78. /// <summary>
  79. /// The "Edit" menu.
  80. /// </summary>
  81. public ButtonItem miEdit;
  82. /// <summary>
  83. /// The "Edit|Undo" menu.
  84. /// </summary>
  85. public ButtonItem miEditUndo;
  86. /// <summary>
  87. /// The "Edit|Redo" menu.
  88. /// </summary>
  89. public ButtonItem miEditRedo;
  90. /// <summary>
  91. /// The "Edit|Cut" menu.
  92. /// </summary>
  93. public ButtonItem miEditCut;
  94. /// <summary>
  95. /// The "Edit|Copy" menu.
  96. /// </summary>
  97. public ButtonItem miEditCopy;
  98. /// <summary>
  99. /// The "Edit|Paste" menu.
  100. /// </summary>
  101. public ButtonItem miEditPaste;
  102. /// <summary>
  103. /// The "Edit|Delete" menu.
  104. /// </summary>
  105. public ButtonItem miEditDelete;
  106. /// <summary>
  107. /// The "Edit|NewPage" menu.
  108. /// </summary>
  109. public ButtonItem miEditNewPage;
  110. /// <summary>
  111. /// The "Edit|Copy Page" menu.
  112. /// </summary>
  113. public ButtonItem miEditCopyPage;
  114. /// <summary>
  115. /// The "Edit|Delete Page" menu.
  116. /// </summary>
  117. public ButtonItem miEditDeletePage;
  118. /// <summary>
  119. /// The "Edit|Select All" menu.
  120. /// </summary>
  121. public ButtonItem miEditSelectAll;
  122. /// <summary>
  123. /// The "Edit|Group" menu.
  124. /// </summary>
  125. public ButtonItem miEditGroup;
  126. /// <summary>
  127. /// The "Edit|Ungroup" menu.
  128. /// </summary>
  129. public ButtonItem miEditUngroup;
  130. /// <summary>
  131. /// The "Edit|Find..." menu.
  132. /// </summary>
  133. public ButtonItem miEditFind;
  134. /// <summary>
  135. /// The "Edit|Replace..." menu.
  136. /// </summary>
  137. public ButtonItem miEditReplace;
  138. /// <summary>
  139. /// The "View" menu.
  140. /// </summary>
  141. public ButtonItem miView;
  142. /// <summary>
  143. /// The "View|Toolbars" menu.
  144. /// </summary>
  145. public ButtonItem miViewToolbars;
  146. /// <summary>
  147. /// The "View|Start Page" menu.
  148. /// </summary>
  149. public ButtonItem miViewStartPage;
  150. /// <summary>
  151. /// The "View|Options..." menu.
  152. /// </summary>
  153. public ButtonItem miViewOptions;
  154. /// <summary>
  155. /// The "Insert" menu.
  156. /// </summary>
  157. public ButtonItem miInsert;
  158. /// <summary>
  159. /// The "Report" menu.
  160. /// </summary>
  161. public ButtonItem miReport;
  162. /// <summary>
  163. /// The "Report|Options..." menu.
  164. /// </summary>
  165. public ButtonItem miReportOptions;
  166. /// <summary>
  167. /// The "Data" menu.
  168. /// </summary>
  169. public ButtonItem miData;
  170. /// <summary>
  171. /// The "Data|Choose Report Data..." menu.
  172. /// </summary>
  173. public ButtonItem miDataChoose;
  174. /// <summary>
  175. /// The "Data|Add Data Source..." menu.
  176. /// </summary>
  177. public ButtonItem miDataAdd;
  178. /// <summary>
  179. /// The "Data|Show Data Dictionary" menu.
  180. /// </summary>
  181. public ButtonItem miDataShowData;
  182. /// <summary>
  183. /// The "Window" menu.
  184. /// </summary>
  185. public ButtonItem miWindow;
  186. /// <summary>
  187. /// The "Window|Close All" menu.
  188. /// </summary>
  189. public ButtonItem miWindowCloseAll;
  190. /// <summary>
  191. /// The "Help" menu.
  192. /// </summary>
  193. public ButtonItem miHelp;
  194. /// <summary>
  195. /// The "Help|Help Contents..." menu.
  196. /// </summary>
  197. public ButtonItem miHelpContents;
  198. public ButtonItem miHelpAccount;
  199. /// <summary>
  200. /// The "Help|About..." menu.
  201. /// </summary>
  202. public ButtonItem miHelpAbout;
  203. #endregion
  204. #region Properties
  205. internal Designer Designer
  206. {
  207. get { return designer; }
  208. }
  209. /// <inheritdoc/>
  210. public string PluginName
  211. {
  212. get { return Name; }
  213. }
  214. #endregion
  215. #region Protected Methods
  216. /// <inheritdoc/>
  217. protected override bool ProcessShortcut(eShortcut key)
  218. {
  219. if (!Config.DisableHotkeys)
  220. return base.ProcessShortcut(key);
  221. return false;
  222. }
  223. #endregion
  224. #region Private Methods
  225. private void UpdateControls()
  226. {
  227. miFileNew.Enabled = Designer.cmdNew.Enabled;
  228. miFileOpen.Enabled = Designer.cmdOpen.Enabled;
  229. miFileClose.Enabled = Designer.cmdClose.Enabled;
  230. miFileClose.Visible = Designer.MdiMode;
  231. miFileSave.Enabled = Designer.cmdSave.Enabled;
  232. miFileSaveAs.Enabled = Designer.cmdSaveAs.Enabled;
  233. miFileSaveWithRandomData.Enabled = Designer.cmdSaveWithRandomData.Enabled;
  234. miFileSaveAll.Visible = Designer.MdiMode;
  235. miFileSaveAll.Enabled = Designer.cmdSaveAll.Enabled;
  236. miFilePageSetup.Enabled = Designer.cmdPageSetup.Enabled;
  237. miFilePrinterSetup.Enabled = Designer.cmdPrinterSetup.Enabled;
  238. miFilePreview.Enabled = Designer.cmdPreview.Enabled;
  239. miEditUndo.Enabled = Designer.cmdUndo.Enabled;
  240. miEditRedo.Enabled = Designer.cmdRedo.Enabled;
  241. miEditCut.Enabled = Designer.cmdCut.Enabled;
  242. miEditCopy.Enabled = Designer.cmdCopy.Enabled;
  243. miEditNewPage.Enabled = Designer.cmdNewPage.Enabled;
  244. miEditCopyPage.Enabled = Designer.cmdCopyPage.Enabled;
  245. miEditDeletePage.Enabled = Designer.cmdDeletePage.Enabled;
  246. miEditDelete.Enabled = Designer.cmdDelete.Enabled;
  247. miEditSelectAll.Enabled = Designer.cmdSelectAll.Enabled;
  248. miEditGroup.Enabled = Designer.cmdGroup.Enabled;
  249. miEditUngroup.Enabled = Designer.cmdUngroup.Enabled;
  250. miEditFind.Enabled = Designer.cmdFind.Enabled;
  251. miEditReplace.Enabled = Designer.cmdReplace.Enabled;
  252. miInsert.Visible = Designer.cmdInsert.Enabled;
  253. miDataChoose.Enabled = Designer.cmdChooseData.Enabled;
  254. miDataAdd.Enabled = Designer.cmdAddData.Enabled;
  255. miReportOptions.Enabled = Designer.cmdReportSettings.Enabled;
  256. miViewStartPage.Visible = Designer.MdiMode;
  257. miWindow.Visible = Designer.MdiMode;
  258. miHelpContents.Enabled = Designer.cmdHelpContents.Enabled;
  259. miHelpAccount.Enabled = Designer.cmdAccount.Enabled;
  260. Refresh();
  261. }
  262. private void InsertMenuCreateMenus(ObjectInfo rootItem, SubItemsCollection rootMenu)
  263. {
  264. foreach (ObjectInfo item in rootItem.Items)
  265. {
  266. ButtonItem menuItem = new ButtonItem();
  267. menuItem.Text = Res.TryGet(item.Text);
  268. menuItem.Tag = item;
  269. rootMenu.Add(menuItem);
  270. if (item.Items.Count > 0)
  271. {
  272. // it's a category
  273. InsertMenuCreateMenus(item, menuItem.SubItems);
  274. }
  275. else
  276. {
  277. menuItem.ImageIndex = item.ImageIndex;
  278. menuItem.Image = this.GetImage(item.ImageIndex);
  279. menuItem.Click += insertMenu_Click;
  280. }
  281. }
  282. }
  283. private void CreateInsertMenu()
  284. {
  285. if (Designer.ActiveReportTab != null && Designer.ActiveReportTab.ActivePage != null)
  286. {
  287. ObjectInfo pageItem = RegisteredObjects.FindObject(Designer.ActiveReportTab.ActivePage);
  288. if (pageItem != null)
  289. {
  290. InsertMenuCreateMenus(pageItem, miInsert.SubItems);
  291. }
  292. }
  293. }
  294. private void miFile_PopupOpen(object sender, PopupOpenEventArgs e)
  295. {
  296. // clear existing recent items
  297. int i = miFile.SubItems.IndexOf(miFileSelectLanguage) + 1;
  298. while (miFile.SubItems[i] != miFileExit)
  299. {
  300. miFile.SubItems[i].Dispose();
  301. miFile.SubItems.RemoveAt(i);
  302. }
  303. // add new items
  304. if (Designer.cmdRecentFiles.Enabled && Designer.RecentFiles.Count > 0)
  305. {
  306. foreach (string s in Designer.RecentFiles)
  307. {
  308. ButtonItem menuItem = new ButtonItem();
  309. menuItem.Text = s;
  310. menuItem.Click += recentFile_Click;
  311. miFile.SubItems.Insert(i, menuItem);
  312. }
  313. // make the first item separator
  314. i = miFile.SubItems.IndexOf(miFileSelectLanguage) + 1;
  315. (miFile.SubItems[i] as ButtonItem).BeginGroup = true;
  316. }
  317. }
  318. private void miEdit_PopupOpen(object sender, PopupOpenEventArgs e)
  319. {
  320. miEditPaste.Enabled = Designer.cmdPaste.Enabled;
  321. }
  322. private void miInsert_PopupOpen(object sender, PopupOpenEventArgs e)
  323. {
  324. miInsert.SubItems.Clear();
  325. CreateInsertMenu();
  326. }
  327. private void miDataShowDataSources_Click(object sender, EventArgs e)
  328. {
  329. ToolWindowBase window = Designer.Plugins.Find("DictionaryWindow") as ToolWindowBase;
  330. window.Show();
  331. }
  332. private void miView_PopupOpen(object sender, PopupOpenEventArgs e)
  333. {
  334. // delete list of toolwindows
  335. while (miView.SubItems[0] != miViewStartPage)
  336. {
  337. miView.SubItems[0].Dispose();
  338. miView.SubItems.RemoveAt(0);
  339. }
  340. // create list of toolwindows
  341. foreach (IDesignerPlugin plugin in Designer.Plugins)
  342. {
  343. if (plugin is ToolWindowBase)
  344. {
  345. ButtonItem menuItem = new ButtonItem();
  346. menuItem.Text = (plugin as ToolWindowBase).Text;
  347. menuItem.ImageIndex = (plugin as ToolWindowBase).ImageIndex;
  348. menuItem.Image = (plugin as ToolWindowBase).Image;
  349. eShortcut shortcut = (plugin as ToolWindowBase).Shortcut;
  350. if (shortcut != eShortcut.None)
  351. menuItem.Shortcuts.Add(shortcut);
  352. menuItem.Tag = plugin;
  353. menuItem.Click += toolWindow_Click;
  354. miView.SubItems.Insert(0, menuItem);
  355. }
  356. }
  357. // delete list of toolbars
  358. miViewToolbars.SubItems.Clear();
  359. // create list of toolbars
  360. foreach (IDesignerPlugin plugin in Designer.Plugins)
  361. {
  362. if (plugin is ToolbarBase)
  363. {
  364. ButtonItem menuItem = new ButtonItem();
  365. menuItem.Text = (plugin as ToolbarBase).Text;
  366. menuItem.Tag = plugin;
  367. menuItem.Checked = (plugin as ToolbarBase).Visible;
  368. menuItem.AutoCheckOnClick = true;
  369. menuItem.Click += toolbar_Click;
  370. miViewToolbars.SubItems.Add(menuItem);
  371. }
  372. }
  373. }
  374. private void miWindow_PopupOpen(object sender, PopupOpenEventArgs e)
  375. {
  376. // delete list of windows
  377. while (miWindow.SubItems[0] != miWindowCloseAll)
  378. {
  379. miWindow.SubItems[0].Dispose();
  380. miWindow.SubItems.RemoveAt(0);
  381. }
  382. // create list of windows
  383. int i = 0;
  384. foreach (DocumentWindow c in Designer.Documents)
  385. {
  386. ButtonItem menuItem = new ButtonItem();
  387. menuItem.Text = (i + 1).ToString() + " " + c.Text;
  388. menuItem.Tag = c;
  389. menuItem.Checked = c == Designer.ActiveReportTab;
  390. menuItem.Click += window_Click;
  391. miWindow.SubItems.Insert(i, menuItem);
  392. i++;
  393. }
  394. }
  395. private void toolWindow_Click(object sender, EventArgs e)
  396. {
  397. ToolWindowBase window = (sender as ButtonItem).Tag as ToolWindowBase;
  398. window.Show();
  399. }
  400. private void toolbar_Click(object sender, EventArgs e)
  401. {
  402. ToolbarBase toolbar = (sender as ButtonItem).Tag as ToolbarBase;
  403. toolbar.Visible = !toolbar.Visible;
  404. }
  405. private void recentFile_Click(object sender, EventArgs e)
  406. {
  407. Designer.UpdatePlugins(null);
  408. Designer.cmdOpen.LoadFile((sender as ButtonItem).Text);
  409. }
  410. private void window_Click(object sender, EventArgs e)
  411. {
  412. DocumentWindow window = (sender as ButtonItem).Tag as DocumentWindow;
  413. window.Activate();
  414. }
  415. private void insertMenu_Click(object sender, EventArgs e)
  416. {
  417. ObjectInfo info = (sender as ButtonItem).Tag as ObjectInfo;
  418. Designer.InsertObject(info, InsertFrom.NewObject);
  419. }
  420. #endregion
  421. #region IDesignerPlugin
  422. /// <inheritdoc/>
  423. public void SaveState()
  424. {
  425. }
  426. /// <inheritdoc/>
  427. public void RestoreState()
  428. {
  429. }
  430. /// <inheritdoc/>
  431. public void SelectionChanged()
  432. {
  433. UpdateControls();
  434. }
  435. /// <inheritdoc/>
  436. public void UpdateContent()
  437. {
  438. UpdateControls();
  439. }
  440. /// <inheritdoc/>
  441. public void Lock()
  442. {
  443. }
  444. /// <inheritdoc/>
  445. public void Unlock()
  446. {
  447. UpdateContent();
  448. }
  449. /// <inheritdoc/>
  450. public void Localize()
  451. {
  452. MyRes res = new MyRes("Designer,Menu");
  453. miFile.Text = res.Get("File");
  454. miFileNew.Text = res.Get("File,New");
  455. miFileOpen.Text = res.Get("File,Open");
  456. miFileClose.Text = res.Get("File,Close");
  457. miFileSave.Text = res.Get("File,Save");
  458. miFileSaveAs.Text = res.Get("File,SaveAs");
  459. miFileSaveWithRandomData.Text = res.Get("File,SaveWithRandomData");
  460. miFileSaveAll.Text = res.Get("File,SaveAll");
  461. miFilePageSetup.Text = res.Get("File,PageSetup");
  462. miFilePrinterSetup.Text = res.Get("File,PrinterSetup");
  463. miFilePreview.Text = res.Get("File,Preview");
  464. miFileSelectLanguage.Text = res.Get("File,SelectLanguage");
  465. miFileExit.Text = res.Get("File,Exit");
  466. miEdit.Text = res.Get("Edit");
  467. miEditUndo.Text = res.Get("Edit,Undo");
  468. miEditRedo.Text = res.Get("Edit,Redo");
  469. miEditCut.Text = res.Get("Edit,Cut");
  470. miEditCopy.Text = res.Get("Edit,Copy");
  471. miEditPaste.Text = res.Get("Edit,Paste");
  472. miEditDelete.Text = res.Get("Edit,Delete");
  473. miEditNewPage.Text = res.Get("Edit,NewPage");
  474. miEditCopyPage.Text = res.Get("Edit,CopyPage");
  475. miEditDeletePage.Text = res.Get("Edit,DeletePage");
  476. miEditSelectAll.Text = res.Get("Edit,SelectAll");
  477. miEditGroup.Text = res.Get("Edit,Group");
  478. miEditUngroup.Text = res.Get("Edit,Ungroup");
  479. miEditFind.Text = res.Get("Edit,Find");
  480. miEditReplace.Text = res.Get("Edit,Replace");
  481. miInsert.Text = res.Get("Insert");
  482. miReport.Text = res.Get("Report");
  483. miReportOptions.Text = res.Get("Report,Options");
  484. miData.Text = res.Get("Data");
  485. miDataChoose.Text = res.Get("Data,Choose");
  486. miDataAdd.Text = res.Get("Data,Add");
  487. miDataShowData.Text = res.Get("Data,ShowData");
  488. miView.Text = res.Get("View");
  489. miViewToolbars.Text = res.Get("View,Toolbars");
  490. miViewStartPage.Text = res.Get("View,StartPage");
  491. miViewOptions.Text = res.Get("View,Options");
  492. miWindow.Text = res.Get("Window");
  493. miWindowCloseAll.Text = res.Get("Window,CloseAll");
  494. miHelp.Text = res.Get("Help");
  495. miHelpContents.Text = res.Get("Help,Contents");
  496. miHelpAccount.Text = res.Get("Help,Account");
  497. miHelpAbout.Text = res.Get("Help,About");
  498. }
  499. /// <inheritdoc/>
  500. public virtual DesignerOptionsPage GetOptionsPage()
  501. {
  502. return null;
  503. }
  504. /// <inheritdoc/>
  505. public void UpdateUIStyle()
  506. {
  507. Style = UIStyleUtils.GetDotNetBarStyle(Designer.UIStyle);
  508. }
  509. private void UpdateMenuDpiDependencies(SubItemsCollection items)
  510. {
  511. foreach (BaseItem item in items)
  512. {
  513. ButtonItem b = item as ButtonItem;
  514. if (b != null && b.ImageIndex != -1)
  515. b.Image = Designer.GetImage(b.ImageIndex);
  516. UpdateMenuDpiDependencies(item.SubItems);
  517. }
  518. }
  519. /// <inheritdoc/>
  520. public new void UpdateDpiDependencies()
  521. {
  522. base.UpdateDpiDependencies();
  523. SuspendLayout();
  524. Font = Designer.LogicalToDevice(DrawUtils.DefaultFont);
  525. UpdateMenuDpiDependencies(Items);
  526. ResumeLayout();
  527. RecalcLayout();
  528. }
  529. #endregion
  530. #region Public Methods
  531. /// <summary>
  532. /// Creates a new menu item.
  533. /// </summary>
  534. /// <returns>New menu item.</returns>
  535. public ButtonItem CreateMenuItem()
  536. {
  537. return CreateMenuItem(null);
  538. }
  539. /// <summary>
  540. /// Creates a new menu item.
  541. /// </summary>
  542. /// <param name="click">Click handler.</param>
  543. /// <returns>New menu item.</returns>
  544. public ButtonItem CreateMenuItem(EventHandler click)
  545. {
  546. return CreateMenuItem(-1, "", click);
  547. }
  548. /// <summary>
  549. /// Creates a new menu item.
  550. /// </summary>
  551. /// <param name="imageIndex">Item's image index.</param>
  552. /// <param name="click">Click handler.</param>
  553. /// <returns>New menu item.</returns>
  554. public ButtonItem CreateMenuItem(int imageIndex, EventHandler click)
  555. {
  556. return CreateMenuItem(imageIndex, "", click);
  557. }
  558. /// <summary>
  559. /// Creates a new menu item.
  560. /// </summary>
  561. /// <param name="text">Item's text.</param>
  562. /// <param name="click">Click handler.</param>
  563. /// <returns>New menu item.</returns>
  564. public ButtonItem CreateMenuItem(string text, EventHandler click)
  565. {
  566. return CreateMenuItem(-1, text, click);
  567. }
  568. /// <summary>
  569. /// Creates a new menu item.
  570. /// </summary>
  571. /// <param name="imageIndex">Item's image index.</param>
  572. /// <param name="text">Item's text.</param>
  573. /// <param name="click">Click handler.</param>
  574. /// <returns>New menu item.</returns>
  575. public ButtonItem CreateMenuItem(int imageIndex, string text, EventHandler click)
  576. {
  577. ButtonItem item = new ButtonItem();
  578. item.ImageIndex = imageIndex;
  579. item.Image = this.GetImage(imageIndex);
  580. item.Text = text;
  581. if (click != null)
  582. item.Click += click;
  583. return item;
  584. }
  585. #endregion
  586. /// <summary>
  587. /// Initializes a new instance of the <see cref="DesignerMenu"/> class with default settings.
  588. /// </summary>
  589. /// <param name="designer">The report designer.</param>
  590. public DesignerMenu(Designer designer) : base()
  591. {
  592. this.designer = designer;
  593. Name = "MainMenu";
  594. MenuBar = true;
  595. BarType = eBarType.MenuBar;
  596. Dock = DockStyle.Top;
  597. // create menu items
  598. miFile = CreateMenuItem();
  599. miFileNew = CreateMenuItem(Designer.cmdNew.Invoke);
  600. miFileOpen = CreateMenuItem(1, Designer.cmdOpen.Invoke);
  601. miFileClose = CreateMenuItem(Designer.cmdClose.Invoke);
  602. miFileSave = CreateMenuItem(2, Designer.cmdSave.Invoke);
  603. miFileSave.BeginGroup = true;
  604. miFileSaveAs = CreateMenuItem(Designer.cmdSaveAs.Invoke);
  605. miFileSaveWithRandomData = CreateMenuItem(Designer.cmdSaveWithRandomData.Invoke);
  606. miFileSaveAll = CreateMenuItem(178, Designer.cmdSaveAll.Invoke);
  607. miFilePageSetup = CreateMenuItem(Designer.cmdPageSetup.Invoke);
  608. miFilePageSetup.BeginGroup = true;
  609. miFilePrinterSetup = CreateMenuItem(Designer.cmdPrinterSetup.Invoke);
  610. miFilePreview = CreateMenuItem(3, Designer.cmdPreview.Invoke);
  611. miFileSelectLanguage = CreateMenuItem(Designer.cmdSelectLanguage.Invoke);
  612. miFileSelectLanguage.BeginGroup = true;
  613. miFileExit = CreateMenuItem(Designer.Exit);
  614. miFileExit.BeginGroup = true;
  615. miEdit = CreateMenuItem();
  616. miEditUndo = CreateMenuItem(8, Designer.cmdUndo.Invoke);
  617. miEditRedo = CreateMenuItem(9, Designer.cmdRedo.Invoke);
  618. miEditCut = CreateMenuItem(5, Designer.cmdCut.Invoke);
  619. miEditCut.BeginGroup = true;
  620. miEditCopy = CreateMenuItem(6, Designer.cmdCopy.Invoke);
  621. miEditPaste = CreateMenuItem(7, Designer.cmdPaste.Invoke);
  622. miEditDelete = CreateMenuItem(51, Designer.cmdDelete.Invoke);
  623. miEditNewPage = CreateMenuItem(Designer.cmdNewPage.Invoke);
  624. miEditCopyPage = CreateMenuItem(6, Designer.cmdCopyPage.Invoke);
  625. miEditDeletePage = CreateMenuItem(12, Designer.cmdDeletePage.Invoke);
  626. miEditSelectAll = CreateMenuItem(Designer.cmdSelectAll.Invoke);
  627. miEditGroup = CreateMenuItem(17, Designer.cmdGroup.Invoke);
  628. miEditGroup.BeginGroup = true;
  629. miEditUngroup = CreateMenuItem(16, Designer.cmdUngroup.Invoke);
  630. miEditFind = CreateMenuItem(181, Designer.cmdFind.Invoke);
  631. miEditFind.BeginGroup = true;
  632. miEditReplace = CreateMenuItem(Designer.cmdReplace.Invoke);
  633. miView = CreateMenuItem();
  634. miViewStartPage = CreateMenuItem(179, Designer.cmdViewStartPage.Invoke);
  635. miViewToolbars = CreateMenuItem();
  636. miViewToolbars.BeginGroup = true;
  637. miViewOptions = CreateMenuItem(Designer.cmdOptions.Invoke);
  638. miViewOptions.BeginGroup = true;
  639. miInsert = CreateMenuItem();
  640. miReport = CreateMenuItem();
  641. miReportOptions = CreateMenuItem(Designer.cmdReportSettings.Invoke);
  642. miReportOptions.BeginGroup = true;
  643. miData = CreateMenuItem();
  644. miDataChoose = CreateMenuItem(Designer.cmdChooseData.Invoke);
  645. miDataAdd = CreateMenuItem(137, Designer.cmdAddData.Invoke);
  646. miDataShowData = CreateMenuItem(72, miDataShowDataSources_Click);
  647. miWindow = CreateMenuItem();
  648. miWindowCloseAll = CreateMenuItem(202, Designer.cmdCloseAll.Invoke);
  649. miWindowCloseAll.BeginGroup = true;
  650. miHelp = CreateMenuItem();
  651. miHelpContents = CreateMenuItem(90, Designer.cmdHelpContents.Invoke);
  652. miHelpAccount = CreateMenuItem(257, Designer.cmdAccount.Invoke);
  653. miHelpAbout = CreateMenuItem(Designer.cmdAbout.Invoke);
  654. miHelpAbout.BeginGroup = true;
  655. // create menu structure
  656. Items.AddRange(new BaseItem[] {
  657. miFile, miEdit, miView, miInsert, miReport, miData, miWindow, miHelp });
  658. miFile.SubItems.AddRange(new BaseItem[] {
  659. miFileNew, miFileOpen, miFileClose,
  660. miFileSave, miFileSaveAs, miFileSaveWithRandomData, miFileSaveAll,
  661. miFilePageSetup, miFilePrinterSetup, miFilePreview,
  662. miFileSelectLanguage,
  663. miFileExit });
  664. miEdit.SubItems.AddRange(new BaseItem[] {
  665. miEditUndo, miEditRedo,
  666. miEditCut, miEditCopy, miEditPaste, miEditDelete, miEditNewPage, miEditCopyPage, miEditDeletePage, miEditSelectAll,
  667. miEditGroup, miEditUngroup,
  668. miEditFind, miEditReplace });
  669. miView.SubItems.AddRange(new BaseItem[] {
  670. miViewStartPage,
  671. miViewToolbars,
  672. miViewOptions });
  673. miInsert.SubItems.Add(new ButtonItem()); // allow to catch PopupOpen
  674. miReport.SubItems.Add(miReportOptions);
  675. miData.SubItems.AddRange(new BaseItem[] {
  676. miDataChoose, miDataAdd, miDataShowData });
  677. miWindow.SubItems.Add(miWindowCloseAll);
  678. miHelp.SubItems.AddRange(new BaseItem[] {
  679. miHelpContents,
  680. miHelpAccount,
  681. miHelpAbout });
  682. // shortcuts
  683. miFileOpen.Shortcuts.Add(eShortcut.CtrlO);
  684. miFileSave.Shortcuts.Add(eShortcut.CtrlS);
  685. miFileSaveAll.Shortcuts.Add(eShortcut.CtrlShiftS);
  686. miFilePreview.Shortcuts.Add(eShortcut.CtrlP);
  687. miEditUndo.Shortcuts.Add(eShortcut.CtrlZ);
  688. miEditRedo.Shortcuts.Add(eShortcut.CtrlY);
  689. miEditCut.AlternateShortCutText = "Ctrl+X";
  690. miEditCopy.AlternateShortCutText = "Ctrl+C";
  691. miEditPaste.AlternateShortCutText = "Ctrl+V";
  692. miEditNewPage.Shortcuts.Add(eShortcut.CtrlN);
  693. miEditFind.Shortcuts.Add(eShortcut.CtrlF);
  694. miEditReplace.Shortcuts.Add(eShortcut.CtrlH);
  695. miHelpContents.Shortcuts.Add(eShortcut.F1);
  696. // events
  697. miFile.PopupOpen += miFile_PopupOpen;
  698. miEdit.PopupOpen += miEdit_PopupOpen;
  699. miInsert.PopupOpen += miInsert_PopupOpen;
  700. miView.PopupOpen += miView_PopupOpen;
  701. miWindow.PopupOpen += miWindow_PopupOpen;
  702. Localize();
  703. Designer.Controls.Add(this);
  704. }
  705. }
  706. }