Ignore:
Timestamp:
Dec 5, 2010, 4:16:09 AM (11 years ago)
Author:
kopal
Message:
File:
1 edited

Legend:

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

    r1884 r2167  
    66using System.ComponentModel;
    77using System.Threading;
     8using System.Windows.Controls;
     9using System.Windows;
     10using System.Printing;
     11using System.Drawing;
     12using System.Windows.Media;
     13using System.Windows.Documents;
     14using System.Windows.Markup;
     15using WorkspaceManager.View.Container;
     16using WorkspaceManager.View.VisualComponents;
     17using System.Windows.Xps;
     18using System.Windows.Xps.Packaging;
     19using System.IO;
     20using System.IO.Packaging;
     21using System.Windows.Media.Imaging;
     22using System.Drawing.Drawing2D;
    823
    924namespace WorkspaceManager
     
    1429        private bool hasChanges = false;
    1530
    16         public WorkspaceManagerSettings()
    17         {
    18             this.Threads = "" + System.Environment.ProcessorCount;           
     31        private WorkspaceManager WorkspaceManager { get; set; }
     32
     33        public WorkspaceManagerSettings(WorkspaceManager manager)
     34        {
     35            this.Threads = "" + System.Environment.ProcessorCount;
     36            this.WorkspaceManager = manager;
    1937        }
    2038
     
    136154        }
    137155
     156        [TaskPane("Print Workspace", "Print the current Workspace", null, 1, false, DisplayLevel.Beginner, ControlType.Button, null)]
     157        public void PrintWorkspace()
     158        {
     159            try
     160            {
     161                const int factor = 4;
     162                ModifiedCanvas control = (ModifiedCanvas)((WorkSpaceEditorView)this.WorkspaceManager.Presentation).ViewBox.Content;
     163                PrintDialog dialog = new PrintDialog();
     164                dialog.PageRangeSelection = PageRangeSelection.AllPages;
     165                dialog.UserPageRangeEnabled = true;
     166
     167                Nullable<Boolean> print = dialog.ShowDialog();
     168                if (print == true)
     169                {
     170                    WorkspaceManager.GuiLogMessage("Printing document \"" + WorkspaceManager.CurrentFilename + "\" now", NotificationLevel.Info);
     171                    RenderTargetBitmap bmp = new RenderTargetBitmap((int)control.ActualWidth*factor, (int)control.ActualHeight*factor, 96*factor, 96*factor, PixelFormats.Pbgra32);
     172                    bmp.Render(control);
     173
     174                    PrintCapabilities capabilities = dialog.PrintQueue.GetPrintCapabilities(dialog.PrintTicket);
     175                    System.Windows.Size pageSize = new System.Windows.Size(dialog.PrintableAreaWidth, dialog.PrintableAreaHeight);
     176                    System.Windows.Size visibleSize = new System.Windows.Size(capabilities.PageImageableArea.ExtentWidth, capabilities.PageImageableArea.ExtentHeight);
     177
     178                    FixedDocument fixedDoc = new FixedDocument();
     179                    control.Measure(new System.Windows.Size(double.PositiveInfinity, double.PositiveInfinity));
     180                    control.Arrange(new Rect(new System.Windows.Point(0, 0), control.DesiredSize));
     181                    System.Windows.Size size = control.DesiredSize;
     182                   
     183                    double xOffset = 0;
     184                    double yOffset = 0;
     185                    while (xOffset < size.Width)
     186                    {
     187                        yOffset = 0;
     188                        while (yOffset < size.Height)
     189                        {                           
     190                            PageContent pageContent = new PageContent();
     191                            FixedPage page = new FixedPage();
     192                            ((IAddChild)pageContent).AddChild(page);
     193                            fixedDoc.Pages.Add(pageContent);
     194                            page.Width = pageSize.Width;
     195                            page.Height = pageSize.Height;
     196                            System.Windows.Controls.Image croppedImage = new System.Windows.Controls.Image();
     197                            int width = xOffset + visibleSize.Width > size.Width ? (int)(size.Width - xOffset) : (int)visibleSize.Width;
     198                            int height = yOffset + visibleSize.Height > size.Height ? (int)(size.Height - yOffset) : (int)visibleSize.Height;                           
     199
     200                            CroppedBitmap cb = new CroppedBitmap(bmp, new Int32Rect((int)xOffset * factor, (int)yOffset * factor, width * factor, height * factor));
     201                            croppedImage.Source = cb;
     202                            croppedImage.Width = width;
     203                            croppedImage.Height = height;
     204                            page.Children.Add(croppedImage);
     205                            yOffset += visibleSize.Height;
     206                        }
     207                        xOffset += visibleSize.Width;
     208                    }                   
     209                    dialog.PrintDocument(fixedDoc.DocumentPaginator, "WorkspaceManager_" + WorkspaceManager.CurrentFilename);
     210                    WorkspaceManager.GuiLogMessage("Printed \"" + fixedDoc.DocumentPaginator.PageCount + "\" pages of document \"" + WorkspaceManager.CurrentFilename + "\"", NotificationLevel.Info);
     211                }
     212            }
     213            catch (Exception ex)
     214            {
     215                WorkspaceManager.GuiLogMessage("Exception:" + ex.Message, NotificationLevel.Error);
     216            }
     217        }
     218
    138219        #endregion
    139220
Note: See TracChangeset for help on using the changeset viewer.