/My Notepad/TabbedNote.cs

http://mynotepad.codeplex.com · C# · 299 lines · 276 code · 22 blank · 1 comment · 20 complexity · b19b4c12ea778a01da48336bbe02bdd3 MD5 · raw file

  1. using System;
  2. using System.IO;
  3. using System.Text;
  4. using System.Windows.Forms;
  5. using WeifenLuo.WinFormsUI.Docking;
  6. using ScintillaNet;
  7. namespace MyNotepad
  8. {
  9. public partial class TabbedNote : DockContent
  10. {
  11. string filename;
  12. FileInfo info;
  13. bool isSaved, isDirty;
  14. public TabbedNote()
  15. {
  16. InitializeComponent();
  17. this.TabText = "My Unsaved Note";
  18. isSaved = false;
  19. isDirty = false;
  20. info = null;
  21. }
  22. public Scintilla ScintillaContent
  23. {
  24. get { return this.containedText; }
  25. set { this.containedText = value; }
  26. }
  27. public TabbedNote(FileInfo f)
  28. {
  29. InitializeComponent();
  30. info = f;
  31. try
  32. {
  33. LoadText(f.FullName);
  34. }
  35. catch (IOException err)
  36. {
  37. MessageBox.Show(err.Message, "My Notepad", MessageBoxButtons.OK, MessageBoxIcon.Error);
  38. }
  39. this.TabText = f.Name;
  40. isSaved = true;
  41. isDirty = false;
  42. filename = f.Name;
  43. ChangeOnOpenorSave(f.Extension);
  44. }
  45. private void ChangeOnOpenorSave(string ext)
  46. {
  47. ext = ext.ToLower();
  48. switch (ext)
  49. {
  50. case ".c":
  51. LanguageChange("c");
  52. break;
  53. case ".cpp":
  54. LanguageChange("cpp");
  55. break;
  56. case ".cs":
  57. LanguageChange("cs");
  58. break;
  59. case ".html":
  60. case ".htm":
  61. LanguageChange("html");
  62. break;
  63. case ".java":
  64. LanguageChange("java");
  65. break;
  66. }
  67. }
  68. void LoadText(string file)
  69. {
  70. StreamReader toRead = new StreamReader(file);
  71. ContainedText = toRead.ReadToEnd();
  72. toRead.Close();
  73. }
  74. public bool Saved
  75. {
  76. get { return isSaved; }
  77. set { isSaved = value; }
  78. }
  79. public bool Dirty
  80. {
  81. get { return isDirty; }
  82. set { isDirty = value; }
  83. }
  84. public string ContainedText
  85. {
  86. get { return containedText.Text; }
  87. set { containedText.Text = value; }
  88. }
  89. private void SaveAs(string name)
  90. {
  91. try
  92. {
  93. StreamWriter toWrite = new StreamWriter(name);
  94. toWrite.Write(ContainedText);
  95. toWrite.Close();
  96. filename = name;
  97. isDirty = false;
  98. isSaved = true;
  99. FileInfo f = new FileInfo(name);
  100. this.TabText = f.Name;
  101. info = f;
  102. ChangeOnOpenorSave(f.Extension);
  103. }
  104. catch (IOException err)
  105. {
  106. MessageBox.Show(err.Message, "My Notepad", MessageBoxButtons.OK, MessageBoxIcon.Error);
  107. }
  108. }
  109. public void Save()
  110. {
  111. if (isSaved)
  112. {
  113. if (isDirty)
  114. SaveAs(filename);
  115. }
  116. else
  117. SaveFileAs();
  118. }
  119. private void ContainedTextChanged(object sender, EventArgs e)
  120. {
  121. //isDirty = true;
  122. }
  123. public void SaveFileAs()
  124. {
  125. SaveFileDialog save = new SaveFileDialog();
  126. save.Title = "Save As...";
  127. string filter = "C Files (*.c)|*.c|";
  128. filter += "C++ Files (*.cpp)|*.cpp|";
  129. filter += "C# Files (*.cs)|*.cs|";
  130. filter += "Java Files (*.java)|*.java|";
  131. filter += "HTML Files (*.html)|*.html|";
  132. filter += "Text Files (*.txt)|*.txt|";
  133. filter += "All Files (*.*)|*.*";
  134. save.Filter = filter;
  135. save.AddExtension = true;
  136. save.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
  137. save.DefaultExt = ".txt";
  138. if (save.ShowDialog() == DialogResult.OK)
  139. SaveAs(save.FileName);
  140. }
  141. public FileInfo Info
  142. {
  143. get { return this.info; }
  144. }
  145. private void NoteClosing(object sender, FormClosingEventArgs e)
  146. {
  147. if (isDirty)
  148. {
  149. string str = "";
  150. if (info == null)
  151. str = "File not saved. Would you like to save it?";
  152. else
  153. str = "File " + info.Name + " not saved. Would you like to save it?";
  154. DialogResult rslt = MessageBox.Show(str, "My Notepad", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Warning);
  155. switch (rslt)
  156. {
  157. case DialogResult.Yes:
  158. if (isSaved)
  159. SaveAs(this.filename);
  160. else
  161. {
  162. SaveFileDialog save = new SaveFileDialog();
  163. save.Title = "Save As...";
  164. save.Filter = "Text Files (*.txt)|*.txt|All Files (*.*)|*.*";
  165. DialogResult saveRslt = save.ShowDialog();
  166. switch (saveRslt)
  167. {
  168. case DialogResult.OK:
  169. SaveAs(save.FileName);
  170. break;
  171. case DialogResult.Cancel:
  172. e.Cancel = true;
  173. break;
  174. }
  175. }
  176. break;
  177. case DialogResult.Cancel:
  178. e.Cancel = true;
  179. break;
  180. }
  181. }
  182. }
  183. private void TextInserted(object sender, TextModifiedEventArgs e)
  184. {
  185. isDirty = true;
  186. if (!this.TabText.StartsWith("*"))
  187. {
  188. string str = this.TabText.Insert(0, "*");
  189. this.TabText = str;
  190. }
  191. }
  192. private void TextDeleted(object sender, TextModifiedEventArgs e)
  193. {
  194. isDirty = true;
  195. if (!this.TabText.StartsWith("*"))
  196. {
  197. string str = this.TabText.Insert(0, "*");
  198. this.TabText = str;
  199. }
  200. }
  201. public void LanguageChange(string lang)
  202. {
  203. try
  204. {
  205. switch (lang)
  206. {
  207. case "c":
  208. containedText.ConfigurationManager.Language = "c";
  209. containedText.Lexing.Colorize();
  210. break;
  211. case "cpp":
  212. containedText.ConfigurationManager.Language = "cpp";
  213. containedText.Lexing.Colorize();
  214. break;
  215. case "cs":
  216. containedText.ConfigurationManager.Language = "cs";
  217. containedText.Lexing.Colorize();
  218. break;
  219. case "html":
  220. containedText.ConfigurationManager.Language = "html";
  221. containedText.Lexing.Colorize();
  222. break;
  223. case "java":
  224. containedText.ConfigurationManager.Language = "java";
  225. containedText.Lexing.Colorize();
  226. break;
  227. }
  228. }
  229. catch (FileNotFoundException)
  230. {
  231. switch (lang)
  232. {
  233. case "c":
  234. if (!Properties.Settings.Default.c)
  235. {
  236. ShowNotFoundError(lang);
  237. Properties.Settings.Default.c = true;
  238. }
  239. break;
  240. case "cpp":
  241. if (!Properties.Settings.Default.cpp)
  242. {
  243. ShowNotFoundError(lang);
  244. Properties.Settings.Default.cpp = true;
  245. }
  246. break;
  247. case "cs":
  248. if (!Properties.Settings.Default.cs)
  249. {
  250. ShowNotFoundError(lang);
  251. Properties.Settings.Default.cs = true;
  252. }
  253. break;
  254. case "html":
  255. if (!Properties.Settings.Default.html)
  256. {
  257. ShowNotFoundError(lang);
  258. Properties.Settings.Default.html = true;
  259. }
  260. break;
  261. case "java":
  262. if (!Properties.Settings.Default.java)
  263. {
  264. ShowNotFoundError(lang);
  265. Properties.Settings.Default.java = true;
  266. }
  267. break;
  268. }
  269. Properties.Settings.Default.Save();
  270. }
  271. }
  272. private void ShowNotFoundError(string lang)
  273. {
  274. MessageBox.Show("The highlighter for " + lang + " was not found. This will not be shown again. Reinstall My Notepad to get it.", "My Notepad", MessageBoxButtons.OK, MessageBoxIcon.Warning);
  275. }
  276. }
  277. }