MainMenu.cs 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176
  1. using System;
  2. using Gtk;
  3. using System.Xml;
  4. using System.Xml.Linq;
  5. using System.Collections.Generic;
  6. using Newtonsoft.Json.Linq;
  7. using System.IO;
  8. using Newtonsoft.Json;
  9. using System.Data;
  10. namespace UnitEditor
  11. {
  12. [System.ComponentModel.ToolboxItem (true)]
  13. public partial class MainMenu : Gtk.Bin
  14. {
  15. public Gtk.UIManager uim = null;
  16. public Gtk.MenuBar instance;
  17. //------------------------------------------------------------------------------
  18. private XDocument UI = new XDocument (
  19. new XElement ("ui",
  20. new XElement ("menubar",
  21. new XElement ("menu", new XAttribute ("action", "FileMenu"),
  22. new XElement ("menuitem", new XAttribute ("action", "New")),
  23. new XElement ("menuitem", new XAttribute ("action", "Open")),
  24. new XElement ("separator"),
  25. new XElement ("menuitem", new XAttribute ("action", "Save")),
  26. new XElement ("menuitem", new XAttribute ("action", "SaveAs")),
  27. new XElement ("menuitem", new XAttribute ("action", "SaveAll")),
  28. new XElement ("separator"),
  29. new XElement ("menuitem", new XAttribute ("action", "Close")),
  30. new XElement ("menuitem", new XAttribute ("action", "CloseAll")),
  31. new XElement ("menuitem", new XAttribute ("action", "Quit"))
  32. ),
  33. new XElement ("menu", new XAttribute ("action", "EditMenu"),
  34. new XElement ("menuitem", new XAttribute ("action", "Undo")),
  35. new XElement ("menuitem", new XAttribute ("action", "Redo")),
  36. new XElement ("separator"),
  37. new XElement ("menuitem", new XAttribute ("action", "Cut")),
  38. new XElement ("menuitem", new XAttribute ("action", "Copy")),
  39. new XElement ("menuitem", new XAttribute ("action", "Paste")),
  40. new XElement ("menuitem", new XAttribute ("action", "Delete")),
  41. new XElement ("separator"),
  42. new XElement ("menuitem", new XAttribute ("action", "SelectAll"))
  43. ),
  44. new XElement ("menu", new XAttribute ("action", "ViewMenu"),
  45. new XElement ("menuitem", new XAttribute ("action", "ZoomIn")),
  46. new XElement ("menuitem", new XAttribute ("action", "ZoomOut")),
  47. new XElement ("separator"),
  48. new XElement ("menuitem", new XAttribute ("action", "Fullscreen"))
  49. ),
  50. new XElement ("menu", new XAttribute ("action", "SearchMenu"),
  51. new XElement ("menuitem", new XAttribute ("action", "Find")),
  52. new XElement ("menuitem", new XAttribute ("action", "Replace")),
  53. new XElement ("separator"),
  54. new XElement ("menuitem", new XAttribute ("action", "GoToLine"))
  55. )
  56. )
  57. )
  58. );
  59. //------------------------------------------------------------------------------
  60. private Dictionary<string, string> keys = new Dictionary<string, string> () {
  61. {"New", "<Control>n"},
  62. {"Open", "<Control>o"},
  63. {"Save", "<Control>s"},
  64. {"SaveAs", "<Control><Alt>s"},
  65. {"SaveAll", "<Control><Shift>s"},
  66. {"Close", "<Control>w"},
  67. {"CloseAll", "<Control><Shift>w"},
  68. {"Quit", "<Alt>F4"},
  69. {"Undo", "<Control>z"},
  70. {"Redo", "<Control>y"},
  71. {"Cut", "<Control>x"},
  72. {"Copy", "<Control>c"},
  73. {"Paste", "<Control>v"},
  74. {"SelectAll", "<Control>a"},
  75. {"ZoomIn", "<Control>KP_Add"},
  76. {"ZoomOut", "<Control>KP_Subtract"},
  77. {"Fullscreen", "F11"},
  78. {"Find", "<Control>f"},
  79. {"Replace", "<Control>h"},
  80. {"GoToLine", "<Control>g"}
  81. };
  82. //------------------------------------------------------------------------------
  83. public Gtk.ActionEntry[] getActionEntries ()
  84. {
  85. return new Gtk.ActionEntry[] {
  86. new Gtk.ActionEntry ("FileMenu", null, "_File", null, null, null),
  87. new Gtk.ActionEntry ("New", null, "New", (keys.ContainsKey ("New")) ? keys ["New"] : null, null, null),
  88. new Gtk.ActionEntry ("Open", null, "Open...", (keys.ContainsKey ("Open")) ? keys ["Open"] : null, null, (EventHandler)open_cb),
  89. new Gtk.ActionEntry ("Save", null, "Save", (keys.ContainsKey ("Save")) ? keys ["Save"] : null, null, null),
  90. new Gtk.ActionEntry ("SaveAs", null, "Save As...", (keys.ContainsKey ("SaveAs")) ? keys ["SaveAs"] : null, null, null),
  91. new Gtk.ActionEntry ("SaveAll", null, "Save All", (keys.ContainsKey ("SaveAll")) ? keys ["SaveAll"] : null, null, null),
  92. new Gtk.ActionEntry ("Close", null, "Close", (keys.ContainsKey ("Close")) ? keys ["Close"] : null, null, null),
  93. new Gtk.ActionEntry ("CloseAll", null, "Close All", (keys.ContainsKey ("CloseAll")) ? keys ["CloseAll"] : null, null, null),
  94. new Gtk.ActionEntry ("Quit", null, "Quit", (keys.ContainsKey ("Quit")) ? keys ["Quit"] : null, null, (EventHandler)quit_cb),
  95. new Gtk.ActionEntry ("EditMenu", null, "_Edit", null, null, null),
  96. new Gtk.ActionEntry ("Undo", null, "Undo", (keys.ContainsKey ("Undo")) ? keys ["Undo"] : null, null, null),
  97. new Gtk.ActionEntry ("Redo", null, "Redo", (keys.ContainsKey ("Redo")) ? keys ["Redo"] : null, null, null),
  98. new Gtk.ActionEntry ("Cut", null, "Cut", (keys.ContainsKey ("Cut")) ? keys ["Cut"] : null, null, null),
  99. new Gtk.ActionEntry ("Copy", null, "Copy", (keys.ContainsKey ("Copy")) ? keys ["Copy"] : null, null, null),
  100. new Gtk.ActionEntry ("Paste", null, "Paste", (keys.ContainsKey ("Paste")) ? keys ["Paste"] : null, null, null),
  101. new Gtk.ActionEntry ("Delete", null, "Delete", (keys.ContainsKey ("Delete")) ? keys ["Delete"] : null, null, null),
  102. new Gtk.ActionEntry ("SelectAll", null, "Select All", (keys.ContainsKey ("SelectAll")) ? keys ["SelectAll"] : null, null, null),
  103. new Gtk.ActionEntry ("ViewMenu", null, "_View", null, null, null),
  104. new Gtk.ActionEntry ("ZoomIn", null, "Zoom In", (keys.ContainsKey ("ZoomIn")) ? keys ["ZoomIn"] : null, null, null),
  105. new Gtk.ActionEntry ("ZoomOut", null, "Zoom Out", (keys.ContainsKey ("ZoomOut")) ? keys ["ZoomOut"] : null, null, null),
  106. new Gtk.ActionEntry ("Fullscreen", null, "Fullscreen", (keys.ContainsKey ("Fullscreen")) ? keys ["Fullscreen"] : null, null, null),
  107. new Gtk.ActionEntry ("SearchMenu", null, "_Search", null, null, null),
  108. new Gtk.ActionEntry ("Find", null, "Find...", (keys.ContainsKey ("Find")) ? keys ["Find"] : null, null, null),
  109. new Gtk.ActionEntry ("Replace", null, "Find & Replace...", (keys.ContainsKey ("Replace")) ? keys ["Replace"] : null, null, null),
  110. new Gtk.ActionEntry ("GoToLine", null, "Go To Line...", (keys.ContainsKey ("GoToLine")) ? keys ["GoToLine"] : null, null, null)
  111. };
  112. }
  113. //------------------------------------------------------------------------------
  114. public MainMenu ()
  115. {
  116. uim = new Gtk.UIManager ();
  117. Gtk.ActionGroup actions = new Gtk.ActionGroup ("MenuBarActions" + Guid.NewGuid ());
  118. actions.Add (getActionEntries ());
  119. uim.InsertActionGroup (actions, 0);
  120. // Put the XML definition of the controls (widgets) into the UIManager's buffer -and- create controls (widgets).
  121. uim.AddUiFromString (UI.ToString ());
  122. instance = (Gtk.MenuBar)uim.GetWidget ("/menubar");
  123. instance.ShowAll ();
  124. }
  125. //------------------------------------------------------------------------------
  126. static void new_cb(object sender, DeleteEventArgs args) {}
  127. //------------------------------------------------------------------------------
  128. static void open_cb(object sender, System.EventArgs args)
  129. {
  130. Gtk.FileChooserDialog fc = new Gtk.FileChooserDialog("Open file", null, FileChooserAction.Open);
  131. fc.AddButton(Stock.Cancel, ResponseType.Cancel);
  132. fc.AddButton(Stock.Open, ResponseType.Ok);
  133. fc.Filter = new FileFilter();
  134. fc.Filter.AddPattern("*.unit");
  135. fc.Filter.AddPattern("*.material");
  136. fc.Filter.AddPattern("*.physics");
  137. Console.Write (args.ToString ());
  138. if (fc.Run() == (int)ResponseType.Ok)
  139. {
  140. UnitEditor.MainClass.g_win.open_unit (fc.Filename);
  141. }
  142. fc.Destroy();
  143. }
  144. //------------------------------------------------------------------------------
  145. static void save_cb(object sender, DeleteEventArgs args) {}
  146. static void saveas_cb(object sender, DeleteEventArgs args) {}
  147. static void saveall_cb(object sender, DeleteEventArgs args) {}
  148. static void close_cb(object sender, DeleteEventArgs args) {}
  149. static void closeall_cb(object sender, DeleteEventArgs args) {}
  150. static void quit_cb (object o, EventArgs args)
  151. {
  152. Application.Quit ();
  153. }
  154. }
  155. }