Show last page on PrintPreviewDialog

This commit is contained in:
haru-s 2024-06-23 15:12:15 +09:00
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

Before After
Before After

View file

@ -419,6 +419,18 @@ class PrintPageEventArgs : EventArgs
} }
} }
///
class LastPageChangedEventArgs : EventArgs
{
int lastPage;
///
this(int page)
{
lastPage = page;
}
}
/// ///
class QueryPageSettingsEventArgs : PrintEventArgs class QueryPageSettingsEventArgs : PrintEventArgs
{ {
@ -2035,6 +2047,13 @@ final class PageSetupDialog : CommonDialog
/// ///
class PrintPreviewControl : Control 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 PrintDocument _document; ///
private int _columns; /// private int _columns; ///
private int _rows; /// private int _rows; ///
@ -2165,20 +2184,19 @@ class PrintPreviewControl : Control
_offscreen.fillRectangle(new SolidBrush(Color.gray), screenRect); _offscreen.fillRectangle(new SolidBrush(Color.gray), screenRect);
// Reset here, because print range is always all pages on preview print. // Reset here, because print range is always all pages on preview print.
_document.printerSettings.printRange.reset(); document.printerSettings.printRange.reset();
PrintController oldPrintController = _document.printController; PrintController oldPrintController = document.printController;
_document.printController = new PreviewPrintController(this); // TODO: Cross reference. document.printController = new PreviewPrintController(this); // TODO: Cross reference.
_document.print(_offscreen.handle); document.print(_offscreen.handle);
_document.printController = oldPrintController; this.onLastPageChanged(new LastPageChangedEventArgs(_getLastPage(document)));
document.printController = oldPrintController;
} }
/// ///
protected override void onHandleCreated(EventArgs e) protected override void onHandleCreated(EventArgs e)
{ {
super.onHandleCreated(e); super.onHandleCreated(e);
// ShowScrollBar(handle, SB_VERT, TRUE);
// EnableScrollBar(handle, SB_BOTH, ESB_DISABLE_BOTH);
invalidatePreview(); invalidatePreview();
invalidate(); invalidate();
} }
@ -2210,13 +2228,6 @@ class PrintPreviewControl : Control
mouseDown(this, e); 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) protected override void onPaint(PaintEventArgs e)
{ {
@ -2263,6 +2274,12 @@ class PrintPreviewControl : Control
paintBackground(this, e); paintBackground(this, e);
} }
///
protected void onLastPageChanged(LastPageChangedEventArgs e)
{
lastPageChangeed(this, e);
}
// //
Event!(Control, EventArgs) gotFocus; /// Event!(Control, EventArgs) gotFocus; ///
// //
@ -2273,6 +2290,8 @@ class PrintPreviewControl : Control
Event!(Control, PaintEventArgs) paint; /// Event!(Control, PaintEventArgs) paint; ///
// //
Event!(Control, EventArgs) paintBackground; /// Event!(Control, EventArgs) paintBackground; ///
//
Event!(Control, LastPageChangedEventArgs) lastPageChangeed; ///
} }
/// ///
@ -2290,6 +2309,8 @@ class PrintPreviewDialog : Form
private Panel _previewPanel; private Panel _previewPanel;
private Label _fromPageLabel; private Label _fromPageLabel;
private TextBox _fromPage; private TextBox _fromPage;
private Label _slashLabel;
private TextBox _toPage;
private Button _forwardButton; private Button _forwardButton;
private Button _backButton; private Button _backButton;
@ -2421,7 +2442,7 @@ class PrintPreviewDialog : Form
newPage = oldPage; // Undo. newPage = oldPage; // Undo.
} }
if (newPage < 0) if (newPage < 0 || newPage > _getLastPage(this.document))
newPage = oldPage; // Undo. newPage = oldPage; // Undo.
_previewControl.startPage = newPage; _previewControl.startPage = newPage;
@ -2438,6 +2459,18 @@ class PrintPreviewDialog : Form
}; };
_fromPage.parent = _pageSelectPanel; _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 = new Button;
_backButton.text = "<"; _backButton.text = "<";
_backButton.width = 32; _backButton.width = 32;
@ -2466,7 +2499,7 @@ class PrintPreviewDialog : Form
{ {
int oldPage = _previewControl.startPage; int oldPage = _previewControl.startPage;
int newPage = _previewControl.startPage + _previewControl.rows * _previewControl.columns; 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) if (newPage > lastPage)
newPage = lastPage; newPage = lastPage;
if (newPage < 0) if (newPage < 0)
@ -2493,6 +2526,9 @@ class PrintPreviewDialog : Form
_previewControl.columns = 1; // ditto _previewControl.columns = 1; // ditto
_previewControl.autoZoom = true; // Initial mode is "Fit". _previewControl.autoZoom = true; // Initial mode is "Fit".
_previewControl.startPage = 0; _previewControl.startPage = 0;
_previewControl.lastPageChangeed ~= (Control c, LastPageChangedEventArgs e) {
_toPage.text = to!string(e.lastPage + 1);
};
_previewControl.parent = _previewPanel; _previewControl.parent = _previewPanel;
_enableScroll = !_previewControl.autoZoom; _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 class PreviewPrintController : PrintController
{ {