Beispiel #1
0
        private HistoryData _historyData;         // null == 作成未完了

        private MkAndPrintWin(ProblemInfo problemInfo, int level, HistoryData historyData)
        {
            _problemInfo = problemInfo;
            _level       = level;
            _historyData = historyData;

            InitializeComponent();

            this.lblProblemTitle.Text = "印刷する問題:" + _problemInfo.getName() + " , 難易度:" + Utils.levelToString(_level);
            this.lblMkStatus.Text     = "作成中...";

            this.cmbPrinterName.Items.Clear();
            foreach (string name in ImagePrinter.getPrinterNames())
            {
                this.cmbPrinterName.Items.Add(name);
            }
            this.cmbPrinterName.SelectedIndex = 0;

            this.cmbPaperSizeName.Items.Clear();
            foreach (string name in ImagePrinter.getPaperSizeNames())
            {
                this.cmbPaperSizeName.Items.Add(name);
            }
            this.cmbPaperSizeName.SelectedIndex = 0;

            // 前回のプリンタ選択を復元
            {
                string name = Gnd.i.lastPrinterName;

                if (name != "")
                {
                    int index = Utils.getIndex(cmbPrinterName, name);

                    if (index != -1)
                    {
                        cmbPrinterName.SelectedIndex = index;
                        cbUseDefaultPrinter.Checked  = false;
                    }
                }
            }
            // 前回の用紙サイズ選択を復元
            {
                string name = Gnd.i.lastPaperSizeName;

                if (name != "")
                {
                    int index = Utils.getIndex(cmbPaperSizeName, name);

                    if (index != -1)
                    {
                        cmbPaperSizeName.SelectedIndex = index;
                        cbUseDefaultPaperSize.Checked  = false;
                    }
                }
            }
            // 前回のマージンを復元
            {
                LTRB margin = Gnd.i.lastMargin;

                if (margin != null)
                {
                    marginL.Text = "" + margin.l;
                    marginT.Text = "" + margin.t;
                    marginR.Text = "" + margin.r;
                    marginB.Text = "" + margin.b;
                    cbUseDefaultMargin.Checked = false;
                }
                else
                {
                    marginL.Text = "" + 100;
                    marginT.Text = "" + 100;
                    marginR.Text = "" + 100;
                    marginB.Text = "" + 100;
                }
            }

            cbPrintProblem.Checked = Gnd.i.lastPrintProblem;
            cbPrintAnswer.Checked  = Gnd.i.lastPrintAnswer;

            refreshUI();

            if (_historyData != null)
            {
                historyDataCreated();
            }
        }
Beispiel #2
0
        private void btnMkAndPrint_Click(object sender, EventArgs e)
        {
            this.mtEnabled = false;
            this.Visible   = false;
            Gnd.i.mkAndPrintWinParentWin.Visible = false;

            try
            {
                CancellableBusyDlg.perform(false, delegate
                {
                    if (_historyData == null)                     // ? 作成未完了
                    {
                        if (Gnd.i.mkSudokuProc == null)
                        {
                            throw null;
                        }

                        Gnd.i.cancellableBusyDlg.setTitle("ナンプレを作成しています... (印刷は自動的に開始されます)");

                        while (Gnd.i.mkSudokuProc.isEnded() == false)
                        {
                            if (Gnd.i.cancelled)
                            {
                                Gnd.i.cancellableBusyDlg.setTitle("キャンセルしています...");
                                Gnd.i.mkSudokuProc.bCancel();
                                throw new Cancelled();
                            }
                            Thread.Sleep(2000);
                        }
                        Gnd.i.cancellableBusyDlg.setTitle("作成した問題を画像に変換しています...");

                        _historyData = Gnd.i.mkSudokuProc.getResult();
                        //historyDataCreated(); // もうこのフォームを表示しないので、呼ばなくて良い。

                        if (Gnd.i.cancelled)
                        {
                            throw new Cancelled();
                        }
                    }
                    Gnd.i.cancellableBusyDlg.setTitle("ナンプレを印刷しています...");

                    {
                        ImagePrinter imgPrn = new ImagePrinter();

                        if (this.cbUseDefaultMargin.Checked == false)
                        {
                            imgPrn.setMargin(getMaringLTRB());
                        }

                        if (this.cbUseDefaultPrinter.Checked == false)
                        {
                            imgPrn.setPrinterName(this.cmbPrinterName.SelectedItem.ToString());
                        }

                        if (this.cbUseDefaultPaperSize.Checked == false)
                        {
                            imgPrn.setPaperSizeName(this.cmbPaperSizeName.SelectedItem.ToString());
                        }

                        if (this.cbPrintProblem.Checked)
                        {
                            imgPrn.addImage(_historyData.getProblemImage());
                        }

                        if (this.cbPrintAnswer.Checked)
                        {
                            imgPrn.addImage(_historyData.getAnswerImage());
                        }

                        imgPrn.doPrint();
                    }

                    throw new Completed("印刷しました。");
                });
            }
            catch (Exception ex)
            {
                FaultOperation.caught(ex);
            }

            Gnd.i.mkAndPrintWinParentWin.Visible = true;
            //this.Visible = true;
            this.Close();
        }