!1498 功能:批量文字修改 工具命令: TEXTMODIFYTOOL

pull/1498/MERGE
林三 3 years ago committed by ChenX
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]);
}
}
}
}

@ -183,6 +183,7 @@ export enum CommandNames
RecyleBin = "RECYCLEBIN",
ChangeColorByMaterial = "CHANGECOLORBYMATERIAL",//根据板材改颜色
ChangeBoardColorByPBFace = "CHANGEBOARDCOLORBYPBFACE",//根据排版面改颜色
TextModifyTool = "TEXTMODIFYTOOL",//批量修改文本
RestoreColor = "RESTORECOLOR",
SelectAll = "SELECTALL",
CheckHoles = "CHECKHOLES",

@ -16,6 +16,7 @@ import { ReferenceCutting } from "../Add-on/BoardCutting/ReferenceCutting";
import { Command_ChangeBoardColorByPBFace } from "../Add-on/BoardEditor/ChangeBoardColorByPBFace";
import { Command_ClearBoard2DModeling } from "../Add-on/BoardEditor/ClearBoard2DModeling";
import { SetBoardLines } from "../Add-on/BoardEditor/SetBoardLines";
import { Command_TextModifyTool } from "../Add-on/BoardEditor/TextModifyTool";
import { UpdateBoardInfos } from "../Add-on/BoardEditor/UpdateBoardInfos";
import { BoardFindModify } from "../Add-on/BoardFindModify";
import { IntersectionOperation, SubsractOperation, UnionOperation } from "../Add-on/BoolOperation";
@ -609,6 +610,7 @@ export function registerCommand()
commandMachine.RegisterCommand(CommandNames.ChangeColorByMaterial, new ChangeColorByMaterial());
commandMachine.RegisterCommand(CommandNames.ChangeBoardColorByPBFace, new Command_ChangeBoardColorByPBFace());
commandMachine.RegisterCommand(CommandNames.TextModifyTool, new Command_TextModifyTool());
commandMachine.RegisterCommand(CommandNames.SelectAll, new SelectAll());

@ -1,4 +1,4 @@
import { LayerBoardOption, BrRelativePos, VerticalBoardOption, BehindBoardOption, BehindHeightPositon, TBBoardOption, LayerNailOption, SingleBoardOption, ClosingStripOption, StripType, LinesType, FaceDirection, ComposingType, IBoardBatchCurtailOption, CurtailType, BoardProcessOption, SideBoardOption, BoardType } from "../UI/Store/BoardInterface";
import { LayerBoardOption, BrRelativePos, VerticalBoardOption, BehindBoardOption, BehindHeightPositon, TBBoardOption, LayerNailOption, SingleBoardOption, ClosingStripOption, StripType, LinesType, FaceDirection, ComposingType, IBoardBatchCurtailOption, CurtailType, BoardProcessOption, SideBoardOption, BoardType, ModifyTextsConfigOption } from "../UI/Store/BoardInterface";
import { IWineRackOption, EWineRackType, EWRackArrayType, EFullType, EFullDir } from "../UI/Store/WineRackInterface";
import { IBoardFindOption, ECompareType } from "../UI/Store/BoardFindInterface";
import { ILatticeOption, ELatticeArrayType } from "../UI/Store/LatticeInterface";
@ -155,6 +155,11 @@ export const DefaultSideBoardOption: SideBoardOption = {
};
Object.freeze(DefaultSideBoardOption);
export const DefaultModifyTextsOption: ModifyTextsConfigOption = {
changeTexts: Array.from({ length: 5 }, () => ["", ""]),
};
Object.freeze(DefaultModifyTextsOption);
export const DefaultSingleBoardOption: SingleBoardOption = {
version: 1,
name: "层板",

@ -54,6 +54,7 @@ export enum BoardModalType
ParseBrName = "ParseBrName",//分析板件名
AutoDimBrs = "AutoDimBrs",//自动标注
ChangeColorByMaterial = "ChangeColorByMaterial",
ModifyTexts = "ModifyTexts",//批量修改文本
}
export interface BoardModalProps
{

@ -672,6 +672,15 @@ export const CommandList: ICommand[] = [
chName: "根据排版面改颜色",
chDes: "根据排版面改颜色",
},
{
typeId: "bjbj",
link: "#",
defaultCustom: CommandNames.TextModifyTool,
command: CommandNames.TextModifyTool,
type: "文本编辑",
chName: "批量修改文本",
chDes: "批量修改文本",
},
{
icon: IconEnum.RestoreColor,
typeId: "bjbj",

@ -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>--&gt;</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 >
);
}
}

