!533 模块树UI优化

pull/533/MERGE
ChenX 5 years ago
parent 4b4ffa3c93
commit 61634961eb

@ -32,9 +32,9 @@ export class CreateObjectData extends CADObject
{
this.CADFiler.Reset();
this.CADFiler.database = db;
let obj = this.CADFiler.ReadObject();
this.Object = this.CADFiler.ReadObject();
this.CADFiler.Reset();
return obj;
return this.Object;
}
//#region -----------------------------File-----------------------------

@ -1,4 +1,4 @@
import { Button, Classes, ContextMenu, H5, Intent, ITreeNode, Menu, MenuItem, Tree, NumericInput } from "@blueprintjs/core";
import { Button, Classes, ContextMenu, H5, Intent, ITreeNode, Menu, MenuItem, NumericInput, Tree } from "@blueprintjs/core";
import { observable } from "mobx";
import { observer } from "mobx-react";
import React from "react";
@ -8,8 +8,10 @@ import { app } from "../../../ApplicationServices/Application";
import { arrayRemoveOnce } from "../../../Common/ArrayExt";
import { EBoardKeyList } from "../../../Common/BoardKeyList";
import { safeEval } from "../../../Common/eval";
import { KeyBoard } from "../../../Common/KeyEnum";
import { FixedNotZero } from "../../../Common/Utils";
import { CommandHistoryRecord } from "../../../DatabaseServices/CommandHistoryRecord";
import { CreateObjectData } from "../../../DatabaseServices/CreateObjectData";
import { Board } from "../../../DatabaseServices/Entity/Board";
import { Entity } from "../../../DatabaseServices/Entity/Entity";
import { PositioningClampSpace } from "../../../DatabaseServices/Template/Positioning/PositioningClampSpace";
@ -17,9 +19,8 @@ import { DeleteTempate } from "../../../DatabaseServices/Template/TempateUtils";
import { TemplateRecord } from "../../../DatabaseServices/Template/TemplateRecord";
import { TemplateSplitType } from "../../../DatabaseServices/Template/TemplateType";
import { CommandWrap } from "../../../Editor/CommandMachine";
import { INeedUpdateParams } from "../Template/TemplateComponent";
import { SelectSetBase } from "../../../Editor/SelectBase";
import { KeyBoard } from "../../../Common/KeyEnum";
import { INeedUpdateParams } from "../Template/TemplateComponent";
interface TemplateParamState
{
@ -50,7 +51,7 @@ export class TemplateParamPanel extends React.Component<TemplateParamProps, Temp
private removeFuncs: Function[] = [];
private scrollFollow: boolean;
private scrollCard: HTMLElement;
private selectedNodeOrder: number = 0;
private templateObjIdSet: Set<number> = new Set();
constructor(props: Readonly<TemplateParamProps>)
{
super(props);
@ -61,31 +62,70 @@ export class TemplateParamPanel extends React.Component<TemplateParamProps, Temp
componentDidMount()
{
const drawingCommands = ["draw", "DD", "左右侧板", "立板", "层板", "背板", "DOOR"];
const redoCommands = ["删除模板节点", "应用参数修改", "分离空间", ...drawingCommands];
let tem = this.GetCurrentTemplate();
if (tem)
this.displayTemplateRootId = tem.Root.Id.Index;
let template = this.GetCurrentTemplate();
if (template)
this.displayTemplateRootId = template.Root.Id.Index;
this.InitData();
this.removeFuncs.push(
end(app.Database.hm, app.Database.hm.RedoEvent, (cmdName: string, historyRec: CommandHistoryRecord) =>
{
if (redoCommands.includes(cmdName))
this.InitData();
for (let [h, hs] of historyRec.HistoryList)
{
if (this.templateObjIdSet.has(h.Index))
this.InitData();
else if (h === app.Database.TemplateTable.Id)
{
for (let h of hs)
{
if (h.redoData instanceof CreateObjectData)
{
if (this.templateObjIdSet.has(h.redoData.Object.Id.Index))
{
this.InitData();
return;
}
}
}
}
}
}),
end(app.Database.hm, app.Database.hm.UndoEvent, (cmdName: string, historyRec: CommandHistoryRecord) =>
{
if (redoCommands.includes(cmdName))
if (!this.GetCurrentTemplate())
{
this.InitData();
return;
}
for (let [h] of historyRec.HistoryList)
{
if (this.templateObjIdSet.has(h.Index))
{
this.InitData();
return;
}
}
})
);
app.CommandReactor.OnCommandEnd((cmdName, changeObjects, createObjects) =>
{
if (!drawingCommands.includes(cmdName)) return;
this.InitData();
for (let e of changeObjects)
{
if (this.templateObjIdSet.has(e.Id.Index))
{
this.InitData();
return;
}
}
for (let e of createObjects)
{
if (this.templateObjIdSet.has(e.Id.Index))
{
this.InitData();
return;
}
}
});
}
@ -126,14 +166,14 @@ export class TemplateParamPanel extends React.Component<TemplateParamProps, Temp
//初始化所有展示数据
InitData()
{
let temp = this.GetCurrentTemplate();
if (!temp)
let template = this.GetCurrentTemplate();
if (!template)
{
this.setState({ nodes: [] });
return;
}
observable(this.currentProps).replace(temp.Params.map((p) =>
this.templateObjIdSet.clear();
observable(this.currentProps).replace(template.Params.map((p) =>
{
return {
name: p.name,
@ -142,21 +182,23 @@ export class TemplateParamPanel extends React.Component<TemplateParamProps, Temp
expr: p.expr,
}
}));
let nodes = [this.Template2TreeNode(temp.Root)];
let nodes = [this.Template2TreeNode(template.Root)];
let allnodes: ITreeNode[] = [...nodes];
let selectedNodeOrder: number;
for (let i = 0; i < allnodes.length; i++)
{
let n = allnodes[i];
n.isSelected = n.nodeData === temp;
this.templateObjIdSet.add(n.id as number);
n.isSelected = n.nodeData === template;
if (n.isSelected)
this.selectedNodeOrder = i;
selectedNodeOrder = i;
allnodes.push(...n.childNodes);
}
this.setState({ nodes });
if (this.scrollFollow && this.scrollCard)
{
let treeEl = this.scrollCard.firstElementChild;
treeEl.scrollTop = (this.selectedNodeOrder * 30);
treeEl.scrollTop = (selectedNodeOrder * 30);
}
this.scrollFollow = false;
}
@ -407,17 +449,12 @@ export class TemplateParamDetail extends React.Component<{ updateParams: INeedUp
{
if (e.keyCode === KeyBoard.Enter)
{
let dt = new Date().getTime();
if (dt - ot < 200 && dt - ot > 0)
{
if (this.handleOnBlur(par))
await this.ApplyNewValue();
}
ot = dt;
if (this.CheckParamExpr(par))
await this.ApplyParamExpr();
}
e.stopPropagation()
}
ApplyNewValue = async () =>
ApplyParamExpr = async () =>
{
const { currentShowTemplate, callback } = this.props;
await CommandWrap(async () =>
@ -450,17 +487,13 @@ export class TemplateParamDetail extends React.Component<{ updateParams: INeedUp
return "Z";
}
}
handleOnBlur = (par: INeedUpdateParams) =>
CheckParamExpr = (par: INeedUpdateParams) =>
{
if (par.expr !== "")
{
let newVal = safeEval(par.expr as string, this.paramdef);
let param = this.props.currentShowTemplate.GetParam(par.name);
if (!isNaN(newVal))
{
param.expr = par.expr;
return true;
}
else
{
app.Editor.Prompt(`表达式 ${par.name}: ${par.expr} 中存在未定义值`);
@ -504,7 +537,7 @@ export class TemplateParamDetail extends React.Component<{ updateParams: INeedUp
onChange={e => par.expr = e.target.value as string}
onBlur={(e) =>
{
let res = this.handleOnBlur(par);
let res = this.CheckParamExpr(par);
if (!res)
e.target.classList.add("bp3-intent-danger");
else
@ -541,7 +574,7 @@ export class TemplateParamDetail extends React.Component<{ updateParams: INeedUp
}}
onBlur={(e) =>
{
let res = this.handleOnBlur(par);
let res = this.CheckParamExpr(par);
if (!res)
e.target.classList.add("bp3-intent-danger");
else
@ -576,10 +609,10 @@ export class TemplateParamDetail extends React.Component<{ updateParams: INeedUp
par.name === "RX" ? this.rotateVals.RX = valueAsString :
(par.name === "RY" ? this.rotateVals.RY = valueAsString : this.rotateVals.RZ = valueAsString);
}}
onButtonClick={async () => { await this.ApplyNewValue() }}
onButtonClick={async () => { await this.ApplyParamExpr() }}
onBlur={(e) =>
{
let res = this.handleOnBlur(par);
let res = this.CheckParamExpr(par);
if
(!res) e.target.classList.add("bp3-intent-danger");
else
@ -598,7 +631,7 @@ export class TemplateParamDetail extends React.Component<{ updateParams: INeedUp
<Button
text="应用数据修改"
intent={Intent.SUCCESS}
onClick={async () => { await this.ApplyNewValue(); }}
onClick={async () => { await this.ApplyParamExpr(); }}
/>
</div>
</>

Loading…
Cancel
Save