/NekoKun.UI/EditContextMenuStrip.cs
C# | 263 lines | 229 code | 34 blank | 0 comment | 57 complexity | 2bc90411701ca77f4d1decf9a10c372a MD5 | raw file
Possible License(s): MIT, CC-BY-SA-3.0
- using System;
- using System.Collections.Generic;
- using System.Text;
- using System.Windows.Forms;
- namespace NekoKun
- {
- public class EditContextMenuStrip : ContextMenuStrip
- {
- IUndoHandler hUndo;
- IClipboardHandler hClip;
- IDeleteHandler hDelete;
- ISelectAllHandler hSelectAll;
- IFindReplaceHandler hFind;
- ToolStripMenuItem menuUndo, menuRedo, menuCut, menuCopy, menuPaste, menuDelete, menuSelectAll, menuFind, menuReplace;
- public EditContextMenuStrip(Object handler)
- : base()
- {
- this.menuUndo = new System.Windows.Forms.ToolStripMenuItem();
- this.menuRedo = new System.Windows.Forms.ToolStripMenuItem();
- this.menuCut = new System.Windows.Forms.ToolStripMenuItem();
- this.menuCopy = new System.Windows.Forms.ToolStripMenuItem();
- this.menuPaste = new System.Windows.Forms.ToolStripMenuItem();
- this.menuDelete = new System.Windows.Forms.ToolStripMenuItem();
- this.menuSelectAll = new System.Windows.Forms.ToolStripMenuItem();
- this.menuFind = new System.Windows.Forms.ToolStripMenuItem();
- this.menuReplace = new System.Windows.Forms.ToolStripMenuItem();
- this.menuUndo.Image = global::NekoKun.UI.Properties.Resources.Undo;
- this.menuUndo.ImageTransparentColor = System.Drawing.Color.Magenta;
- this.menuUndo.Name = "menuUndo";
- this.menuUndo.ShortcutKeyDisplayString = "Ctrl+Z";
- this.menuUndo.Text = "??(&U)";
- this.menuUndo.Click += new System.EventHandler(this.menuUndo_Click);
- this.menuRedo.Image = global::NekoKun.UI.Properties.Resources.Redo;
- this.menuRedo.ImageTransparentColor = System.Drawing.Color.Magenta;
- this.menuRedo.Name = "menuRedo";
- this.menuRedo.ShortcutKeyDisplayString = "Ctrl+Y";
- this.menuRedo.Text = "??(&R)";
- this.menuRedo.Click += new System.EventHandler(this.menuRedo_Click);
- this.menuCut.Image = global::NekoKun.UI.Properties.Resources.Cut;
- this.menuCut.ImageTransparentColor = System.Drawing.Color.Fuchsia;
- this.menuCut.Name = "menuCut";
- this.menuCut.ShortcutKeyDisplayString = "Ctrl+X";
- this.menuCut.Text = "??(&T)";
- this.menuCut.Click += new System.EventHandler(this.menuCut_Click);
- this.menuCopy.Image = global::NekoKun.UI.Properties.Resources.Copy;
- this.menuCopy.ImageTransparentColor = System.Drawing.Color.Fuchsia;
- this.menuCopy.Name = "menuCopy";
- this.menuCopy.ShortcutKeyDisplayString = "Ctrl+C";
- this.menuCopy.Text = "??(&C)";
- this.menuCopy.Click += new System.EventHandler(this.menuCopy_Click);
- this.menuPaste.Image = global::NekoKun.UI.Properties.Resources.Paste;
- this.menuPaste.ImageTransparentColor = System.Drawing.Color.Fuchsia;
- this.menuPaste.Name = "menuPaste";
- this.menuPaste.ShortcutKeyDisplayString = "Ctrl+V";
- this.menuPaste.Text = "??(&P)";
- this.menuPaste.Click += new System.EventHandler(this.menuPaste_Click);
- this.menuDelete.Image = global::NekoKun.UI.Properties.Resources.Delete;
- this.menuDelete.ImageTransparentColor = System.Drawing.Color.Magenta;
- this.menuDelete.Name = "menuDelete";
- this.menuDelete.ShortcutKeyDisplayString = "Delete";
- this.menuDelete.Text = "??(&D)";
- this.menuDelete.Click += new System.EventHandler(this.menuDelete_Click);
- this.menuSelectAll.Name = "menuSelectAll";
- this.menuSelectAll.ShortcutKeyDisplayString = "Ctrl+A";
- this.menuSelectAll.Text = "??(&A)";
- this.menuSelectAll.Click += new System.EventHandler(this.menuSelectAll_Click);
- this.menuFind.Image = global::NekoKun.UI.Properties.Resources.Find;
- this.menuFind.ImageTransparentColor = System.Drawing.Color.Magenta;
- this.menuFind.Name = "menuFind";
- this.menuFind.ShortcutKeyDisplayString = "Ctrl+F";
- this.menuFind.Text = "??(&F)";
- this.menuFind.Click += new System.EventHandler(this.menuFind_Click);
- this.menuReplace.Name = "menuReplace";
- this.menuReplace.ShortcutKeyDisplayString = "Ctrl+H";
- this.menuReplace.Text = "??(&R)";
- this.menuReplace.Click += new System.EventHandler(this.menuReplace_Click);
- this.Items.AddRange(new ToolStripItem[] {
- this.menuUndo, this.menuRedo,
- new ToolStripSeparator(),
- this.menuCut, this.menuCopy, this.menuPaste, this.menuDelete,
- new ToolStripSeparator(),
- this.menuSelectAll,
- new ToolStripSeparator(),
- this.menuFind, this.menuReplace
- });
- ResetHandler(handler);
- this.Opening += new System.ComponentModel.CancelEventHandler(EditContextMenuStrip_Opening);
- }
- public void ResetHandler(object handler)
- {
- hUndo = handler as IUndoHandler;
- hClip = handler as IClipboardHandler;
- hDelete = handler as IDeleteHandler;
- hSelectAll = handler as ISelectAllHandler;
- hFind = handler as IFindReplaceHandler;
- this.menuUndo.Tag = hUndo != null;
- this.menuRedo.Tag = hUndo != null;
- this.menuCut.Tag = hClip != null;
- this.menuCopy.Tag = hClip != null;
- this.menuPaste.Tag = hClip != null;
- this.menuDelete.Tag = hDelete != null;
- this.menuSelectAll.Tag = hSelectAll != null;
- this.menuFind.Tag = hFind != null;
- this.menuReplace.Tag = hFind != null;
- }
- private void EditContextMenuStrip_Opening(object sender, EventArgs e)
- {
- if (hUndo != null)
- {
- this.menuUndo.Enabled = hUndo.CanUndo;
- this.menuRedo.Enabled = hUndo.CanRedo;
- }
- else
- {
- this.menuUndo.Enabled = false;
- this.menuRedo.Enabled = false;
- }
- if (hClip != null)
- {
- this.menuCut.Enabled = hClip.CanCut;
- this.menuCopy.Enabled = hClip.CanCopy;
- this.menuPaste.Enabled = hClip.CanPaste;
- }
- else
- {
- this.menuCut.Enabled = false;
- this.menuCopy.Enabled = false;
- this.menuPaste.Enabled = false;
- }
- if (hDelete != null)
- {
- this.menuDelete.Enabled = hDelete.CanDelete;
- }
- else
- {
- this.menuDelete.Enabled = false;
- }
- if (hSelectAll != null)
- {
- this.menuSelectAll.Enabled = hSelectAll.CanSelectAll;
- }
- else
- {
- this.menuSelectAll.Enabled = false;
- }
- if (hFind != null)
- {
- this.menuFind.Enabled = hFind.CanShowFindDialog;
- this.menuReplace.Enabled = hFind.CanShowReplaceDialog;
- }
- else
- {
- this.menuFind.Enabled = false;
- this.menuReplace.Enabled = false;
- }
- CheckSeparator();
- }
- private void CheckSeparator()
- {
- List<ToolStripItem> visibled = new List<ToolStripItem>();
- foreach (ToolStripItem item in this.Items)
- {
- if ((item.Tag != null && (bool)item.Tag == true) || item.Tag == null)
- {
- item.Visible = true;
- visibled.Add(item);
- }
- else
- {
- item.Visible = false;
- }
- }
- while (visibled[0] is ToolStripSeparator)
- {
- visibled[0].Visible = false;
- visibled.RemoveAt(0);
- }
- while (visibled[visibled.Count - 1] is ToolStripSeparator)
- {
- visibled[visibled.Count - 1].Visible = false;
- visibled.RemoveAt(visibled.Count - 1);
- }
- int count = visibled.Count;
- for (int i = 0; i < visibled.Count - 1; i++)
- {
- if (visibled[i] is ToolStripSeparator && visibled[i + 1] is ToolStripSeparator)
- {
- visibled[i + 1].Visible = false;
- }
- }
- }
- private void menuUndo_Click(object sender, EventArgs e)
- {
- if (hUndo != null && hUndo.CanUndo) hUndo.Undo();
- }
- private void menuRedo_Click(object sender, EventArgs e)
- {
- if (hUndo != null && hUndo.CanRedo) hUndo.Redo();
- }
- private void menuCut_Click(object sender, EventArgs e)
- {
- if (hClip != null && hClip.CanCut) hClip.Cut();
- }
- private void menuCopy_Click(object sender, EventArgs e)
- {
- if (hClip != null && hClip.CanCopy) hClip.Copy();
- }
- private void menuPaste_Click(object sender, EventArgs e)
- {
- if (hClip != null && hClip.CanPaste) hClip.Paste();
- }
- private void menuDelete_Click(object sender, EventArgs e)
- {
- if (hDelete != null && hDelete.CanDelete) hDelete.Delete();
- }
- private void menuSelectAll_Click(object sender, EventArgs e)
- {
- if (hSelectAll != null && hSelectAll.CanSelectAll) hSelectAll.SelectAll();
- }
- private void menuFind_Click(object sender, EventArgs e)
- {
- if (hFind != null && hFind.CanShowFindDialog) hFind.ShowFindDialog();
- }
- private void menuReplace_Click(object sender, EventArgs e)
- {
- if (hFind != null && hFind.CanShowReplaceDialog) hFind.ShowReplaceDialog();
- }
- }
- }