@ -184,7 +184,8 @@
}
#TopPanel .bp3-navbar {
height: 27px;
padding: 0;
height : 27px;
}
#TopPanel .bp3-navbar-group {

@ -690,3 +690,46 @@ img {
text-overflow: ellipsis;
white-space : nowrap;
}
//批量修改文字工具命令TextModifyTool
#TextModifytModal{
width : 520px;
.bp3-dialog-body{
margin: auto;
table{
margin-top: 10px;
}
.bp3-input:not([type=search]){
height: 22px;
}
span{
padding: 2px;
vertical-align: middle;
}
}
.bp3-dialog-footer{
display: block;
}
.changeLength{
text-align: center;
button{
margin: 10px;
}
}
.foot_left{
position: absolute;
left : 3%;
.bp3-button.bp3-intent-danger{
margin: 0;
}
}
}
//-----批量修改文字工具结束--------

@ -127,6 +127,12 @@ export interface BoardConfigOption extends IBaseOption
height?: number;
width?: number;
}
export interface ModifyTextsConfigOption
{
changeTexts: [string, string][];
}
export interface SideBoardOption extends BoardConfigOption
{
spaceSize?: number; //空间宽度

@ -1,5 +1,6 @@
import { observable, toJS, action } from 'mobx';
import { action, observable, toJS } from 'mobx';
import { begin } from 'xaop';
import { app } from '../../ApplicationServices/Application';
import { EBoardKeyList } from '../../Common/BoardKeyList';
import { CheckObjectType, CheckoutValid } from '../../Common/CheckoutVaildValue';
@ -8,14 +9,13 @@ import { Singleton } from '../../Common/Singleton';
import { ClosingStripReg } from '../../Common/Utils';
import { Board } from '../../DatabaseServices/Entity/Board';
import { TemplateRecord } from '../../DatabaseServices/Template/TemplateRecord';
import { DefaultBehindBoardConfig, DefaultLayerBoardConfig, DefaultVerticalBoardConfig, DefaultTopBoardOption, DefaultBottomBoardOption, DefaultSideBoardOption, DefaultSingleBoardOption, DefaultClosingStripOption, DefaultNailOption, DefaultBoardProcessOption } from '../../Editor/DefaultConfig';
import { DefaultBehindBoardConfig, DefaultBoardProcessOption, DefaultBottomBoardOption, DefaultClosingStripOption, DefaultLayerBoardConfig, DefaultNailOption, DefaultSideBoardOption, DefaultSingleBoardOption, DefaultTopBoardOption, DefaultVerticalBoardConfig } from '../../Editor/DefaultConfig';
import { userConfig } from '../../Editor/UserConfig';
import { IConfigOption } from '../Components/Board/UserConfig';
import { ModalState } from '../Components/Modal/ModalInterface';
import { BehindBoardOption, BoardConfigOption, IBaseOption, BoardProcessOption, BrRelativePos, ClosingStripOption, DrillType, FaceDirection, IGrooveOption, LayerBoardOption, LayerNailOption, SideBoardOption, SingleBoardOption, StripType, TBBoardOption, VerticalBoardOption, IUiOption, AnyObject, BoardType, IHightDrillOption, IDrawBoardAutoCutOption, BehindHeightPositon, LinesType } from './BoardInterface';
import { begin } from 'xaop';
import { ToasterValueError } from '../Components/Toaster';
import { IModalResult } from '../Components/Modal/ModalsManage';
import { ToasterValueError } from '../Components/Toaster';
import { AnyObject, BehindBoardOption, BehindHeightPositon, BoardConfigOption, BoardProcessOption, BoardType, BrRelativePos, ClosingStripOption, DrillType, FaceDirection, IBaseOption, IDrawBoardAutoCutOption, IGrooveOption, IHightDrillOption, IUiOption, LayerBoardOption, LayerNailOption, LinesType, SideBoardOption, SingleBoardOption, TBBoardOption, VerticalBoardOption } from './BoardInterface';
export interface IConfigStore

Loading…
Cancel
Save