UNPKG

devexpress-richedit

Version:

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

83 lines (82 loc) 5.33 kB
import { ParagraphFirstLineIndentHistoryItem, ParagraphFirstLineIndentTypeHistoryItem, ParagraphLeftIndentHistoryItem, ParagraphRightIndentHistoryItem } from '../../model/history/items/paragraph-properties-history-items'; import { ParagraphFirstLineIndent } from '../../model/paragraph/paragraph-properties'; import { RichUtils } from '../../model/rich-utils'; import { SubDocumentInterval } from '../../model/sub-document'; import { UnitConverter } from '@devexpress/utils/lib/class/unit-converter'; import { CommandBase, CommandOptions } from '../command-base'; import { SimpleCommandState } from '../command-states'; export class RulerParagraphLeftIndentsCommandValue extends CommandOptions { constructor(control, hanging, firstLine) { super(control); this.hanging = hanging; this.firstLine = firstLine; } } export class RulerParagraphLeftIndentsCommand extends CommandBase { DEPRECATEDCorrectlMainCommandOptions(options) { options.intervalsInfo.subDocument = this.selection.activeSubDocument; options.intervalsInfo.intervals = this.selection.intervals; } getState(options = this.convertToCommandOptions(undefined)) { if (!options.subDocument) this.DEPRECATEDCorrectlMainCommandOptions(options); const info = RichUtils.getSelectedParagraphs(options.intervalsInfo.intervals, options.subDocument); var parProps = info.paragraphs[0].getParagraphMergedProperties(); var leftIndent = UnitConverter.twipsToPixelsF(parProps.leftIndent); var fstLineIndent = UnitConverter.twipsToPixelsF(parProps.firstLineIndent); switch (parProps.firstLineIndentType) { case ParagraphFirstLineIndent.Indented: return new SimpleCommandState(this.isEnabled(), new RulerParagraphLeftIndentsCommandValue(this.control, leftIndent, leftIndent + fstLineIndent)); case ParagraphFirstLineIndent.None: return new SimpleCommandState(this.isEnabled(), new RulerParagraphLeftIndentsCommandValue(this.control, leftIndent, leftIndent)); case ParagraphFirstLineIndent.Hanging: return new SimpleCommandState(this.isEnabled(), new RulerParagraphLeftIndentsCommandValue(this.control, leftIndent, leftIndent - fstLineIndent)); } return new SimpleCommandState(this.isEnabled()); } getIntervalsForModifying() { return RichUtils.getIntervalsOfSelectedParagraphs(this.selection.intervals, this.selection.activeSubDocument); } executeCore(_state, options) { const indents = options; const subDocument = options.subDocument; var hanging = UnitConverter.pixelsToTwips(indents.hanging); var fstLine = UnitConverter.pixelsToTwips(indents.firstLine); var firstLineIndent = Math.abs(hanging - fstLine); var firstLineIndentType = ParagraphFirstLineIndent.None; if (hanging < fstLine) firstLineIndentType = ParagraphFirstLineIndent.Indented; else if (hanging > fstLine) firstLineIndentType = ParagraphFirstLineIndent.Hanging; var modelManipulator = this.modelManipulator; this.history.beginTransaction(); for (let interval of options.intervalsInfo.intervals) { this.history.addAndRedo(new ParagraphFirstLineIndentHistoryItem(modelManipulator, new SubDocumentInterval(subDocument, interval), firstLineIndent, true)); this.history.addAndRedo(new ParagraphFirstLineIndentTypeHistoryItem(modelManipulator, new SubDocumentInterval(subDocument, interval), firstLineIndentType, true)); this.history.addAndRedo(new ParagraphLeftIndentHistoryItem(modelManipulator, new SubDocumentInterval(subDocument, interval), hanging, true)); } this.history.endTransaction(); return true; } } export class RulerParagraphRightIndentCommand extends CommandBase { getState(options = this.convertToCommandOptions(undefined)) { var info = RichUtils.getSelectedParagraphs(options.intervalsInfo.intervals, options.subDocument); var parWithMaxRightIndent = info.paragraphs[0]; for (var i = 1, paragraph; paragraph = info.paragraphs[i]; i++) if (paragraph.getParagraphMergedProperties().rightIndent > parWithMaxRightIndent.getParagraphMergedProperties().rightIndent) parWithMaxRightIndent = paragraph; var rightIndent = UnitConverter.twipsToPixelsF(parWithMaxRightIndent.getParagraphMergedProperties().rightIndent); return new SimpleCommandState(this.isEnabled(), new RulerParagraphLeftIndentsCommandValue(this.control, rightIndent, undefined)); } getIntervalsForModifying() { return RichUtils.getIntervalsOfSelectedParagraphs(this.selection.intervals, this.selection.activeSubDocument); } executeCore(state, options) { this.history.beginTransaction(); for (var i = 0, interval; interval = state.value.intervalsInfo.intervals[i]; i++) this.history.addAndRedo(new ParagraphRightIndentHistoryItem(this.modelManipulator, new SubDocumentInterval(options.subDocument, interval), UnitConverter.pixelsToTwips(options.param), true)); this.history.endTransaction(); return true; } }