/[RomCheater]/trunk/RomCheater.ScratchPad/ScratchPadDocument.cs
ViewVC logotype

Diff of /trunk/RomCheater.ScratchPad/ScratchPadDocument.cs

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 774 by william, Thu Jun 20 22:33:04 2013 UTC revision 783 by william, Fri Jun 21 04:26:36 2013 UTC
# Line 8  using System.Text; Line 8  using System.Text;
8  using System.Windows.Forms;  using System.Windows.Forms;
9  using WeifenLuo.WinFormsUI.Docking;  using WeifenLuo.WinFormsUI.Docking;
10  using RomCheater.Core;  using RomCheater.Core;
11    using System.IO;
12    using RomCheater.Logging;
13    
14  namespace RomCheater.ScratchPad  namespace RomCheater.ScratchPad
15  {  {
16      public partial class ScratchPadDocument : UserControl      public partial class ScratchPadDocument : UserControl
17      {      {        
18            public event EventHandler<LinkClickedEventArgs> LinkClicked;
19          public event BaseEventHandler<ControlClosingEventArgs<int>> DocumentClosing;          public event BaseEventHandler<ControlClosingEventArgs<int>> DocumentClosing;
20    
21          const string NewDocumentFilename = "New";          const string NewDocumentFilename = "ScratchPad";
22          public ScratchPadDocument() : this(NewDocumentFilename, new TabPage(), 0) { }          public ScratchPadDocument() : this(NewDocumentFilename, new TabPage(), 0) { }
23          public ScratchPadDocument(TabPage tp, int index) : this(NewDocumentFilename, tp, index) { }          public ScratchPadDocument(TabPage tp, int index) : this(NewDocumentFilename, tp, index) { }
24          public ScratchPadDocument(int index) : this(NewDocumentFilename, new TabPage(), index) { }          public ScratchPadDocument(int index) : this(NewDocumentFilename, new TabPage(), index) { }
# Line 28  namespace RomCheater.ScratchPad Line 31  namespace RomCheater.ScratchPad
31              this.DocumentTab.Name = string.Format("tp{0}", this.DocumentIndex);              this.DocumentTab.Name = string.Format("tp{0}", this.DocumentIndex);
32              this.DocumentTab.Text = string.Format("{0}{1}", this.DocumentFilename, this.DocumentIndex);              this.DocumentTab.Text = string.Format("{0}{1}", this.DocumentFilename, this.DocumentIndex);
33              //this.DocumentClosing += new BaseEventHandler<ControlClosingEventArgs<int>>(ScratchPadDocument_DocumentClosing);              //this.DocumentClosing += new BaseEventHandler<ControlClosingEventArgs<int>>(ScratchPadDocument_DocumentClosing);
34                this.IsDefaultDocument = true;
35                this.DocumentSaved = true;
36              this.DocumentTab.Controls.Add(this);              this.DocumentTab.Controls.Add(this);
37          }          }
38    
# Line 44  namespace RomCheater.ScratchPad Line 49  namespace RomCheater.ScratchPad
49              CloseDocument(true);              CloseDocument(true);
50          }          }
51    
52          private void CloseDocument(bool quiting)        
         {  
             if (ShouldAskSave())  
             {  
                 SaveDocument();  
             }  
             var tb = GetParentTabControl();  
             tb.TabPages.RemoveAt(this.DocumentIndex);  
             if (this.DocumentClosing != null && !quiting)  
             {  
                 this.DocumentClosing.Invoke(new ControlClosingEventArgs<int>(this, this.DocumentIndex));  
             }  
         }  
