private void UpdatePvw() { if (textList == null) { return; } UpdateBorders(); PvwContent.Content = textList[pvwManager.PageNumber]; PvwContent.Foreground = isTitleList[pvwManager.PageNumber] ? titleColor : Brushes.White; PvwPage.Content = pvwManager.PageNumber; if (WrapPanelPageList != null && WrapPanelPageList.Children.Count > 1) { double offset = ScrollViewerPageList.VerticalOffset; int rowSize = (int)(WrapPanelPageList.ActualWidth / PAGE_ITEM_FULL_WIDTH); int firstFullyDisplayedRow = (int)Math.Ceiling(offset / PAGE_ITEM_FULL_HEIGHT); int lastFullyDisplayedRow = (int)Math.Floor((offset + ScrollViewerPageList.ViewportHeight) / PAGE_ITEM_FULL_HEIGHT) - 1; int currentPvwRow = (pvwManager.PageNumber - 1) / rowSize; if (currentPvwRow < firstFullyDisplayedRow) { ScrollViewerPageList.ScrollToVerticalOffset(currentPvwRow * PAGE_ITEM_FULL_HEIGHT); } else if (currentPvwRow > lastFullyDisplayedRow) { ScrollViewerPageList.ScrollToVerticalOffset((currentPvwRow - lastFullyDisplayedRow + firstFullyDisplayedRow) * PAGE_ITEM_FULL_HEIGHT); } } }
private void WindowMainWindow_PreviewKeyDown(object sender, KeyEventArgs e) // process input when keydown { if (Keyboard.Modifiers == ModifierKeys.Shift && e.Key == Key.Escape) // Shift+ESC: presenter window button { OpenAndClosePresenterWindow(); return; } if (Keyboard.Modifiers == ModifierKeys.Control && e.Key == Key.Enter) // Ctrl+Enter: free text presentation { FreeCut(); return; } if (MenuItemRefresh.IsEnabled == true && (Keyboard.Modifiers & ModifierKeys.Control) == ModifierKeys.Control && e.Key == Key.R) // Ctrl+R: reload the current file { OpenTxtFile(false); return; } if (TextBoxFreeContent.IsFocused) // free text presentation box is focused { switch (e.Key) { case Key.Escape: KillFocus(); break; case Key.OemPeriod: // normal .(>) key case Key.Decimal: // keypad .(Del) key if ((Keyboard.Modifiers & ModifierKeys.Control) == ModifierKeys.Control) { ClearPgm(); } break; } } else if (TextBoxFreeLines.IsFocused) // free text presentation line limit box is focused { if (e.Key == Key.Enter && (Keyboard.Modifiers & ModifierKeys.Control) != ModifierKeys.Control) { CheckFreeLine(); } } else { if ((Keyboard.Modifiers & ModifierKeys.Shift) == ModifierKeys.Shift) // + Shift { switch (e.Key) { case Key.Up: ScrollViewerPageList.ScrollToVerticalOffset(ScrollViewerPageList.VerticalOffset - PAGE_ITEM_FULL_HEIGHT); e.Handled = true; break; case Key.Down: ScrollViewerPageList.ScrollToVerticalOffset(ScrollViewerPageList.VerticalOffset + PAGE_ITEM_FULL_HEIGHT); e.Handled = true; break; } } else // no modifier { if (e.Key >= Key.NumPad0 && e.Key <= Key.NumPad9) // numpad { pageNum.Add(e.Key - Key.NumPad0); UpdatePageIndicator(); return; } if (e.Key >= Key.D0 && e.Key <= Key.D9) // number keys above Q-P { pageNum.Add(e.Key - Key.D0); UpdatePageIndicator(); return; } switch (e.Key) { case Key.Enter: CutAction(); KillFocus(); e.Handled = true; break; case Key.Up: if (WrapPanelPageList != null && WrapPanelPageList.Children.Count > 1) { pvwManager.PageNumber -= (int)(WrapPanelPageList.ActualWidth / PAGE_ITEM_FULL_WIDTH); UpdatePvw(); } KillFocus(); e.Handled = true; break; case Key.Down: if (WrapPanelPageList != null && WrapPanelPageList.Children.Count > 1) { pvwManager.PageNumber += (int)(WrapPanelPageList.ActualWidth / PAGE_ITEM_FULL_WIDTH); UpdatePvw(); } KillFocus(); e.Handled = true; break; case Key.OemPeriod: // normal .(>) key case Key.Decimal: // keypad .(Del) key ClearPgm(); KillFocus(); e.Handled = true; break; case Key.Left: pvwManager.PageNumber -= 1; UpdatePvw(); KillFocus(); e.Handled = true; break; case Key.Right: pvwManager.PageNumber += 1; UpdatePvw(); KillFocus(); e.Handled = true; break; } } } }