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
using System;\r
+using System.Text;\r
using System.Threading;\r
+using System.Threading.Tasks;\r
using System.Windows.Forms;\r
using System.Drawing;\r
using System.ComponentModel;\r
this.SetStyle(ControlStyles.Opaque, true);\r
\r
this.Document = new Document();\r
- DocumentExtend.Progress += Document_Progress;\r
\r
this.render = new D2DTextRender(this);\r
this.View = new EditView(this.Document,this.render,new FooEditEngine.Padding(5,5,5,5));\r
}\r
\r
/// <summary>\r
+ /// ストリームからドキュメントを構築する\r
+ /// </summary>\r
+ /// <param name="tr">TextReader</param>\r
+ /// <param name="token">キャンセル用トークン</param>\r
+ /// <returns>Taskオブジェクト</returns>\r
+ public async Task LoadAsync(System.IO.TextReader tr, System.Threading.CancellationTokenSource token)\r
+ {\r
+ WinFileReader fs = new WinFileReader(tr);\r
+ await this.LoadAsyncImpl(fs, token);\r
+ }\r
+\r
+ /// <summary>\r
+ /// ファイルからドキュメントを構築する\r
+ /// </summary>\r
+ /// <param name="filepath">ファイルパス</param>\r
+ /// <param name="enc">エンコード</param>\r
+ /// <param name="token">キャンセル用トークン</param>\r
+ /// <returns>Taskオブジェクト</returns>\r
+ public async Task LoadFileAsync(string filepath, Encoding enc, System.Threading.CancellationTokenSource token)\r
+ {\r
+ WinFileReader fs = new WinFileReader(filepath, enc);\r
+ await this.LoadAsyncImpl(fs, token);\r
+ }\r
+\r
+ async Task LoadAsyncImpl(WinFileReader fs, System.Threading.CancellationTokenSource token)\r
+ {\r
+ this.Enabled = false;\r
+ this.View.LayoutLines.IsFrozneDirtyFlag = true;\r
+ await this.Document.LoadAsync(fs, token);\r
+ this.View.LayoutLines.IsFrozneDirtyFlag = false;\r
+ this.initScrollBars();\r
+ this.OnMouseMove(new MouseEventArgs(MouseButtons.None, 0, MousePosition.X, MousePosition.Y, 0));\r
+ this.View.CalculateLineCountOnScreen();\r
+ this.Enabled = true;\r
+ }\r
+\r
+ /// <summary>\r
+ /// ドキュメントの内容をファイルに保存する\r
+ /// </summary>\r
+ /// <param name="filepath">ファイルパス</param>\r
+ /// <param name="newLine">改行コード</param>\r
+ /// <param name="enc">エンコード</param>\r
+ /// <returns>Taskオブジェクト</returns>\r
+ public async Task SaveFile(string filepath, Encoding enc, string newLine, System.Threading.CancellationTokenSource token)\r
+ {\r
+ WinFileWriter fs = new WinFileWriter(filepath, enc);\r
+ fs.NewLine = newLine;\r
+ await this.Document.SaveAsync(fs, token);\r
+ }\r
+\r
+ /// <summary>\r
/// マウスカーソルを指定します\r
/// </summary>\r
public override Cursor Cursor\r
protected override void Dispose(bool disposing)\r
{\r
SystemEvents.UserPreferenceChanged -= new UserPreferenceChangedEventHandler(this.SystemEvents_UserPreferenceChanged);\r
- DocumentExtend.Progress -= this.Document_Progress;\r
this.render.Dispose();\r
this.Timer.Dispose();\r
base.Dispose(disposing);\r
float dpi;\r
this.render.GetDpi(out dpi, out dpi);\r
p.X = (int)(p.X * dpi / 96);\r
- p.Y = (int)(p.X * dpi / 96);\r
+ p.Y = (int)(p.Y * dpi / 96);\r
this.Ime.Location = p;\r
this.View.HideCaret = true;\r
}\r
this.SelectionChanged(this, null);\r
}\r
\r
- void Document_Progress(object sender, ProgressEventArgs e)\r
- {\r
- if (e.state == ProgressState.Complete)\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
void initScrollBars()\r
{\r
this.VScrollBar.SmallChange = 1;\r