Changeset 2176


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
Location:
trunk/CrypPlugins/WorkspaceManager
Files:
2 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
  • trunk/CrypPlugins/WorkspaceManager/WorkspaceManagerSettings.cs

    r2167 r2176  
    66using System.ComponentModel;
    77using System.Threading;
    8 using System.Windows.Controls;
    98using System.Windows;
    10 using System.Printing;
    11 using System.Drawing;
    129using System.Windows.Media;
    13 using System.Windows.Documents;
    1410using System.Windows.Markup;
    15 using WorkspaceManager.View.Container;
    16 using WorkspaceManager.View.VisualComponents;
    17 using System.Windows.Xps;
    18 using System.Windows.Xps.Packaging;
    1911using System.IO;
    20 using System.IO.Packaging;
    21 using System.Windows.Media.Imaging;
    22 using System.Drawing.Drawing2D;
    2312
    2413namespace WorkspaceManager
     
    153142            }
    154143        }
    155 
    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 
     144       
    219145        #endregion
    220146
Note: See TracChangeset for help on using the changeset viewer.