PageRenderTime 60ms CodeModel.GetById 33ms RepoModel.GetById 0ms app.codeStats 0ms

/NekoKun.UI/EditContextMenuStrip.cs

https://bitbucket.org/nekokun/nekokun
C# | 263 lines | 229 code | 34 blank | 0 comment | 57 complexity | 2bc90411701ca77f4d1decf9a10c372a MD5 | raw file
Possible License(s): MIT, CC-BY-SA-3.0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4. using System.Windows.Forms;
  5. namespace NekoKun
  6. {
  7. public class EditContextMenuStrip : ContextMenuStrip
  8. {
  9. IUndoHandler hUndo;
  10. IClipboardHandler hClip;
  11. IDeleteHandler hDelete;
  12. ISelectAllHandler hSelectAll;
  13. IFindReplaceHandler hFind;
  14. ToolStripMenuItem menuUndo, menuRedo, menuCut, menuCopy, menuPaste, menuDelete, menuSelectAll, menuFind, menuReplace;
  15. public EditContextMenuStrip(Object handler)
  16. : base()
  17. {
  18. this.menuUndo = new System.Windows.Forms.ToolStripMenuItem();
  19. this.menuRedo = new System.Windows.Forms.ToolStripMenuItem();
  20. this.menuCut = new System.Windows.Forms.ToolStripMenuItem();
  21. this.menuCopy = new System.Windows.Forms.ToolStripMenuItem();
  22. this.menuPaste = new System.Windows.Forms.ToolStripMenuItem();
  23. this.menuDelete = new System.Windows.Forms.ToolStripMenuItem();
  24. this.menuSelectAll = new System.Windows.Forms.ToolStripMenuItem();
  25. this.menuFind = new System.Windows.Forms.ToolStripMenuItem();
  26. this.menuReplace = new System.Windows.Forms.ToolStripMenuItem();
  27. this.menuUndo.Image = global::NekoKun.UI.Properties.Resources.Undo;
  28. this.menuUndo.ImageTransparentColor = System.Drawing.Color.Magenta;
  29. this.menuUndo.Name = "menuUndo";
  30. this.menuUndo.ShortcutKeyDisplayString = "Ctrl+Z";
  31. this.menuUndo.Text = "??(&U)";
  32. this.menuUndo.Click += new System.EventHandler(this.menuUndo_Click);
  33. this.menuRedo.Image = global::NekoKun.UI.Properties.Resources.Redo;
  34. this.menuRedo.ImageTransparentColor = System.Drawing.Color.Magenta;
  35. this.menuRedo.Name = "menuRedo";
  36. this.menuRedo.ShortcutKeyDisplayString = "Ctrl+Y";
  37. this.menuRedo.Text = "??(&R)";
  38. this.menuRedo.Click += new System.EventHandler(this.menuRedo_Click);
  39. this.menuCut.Image = global::NekoKun.UI.Properties.Resources.Cut;
  40. this.menuCut.ImageTransparentColor = System.Drawing.Color.Fuchsia;
  41. this.menuCut.Name = "menuCut";
  42. this.menuCut.ShortcutKeyDisplayString = "Ctrl+X";
  43. this.menuCut.Text = "??(&T)";
  44. this.menuCut.Click += new System.EventHandler(this.menuCut_Click);
  45. this.menuCopy.Image = global::NekoKun.UI.Properties.Resources.Copy;
  46. this.menuCopy.ImageTransparentColor = System.Drawing.Color.Fuchsia;
  47. this.menuCopy.Name = "menuCopy";
  48. this.menuCopy.ShortcutKeyDisplayString = "Ctrl+C";
  49. this.menuCopy.Text = "??(&C)";
  50. this.menuCopy.Click += new System.EventHandler(this.menuCopy_Click);
  51. this.menuPaste.Image = global::NekoKun.UI.Properties.Resources.Paste;
  52. this.menuPaste.ImageTransparentColor = System.Drawing.Color.Fuchsia;
  53. this.menuPaste.Name = "menuPaste";
  54. this.menuPaste.ShortcutKeyDisplayString = "Ctrl+V";
  55. this.menuPaste.Text = "??(&P)";
  56. this.menuPaste.Click += new System.EventHandler(this.menuPaste_Click);
  57. this.menuDelete.Image = global::NekoKun.UI.Properties.Resources.Delete;
  58. this.menuDelete.ImageTransparentColor = System.Drawing.Color.Magenta;
  59. this.menuDelete.Name = "menuDelete";
  60. this.menuDelete.ShortcutKeyDisplayString = "Delete";
  61. this.menuDelete.Text = "??(&D)";
  62. this.menuDelete.Click += new System.EventHandler(this.menuDelete_Click);
  63. this.menuSelectAll.Name = "menuSelectAll";
  64. this.menuSelectAll.ShortcutKeyDisplayString = "Ctrl+A";
  65. this.menuSelectAll.Text = "??(&A)";
  66. this.menuSelectAll.Click += new System.EventHandler(this.menuSelectAll_Click);
  67. this.menuFind.Image = global::NekoKun.UI.Properties.Resources.Find;
  68. this.menuFind.ImageTransparentColor = System.Drawing.Color.Magenta;
  69. this.menuFind.Name = "menuFind";
  70. this.menuFind.ShortcutKeyDisplayString = "Ctrl+F";
  71. this.menuFind.Text = "??(&F)";
  72. this.menuFind.Click += new System.EventHandler(this.menuFind_Click);
  73. this.menuReplace.Name = "menuReplace";
  74. this.menuReplace.ShortcutKeyDisplayString = "Ctrl+H";
  75. this.menuReplace.Text = "??(&R)";
  76. this.menuReplace.Click += new System.EventHandler(this.menuReplace_Click);
  77. this.Items.AddRange(new ToolStripItem[] {
  78. this.menuUndo, this.menuRedo,
  79. new ToolStripSeparator(),
  80. this.menuCut, this.menuCopy, this.menuPaste, this.menuDelete,
  81. new ToolStripSeparator(),
  82. this.menuSelectAll,
  83. new ToolStripSeparator(),
  84. this.menuFind, this.menuReplace
  85. });
  86. ResetHandler(handler);
  87. this.Opening += new System.ComponentModel.CancelEventHandler(EditContextMenuStrip_Opening);
  88. }
  89. public void ResetHandler(object handler)
  90. {
  91. hUndo = handler as IUndoHandler;
  92. hClip = handler as IClipboardHandler;
  93. hDelete = handler as IDeleteHandler;
  94. hSelectAll = handler as ISelectAllHandler;
  95. hFind = handler as IFindReplaceHandler;
  96. this.menuUndo.Tag = hUndo != null;
  97. this.menuRedo.Tag = hUndo != null;
  98. this.menuCut.Tag = hClip != null;
  99. this.menuCopy.Tag = hClip != null;
  100. this.menuPaste.Tag = hClip != null;
  101. this.menuDelete.Tag = hDelete != null;
  102. this.menuSelectAll.Tag = hSelectAll != null;
  103. this.menuFind.Tag = hFind != null;
  104. this.menuReplace.Tag = hFind != null;
  105. }
  106. private void EditContextMenuStrip_Opening(object sender, EventArgs e)
  107. {
  108. if (hUndo != null)
  109. {
  110. this.menuUndo.Enabled = hUndo.CanUndo;
  111. this.menuRedo.Enabled = hUndo.CanRedo;
  112. }
  113. else
  114. {
  115. this.menuUndo.Enabled = false;
  116. this.menuRedo.Enabled = false;
  117. }
  118. if (hClip != null)
  119. {
  120. this.menuCut.Enabled = hClip.CanCut;
  121. this.menuCopy.Enabled = hClip.CanCopy;
  122. this.menuPaste.Enabled = hClip.CanPaste;
  123. }
  124. else
  125. {
  126. this.menuCut.Enabled = false;
  127. this.menuCopy.Enabled = false;
  128. this.menuPaste.Enabled = false;
  129. }
  130. if (hDelete != null)
  131. {
  132. this.menuDelete.Enabled = hDelete.CanDelete;
  133. }
  134. else
  135. {
  136. this.menuDelete.Enabled = false;
  137. }
  138. if (hSelectAll != null)
  139. {
  140. this.menuSelectAll.Enabled = hSelectAll.CanSelectAll;
  141. }
  142. else
  143. {
  144. this.menuSelectAll.Enabled = false;
  145. }
  146. if (hFind != null)
  147. {
  148. this.menuFind.Enabled = hFind.CanShowFindDialog;
  149. this.menuReplace.Enabled = hFind.CanShowReplaceDialog;
  150. }
  151. else
  152. {
  153. this.menuFind.Enabled = false;
  154. this.menuReplace.Enabled = false;
  155. }
  156. CheckSeparator();
  157. }
  158. private void CheckSeparator()
  159. {
  160. List<ToolStripItem> visibled = new List<ToolStripItem>();
  161. foreach (ToolStripItem item in this.Items)
  162. {
  163. if ((item.Tag != null && (bool)item.Tag == true) || item.Tag == null)
  164. {
  165. item.Visible = true;
  166. visibled.Add(item);
  167. }
  168. else
  169. {
  170. item.Visible = false;
  171. }
  172. }
  173. while (visibled[0] is ToolStripSeparator)
  174. {
  175. visibled[0].Visible = false;
  176. visibled.RemoveAt(0);
  177. }
  178. while (visibled[visibled.Count - 1] is ToolStripSeparator)
  179. {
  180. visibled[visibled.Count - 1].Visible = false;
  181. visibled.RemoveAt(visibled.Count - 1);
  182. }
  183. int count = visibled.Count;
  184. for (int i = 0; i < visibled.Count - 1; i++)
  185. {
  186. if (visibled[i] is ToolStripSeparator && visibled[i + 1] is ToolStripSeparator)
  187. {
  188. visibled[i + 1].Visible = false;
  189. }
  190. }
  191. }
  192. private void menuUndo_Click(object sender, EventArgs e)
  193. {
  194. if (hUndo != null && hUndo.CanUndo) hUndo.Undo();
  195. }
  196. private void menuRedo_Click(object sender, EventArgs e)
  197. {
  198. if (hUndo != null && hUndo.CanRedo) hUndo.Redo();
  199. }
  200. private void menuCut_Click(object sender, EventArgs e)
  201. {
  202. if (hClip != null && hClip.CanCut) hClip.Cut();
  203. }
  204. private void menuCopy_Click(object sender, EventArgs e)
  205. {
  206. if (hClip != null && hClip.CanCopy) hClip.Copy();
  207. }
  208. private void menuPaste_Click(object sender, EventArgs e)
  209. {
  210. if (hClip != null && hClip.CanPaste) hClip.Paste();
  211. }
  212. private void menuDelete_Click(object sender, EventArgs e)
  213. {
  214. if (hDelete != null && hDelete.CanDelete) hDelete.Delete();
  215. }
  216. private void menuSelectAll_Click(object sender, EventArgs e)
  217. {
  218. if (hSelectAll != null && hSelectAll.CanSelectAll) hSelectAll.SelectAll();
  219. }
  220. private void menuFind_Click(object sender, EventArgs e)
  221. {
  222. if (hFind != null && hFind.CanShowFindDialog) hFind.ShowFindDialog();
  223. }
  224. private void menuReplace_Click(object sender, EventArgs e)
  225. {
  226. if (hFind != null && hFind.CanShowReplaceDialog) hFind.ShowReplaceDialog();
  227. }
  228. }
  229. }