You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>.\r
*/\r
\r
-//#define TEST_ASYNC\r
-\r
using System;\r
using System.IO;\r
using System.Collections.Generic;\r
Regex regex;\r
Match match;\r
StringBuffer buffer;\r
- CancellationTokenSource cancleTokenSource;\r
- Progress<ProgressEventArgs> _Progress = new Progress<ProgressEventArgs>();\r
bool _EnableFireUpdateEvent = true;\r
\r
/// <summary>\r
}\r
\r
/// <summary>\r
- /// 進捗処理を表す\r
- /// </summary>\r
- public event EventHandler<ProgressEventArgs> Progress\r
- {\r
- add\r
- {\r
- this._Progress.ProgressChanged += value;\r
- }\r
- remove\r
- {\r
- this._Progress.ProgressChanged -= value;\r
- }\r
- }\r
-\r
- /// <summary>\r
/// ドキュメントが更新された時に呼ばれるイベント\r
/// </summary>\r
public event DocumentUpdateEventHandler Update;\r
public AsyncState State\r
{\r
get;\r
- private set;\r
+ internal set;\r
}\r
\r
/// <summary>\r
private set;\r
}\r
\r
+ internal StringBuffer StringBuffer\r
+ {\r
+ get\r
+ {\r
+ return this.buffer;\r
+ }\r
+ }\r
+\r
/// <summary>\r
/// DocumentReaderを作成します\r
/// </summary>\r
}\r
\r
/// <summary>\r
- /// 非同期操作をキャンセルします\r
- /// </summary>\r
- public void Cancel()\r
- {\r
- if(this.cancleTokenSource != null)\r
- this.cancleTokenSource.Cancel();\r
- }\r
-\r
-#if !METRO\r
- /// <summary>\r
- /// ファイルからドキュメントを構築します\r
- /// </summary>\r
- /// <param name="filepath">読み取り先のファイル</param>\r
- /// <param name="enc">エンコーディング</param>\r
- /// <remarks>非同期操作中はこのメソッドを実行することはできません</remarks>\r
- public void Load(string filepath, Encoding enc)\r
- {\r
- if (this.State != AsyncState.None)\r
- throw new InvalidOperationException();\r
- using (StreamReader sr = new StreamReader(filepath, enc))\r
- {\r
- this.Load(sr);\r
- }\r
- }\r
-\r
- /// <summary>\r
- /// ファイルからドキュメントを非同期的に構築します\r
- /// </summary>\r
- /// <param name="filepath">読み取り先のファイル</param>\r
- /// <param name="enc">エンコーディング</param>\r
- /// <remarks>読み取り操作は別スレッドで行われます。また、非同期操作中にこのメソッドを読みだすことはできません</remarks>\r
- public async Task LoadAsync(string filepath, Encoding enc)\r
- {\r
- if (this.State != AsyncState.None)\r
- throw new InvalidOperationException();\r
- this.cancleTokenSource = new CancellationTokenSource();\r
- using (StreamReader sr = new StreamReader(filepath, enc))\r
- {\r
- await this.LoadAsync(sr, this.cancleTokenSource);\r
- }\r
- }\r
-#endif\r
-\r
- /// <summary>\r
- /// ストリームからドキュメントを構築します\r
- /// </summary>\r
- /// <param name="sr">読み取り先のストリーム</param>\r
- /// <remarks>非同期操作中はこのメソッドを実行することはできません</remarks>\r
- public void Load(TextReader sr)\r
- {\r
- Task t = this.LoadAsync(sr, null);\r
- t.Wait();\r
- }\r
-\r
- /// <summary>\r
- /// ストリームからドキュメントを非同期的に構築します\r
- /// </summary>\r
- /// <param name="sr">読み取り先のストリーム</param>\r
- /// <returns>Taskオブジェクト</returns>\r
- /// <remarks>非同期操作中はこのメソッドを実行することはできません</remarks>\r
- public async Task LoadAsync(TextReader sr)\r
- {\r
- this.cancleTokenSource = new CancellationTokenSource();\r
- await this.LoadAsync(sr, this.cancleTokenSource);\r
- }\r
-\r
- /// <summary>\r
- /// ストリームからドキュメントを非同期的に構築します\r
- /// </summary>\r
- /// <param name="sr">読み取り先のストリーム</param>\r
- /// <param name="tokenSource">キャンセルトークン</param>\r
- /// <returns>Taskオブジェクト</returns>\r
- /// <remarks>非同期操作中はこのメソッドを実行することはできません</remarks>\r
- async Task LoadAsync(TextReader sr,CancellationTokenSource tokenSource = null)\r
- {\r
- if (this.State != AsyncState.None)\r
- throw new InvalidOperationException();\r
- if (sr.Peek() == -1)\r
- {\r
- return;\r
- }\r
-\r
- IProgress<ProgressEventArgs> progress = this._Progress;\r
- try\r
- {\r
- progress.Report(new ProgressEventArgs(ProgressState.Start));\r
- this.State = AsyncState.Loading;\r
- this.FireUpdateEvent = false;\r
- this.buffer.Clear();\r
- this.UndoManager.BeginLock();\r
- string str;\r
- for (int i = 0; (str = await sr.ReadLineAsync().ConfigureAwait(false)) != null; i++)\r
- {\r
- int index = this.buffer.Length;\r
- if (index < 0)\r
- index = 0;\r
-\r
- this.buffer.Replace(index, 0, str + Document.NewLine);\r
-\r
- if(tokenSource != null)\r
- tokenSource.Token.ThrowIfCancellationRequested();\r
-#if TEST_ASYNC\r
- System.Threading.Thread.Sleep(10);\r
-#endif\r
- }\r
- }\r
- finally\r
- {\r
- this.FireUpdateEvent = true;\r
- this.UndoManager.EndLock();\r
- this.State = AsyncState.None;\r
- progress.Report(new ProgressEventArgs(ProgressState.Complete));\r
- }\r
- }\r
-\r
-#if !METRO\r
- /// <summary>\r
- /// ドキュメントをファイルに保存します\r
- /// </summary>\r
- /// <param name="filepath">保存先のファイル</param>\r
- /// <param name="enc">保存したいエンコード</param>\r
- /// <param name="newline">改行を表す文字列</param>\r
- /// <remarks>非同期操作中はこのメソッドを実行することはできません</remarks>\r
- public void Save(string filepath, Encoding enc, string newline)\r
- {\r
- if (this.State != AsyncState.None)\r
- throw new InvalidOperationException();\r
- using (StreamWriter sw = new StreamWriter(filepath, false, enc))\r
- {\r
- sw.NewLine = newline;\r
- this.Save(sw);\r
- }\r
- }\r
-\r
- /// <summary>\r
- /// ドキュメントをファイルに保存します\r
- /// </summary>\r
- /// <param name="filepath">保存先のファイル</param>\r
- /// <param name="enc">保存したいエンコード</param>\r
- /// <param name="newline">改行を表す文字列</param>\r
- /// <remarks>非同期操作中はこのメソッドを実行することはできません</remarks>\r
- public async Task SaveAsync(string filepath, Encoding enc, string newline)\r
- {\r
- if (this.State != AsyncState.None)\r
- throw new InvalidOperationException();\r
- this.cancleTokenSource = new CancellationTokenSource();\r
- using (StreamWriter sw = new StreamWriter(filepath, false, enc))\r
- {\r
- sw.NewLine = newline;\r
- await this.SaveAsync(sw,this.cancleTokenSource);\r
- }\r
- }\r
-#endif\r
-\r
- /// <summary>\r
- /// ストリームに保存します\r
- /// </summary>\r
- /// <param name="sw">保存先のストリーム</param>\r
- /// <param name="tokenSource">キャンセルトークン</param>\r
- /// <returns>Taskオブジェクト</returns>\r
- /// <remarks>非同期操作中はこのメソッドを実行することはできません</remarks>\r
- public void Save(StreamWriter sw, CancellationTokenSource tokenSource = null)\r
- {\r
- Task t = this.SaveAsync(sw, null);\r
- t.Wait();\r
- }\r
-\r
- /// <summary>\r
- /// ストリームに非同期モードで保存します\r
- /// </summary>\r
- /// <param name="sw">保存先のストリーム</param>\r
- /// <param name="tokenSource">キャンセルトークン</param>\r
- /// <returns>Taskオブジェクト</returns>\r
- /// <remarks>非同期操作中はこのメソッドを実行することはできません</remarks>\r
- public async Task SaveAsync(StreamWriter sw, CancellationTokenSource tokenSource = null)\r
- {\r
- if (this.State != AsyncState.None)\r
- throw new InvalidOperationException();\r
- IProgress<ProgressEventArgs> progress = this._Progress;\r
- try\r
- {\r
- progress.Report(new ProgressEventArgs(ProgressState.Start));\r
- this.State = AsyncState.Saving;\r
- StringBuilder line = new StringBuilder();\r
- for (int i = 0; i < this.Length; i++)\r
- {\r
- char c = this.buffer[i];\r
- line.Append(c);\r
- if (c == Document.NewLine || i == this.Length - 1)\r
- {\r
- string str = line.ToString();\r
- str = str.Replace(Document.NewLine.ToString(), sw.NewLine);\r
- await sw.WriteAsync(str).ConfigureAwait(false);\r
- line.Clear();\r
- if(tokenSource != null)\r
- tokenSource.Token.ThrowIfCancellationRequested();\r
-#if TEST_ASYNC\r
- System.Threading.Thread.Sleep(10);\r
-#endif\r
- }\r
- }\r
- }\r
- finally\r
- {\r
- this.State = AsyncState.None;\r
- progress.Report(new ProgressEventArgs(ProgressState.Complete));\r
- }\r
- }\r
-\r
- /// <summary>\r
/// Find()で使用するパラメーターをセットします\r
/// </summary>\r
/// <param name="pattern">検索したい文字列</param>\r
--- /dev/null
+/*\r
+ * Copyright (C) 2013 FooProject\r
+ * * This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by\r
+ * the Free Software Foundation; either version 3 of the License, or (at your option) any later version.\r
+\r
+ * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of \r
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.\r
+\r
+You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>.\r
+ */\r
+\r
+//#define TEST_ASYNC\r
+\r
+using System;\r
+using System.IO;\r
+using System.Text;\r
+using System.Threading;\r
+using System.Threading.Tasks;\r
+\r
+namespace FooEditEngine\r
+{\r
+ /// <summary>\r
+ /// Documentの拡張クラス\r
+ /// </summary>\r
+ public static class DocumentExtend\r
+ {\r
+ static Progress<ProgressEventArgs> _Progress = new Progress<ProgressEventArgs>();\r
+ /// <summary>\r
+ /// 進捗処理を表す\r
+ /// </summary>\r
+ public static event EventHandler<ProgressEventArgs> Progress\r
+ {\r
+ add\r
+ {\r
+ _Progress.ProgressChanged += value;\r
+ }\r
+ remove\r
+ {\r
+ _Progress.ProgressChanged -= value;\r
+ }\r
+ }\r
+\r
+#if !METRO\r
+ /// <summary>\r
+ /// ファイルからドキュメントを構築します\r
+ /// </summary>\r
+ /// <param name="doc">Documentオブジェクト</param>\r
+ /// <param name="filepath">読み取り先のファイル</param>\r
+ /// <param name="enc">エンコーディング</param>\r
+ /// <remarks>\r
+ /// 非同期操作中はこのメソッドを実行することはできません。\r
+ /// </remarks>\r
+ public static void Load(this Document doc, string filepath, Encoding enc)\r
+ {\r
+ if (doc.State != AsyncState.None)\r
+ throw new InvalidOperationException();\r
+ using (StreamReader sr = new StreamReader(filepath, enc))\r
+ {\r
+ Load(doc,sr);\r
+ }\r
+ }\r
+\r
+ /// <summary>\r
+ /// ファイルからドキュメントを非同期的に構築します\r
+ /// </summary>\r
+ /// <param name="doc">Documentオブジェクト</param>\r
+ /// <param name="filepath">読み取り先のファイル</param>\r
+ /// <param name="enc">エンコーディング</param>\r
+ /// <param name="token">キャンセル用のトークン</param>\r
+ /// <remarks>\r
+ /// 読み取り操作は別スレッドで行われます。\r
+ /// また、非同期操作中にこのメソッドを読みだすことはできません\r
+ /// </remarks>\r
+ public static async Task LoadAsync(this Document doc, string filepath, Encoding enc, CancellationTokenSource token)\r
+ {\r
+ if (doc.State != AsyncState.None)\r
+ throw new InvalidOperationException();\r
+ using (StreamReader sr = new StreamReader(filepath, enc))\r
+ {\r
+ await LoadAsync(doc,sr, token);\r
+ }\r
+ }\r
+#endif\r
+\r
+ /// <summary>\r
+ /// ストリームからドキュメントを構築します\r
+ /// </summary>\r
+ /// <param name="doc">Documentオブジェクト</param>\r
+ /// <param name="sr">読み取り先のストリーム</param>\r
+ /// <remarks>\r
+ /// 非同期操作中はこのメソッドを実行することはできません\r
+ /// </remarks>\r
+ public static void Load(this Document doc, TextReader sr)\r
+ {\r
+ Task t = LoadAsync(doc,sr, null);\r
+ t.Wait();\r
+ }\r
+\r
+ /// <summary>\r
+ /// ストリームからドキュメントを非同期的に構築します\r
+ /// </summary>\r
+ /// <param name="doc">Documentオブジェクト</param>\r
+ /// <param name="sr">読み取り先のストリーム</param>\r
+ /// <param name="tokenSource">キャンセルトークン</param>\r
+ /// <returns>Taskオブジェクト</returns>\r
+ /// <remarks>\r
+ /// 読み取り操作は別スレッドで行われます。\r
+ /// また、非同期操作中はこのメソッドを実行することはできません。\r
+ /// </remarks>\r
+ public static async Task LoadAsync(this Document doc, TextReader sr, CancellationTokenSource tokenSource = null)\r
+ {\r
+ if (doc.State != AsyncState.None)\r
+ throw new InvalidOperationException();\r
+ if (sr.Peek() == -1)\r
+ {\r
+ return;\r
+ }\r
+\r
+ IProgress<ProgressEventArgs> progress = _Progress;\r
+ try\r
+ {\r
+ progress.Report(new ProgressEventArgs(ProgressState.Start));\r
+ doc.State = AsyncState.Loading;\r
+ doc.FireUpdateEvent = false;\r
+ doc.StringBuffer.Clear();\r
+ doc.UndoManager.BeginLock();\r
+ string str;\r
+ for (int i = 0; (str = await sr.ReadLineAsync().ConfigureAwait(false)) != null; i++)\r
+ {\r
+ int index = doc.StringBuffer.Length;\r
+ if (index < 0)\r
+ index = 0;\r
+\r
+ doc.StringBuffer.Replace(index, 0, str + Document.NewLine);\r
+\r
+ if (tokenSource != null)\r
+ tokenSource.Token.ThrowIfCancellationRequested();\r
+#if TEST_ASYNC\r
+ System.Threading.Thread.Sleep(10);\r
+#endif\r
+ }\r
+ }\r
+ finally\r
+ {\r
+ doc.FireUpdateEvent = true;\r
+ doc.UndoManager.EndLock();\r
+ doc.State = AsyncState.None;\r
+ progress.Report(new ProgressEventArgs(ProgressState.Complete));\r
+ }\r
+ }\r
+\r
+#if !METRO\r
+ /// <summary>\r
+ /// ドキュメントをファイルに保存します\r
+ /// </summary>\r
+ /// <param name="doc">Documentオブジェクト</param>\r
+ /// <param name="filepath">保存先のファイル</param>\r
+ /// <param name="enc">保存したいエンコード</param>\r
+ /// <param name="newline">改行を表す文字列</param>\r
+ /// <remarks>非同期操作中はこのメソッドを実行することはできません</remarks>\r
+ public static void Save(this Document doc, string filepath, Encoding enc, string newline)\r
+ {\r
+ if (doc.State != AsyncState.None)\r
+ throw new InvalidOperationException();\r
+ using (StreamWriter sw = new StreamWriter(filepath, false, enc))\r
+ {\r
+ sw.NewLine = newline;\r
+ Save(doc,sw);\r
+ }\r
+ }\r
+\r
+ /// <summary>\r
+ /// ドキュメントをファイルに保存します\r
+ /// </summary>\r
+ /// <param name="doc">Documentオブジェクト</param>\r
+ /// <param name="filepath">保存先のファイル</param>\r
+ /// <param name="enc">保存したいエンコード</param>\r
+ /// <param name="newline">改行を表す文字列</param>\r
+ /// <param name="token">CancellationTokenSourceオブジェクト</param>\r
+ /// <remarks>非同期操作中はこのメソッドを実行することはできません</remarks>\r
+ public static async Task SaveAsync(this Document doc, string filepath, Encoding enc, string newline,CancellationTokenSource token)\r
+ {\r
+ if (doc.State != AsyncState.None)\r
+ throw new InvalidOperationException();\r
+ using (StreamWriter sw = new StreamWriter(filepath, false, enc))\r
+ {\r
+ sw.NewLine = newline;\r
+ await SaveAsync(doc,sw, token);\r
+ }\r
+ }\r
+#endif\r
+\r
+ /// <summary>\r
+ /// ストリームに保存します\r
+ /// </summary>\r
+ /// <param name="doc">Documentオブジェクト</param>\r
+ /// <param name="sw">保存先のストリーム</param>\r
+ /// <returns>Taskオブジェクト</returns>\r
+ /// <remarks>非同期操作中はこのメソッドを実行することはできません</remarks>\r
+ public static void Save(this Document doc, StreamWriter sw)\r
+ {\r
+ Task t = SaveAsync(doc,sw, null);\r
+ t.Wait();\r
+ }\r
+\r
+ /// <summary>\r
+ /// ストリームに非同期モードで保存します\r
+ /// </summary>\r
+ /// <param name="doc">Documentオブジェクト</param>\r
+ /// <param name="sw">保存先のストリーム</param>\r
+ /// <param name="tokenSource">キャンセルトークン</param>\r
+ /// <returns>Taskオブジェクト</returns>\r
+ /// <remarks>非同期操作中はこのメソッドを実行することはできません</remarks>\r
+ public static async Task SaveAsync(this Document doc,StreamWriter sw, CancellationTokenSource tokenSource = null)\r
+ {\r
+ if (doc.State != AsyncState.None)\r
+ throw new InvalidOperationException();\r
+ IProgress<ProgressEventArgs> progress = _Progress;\r
+ try\r
+ {\r
+ progress.Report(new ProgressEventArgs(ProgressState.Start));\r
+ doc.State = AsyncState.Saving;\r
+ StringBuilder line = new StringBuilder();\r
+ for (int i = 0; i < doc.Length; i++)\r
+ {\r
+ char c = doc[i];\r
+ line.Append(c);\r
+ if (c == Document.NewLine || i == doc.Length - 1)\r
+ {\r
+ string str = line.ToString();\r
+ str = str.Replace(Document.NewLine.ToString(), sw.NewLine);\r
+ await sw.WriteAsync(str).ConfigureAwait(false);\r
+ line.Clear();\r
+ if (tokenSource != null)\r
+ tokenSource.Token.ThrowIfCancellationRequested();\r
+#if TEST_ASYNC\r
+ System.Threading.Thread.Sleep(10);\r
+#endif\r
+ }\r
+ }\r
+ }\r
+ finally\r
+ {\r
+ doc.State = AsyncState.None;\r
+ progress.Report(new ProgressEventArgs(ProgressState.Complete));\r
+ }\r
+ }\r
+ }\r
+}\r
this.LineBreakingMarginWidth = width * 5 / 100;\r
}\r
\r
- protected override void CalculateLineCountOnScreen()\r
+ public override void CalculateLineCountOnScreen()\r
{\r
if (this.LayoutLines.Count == 0 || this.PageBound.Height == 0)\r
return;\r
this.render.TextArea = new Rectangle(x, y, width, height);\r
}\r
\r
- protected override void CalculateLineCountOnScreen()\r
+ public override void CalculateLineCountOnScreen()\r
{\r
if (this.LayoutLines.Count == 0)\r
return;\r
{\r
this.Document = doc;\r
this.Document.UpdateCalledAlways += new DocumentUpdateEventHandler(doc_Update);\r
- this.Document.Progress += Document_Progress;\r
this._LayoutLines = new LineToIndexTable(this.Document, r);\r
this._LayoutLines.SpilitString = new SpilitStringEventHandler(LayoutLines_SpilitStringByChar);\r
this.render = r;\r
GC.SuppressFinalize(this);\r
}\r
\r
+ public virtual void CalculateLineCountOnScreen()\r
+ {\r
+ }\r
+\r
protected virtual void Dispose(bool disposing)\r
{\r
if (disposing)\r
{\r
this.Document.UpdateCalledAlways -= new DocumentUpdateEventHandler(this.doc_Update); //これをしないと複数のビューを作成した時に妙なエラーが発生する\r
- this.Document.Progress -= Document_Progress;\r
}\r
this._LayoutLines.Clear();\r
}\r
{\r
}\r
\r
- protected virtual void CalculateLineCountOnScreen()\r
- {\r
- }\r
\r
protected virtual void OnSrcChanged(EventArgs e)\r
{\r
}\r
}\r
\r
- void Document_Progress(object sender, ProgressEventArgs e)\r
- {\r
- if (e.state == ProgressState.Complete)\r
- this.CalculateLineCountOnScreen();\r
- }\r
-\r
void doc_Update(object sender, DocumentUpdateEventArgs e)\r
{\r
switch (e.type)\r
<Compile Include="..\..\Common\Document.cs">
<Link>Document.cs</Link>
</Compile>
+ <Compile Include="..\..\Common\DocumentExtend.cs">
+ <Link>DocumentExtend.cs</Link>
+ </Compile>
<Compile Include="..\..\Common\EditView.cs">
<Link>EditView.cs</Link>
</Compile>
this.textStore.CompositionEnded += textStore_CompositionEnded;\r
\r
this.Document = new Document();\r
- this.Document.Progress += Document_Progress;\r
+ DocumentExtend.Progress += Document_Progress;\r
\r
this.rectangle = new Windows.UI.Xaml.Shapes.Rectangle();\r
this.rectangle.Margin = this.Padding;\r
this.textStore.NotifyTextChanged(0, 0, this.Document.Length);\r
if (this.verticalScrollBar != null)\r
this.verticalScrollBar.Maximum = this.View.LayoutLines.Count;\r
+ this.View.CalculateLineCountOnScreen();\r
break;\r
}\r
}\r
using Windows.UI.Xaml.Controls;\r
using Windows.UI.Xaml.Navigation;\r
using Windows.UI.ApplicationSettings;\r
+using FooEditEngine;\r
using FooEditEngine.Metro;\r
\r
// 空白ページのアイテム テンプレートについては、http://go.microsoft.com/fwlink/?LinkId=234238 を参照してください\r
<Compile Include="..\..\Common\Document.cs">
<Link>Document.cs</Link>
</Compile>
+ <Compile Include="..\..\Common\DocumentExtend.cs">
+ <Link>DocumentExtend.cs</Link>
+ </Compile>
<Compile Include="..\..\Common\EditView.cs">
<Link>EditView.cs</Link>
</Compile>
this.textStore.CompositionEnded += textStore_CompositionEnded;\r
\r
this.Document = new Document();\r
- this.Document.Progress += Document_Progress;\r
+ DocumentExtend.Progress += Document_Progress;\r
\r
this.Render = new D2DRender(this, 200, 200,this.image);\r
this.Render.ShowFullSpace = this.ShowFullSpace;\r
this.OnMouseMove(new MouseEventArgs(Mouse.PrimaryDevice, new TimeSpan(DateTime.Now.Ticks).Milliseconds));\r
if(this.verticalScrollBar != null)\r
this.verticalScrollBar.Maximum = this.View.LayoutLines.Count;\r
+ this.View.CalculateLineCountOnScreen();\r
break;\r
}\r
}\r
/// </summary>
public partial class MainWindow : Window
{
+ System.Threading.CancellationTokenSource cancleTokenSrc = new System.Threading.CancellationTokenSource();
public MainWindow()
{
InitializeComponent();
void MainWindow_Closed(object sender, System.EventArgs e)
{
- this.fooTextBox.Document.Cancel();
+ this.cancleTokenSrc.Cancel();
}
void fooTextBox_MouseDoubleClick(object sender, System.Windows.Input.MouseButtonEventArgs e)
bool result = (bool)ofd.ShowDialog(this);
if (result == true)
{
- await this.fooTextBox.Document.LoadAsync(ofd.FileName, Encoding.Default);
+ await this.fooTextBox.Document.LoadAsync(ofd.FileName, Encoding.Default,this.cancleTokenSrc);
this.fooTextBox.Refresh();
}
}
bool result = (bool)sfd.ShowDialog(this);
if (result == true)
{
- await this.fooTextBox.Document.SaveAsync(sfd.FileName,Encoding.Default,"\r\n");
+ await this.fooTextBox.Document.SaveAsync(sfd.FileName,Encoding.Default,"\r\n",cancleTokenSrc);
MessageBox.Show("complete");
}
}
<Compile Include="..\..\Common\Document.cs">
<Link>Document.cs</Link>
</Compile>
+ <Compile Include="..\..\Common\DocumentExtend.cs">
+ <Link>DocumentExtend.cs</Link>
+ </Compile>
<Compile Include="..\..\Common\EditView.cs">
<Link>EditView.cs</Link>
</Compile>
this.SetStyle(ControlStyles.Opaque, true);\r
\r
this.Document = new Document();\r
- this.Document.Progress += Document_Progress;\r
- this.Document.ChangeFireUpdateEvent += new EventHandler(Document_ChangeFireUpdateEvent);\r
+ DocumentExtend.Progress += Document_Progress;\r
\r
this.render = new D2DTextRender(this);\r
this.View = new EditView(this.Document,this.render,new Margin(5,5,5,5));\r
this.Controller.DeSelectAll();\r
}\r
\r
- void Document_ChangeFireUpdateEvent(object sender, EventArgs e)\r
- {\r
- if (this.Document.FireUpdateEvent)\r
- {\r
- this.Controller.AdjustCaret();\r
- this.DeSelectAll();\r
- this.BeginInvoke(new Action(() =>\r
- {\r
- this.Timer.Start();\r
- }));\r
- }\r
- else\r
- {\r
- this.BeginInvoke(new Action(() =>\r
- {\r
- this.Timer.Stop();\r
- }));\r
- }\r
- }\r
-\r
/// <summary>\r
/// クリップボードにコピーする\r
/// </summary>\r
{\r
this.initScrollBars();\r
this.OnMouseMove(new MouseEventArgs(MouseButtons.None, 0, MousePosition.X, MousePosition.Y, 0));\r
+ this.View.CalculateLineCountOnScreen();\r
}\r
}\r
\r
OpenFileDialog ofd = new OpenFileDialog();
if (ofd.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
- await this.fooTextBox1.Document.LoadAsync(ofd.FileName, Encoding.Default);
+ await this.fooTextBox1.Document.LoadAsync(ofd.FileName, Encoding.Default,null);
this.fooTextBox1.Refresh();
}
}