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

/NekoKun.Core/ScriptEditor/ScriptListEditor.cs

https://bitbucket.org/nekokun/nekokun
C# | 223 lines | 184 code | 39 blank | 0 comment | 31 complexity | d598ad2d8fbdab78f80e0b75e8dd00e1 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. using System.Drawing;
  6. namespace NekoKun
  7. {
  8. public class ScriptListEditor : AbstractEditor, IDeleteHandler
  9. {
  10. public UI.LynnListbox list = new UI.LynnListbox();
  11. private ScriptListFile scriptList;
  12. private ToolStripMenuItem menuOpen;
  13. private ToolStripMenuItem menuInsert;
  14. private ToolStripMenuItem menuDelete;
  15. private ToolStripMenuItem menuRename;
  16. public ScriptListEditor(ScriptListFile item) : base(item)
  17. {
  18. list.Dock = DockStyle.Fill;
  19. this.Controls.Add(list);
  20. this.Text = "????";
  21. this.DockAreas = WeifenLuo.WinFormsUI.Docking.DockAreas.DockBottom | WeifenLuo.WinFormsUI.Docking.DockAreas.DockLeft | WeifenLuo.WinFormsUI.Docking.DockAreas.DockRight | WeifenLuo.WinFormsUI.Docking.DockAreas.DockTop | WeifenLuo.WinFormsUI.Docking.DockAreas.Document | WeifenLuo.WinFormsUI.Docking.DockAreas.Float;
  22. scriptList = item;
  23. foreach (ScriptFile file in scriptList.scripts)
  24. {
  25. this.list.Items.Add(file);
  26. }
  27. ContextMenuStrip menu = new ContextMenuStrip();
  28. (menuOpen = menu.Items.Add("??(&O)", null, delegate {
  29. ActionOpenScript();
  30. }) as ToolStripMenuItem).ShortcutKeyDisplayString = "Enter";
  31. menu.Items.Add(new ToolStripSeparator());
  32. (menuInsert = menu.Items.Add("??(&I)...", null, delegate
  33. {
  34. ActionInsertScript();
  35. }) as ToolStripMenuItem).ShortcutKeyDisplayString = "Insert";
  36. (menuDelete = menu.Items.Add("??(&D)", null, delegate
  37. {
  38. ActionDeleteScript();
  39. }) as ToolStripMenuItem).ShortcutKeyDisplayString = "Delete";
  40. (menuRename = menu.Items.Add("???(&R)...", null, delegate
  41. {
  42. ActionRenameScript();
  43. }) as ToolStripMenuItem).ShortcutKeyDisplayString = "F2";
  44. menu.Opening += delegate(object sender, System.ComponentModel.CancelEventArgs args)
  45. {
  46. this.menuOpen.Enabled = this.list.SelectedItem != null;
  47. this.menuDelete.Enabled = this.list.SelectedItem != null;
  48. this.menuRename.Enabled = this.list.SelectedItem != null;
  49. };
  50. this.list.ContextMenuStrip = menu;
  51. this.list.AllowDrop = true;
  52. this.list.MouseMove += new MouseEventHandler(list_MouseMove);
  53. this.list.DragEnter += new DragEventHandler(list_DragEnter);
  54. this.list.DragDrop += new DragEventHandler(list_DragDrop);
  55. this.list.KeyDown += new KeyEventHandler(list_KeyDown);
  56. this.list.DoubleClick += new EventHandler(list_DoubleClick);
  57. }
  58. void list_MouseMove(object sender, MouseEventArgs e)
  59. {
  60. if (this.list.SelectedItem != null && e.Button == MouseButtons.Right)
  61. {
  62. DataObject obj = new DataObject(this.File.filename, this.list.SelectedItem);
  63. this.list.DoDragDrop(obj, DragDropEffects.Move);
  64. }
  65. }
  66. void list_DragEnter(object sender, DragEventArgs e)
  67. {
  68. if (e.Data.GetDataPresent(this.File.filename, false) && sender == this.list)
  69. {
  70. e.Effect = System.Windows.Forms.DragDropEffects.Move;
  71. }
  72. }
  73. void list_DragDrop(object sender, DragEventArgs e)
  74. {
  75. object newItem;
  76. if (e.Data.GetDataPresent(this.File.filename, false))
  77. {
  78. Point pt = ((System.Windows.Forms.ListBox)sender).PointToClient(new Point(e.X, e.Y));
  79. if (sender != this.list)
  80. return;
  81. try
  82. {
  83. int id = this.list.IndexFromPoint(pt);
  84. object destItem = this.list.Items[id];
  85. if (destItem != null)
  86. {
  87. newItem = e.Data.GetData(this.File.filename);
  88. if (newItem != destItem)
  89. {
  90. this.list.Items.Remove(newItem);
  91. this.list.Items.Insert(id, newItem);
  92. this.scriptList.scripts.Remove(newItem as ScriptFile);
  93. this.scriptList.scripts.Insert(id, newItem as ScriptFile);
  94. this.File.MakeDirty();
  95. }
  96. }
  97. }
  98. catch { }
  99. }
  100. }
  101. void list_KeyDown(object sender, KeyEventArgs e)
  102. {
  103. switch (e.KeyCode)
  104. {
  105. case Keys.Enter:
  106. ActionOpenScript();
  107. break;
  108. case Keys.Delete:
  109. ActionDeleteScript();
  110. break;
  111. case Keys.Insert:
  112. ActionInsertScript();
  113. break;
  114. case Keys.F2:
  115. ActionRenameScript();
  116. break;
  117. default:
  118. break;
  119. }
  120. }
  121. void list_DoubleClick(object sender, EventArgs e)
  122. {
  123. ActionOpenScript();
  124. }
  125. private void ActionRenameScript()
  126. {
  127. ScriptFile item = this.list.SelectedItem as ScriptFile;
  128. int index = this.list.SelectedIndex;
  129. if (item == null)
  130. return;
  131. ScriptListEditorRenameDialog dialog = new ScriptListEditorRenameDialog(this.scriptList, item);
  132. DialogResult result = dialog.ShowDialog(this);
  133. if (result != System.Windows.Forms.DialogResult.OK)
  134. return;
  135. this.scriptList.DeleteFile(item);
  136. this.list.Items.Remove(item);
  137. ScriptFile file = this.scriptList.InsertFile(dialog.result, index);
  138. file.Code = item.Code;
  139. this.list.Items.Insert(index, file);
  140. this.list.SelectedItem = file;
  141. file.ShowEditor();
  142. }
  143. private void ActionOpenScript()
  144. {
  145. ScriptFile item = this.list.SelectedItem as ScriptFile;
  146. if (item == null)
  147. return;
  148. item.ShowEditor();
  149. }
  150. private void ActionDeleteScript()
  151. {
  152. ScriptFile item = this.list.SelectedItem as ScriptFile;
  153. if (item == null)
  154. return;
  155. this.scriptList.DeleteFile(item);
  156. this.list.Items.Remove(item);
  157. }
  158. private void ActionInsertScript()
  159. {
  160. ScriptFile item = this.list.SelectedItem as ScriptFile;
  161. int index = this.list.SelectedIndex;
  162. if (item == null)
  163. {
  164. index = 0;
  165. }
  166. ScriptListEditorInsertDialog dialog = new ScriptListEditorInsertDialog(this.scriptList);
  167. DialogResult result = dialog.ShowDialog(this);
  168. if (result != System.Windows.Forms.DialogResult.OK)
  169. return;
  170. ScriptFile file = this.scriptList.InsertFile(dialog.result, index);
  171. this.list.Items.Insert(index, file);
  172. this.list.SelectedItem = file;
  173. file.ShowEditor();
  174. }
  175. public bool CanDelete
  176. {
  177. get { return (this.list.SelectedItem != null); }
  178. }
  179. public void Delete()
  180. {
  181. ActionDeleteScript();
  182. }
  183. }
  184. }