using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace PostCardHitsuji.Global
{
    public class ResourceHolder
    {
        #region 宛名面印刷オブジェクト
        /// <summary>
        /// 宛名レイアウトの印刷時のプリントドキュメント取得
        /// 宛名レイアウトの印刷設定（用紙サイズ、余白設定など）はひとつを使いまわすため、スタティックとする。
        /// プリントページイベント（レイアウト作成処理）は各宛名レイアウトで異なるため初期化する
        /// </summary>
        public static System.Drawing.Printing.PrintDocument getReseiverLayoutPrintDocument(System.Drawing.Printing.PrintPageEventHandler printPageEvent)
        {
            //初回は作成
            if (reseiverLayoutPrintDocument == null)
                reseiverLayoutPrintDocument = new System.Drawing.Printing.PrintDocument();
            //積まれたプリントページイベントがある場合、ドキュメントのイベントにそのスタックが登録されているためクリア
            if (printPageEventStack != null)
                reseiverLayoutPrintDocument.PrintPage -= new System.Drawing.Printing.PrintPageEventHandler(printPageEventStack);
            //必要なプリントページイベントを新たに積む
            printPageEventStack = null;
            printPageEventStack =  new System.Drawing.Printing.PrintPageEventHandler(printPageEvent);
            reseiverLayoutPrintDocument.PrintPage += new System.Drawing.Printing.PrintPageEventHandler(printPageEventStack);
            
            return reseiverLayoutPrintDocument;
        }
        /// <summary>
        /// 宛名ドキュメントのプリントページイベントに登録された処理をつんでいく。
        /// ※ドキュメントゲットメソッドでクリアされるため、基本的には１つ以上は積まれないはず。
        /// 　複数つまれることは異常。
        /// </summary>
        private static System.Drawing.Printing.PrintPageEventHandler printPageEventStack;
        /// <summary>
        /// 宛名面印刷ドキュメント
        /// </summary>
        private static System.Drawing.Printing.PrintDocument reseiverLayoutPrintDocument { get; set; }
        #endregion

    }
}