53    
54          private bool ShouldAskSave()          private bool ShouldAskSave()
55          {          {
56              bool shouldAskSave = false;              return !DocumentSaved;
             return shouldAskSave;  
57          }          }
58    
59          private void SaveDocument()          private bool _IsDefaultDocument;
60          {          public bool IsDefaultDocument { get { return _IsDefaultDocument; } private set { _IsDefaultDocument = value; } }
61          }  
62            private bool _DocumentSaved;
63            public bool DocumentSaved { get { return _DocumentSaved; } private set { _DocumentSaved = value; } }
64    
65          private string _DocumentFilename;          private string _DocumentFilename;
66          public string DocumentFilename { get { return _DocumentFilename; } set { _DocumentFilename = value; } }          public string DocumentFilename { get { return _DocumentFilename; } set { _DocumentFilename = value; } }
# Line 75  namespace RomCheater.ScratchPad Line 69  namespace RomCheater.ScratchPad
69          private int _DocumentIndex;          private int _DocumentIndex;
70          public int DocumentIndex { get { return _DocumentIndex; } set { _DocumentIndex = value; } }          public int DocumentIndex { get { return _DocumentIndex; } set { _DocumentIndex = value; } }
71    
72            private void UpdateTabName(string name)
73            {
74                this.DocumentTab.Text = name;
75            }
76          private TabControl GetParentTabControl()          private TabControl GetParentTabControl()
77          {          {
78              var parent = this.DocumentTab.Parent;              var parent = this.DocumentTab.Parent;
# Line 89  namespace RomCheater.ScratchPad Line 87  namespace RomCheater.ScratchPad
87              }              }
88          }          }
89    
90          private void mnuItemOpen_Click(object sender, EventArgs e)          public override Font Font
91          {          {
92                get
93                {
94                    return base.Font;
95                }
96                set
97                {
98                    base.Font = value;
99                    txtEditor.Font = base.Font;
100                    mnuItemClose.Font = base.Font;
101                    mnuItemOpen.Font = base.Font;
102                    mnuItemSave.Font = base.Font;
103                }
104            }
105    
106            private void mnuItemOpen_Click(object sender, EventArgs e)
107            {
108                OpenDocument();
109                this.DocumentSaved = true; // the file was just opened
110          }          }
111    
112          private void mnuItemSave_Click(object sender, EventArgs e)          private void mnuItemSave_Click(object sender, EventArgs e)
113          {          {
114                SaveDocument();
115          }          }
116    
117          private void mnuItemClose_Click(object sender, EventArgs e)          private void mnuItemClose_Click(object sender, EventArgs e)
118          {          {
119              CloseDocument(false);              CloseDocument(false);
120          }          }
121    
122    
123            private void OpenDocument()
124            {
125                DialogResult result = FileLoader.ShowDialog();
126                if (result != DialogResult.OK) return;
127                FileInfo fi = new FileInfo(FileLoader.FileName);
128                this.DocumentFilename = fi.FullName;
129                try
130                {
131                    
132                    using (FileStream fs = new FileStream(fi.FullName, FileMode.Open, FileAccess.Read, FileShare.Read))
133                    {
134                        try
135                        {
136                            using (StreamReader sr = new StreamReader(fs))
137                            {
138                                try
139                                {
140                                    var text = sr.ReadToEnd();          
141                                    sr.Close();
142                                    txtEditor.Text = text;                                
143                                    this.UpdateTabName(fi.Name);
144                                    this.IsDefaultDocument = false;
145                                    this.DocumentSaved = true;
146                                }
147                                catch (Exception ex)
148                                {
149                                    throw ex;
150                                }
151                            }
152                        }
153                        catch (Exception ex)
154                        {
155                            throw ex;
156                        }
157                    }
158                }
159                catch (Exception ex)
160                {
161                    this.DocumentSaved = false;
162                    MessageBox.Show(string.Format("Failed to open: '{0}'", fi.Name), "", MessageBoxButtons.OK, MessageBoxIcon.Error);
163                    logger.Error.WriteLine("Failed to open: '{0}'", fi.FullName);
164                    logger.Error.WriteLine(ex.ToString());
165                }
166            }
167            private void SaveDocument()
168            {
169                FileInfo fi = null;
170                if (this.IsDefaultDocument)
171                {
172                    DialogResult result = FileSaver.ShowDialog();
173                    if (result != DialogResult.OK) return;
174                    fi = new FileInfo(FileSaver.FileName);
175                }
176                else
177                {
178                    fi = new FileInfo(this.DocumentFilename);
179                }          
180                try
181                {
182                    using (FileStream fs = new FileStream(fi.FullName, FileMode.OpenOrCreate, FileAccess.Write, FileShare.Read))
183                    {
184                        try
185                        {
186                            using (StreamWriter sw = new StreamWriter(fs))
187                            {
188                                try
189                                {
190                                    foreach (var t in txtEditor.Lines)
191                                    {
192                                        sw.WriteLine(t);
193                                    }
194                                    sw.Flush();
195                                    sw.Close();
196                                    this.DocumentSaved = true;
197                                }
198                                catch (Exception ex)
199                                {
200                                    throw ex;
201                                }
202                            }
203                        }
204                        catch (Exception ex)
205                        {
206                            throw ex;
207                        }
208                    }
209                }
210                catch (Exception ex)
211                {
212                    this.DocumentSaved = false;
213                    MessageBox.Show(string.Format("Failed to save: '{0}'", fi.Name), "", MessageBoxButtons.OK, MessageBoxIcon.Error);
214                    logger.Error.WriteLine("Failed to save: '{0}'", fi.FullName);
215                    logger.Error.WriteLine(ex.ToString());
216                }
217            }
218    
219            private void CloseDocument(bool quiting)
220            {
221                if (ShouldAskSave())
222                {
223                    SaveDocument();
224                }
225                var tb = GetParentTabControl();
226                tb.TabPages.RemoveAt(this.DocumentIndex);
227                if (this.DocumentClosing != null && !quiting)
228                {
229                    this.DocumentClosing.Invoke(new ControlClosingEventArgs<int>(this, this.DocumentIndex));
230                }
231            }
232    
233            private void txtEditor_TextChanged(object sender, EventArgs e)
234            {
235                this.DocumentSaved = false;
236            }
237    
238            private void txtEditor_LinkClicked(object sender, LinkClickedEventArgs e)
239            {
240                if (this.LinkClicked != null)
241                {
242                    this.LinkClicked.Invoke(sender, e);
243                }
244            }
245      }      }
246  }  }

Legend:
Removed from v.774  
changed lines
  Added in v.783

  ViewVC Help
Powered by ViewVC 1.1.22