mirror of https://gitee.com/cf-fz/WebCAD.git
!1498 功能:批量文字修改 工具命令: TEXTMODIFYTOOL
parent
24a191b49c
commit
4d024e09ee
@ -0,0 +1,29 @@
|
||||
import { app } from "../../ApplicationServices/Application";
|
||||
import { Text } from "../../DatabaseServices/Text/Text";
|
||||
import { Command } from "../../Editor/CommandMachine";
|
||||
import { PromptStatus } from "../../Editor/PromptResult";
|
||||
import { ModalState } from "../../UI/Components/Modal/ModalInterface";
|
||||
import { ModifyTextsStore, TextModifyModal } from "../../UI/Components/Text/TextModify";
|
||||
|
||||
export class Command_TextModifyTool implements Command
|
||||
{
|
||||
async exec()
|
||||
{
|
||||
let store = ModifyTextsStore.GetInstance();
|
||||
app.Editor.ModalManage.RenderModal(TextModifyModal, { store });
|
||||
let state = await app.Editor.ModalManage.Wait();
|
||||
if (state.Status !== ModalState.Ok)
|
||||
return;
|
||||
let ssRes = await app.Editor.GetSelection({ Filter: { filterTypes: [Text] }, UseSelect: true });
|
||||
if (ssRes.Status !== PromptStatus.OK) return;
|
||||
let ents = ssRes.SelectSet.SelectEntityList as Text[];
|
||||
for (let t of ents)
|
||||
{
|
||||
for (const i of store.m_Option.changeTexts)
|
||||
{
|
||||
if (i[0] !== "")
|
||||
t.TextString = t.TextString.replaceAll(i[0], i[1]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,138 @@
|
||||
import { Button, Classes, Icon } from "@blueprintjs/core";
|
||||
import { observable, toJS } from "mobx";
|
||||
import { observer } from "mobx-react";
|
||||
import React from "react";
|
||||
import { app } from "../../../ApplicationServices/Application";
|
||||
import { DefaultModifyTextsOption } from "../../../Editor/DefaultConfig";
|
||||
import { ModifyTextsConfigOption } from "../../Store/BoardInterface";
|
||||
import { IConfigStore } from "../../Store/BoardStore";
|
||||
import { BoardModalType } from "../Board/BoardModal";
|
||||
import { IConfigOption, UserConfig } from "../Board/UserConfig";
|
||||
import { ModalState } from "../Modal/ModalInterface";
|
||||
|
||||
export class ModifyTextsStore implements IConfigStore
|
||||
{
|
||||
@observable configName = "默认";
|
||||
SaveConfig()
|
||||
{
|
||||
//新的配置
|
||||
let newConfig: IConfigOption = {};
|
||||
newConfig.option = toJS(this.m_Option);
|
||||
return newConfig;
|
||||
};
|
||||
//板数据
|
||||
@observable m_Option: ModifyTextsConfigOption = { ...DefaultModifyTextsOption };
|
||||
@observable configsNames: string[] = [];
|
||||
InitOption()
|
||||
{
|
||||
Object.assign(this.m_Option, DefaultModifyTextsOption);
|
||||
}
|
||||
UpdateOption(cof: IConfigOption<ModifyTextsConfigOption>)
|
||||
{
|
||||
this.m_Option.changeTexts = cof.option.changeTexts.concat();
|
||||
}
|
||||
|
||||
private static _SingleInstance: ModifyTextsStore;
|
||||
static GetInstance(): ModifyTextsStore
|
||||
{
|
||||
if (this._SingleInstance) return this._SingleInstance;
|
||||
this._SingleInstance = new ModifyTextsStore;
|
||||
return this._SingleInstance;
|
||||
}
|
||||
}
|
||||
|
||||
@observer
|
||||
export class TextModifyModal extends React.Component<{ store: ModifyTextsStore; }, {}>
|
||||
{
|
||||
render()
|
||||
{
|
||||
return (
|
||||
<div id="TextModifytModal" className={Classes.DIALOG_CONTAINER}>
|
||||
<div className={Classes.DIALOG} style={{ height: "100%" }}>
|
||||
<div className={Classes.DIALOG_HEADER} data-id="dragArea">
|
||||
<Icon icon="automatic-updates" iconSize={18} />
|
||||
<h4 className={Classes.HEADING}>批量编辑文本</h4>
|
||||
<Button
|
||||
icon="cross"
|
||||
aria-label="Close"
|
||||
minimal={true}
|
||||
onClick={() => { app.Editor.ModalManage.Destory(); }}
|
||||
/>
|
||||
</div>
|
||||
<div className={Classes.DIALOG_BODY}>
|
||||
<table>
|
||||
<tr>
|
||||
<td>替换的文本</td>
|
||||
<td>替换后的文本</td>
|
||||
</tr>
|
||||
{
|
||||
this.props.store.m_Option.changeTexts.map((d, i) =>
|
||||
<tr className="note-item" key={i}>
|
||||
<td>
|
||||
<input type="text" className="bp3-input" value={d[0]} onChange={e => d[0] = e.target.value} />
|
||||
<span>替换为--></span>
|
||||
</td>
|
||||
<td><input type="text" className="bp3-input" value={d[1]} onChange={e => d[1] = e.target.value} /></td>
|
||||
</tr>)
|
||||
}
|
||||
</table>
|
||||
<div className="changeLength">
|
||||
<Button
|
||||
intent="none"
|
||||
icon="small-plus"
|
||||
onClick={() =>
|
||||
{
|
||||
if (this.props.store.m_Option.changeTexts.length < 20)
|
||||
this.props.store.m_Option.changeTexts.push(["", ""]);
|
||||
}}
|
||||
/>
|
||||
<Button
|
||||
intent="none"
|
||||
icon="small-minus"
|
||||
onClick={() =>
|
||||
{
|
||||
if (this.props.store.m_Option.changeTexts.length > 5)
|
||||
this.props.store.m_Option.changeTexts.length--;
|
||||
}}
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
<div className={Classes.DIALOG_FOOTER}>
|
||||
<div className={Classes.DIALOG_FOOTER_ACTIONS}>
|
||||
<div className="foot_left">
|
||||
<UserConfig
|
||||
store={this.props.store}
|
||||
type={BoardModalType.ModifyTexts}
|
||||
/>
|
||||
</div>
|
||||
<div className="foot_right">
|
||||
<Button
|
||||
intent="success"
|
||||
text="确定"
|
||||
onClick={() =>
|
||||
{
|
||||
app.Editor.ModalManage.m_PromisRes({ Status: ModalState.Ok });
|
||||
app.Editor.ModalManage.Destory();
|
||||
}}
|
||||
/>
|
||||
<Button
|
||||
intent="none"
|
||||
text="重置"
|
||||
onClick={() =>
|
||||
{
|
||||
this.props.store.m_Option.changeTexts = Array.from({ length: this.props.store.m_Option.changeTexts.length }, () => ["", ""]);
|
||||
}}
|
||||
/>
|
||||
<Button
|
||||
intent="danger"
|
||||
text="取消"
|
||||
onClick={() => { app.Editor.ModalManage.Destory(); }}
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div >
|
||||
);
|
||||
}
|
||||
}
|
Loading…
Reference in new issue