Browse Source

Fixed printing from print preview using different settings than those used for generating the preview.

pull/27/merge
Daniel Grunwald 13 years ago
parent
commit
569d7730e5
  1. 26
      src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/PrintPreviewViewContent.cs
  2. 10
      src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/SharpDevelopTextEditor.cs

26
src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/PrintPreviewViewContent.cs

@ -33,8 +33,13 @@ namespace ICSharpCode.AvalonEdit.AddIn @@ -33,8 +33,13 @@ namespace ICSharpCode.AvalonEdit.AddIn
viewer.CommandBindings.Add(new CommandBinding(ApplicationCommands.Print, OnPrint));
}
/// <summary>
/// Original (unconverted) document.
/// </summary>
IDocumentPaginatorSource originalDocument;
public IDocumentPaginatorSource Document {
get { return viewer.Document; }
get { return originalDocument; }
set {
if (cleanup != null) {
cleanup();
@ -62,6 +67,7 @@ namespace ICSharpCode.AvalonEdit.AddIn @@ -62,6 +67,7 @@ namespace ICSharpCode.AvalonEdit.AddIn
} else {
viewer.Document = value;
}
originalDocument = value;
}
}
@ -82,7 +88,23 @@ namespace ICSharpCode.AvalonEdit.AddIn @@ -82,7 +88,23 @@ namespace ICSharpCode.AvalonEdit.AddIn
void OnPrint(object sender, ExecutedRoutedEventArgs e)
{
viewer.Print();
if (originalDocument == null)
return;
e.Handled = true;
if (printDialog.ShowDialog() == true) {
// re-apply settings if changed
if (originalDocument is FlowDocument)
ApplySettingsToFlowDocument(printDialog, (FlowDocument)originalDocument);
printDialog.PrintDocument(originalDocument.DocumentPaginator, this.Description);
}
}
public static void ApplySettingsToFlowDocument(PrintDialog printDialog, FlowDocument flowDocument)
{
flowDocument.ColumnGap = 0;
flowDocument.ColumnWidth = printDialog.PrintableAreaWidth;
flowDocument.PageHeight = printDialog.PrintableAreaHeight;
flowDocument.PageWidth = printDialog.PrintableAreaWidth;
}
public static void ShowDocument(IDocumentPaginatorSource document, string description)

10
src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/SharpDevelopTextEditor.cs

@ -124,10 +124,7 @@ namespace ICSharpCode.AvalonEdit.AddIn @@ -124,10 +124,7 @@ namespace ICSharpCode.AvalonEdit.AddIn
PrintDialog printDialog = PrintPreviewViewContent.PrintDialog;
if (printDialog.ShowDialog() == true) {
FlowDocument fd = DocumentPrinter.CreateFlowDocumentForEditor(this);
fd.ColumnGap = 0;
fd.ColumnWidth = printDialog.PrintableAreaWidth;
fd.PageHeight = printDialog.PrintableAreaHeight;
fd.PageWidth = printDialog.PrintableAreaWidth;
PrintPreviewViewContent.ApplySettingsToFlowDocument(printDialog, fd);
IDocumentPaginatorSource doc = fd;
printDialog.PrintDocument(doc.DocumentPaginator, Path.GetFileName(this.FileName));
}
@ -137,10 +134,7 @@ namespace ICSharpCode.AvalonEdit.AddIn @@ -137,10 +134,7 @@ namespace ICSharpCode.AvalonEdit.AddIn
{
PrintDialog printDialog = PrintPreviewViewContent.PrintDialog;
FlowDocument fd = DocumentPrinter.CreateFlowDocumentForEditor(this);
fd.ColumnGap = 0;
fd.ColumnWidth = printDialog.PrintableAreaWidth;
fd.PageHeight = printDialog.PrintableAreaHeight;
fd.PageWidth = printDialog.PrintableAreaWidth;
PrintPreviewViewContent.ApplySettingsToFlowDocument(printDialog, fd);
PrintPreviewViewContent.ShowDocument(fd, Path.GetFileName(this.FileName));
}
#endregion

Loading…
Cancel
Save