devexpress-richedit
Version:
DevExpress Rich Text Editor is an advanced word-processing tool designed for working with rich text documents.
60 lines (59 loc) • 3.9 kB
JavaScript
import { LayoutPositionCreatorConflictFlags, LayoutPositionMainSubDocumentCreator } from '../../layout-engine/layout-position-creator';
import { ColumnCalculator } from '../../layout-formatter/formatter/utils/columns-calculator';
import { DocumentLayoutDetailsLevel } from '../../layout/document-layout-details-level';
import { SectionColumnsInfoHistoryItem, SectionSpaceHistoryItem } from '../../model/history/items/section-properties-history-items';
import { SectionColumnProperties } from '../../model/section/section-column-properties';
import { UnitConverter } from '@devexpress/utils/lib/class/unit-converter';
import { FixedInterval } from '@devexpress/utils/lib/intervals/fixed';
import { ListUtils } from '@devexpress/utils/lib/utils/list';
import { SearchUtils } from '@devexpress/utils/lib/utils/search';
import { CommandBase } from '../command-base';
import { RulerSectionColumnsSettingsState } from '../command-states';
export class RulerSectionColumnsSettingsCommand extends CommandBase {
DEPRECATEDCorrectlMainCommandOptions(options) {
const lastSelectedInterval = this.selection.lastSelectedInterval;
options.intervalsInfo.intervals = [new FixedInterval(this.selection.forwardDirection ? lastSelectedInterval.end : lastSelectedInterval.start, 0)];
}
getState(options = this.convertToCommandOptions(undefined)) {
var interval = options.intervalsInfo.interval;
var position = interval.start;
var sectionIndex = SearchUtils.normedInterpolationIndexOf(this.control.modelManager.model.sections, (s) => s.startLogPosition.value, position);
var section = this.control.modelManager.model.sections[sectionIndex];
var columnsBounds = ColumnCalculator.generateSectionColumns(section.sectionProperties);
var columns = [];
for (var i = 0, columnBound; columnBound = columnsBounds[i]; i++) {
columns.push(new SectionColumnProperties(columnBound.width, 0));
if (i > 0) {
var prevBound = columnsBounds[i - 1];
columns[i - 1].space = columnBound.x - (prevBound.x + prevBound.width);
}
}
var layoutPosition = options.subDocument.isMain() ?
new LayoutPositionMainSubDocumentCreator(this.control.layout, options.subDocument, position, DocumentLayoutDetailsLevel.Column)
.create(new LayoutPositionCreatorConflictFlags().setDefault(false), new LayoutPositionCreatorConflictFlags().setDefault(true)) : null;
return new RulerSectionColumnsSettingsState(this.isEnabled(), interval, columns, section.sectionProperties.equalWidthColumns, layoutPosition ? layoutPosition.columnIndex : 0);
}
executeCore(state, options) {
var rulerState = state;
var changed = false;
var modelManipulator = this.modelManipulator;
if (rulerState.equalWidth) {
var stateColumn = rulerState.value[0];
if (options.param[0].space !== stateColumn.space) {
this.history.addAndRedo(new SectionSpaceHistoryItem(modelManipulator, rulerState.interval, UnitConverter.pixelsToTwips(options.param[0].space)));
changed = true;
}
}
else {
var newColumnsInfo = [];
var oldColumnsInfo = rulerState.value;
ListUtils.forEach(options.param, (p, i) => {
changed = changed || p.width !== oldColumnsInfo[i].width || p.space !== oldColumnsInfo[i].space;
newColumnsInfo.push(new SectionColumnProperties(UnitConverter.pixelsToTwips(p.width), UnitConverter.pixelsToTwips(p.space || 0)));
});
if (changed)
this.history.addAndRedo(new SectionColumnsInfoHistoryItem(modelManipulator, rulerState.interval, newColumnsInfo));
}
return changed;
}
}