UNPKG

devexpress-richedit

Version:

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

56 lines (55 loc) 3.08 kB
import { ListUtils } from '@devexpress/utils/lib/utils/list'; import { DocumentLayoutDetailsLevel } from '../../layout/document-layout-details-level'; import { Log } from '../../rich-utils/debug/logger/base-logger/log'; import { LogSource } from '../../rich-utils/debug/logger/base-logger/log-source'; import { LogObjToStrLayout } from '../../rich-utils/debug/logger/layout-logger/log-obj-to-str-layout'; import { RestartFromPositionSaver_AllLayout, RestartFromPositionSaver_Base } from '../invalidator/position-savers'; export class RestartManager { constructor(manager) { this.manager = manager; this.reset(); } reset() { this.layoutFormatterPositionSaver = new RestartFromPositionSaver_Base(this.manager); } startFormatting() { this.layoutFormatterPositionSaver.restart(); this.reset(); } restartFromPage(pageIndex, minPosition, forceRestartFullPage) { Log.print(LogSource.RestartManager, "restartFromPage", `pageIndex:${pageIndex}, minPosition:${minPosition}, forceRestartFullPage:${forceRestartFullPage}`); const pos = this.manager.invalidator.extendByMultipageTables(pageIndex, minPosition, forceRestartFullPage); if (pos == -1) { this.restartTemplate(pageIndex, () => this.layoutFormatterPositionSaver.restartMainSubDocumentFromPage(pageIndex)); } else { const lp = this.manager.invalidator.findLayoutPositionInAllLayout(this.manager.model.mainSubDocument, pos, DocumentLayoutDetailsLevel.Row, false, true); if (lp.posIsStartPage() && lp.pageIndex != 0) { lp.advanceToPrevRow(this.manager.layout); lp.rowIndex++; lp.row = null; } ListUtils.forEach(this.manager.layout.pages, (page) => page.invalidate(), lp.pageIndex, pageIndex); this.restartFromRow(lp, this.manager.invalidator.getStartModelPositionOfRow(lp)); } } restartFromRow(lp, modelPosition) { Log.print(LogSource.RestartManager, "restartFromRow", `modelPosition:${modelPosition}, lp:${LogObjToStrLayout.layoutPositionShort(lp)}`); this.restartTemplate(lp.pageIndex, () => this.layoutFormatterPositionSaver.restartMainSubDocumentFromRow(lp, modelPosition)); } restartHeaderFooter(subDocument, pageIndex) { this.restartTemplate(pageIndex, () => this.layoutFormatterPositionSaver.restartOtherSubDocument(subDocument, pageIndex)); } restartAllLayout() { this.restartTemplate(0, () => new RestartFromPositionSaver_AllLayout(this.manager)); } restartTemplate(pageIndex, getNewRestartSaver) { if (this.manager.layout) { this.manager.layout.isFullyFormatted = false; this.manager.layout.validPageCount = Math.min(this.manager.layout.validPageCount, pageIndex); } this.layoutFormatterPositionSaver = getNewRestartSaver(); if (!this.manager.isUpdateLocked()) this.manager.onUpdateUnlocked(0); } }