Ignore:
Timestamp:
Dec 6, 2010, 1:29:56 PM (11 years ago)
Author:
kopal
Message:
  • moved print function from settings into the editor
  • bug fix print function - now horizontal prints with more than 1 page are supported
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/CrypPlugins/WorkspaceManager/WorkspaceManager.cs

    r2168 r2176  
    3737using System.Windows.Media;
    3838using Cryptool.PluginBase.Miscellaneous;
     39using WorkspaceManager.View.VisualComponents;
     40using System.Windows.Media.Imaging;
     41using System.Printing;
     42using System.Windows.Documents;
     43using System.Windows.Markup;
    3944
    4045//Disable warnings for unused or unassigned fields and events:
     
    228233        public void Print()
    229234        {
    230             ((WorkspaceManagerSettings)Settings).PrintWorkspace();
     235            try
     236            {
     237                const int factor = 4;
     238                ModifiedCanvas control = (ModifiedCanvas)((WorkSpaceEditorView)this.Presentation).ViewBox.Content;
     239                PrintDialog dialog = new PrintDialog();
     240                dialog.PageRangeSelection = PageRangeSelection.AllPages;
     241                dialog.UserPageRangeEnabled = true;
     242
     243                Nullable<Boolean> print = dialog.ShowDialog();
     244                if (print == true)
     245                {
     246                    this.GuiLogMessage("Printing document \"" + this.CurrentFilename + "\" now", NotificationLevel.Info);
     247                   
     248                    PrintCapabilities capabilities = dialog.PrintQueue.GetPrintCapabilities(dialog.PrintTicket);
     249                    System.Windows.Size pageSize = new System.Windows.Size(dialog.PrintableAreaWidth, dialog.PrintableAreaHeight);
     250                    System.Windows.Size visibleSize = new System.Windows.Size(capabilities.PageImageableArea.ExtentWidth, capabilities.PageImageableArea.ExtentHeight);
     251
     252                    FixedDocument fixedDoc = new FixedDocument();
     253                    control.Measure(new System.Windows.Size(double.PositiveInfinity, double.PositiveInfinity));
     254                    control.Arrange(new Rect(new System.Windows.Point(0, 0), control.DesiredSize));
     255                    System.Windows.Size size = control.DesiredSize;
     256                   
     257                    RenderTargetBitmap bmp = new RenderTargetBitmap((int)size.Width * factor, (int)size.Height * factor, 96 * factor, 96 * factor, PixelFormats.Pbgra32);
     258                    bmp.Render(control);
     259
     260
     261                    double xOffset = 0;
     262                    double yOffset = 0;
     263                    while (xOffset < size.Width)
     264                    {
     265                        yOffset = 0;
     266                        while (yOffset < size.Height)
     267                        {
     268                            PageContent pageContent = new PageContent();
     269                            FixedPage page = new FixedPage();
     270                            ((IAddChild)pageContent).AddChild(page);
     271                            fixedDoc.Pages.Add(pageContent);
     272                            page.Width = pageSize.Width;
     273                            page.Height = pageSize.Height;
     274                            int width = (xOffset + visibleSize.Width) > size.Width ? (int)(size.Width - xOffset) : (int)visibleSize.Width;
     275                            int height = (yOffset + visibleSize.Height) > size.Height ? (int)(size.Height - yOffset) : (int)visibleSize.Height;
     276                            System.Windows.Controls.Image croppedImage = new System.Windows.Controls.Image();                           
     277                            CroppedBitmap cb = new CroppedBitmap(bmp, new Int32Rect((int)xOffset * factor, (int)yOffset *factor, width * factor, height * factor));
     278                            croppedImage.Source = cb;
     279                            croppedImage.Width = width;
     280                            croppedImage.Height = height;
     281                            page.Children.Add(croppedImage);
     282                            yOffset += visibleSize.Height;
     283                        }
     284                        xOffset += visibleSize.Width;
     285                    }
     286                    dialog.PrintDocument(fixedDoc.DocumentPaginator, "WorkspaceManager_" + this.CurrentFilename);
     287                    this.GuiLogMessage("Printed \"" + fixedDoc.DocumentPaginator.PageCount + "\" pages of document \"" + this.CurrentFilename + "\"", NotificationLevel.Info);
     288                }
     289            }
     290            catch (Exception ex)
     291            {
     292                this.GuiLogMessage("Exception while printing: " + ex.Message, NotificationLevel.Error);
     293            }
    231294        }
    232295
Note: See TracChangeset for help on using the changeset viewer.