/*
* Copyright (C) 2013 FooProject
* * 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
* the Free Software Foundation; either version 3 of the License, or (at your option) any later version.
* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with this program. If not, see .
*/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using FooEditEngine;
using Windows.UI.Core;
using Windows.Foundation;
using Windows.Graphics.Printing;
using Windows.Graphics.Printing.OptionDetails;
namespace FooEditEngine.Metro
{
///
/// 印刷を行うクラス
///
public class FooPrintText
{
///
/// コンストラクター
///
public FooPrintText()
{
this.PrintStart += (s, e) => { };
this.PrintComplete += (s, e) => { };
this.ParseHF = (s, e) => { return e.Original; };
}
DocumentSource source;
///
/// ヘッダーやフッターを処理する
///
public ParseCommandHandler ParseHF;
///
/// ヘッダー
///
public string Header;
///
/// フッター
///
public string Fotter;
///
/// 余白
///
public Padding Padding;
///
/// 印刷が開始したことを表す
///
public event EventHandler PrintStart;
///
/// 印刷が完了したことを表す
///
public event EventHandler PrintComplete;
///
/// 印刷する
///
/// PrintTaskRequestオブジェクト
/// タイトル
/// 印刷対象のテキストボックス
public void Print(PrintTaskRequest req,string title,FooTextBox textbox)
{
IAsyncAction async = textbox.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
{
this.PrintStart(this, null);
source = new DocumentSource(textbox,this.Padding);
source.ParseHF = ParseHF;
source.Header = Header;
source.Fotter = Fotter;
PrintTask task = null;
task = req.CreatePrintTask(title, (e) =>
{
e.SetSource(source);
});
task.Completed += async (sender, e) => {
source.Dispose();
await textbox.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => {
this.PrintComplete(this, null);
});
};
PrintOptionBuilder builder = new PrintOptionBuilder(source);
builder.BuildPrintOption(PrintTaskOptionDetails.GetFromPrintTaskOptions(task.Options));
});
Task t = WindowsRuntimeSystemExtensions.AsTask(async);
t.Wait();
}
}
}