UNPKG

devexpress-richedit

Version:

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

52 lines (51 loc) 2.43 kB
import { InlinePictureInfo } from '../../model/manipulators/picture-manipulator/insert-picture-manipulator-params'; import { ImageLoadingOptions } from '../../model/manipulators/picture-manipulator/loader/image-loading-options'; import { ControlOptions } from '../../model/options/control'; import { SubDocumentInterval, SubDocumentPosition } from '../../model/sub-document'; import { Size } from '@devexpress/utils/lib/geometry/size'; import { DialogParametersBase, ShowDialogCommandBase } from './show-dialog-command-base'; export class DialogInsertImageCommand extends ShowDialogCommandBase { constructor(control) { super(control); } isEnabled() { return super.isEnabled() && ControlOptions.isEnabled(this.control.modelManager.richOptions.control.inlinePictures) && this.selection.intervals.length === 1; } createParameters(_options) { return new InsertImageDialogParameters(); } applyParameters(_state, newParams) { const interval = this.selection.intervalsInfo.interval.clone(); const cacheInfo = this.control.modelManager.model.cache.imageCache.createLoadedInfo(newParams.base64EncodedImage, newParams.originalSize, newParams.id); this.history.addTransaction(() => { this.modelManipulator.range.removeInterval(new SubDocumentInterval(this.selection.activeSubDocument, interval), true, false); this.modelManipulator.picture.insertInlinePictureViaHistory(new SubDocumentPosition(this.selection.activeSubDocument, interval.start), this.inputPosition.charPropsBundle, InlinePictureInfo.defaultInfo(cacheInfo), new ImageLoadingOptions(true)); }); return true; } getDialogName() { return "InsertImage"; } } export class InsertImageDialogParameters extends DialogParametersBase { constructor() { super(...arguments); this.id = 0; this.base64EncodedImage = null; this.originalSize = new Size(100, 100); } copyFrom(obj) { super.copyFrom(obj); this.id = obj.id; this.originalSize = obj.originalSize.clone(); this.base64EncodedImage = obj.base64EncodedImage; } clone() { const newInstance = new InsertImageDialogParameters(); newInstance.copyFrom(this); return newInstance; } applyConverter(_converter) { return this; } }