From 9ad0ce469fc909726759a2d4eb21d02befc1e039 Mon Sep 17 00:00:00 2001 From: Taka Date: Wed, 17 Jul 2019 07:16:16 +0000 Subject: [PATCH] Allow the current ChartImage to be scrolled using the keyboard. --- src/MainForm.ui.cs | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/src/MainForm.ui.cs b/src/MainForm.ui.cs index 9a6c70b..13d4c7e 100644 --- a/src/MainForm.ui.cs +++ b/src/MainForm.ui.cs @@ -131,12 +131,52 @@ public partial class MainForm : Form // check for special keypresses if ( keyCode == Keys.Left || keyCode == Keys.Right ) { // send the keypress to the search results + // NOTE: We could also respond to Up/Down and scroll the ChartImage vertically, + // but that would be confusing, given that Left/Right selects a search result. mSearchResults.Focus() ; mDisableProcessCmdKey = true ; SendKeys.SendWait( "{" + keyCode.ToString() + "}" ) ; mDisableProcessCmdKey = false ; return true ; } + if ( keyCode == Keys.PageUp || keyCode == Keys.PageDown ) { + // scroll the ChartImage up/down + if ( mChartImagePictureBox.Image == null ) + return false ; + double ratio = (double)mChartImagePanel.Height / (double)mChartImagePictureBox.Height ; + VScrollProperties vscroll = mChartImagePanel.VerticalScroll ; + int scrollRange = vscroll.Maximum - vscroll.Minimum ; + int pageSize = (int)( ratio * scrollRange * 0.8 ) ; + if ( keyCode == Keys.PageUp ) + pageSize = - pageSize ; + int scrollY = vscroll.Value + pageSize ; + scrollChartImagePanel( null, scrollY ) ; + return true ; + } + if ( keyCode == Keys.Home ) { + int? scrollX=null, scrollY=null ; + if ( (modifierKeys & Keys.Control) != 0 ) + scrollX = scrollY = 0 ; + if ( (modifierKeys & Keys.Shift) != 0 ) + scrollX = 0 ; + else + scrollY = 0 ; + setChartImagePanelScrollPos( scrollX, scrollY ) ; + return true ; + } + if ( keyCode == Keys.End ) { + int? scrollX=null, scrollY=null ; + if ( (modifierKeys & Keys.Control) != 0 ) { + scrollX = 0 ; + scrollY = ChartImagePanel_MaxScrollY() ; + } + if ( (modifierKeys & Keys.Shift) != 0 ) + scrollX = ChartImagePanel_MaxScrollX() ; + else + scrollY = ChartImagePanel_MaxScrollY() ; + setChartImagePanelScrollPos( scrollX, scrollY ) ; + return true ; + } if ( keyCode == Keys.Escape ) { // clear the search query mSearchQuery.Text = "" ;