UNPKG

devexpress-richedit

Version:

DevExpress Rich Text Editor is an advanced word-processing tool designed for working with rich text documents.

59 lines (58 loc) 2.95 kB
import { LayoutPositionCreatorConflictFlags, LayoutPositionMainSubDocumentCreator } from '../../layout-engine/layout-position-creator'; import { DocumentLayoutDetailsLevel } from '../../layout/document-layout-details-level'; import { LayoutPoint } from '../../layout/layout-point'; import { SelectionCommandBase } from './selection-command-base'; export class GoToPrevPageCommandBase extends SelectionCommandBase { getPosition() { var selection = this.selection; var initPosition = selection.forwardDirection ? selection.lastSelectedInterval.end : selection.lastSelectedInterval.start; var layoutPosition = new LayoutPositionMainSubDocumentCreator(this.control.layout, this.selection.activeSubDocument, initPosition, DocumentLayoutDetailsLevel.Box) .create(new LayoutPositionCreatorConflictFlags().setDefault(false), new LayoutPositionCreatorConflictFlags().setDefault(true)); if (!layoutPosition) return -1; var charOffset = initPosition - layoutPosition.getLogPosition(DocumentLayoutDetailsLevel.Box); var x = layoutPosition.pageArea.x + layoutPosition.column.x + layoutPosition.row.x + layoutPosition.box.x + layoutPosition.box.getCharOffsetXInPixels(this.control.measurer, charOffset); var y = layoutPosition.pageArea.y + layoutPosition.column.y + layoutPosition.row.y + layoutPosition.box.y; var siblingPageIndex = layoutPosition.pageIndex - 1; var siblingPage = this.control.layout.pages[siblingPageIndex]; var position = initPosition; if (siblingPage) { var point = new LayoutPoint(siblingPageIndex, x, y); var htr = this.control.hitTestManager.calculate(point, DocumentLayoutDetailsLevel.Character, this.selection.activeSubDocument); if (!this.extendSelection()) htr.correctAsVisibleBox(); position = htr.getPosition(); } else position = 0; return position; } isEnabled() { return super.isEnabled() && this.selection.activeSubDocument.isMain(); } } export class GoToPrevPageCommand extends GoToPrevPageCommandBase { executeCore(_state, _options) { var selection = this.selection; var position = this.getPosition(); if (position < 0) return false; selection.deprecatedSetSelection(position, position, selection.endOfLine, selection.keepX, true); return true; } extendSelection() { return false; } } export class ExtendGoToPrevPageCommand extends GoToPrevPageCommandBase { executeCore(_state, _options) { const position = this.getPosition(); if (position < 0) return false; this.selection.changeState((newState) => newState.extendLastInterval(position)); return true; } extendSelection() { return true; } }