mirror of
https://github.com/Rayerd/dfl.git
synced 2025-04-25 20:49:58 +03:00
Show last page on PrintPreviewDialog
This commit is contained in:
parent
919e992d4c
commit
19e9bbd6e8
2 changed files with 58 additions and 16 deletions
Binary file not shown.
Before Width: | Height: | Size: 66 KiB After Width: | Height: | Size: 40 KiB |
|
@ -419,6 +419,18 @@ class PrintPageEventArgs : EventArgs
|
|||
}
|
||||
}
|
||||
|
||||
///
|
||||
class LastPageChangedEventArgs : EventArgs
|
||||
{
|
||||
int lastPage;
|
||||
|
||||
///
|
||||
this(int page)
|
||||
{
|
||||
lastPage = page;
|
||||
}
|
||||
}
|
||||
|
||||
///
|
||||
class QueryPageSettingsEventArgs : PrintEventArgs
|
||||
{
|
||||
|
@ -2035,6 +2047,13 @@ final class PageSetupDialog : CommonDialog
|
|||
///
|
||||
class PrintPreviewControl : Control
|
||||
{
|
||||
enum LEFT_MARIGIN = 20; // pixels
|
||||
enum RIGHT_MARGIN = 20; // pixels
|
||||
enum TOP_MARGIN = 20; // pixels
|
||||
enum BOTTOM_MARGIN = 20; // pixels
|
||||
enum HORIZONTAL_SPAN = 20; // pixels
|
||||
enum VERTICAL_SPAN = 20; // pixels
|
||||
|
||||
private PrintDocument _document; ///
|
||||
private int _columns; ///
|
||||
private int _rows; ///
|
||||
|
@ -2165,20 +2184,19 @@ class PrintPreviewControl : Control
|
|||
_offscreen.fillRectangle(new SolidBrush(Color.gray), screenRect);
|
||||
|
||||
// Reset here, because print range is always all pages on preview print.
|
||||
_document.printerSettings.printRange.reset();
|
||||
document.printerSettings.printRange.reset();
|
||||
|
||||
PrintController oldPrintController = _document.printController;
|
||||
_document.printController = new PreviewPrintController(this); // TODO: Cross reference.
|
||||
_document.print(_offscreen.handle);
|
||||
_document.printController = oldPrintController;
|
||||
PrintController oldPrintController = document.printController;
|
||||
document.printController = new PreviewPrintController(this); // TODO: Cross reference.
|
||||
document.print(_offscreen.handle);
|
||||
this.onLastPageChanged(new LastPageChangedEventArgs(_getLastPage(document)));
|
||||
document.printController = oldPrintController;
|
||||
}
|
||||
|
||||
///
|
||||
protected override void onHandleCreated(EventArgs e)
|
||||
{
|
||||
super.onHandleCreated(e);
|
||||
// ShowScrollBar(handle, SB_VERT, TRUE);
|
||||
// EnableScrollBar(handle, SB_BOTH, ESB_DISABLE_BOTH);
|
||||
invalidatePreview();
|
||||
invalidate();
|
||||
}
|
||||
|
@ -2210,13 +2228,6 @@ class PrintPreviewControl : Control
|
|||
mouseDown(this, e);
|
||||
}
|
||||
|
||||
enum LEFT_MARIGIN = 20; // pixels
|
||||
enum RIGHT_MARGIN = 20; // pixels
|
||||
enum TOP_MARGIN = 20; // pixels
|
||||
enum BOTTOM_MARGIN = 20; // pixels
|
||||
enum HORIZONTAL_SPAN = 20; // pixels
|
||||
enum VERTICAL_SPAN = 20; // pixels
|
||||
|
||||
///
|
||||
protected override void onPaint(PaintEventArgs e)
|
||||
{
|
||||
|
@ -2263,6 +2274,12 @@ class PrintPreviewControl : Control
|
|||
paintBackground(this, e);
|
||||
}
|
||||
|
||||
///
|
||||
protected void onLastPageChanged(LastPageChangedEventArgs e)
|
||||
{
|
||||
lastPageChangeed(this, e);
|
||||
}
|
||||
|
||||
//
|
||||
Event!(Control, EventArgs) gotFocus; ///
|
||||
//
|
||||
|
@ -2273,6 +2290,8 @@ class PrintPreviewControl : Control
|
|||
Event!(Control, PaintEventArgs) paint; ///
|
||||
//
|
||||
Event!(Control, EventArgs) paintBackground; ///
|
||||
//
|
||||
Event!(Control, LastPageChangedEventArgs) lastPageChangeed; ///
|
||||
}
|
||||
|
||||
///
|
||||
|
@ -2290,6 +2309,8 @@ class PrintPreviewDialog : Form
|
|||
private Panel _previewPanel;
|
||||
private Label _fromPageLabel;
|
||||
private TextBox _fromPage;
|
||||
private Label _slashLabel;
|
||||
private TextBox _toPage;
|
||||
private Button _forwardButton;
|
||||
private Button _backButton;
|
||||
|
||||
|
@ -2421,7 +2442,7 @@ class PrintPreviewDialog : Form
|
|||
newPage = oldPage; // Undo.
|
||||
}
|
||||
|
||||
if (newPage < 0)
|
||||
if (newPage < 0 || newPage > _getLastPage(this.document))
|
||||
newPage = oldPage; // Undo.
|
||||
|
||||
_previewControl.startPage = newPage;
|
||||
|
@ -2438,6 +2459,18 @@ class PrintPreviewDialog : Form
|
|||
};
|
||||
_fromPage.parent = _pageSelectPanel;
|
||||
|
||||
_slashLabel = new Label();
|
||||
_slashLabel.text = " / ";
|
||||
_slashLabel.autoSize = true;
|
||||
_slashLabel.dock = DockStyle.LEFT;
|
||||
_slashLabel.parent = _pageSelectPanel;
|
||||
|
||||
_toPage = new TextBox();
|
||||
_toPage.width = 50;
|
||||
_toPage.dock = DockStyle.LEFT;
|
||||
_toPage.enabled = false;
|
||||
_toPage.parent = _pageSelectPanel;
|
||||
|
||||
_backButton = new Button;
|
||||
_backButton.text = "<";
|
||||
_backButton.width = 32;
|
||||
|
@ -2466,7 +2499,7 @@ class PrintPreviewDialog : Form
|
|||
{
|
||||
int oldPage = _previewControl.startPage;
|
||||
int newPage = _previewControl.startPage + _previewControl.rows * _previewControl.columns;
|
||||
int lastPage = cast(int)((new PrintRangeWalker(_previewControl.document.printerSettings.printRange.ranges)).count) - 1;
|
||||
int lastPage = _getLastPage(doc);
|
||||
if (newPage > lastPage)
|
||||
newPage = lastPage;
|
||||
if (newPage < 0)
|
||||
|
@ -2493,6 +2526,9 @@ class PrintPreviewDialog : Form
|
|||
_previewControl.columns = 1; // ditto
|
||||
_previewControl.autoZoom = true; // Initial mode is "Fit".
|
||||
_previewControl.startPage = 0;
|
||||
_previewControl.lastPageChangeed ~= (Control c, LastPageChangedEventArgs e) {
|
||||
_toPage.text = to!string(e.lastPage + 1);
|
||||
};
|
||||
_previewControl.parent = _previewPanel;
|
||||
|
||||
_enableScroll = !_previewControl.autoZoom;
|
||||
|
@ -2548,6 +2584,12 @@ class PrintPreviewDialog : Form
|
|||
}
|
||||
}
|
||||
|
||||
///
|
||||
private int _getLastPage(PrintDocument doc)
|
||||
{
|
||||
return cast(int)((new PrintRangeWalker(doc.printerSettings.printRange.ranges)).count) - 1;
|
||||
}
|
||||
|
||||
///
|
||||
class PreviewPrintController : PrintController
|
||||
{
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue