Ejemplo n.º 1
0
        private SheetViewModel CreatePreviewSheetViewModel()
        {
            Debug.WriteLine("CreateSheetViewModel");
            SheetViewModel svm = new SheetViewModel();

            svm.SetSettings(ModelLocator.Current.Settings.Sheets.GetValueOrDefault(ModelLocator.Current.Settings.DefaultSheet.ToString()));

            landscapeCheckbox.Checked = svm.Landscape;
            enableHeader.Checked      = svm.Header.Enabled;
            headerTextBox.Text        = svm.Header.Text;
            enableFooter.Checked      = svm.Footer.Enabled;
            footerTextBox.Text        = svm.Footer.Text;

            topMargin.Value    = svm.Margins.Top / 100M;
            leftMargin.Value   = svm.Margins.Left / 100M;
            rightMargin.Value  = svm.Margins.Right / 100M;
            bottomMargin.Value = svm.Margins.Bottom / 100M;

            pageSeparator.Checked = svm.PageSepartor;
            rows.Value            = svm.Rows;
            columns.Value         = svm.Columns;
            padding.Value         = svm.Padding / 100M;

            svm.PropertyChanged += (s, e) => BeginInvoke((Action)(() => {
                Debug.WriteLine($"SheetViewModel.PropertyChanged: {e.PropertyName}");
                switch (e.PropertyName)
                {
                case "Landscape":
                    Debug.WriteLine($"  Checking checkbox: {ModelLocator.Current.Settings.Sheets.GetValueOrDefault(ModelLocator.Current.Settings.DefaultSheet.ToString()).Landscape}");
                    landscapeCheckbox.Checked = svm.Landscape;
                    break;

                case "Header":
                    headerTextBox.Text = svm.Header.Text;
                    break;

                case "Footer":
                    footerTextBox.Text = svm.Footer.Text;
                    break;

                case "Margins":
                    topMargin.Value = svm.Margins.Top / 100M;
                    leftMargin.Value = svm.Margins.Left / 100M;
                    rightMargin.Value = svm.Margins.Right / 100M;
                    bottomMargin.Value = svm.Margins.Bottom / 100M;

                    // Keep PrintDocument updated for WinForms.PrintPreview
                    printDoc.PrinterSettings.DefaultPageSettings.Margins = (Margins)svm.Margins.Clone();
                    break;

                case "PageSeparator":
                    pageSeparator.Checked = svm.PageSepartor;
                    break;

                case "Rows":
                    rows.Value = svm.Rows;
                    break;

                case "Columns":
                    columns.Value = svm.Columns;
                    break;

                case "Padding":
                    padding.Value = svm.Padding / 100M;
                    break;
                }
            }));

            svm.SettingsChanged += (s, reflow) => BeginInvoke((Action)(() => {
                Debug.WriteLine($"SheetViewModel.SettingsChanged: {reflow}");
                if (reflow)
                {
                    SheetSettingsChanged();
                }
                else
                {
                    printPreview.Invalidate(false);
                }
            }));

            printPreview.SheetViewModel = svm;

            // TODO: Batch Print
            if (ModelLocator.Current.Options.Files != null &&
                ModelLocator.Current.Options.Files.Any() &&
                !string.IsNullOrEmpty(ModelLocator.Current.Options.Files.ToList()[0]))
            {
                List <string> list = ModelLocator.Current.Options.Files.ToList();
                file = list[0];
            }

            svm.File  = file;
            this.Text = $"WinPrint - {file}";
            return(svm);
        }