!1173 功能:底部栏配置保存云端

pull/1173/MERGE
ZoeLeeFZ 4 years ago committed by ChenX
parent 36757e2567
commit 6d885e2383

@ -20,6 +20,7 @@ import { GetPointPrompt } from "./PromptOptions";
import { PromptPointResult, PromptStatus } from './PromptResult';
import { SnapMenuKW, SNAPMODE } from './ShowSnapMenu';
import { SnapServices } from './SnapServices';
import { DownPanelStore } from '../UI/Store/DownPanelStore';
/**
* ,Editor.
@ -137,7 +138,7 @@ export class GetPointServices implements EditorService
else
{
if (res.StringResult === "O")
app.Editor.ModalManage.RenderModal(SnapModal);
app.Editor.ModalManage.RenderModal(SnapModal, { store: DownPanelStore.GetInstance() });
else
app.Editor.GetPointServices.snapServices.SnapModeEnable = SNAPMODE[res.StringResult];
}

@ -3,6 +3,7 @@ import { KeyWord } from "../Common/InputState";
import { SnapModal } from "../UI/Components/Modal/SnapModal";
import { ObjectSnapMode } from "./ObjectSnapMode";
import { PromptStatus } from "./PromptResult";
import { DownPanelStore } from "../UI/Store/DownPanelStore";
//捕捉模式列表
export const SNAPMODE = {
@ -45,7 +46,7 @@ export async function ShowSnapMenu()
if (res.Status === PromptStatus.Keyword)
{
if (res.StringResult === "O")
app.Editor.ModalManage.RenderModal(SnapModal);
app.Editor.ModalManage.RenderModal(SnapModal, { store: DownPanelStore.GetInstance() });
else
{
let snapService = app.Editor.GetPointServices.snapServices;

@ -4,8 +4,9 @@ import { observer } from "mobx-react";
import * as React from "react";
import { app } from "../ApplicationServices/Application";
import { KeyBoard } from "../Common/KeyEnum";
import { snapData, SnapModal } from "../UI/Components/Modal/SnapModal";
import { SnapModal } from "../UI/Components/Modal/SnapModal";
import { SNAPMODE } from "./ShowSnapMenu";
import { DownPanelStore } from "../UI/Store/DownPanelStore";
/**
* .
@ -26,6 +27,7 @@ export class SnapMenuFixed extends React.Component<{}>
isOpen={this.isMenuShow}
modifiers={{ arrow: { enabled: false } }}
content={this.RenderMenu()}
onClosed={this.close}
>
<Button
style={{ fontSize: "11px", textAlign: "center", minHeight: "15px", height: "15px", lineHeight: "1px" }}
@ -38,6 +40,7 @@ export class SnapMenuFixed extends React.Component<{}>
}
RenderMenu = () =>
{
const downStore = DownPanelStore.GetInstance() as DownPanelStore;
return (
<Menu
className="snapMenu-fixed"
@ -57,7 +60,7 @@ export class SnapMenuFixed extends React.Component<{}>
}}
>
{
snapData.map(
downStore.snapData.map(
(data) =>
<MenuItem
key={data.mode}
@ -79,7 +82,7 @@ export class SnapMenuFixed extends React.Component<{}>
onClick={() =>
{
this.isModalShow = true;
app.Editor.ModalManage.RenderModal(SnapModal);
app.Editor.ModalManage.RenderModal(SnapModal, { store: downStore });
}}
/>
</Menu>
@ -100,4 +103,9 @@ export class SnapMenuFixed extends React.Component<{}>
if (!this.isModalShow)
app.Editor.MaskManage.Clear();
};
private close = () =>
{
let store = DownPanelStore.GetInstance() as DownPanelStore;
store.Upload();
};
}

@ -3,87 +3,28 @@ import { Classes, Icon, Button, Checkbox, Intent, H4 } from "@blueprintjs/core";
import { app } from "../../../ApplicationServices/Application";
import { observer } from "mobx-react";
import { SNAPMODE } from "../../../Editor/ShowSnapMenu";
import { observable } from "mobx";
import { KeyBoard } from "../../../Common/KeyEnum";
import * as xaop from "xaop";
import { ObjectSnapMode } from "../../../Editor/ObjectSnapMode";
import { IsChar } from "../../../Common/Utils";
import { DownPanelStore, ISnapData } from "../../Store/DownPanelStore";
export interface ICheckboxOption
{
data: ISnapData;
onChange?: Function;
}
export interface ISnapData
{
mode: string;
name: string;
enable: boolean;
}
export let snapData: ISnapData[] = observable([
{
mode: "E",
name: "端点",
enable: true
},
{
mode: "M",
name: "中点",
enable: true
},
{
mode: "I",
name: "交点",
enable: true
},
{
mode: "A",
name: "外观交点",
enable: true
},
{
mode: "X",
name: "延长线",
enable: true
},
{
mode: "C",
name: "圆心",
enable: true
},
{
mode: "Q",
name: "象限点",
enable: true
},
{
mode: "G",
name: "切点",
enable: true
},
{
mode: "P",
name: "垂直",
enable: true
},
{
mode: "R",
name: "最近点",
enable: true
},
]);
/**
*
*/
@observer
export class SnapModal extends React.Component<{}, {}>
export class SnapModal extends React.Component<{ store: DownPanelStore; }, {}>
{
@observable isF3Checked: boolean = true;
@observable isF11Checked: boolean = false;
private event: Function;
RegisterHandleKeyBoardEvent()
RegisterHandleKeyBoardEvent = () =>
{
const store = this.props.store;
this.event = xaop.begin(app.Editor.ModalManage, app.Editor.ModalManage.OnKeyDown, (e: KeyboardEvent) =>
{
if (SnapModal.name !== app.Editor.ModalManage.CurrentModalKey) return;
@ -97,18 +38,18 @@ export class SnapModal extends React.Component<{}, {}>
}
else if (e.keyCode === KeyBoard.F3)
{
this.isF3Checked = !this.isF3Checked;
store.isF3Checked = !store.isF3Checked;
e.preventDefault();
}
else if (e.keyCode === KeyBoard.F11)
{
this.isF11Checked = !this.isF11Checked;
store.isF11Checked = !store.isF11Checked;
e.preventDefault();
}
else if (IsChar(e.keyCode))
{
let key = e.key.toUpperCase();
for (let data of snapData)
for (let data of store.snapData)
{
if (data.mode === key)
{
@ -118,7 +59,7 @@ export class SnapModal extends React.Component<{}, {}>
}
}
});
}
};
UNSAFE_componentWillMount()
{
//注册事件
@ -126,22 +67,8 @@ export class SnapModal extends React.Component<{}, {}>
}
OnOK = () =>
{
let snapServices = app.Editor.GetPointServices.snapServices;
if (!this.isF3Checked)
{
snapServices.SnapModeEnable = ObjectSnapMode.NotEntitySnap;
app.Editor.ModalManage.Destory();
return;
}
snapServices.SnapModeEnable = ObjectSnapMode.None;
for (let data of snapData)
{
if (data.enable === true)
{
snapServices.SnapModeEnable |= SNAPMODE[data.mode];
app.Editor.GetPointServices.snapModeCurrent = snapServices.SnapModeEnable;
}
}
const store = this.props.store;
store.SetSnapMode();
app.Editor.ModalManage.Destory();
};
OnCanel()
@ -152,9 +79,11 @@ export class SnapModal extends React.Component<{}, {}>
{
this.event();
this.event = null;
this.props.store.Upload();
}
render()
{
const store = this.props.store;
return (
<div
className={Classes.DIALOG_CONTAINER}
@ -179,14 +108,14 @@ export class SnapModal extends React.Component<{}, {}>
<div >
<div>
<Checkbox
checked={this.isF3Checked}
onChange={() => { this.isF3Checked = !this.isF3Checked; }}
checked={store.isF3Checked}
onChange={() => { store.isF3Checked = !store.isF3Checked; }}
>
(F3)
</Checkbox>
<Checkbox
checked={this.isF11Checked}
onChange={() => { this.isF11Checked = !this.isF11Checked; }}
checked={store.isF11Checked}
onChange={() => { store.isF11Checked = !store.isF11Checked; }}
>
(F11)
</Checkbox>
@ -195,7 +124,7 @@ export class SnapModal extends React.Component<{}, {}>
<h5 className={Classes.HEADING}></h5>
<div className="flexCheckbox">
{
snapData.map((data, index) =>
store.snapData.map((data, index) =>
<SnapModalItem
data={data}
/>
@ -206,7 +135,7 @@ export class SnapModal extends React.Component<{}, {}>
onClick={
() =>
{
for (let data of snapData)
for (let data of store.snapData)
{
data.enable = true;
}
@ -217,7 +146,7 @@ export class SnapModal extends React.Component<{}, {}>
onClick={
() =>
{
for (let data of snapData)
for (let data of store.snapData)
{
data.enable = false;
}

@ -183,10 +183,13 @@ export class TopPanel extends React.Component<{ store?: TopPanelStore; }, {}>
@observer
export class DownPanel extends React.Component<{ store?: DownPanelStore; }, {}>
{
handlePublicChange = (e) =>
private handleChange = (e: React.FormEvent<HTMLInputElement>) =>
{
this.props.store.useDynInput = e.target.checked;
e.target.blur();
let key = e.currentTarget.getAttribute("data-key");
if (!key) return;
this.props.store[key] = e.currentTarget.checked;
e.currentTarget.blur();
this.props.store.Upload();
};
render()
{
@ -211,7 +214,8 @@ export class DownPanel extends React.Component<{ store?: DownPanelStore; }, {}>
<Switch
checked={this.props.store.useDynInput}
label="动态输入"
onChange={this.handlePublicChange}
data-key="useDynInput"
onChange={this.handleChange}
style={switchStyle}
alignIndicator={Alignment.RIGHT}
/>
@ -229,33 +233,24 @@ export class DownPanel extends React.Component<{ store?: DownPanelStore; }, {}>
<Switch
checked={this.props.store.useDynSnap}
label="动态捕捉"
onChange={e =>
{
this.props.store.useDynSnap = e.currentTarget.checked;
e.currentTarget.blur();
}}
data-key="useDynSnap"
onChange={this.handleChange}
style={switchStyle}
alignIndicator={Alignment.RIGHT}
/>
<Switch
checked={this.props.store.usePass}
label="亮显"
onChange={e =>
{
this.props.store.usePass = e.currentTarget.checked;
e.currentTarget.blur();
}}
data-key="usePass"
onChange={this.handleChange}
style={switchStyle}
alignIndicator={Alignment.RIGHT}
/>
<Switch
checked={this.props.store.useOrtho}
label="正交"
onChange={e =>
{
this.props.store.useOrtho = e.currentTarget.checked;
e.currentTarget.blur();
}}
data-key="useOrtho"
onChange={this.handleChange}
style={switchStyle}
alignIndicator={Alignment.RIGHT}
/>
@ -265,6 +260,7 @@ export class DownPanel extends React.Component<{ store?: DownPanelStore; }, {}>
onChange={e =>
{
this.props.store.fontName = e.target.value;
this.props.store.Upload();
}}
value={this.props.store.fontName}
style={{ height: 15, fontSize: "10px", outline: "none", verticalAlign: "bottom" }}

@ -1,9 +1,16 @@
import { autorun, observable } from 'mobx';
import { autorun, observable, action } from 'mobx';
import { Vector3 } from 'three';
import * as xaop from 'xaop';
import { app } from '../../ApplicationServices/Application';
import { Singleton } from '../../Common/Singleton';
import { AxisSnapMode } from '../../Editor/SnapServices';
import { PostJson, RequestStatus } from '../../Common/Request';
import { ConfigUrls } from '../../Common/HostUrl';
import { IndexedDbStore, StoreName } from '../../IndexedDb/IndexedDbStore';
import { appCache } from '../../Common/AppCache';
import { GetIndexDBID } from '../../Common/Utils';
import { ObjectSnapMode } from '../../Editor/ObjectSnapMode';
import { SNAPMODE } from '../../Editor/ShowSnapMenu';
//点转换为字符串.
function PointToString(pt: Vector3): string
@ -22,11 +29,19 @@ export enum ToolBarType
none = 0,//不显示
}
export interface ISnapData
{
mode: string;
name: string;
enable: boolean;
}
/**
* .
*/
export class DownPanelStore extends Singleton
{
private _version = 1;
@observable useDynInput: boolean = true;
@observable showType: ToolBarType = 1;
@observable useDynSnap: boolean = true;
@ -35,7 +50,62 @@ export class DownPanelStore extends Singleton
@observable fontName: string = "songti";
@observable progress = 1;
@observable isToolBarShow: boolean = true;
@observable isF3Checked: boolean = true;
@observable isF11Checked: boolean = false;
posEl: HTMLSpanElement;
@observable snapData: ISnapData[] = [
{
mode: "E",
name: "端点",
enable: true
},
{
mode: "M",
name: "中点",
enable: true
},
{
mode: "I",
name: "交点",
enable: true
},
{
mode: "A",
name: "外观交点",
enable: true
},
{
mode: "X",
name: "延长线",
enable: true
},
{
mode: "C",
name: "圆心",
enable: true
},
{
mode: "Q",
name: "象限点",
enable: true
},
{
mode: "G",
name: "切点",
enable: true
},
{
mode: "P",
name: "垂直",
enable: true
},
{
mode: "R",
name: "最近点",
enable: true
},
];
private timeId: NodeJS.Timeout;
private constructor()
{
super();
@ -50,10 +120,111 @@ export class DownPanelStore extends Singleton
app.Editor.GetPointServices.snapServices.AxisSnapMode = this.useOrtho ? AxisSnapMode.Ortho : AxisSnapMode.Polar;
app.Viewer.UsePass = this.usePass;
});
}
get Config()
{
return {
useDynInput: this.useDynInput,
useDynSnap: this.useDynSnap,
usePass: this.usePass,
useOrtho: this.useOrtho,
isToolBarShow: this.isToolBarShow,
isF3Checked: this.isF3Checked,
isF11Checked: this.isF11Checked,
snapData: this.snapData.map(d => d.enable),
fontName: this.fontName,
};
}
async Upload()
{
if (this.timeId)
clearTimeout(this.timeId);
this.timeId = setTimeout(async () =>
{
const type = DownPanelStore.name;
const configs = this.Config;
let data = await PostJson(ConfigUrls.Edit, { key: type, value: JSON.stringify(configs) });
if (data.err_code === RequestStatus.Ok)
{
let dbStore = await IndexedDbStore.CADStore();
await dbStore.Put(StoreName.ConfigData, GetIndexDBID(type), configs);
await dbStore.Put(StoreName.ConfigVersion, GetIndexDBID(type), data.version);
appCache.set(type, configs);
}
}, 3000);
}
@action
async Update()
{
const key = DownPanelStore.name;
let config = appCache.get(key);
if (!config)
{
let store = await IndexedDbStore.CADStore();
let version = await store.Get(StoreName.ConfigVersion, GetIndexDBID(key));
let data = await PostJson(ConfigUrls.Get, { key, version }, false);
if (data.err_code === RequestStatus.Ok && data.value && data.value !== "{}")
{
if (data.value === "CACHE")
{
config = await store.Get(StoreName.ConfigData, GetIndexDBID(key));
if (config)
appCache.set(key, JSON.parse(JSON.stringify(config)));
}
else
{
store.Put(StoreName.ConfigVersion, GetIndexDBID(key), data.version);
config = JSON.parse(data.value);
appCache.set(key, JSON.parse(data.value));
}
}
}
if (!config)
return;
this.useDynInput = config.useDynInput;
this.useDynSnap = config.useDynSnap;
this.usePass = config.usePass;
this.useOrtho = config.useOrtho;
this.isToolBarShow = config.isToolBarShow;
this.isF3Checked = config.isF3Checked;
this.isF11Checked = config.isF11Checked;
this.fontName = config.fontName;
for (let i = 0; i < config.snapData.length; i++)
{
this.snapData[i].enable = config.snapData[i];
}
this.SetSnapMode();
this.showType = !this.isToolBarShow ? this.showType ^ ToolBarType.toolbar : this.showType | ToolBarType.toolbar;
}
toggleToolBarShow()
{
this.showType = this.isToolBarShow ? this.showType ^ ToolBarType.toolbar : this.showType | ToolBarType.toolbar;
this.isToolBarShow = !this.isToolBarShow;
this.Upload();
}
SetSnapMode()
{
let snapServices = app.Editor.GetPointServices.snapServices;
if (!this.isF3Checked)
{
snapServices.SnapModeEnable = ObjectSnapMode.NotEntitySnap;
return;
}
snapServices.SnapModeEnable = ObjectSnapMode.None;
app.Editor.GetPointServices.snapModeCurrent = ObjectSnapMode.None;
for (let data of this.snapData)
{
if (data.enable === true)
{
snapServices.SnapModeEnable |= SNAPMODE[data.mode];
app.Editor.GetPointServices.snapModeCurrent = snapServices.SnapModeEnable;
}
}
}
}

@ -23,6 +23,7 @@ export class DrillStore extends BoardStore
@observable rules: DrillingOption[] = [];
@observable m_Option: DrillingOption;
@observable drillConfig: Map<string, DrillingOption[]> = new Map();
deleteHoleTemps = new Set();
constructor()
{
super();
@ -244,7 +245,7 @@ export class DrillStore extends BoardStore
async CacheDrillTemp(tempId: string)
{
let key = StoreageKeys.DrillTemp + tempId;
if (appCache.has(key))
if (appCache.has(key) || this.deleteHoleTemps.has(key))
return;
let ens: ExtrudeHole[] = [];
let data = await PostJson(TemplateUrls.detail, { module_id: tempId });
@ -258,5 +259,7 @@ export class DrillStore extends BoardStore
}
appCache.set(key, ens);
}
else
this.deleteHoleTemps.add(key);
}
}

@ -28,6 +28,7 @@ import { TemplateTagCommand, templateTagCommand } from "../../Add-on/Template/Te
import { GetIndexDBID } from "../../Common/Utils";
import { RegistCustomCommand, RemoveCustonCommand } from "../../Editor/CommandRegister";
import { updateBoardInfoStore } from "./UpdateBoardInfoStore";
import { DownPanelStore } from "./DownPanelStore";
type BehindConfigType = { option: BehindBoardOption, processData: BoardProcessOption, grooveData: IGrooveOption; };
@ -169,6 +170,7 @@ export class UserConfigStore extends Singleton
(DrawerStore.GetInstance() as DrawerStore).selectTemplateInfo = null;
await this.CheckCanUseRender();
await this.InitUserConfig();
await (DownPanelStore.GetInstance() as DownPanelStore).Update();
await RegistCustomCommand();
AppToaster.show({
message: "数据加载完成!",
@ -390,7 +392,7 @@ export class UserConfigStore extends Singleton
}
async CacheAllConfigs()
{
let keys = [...Object.values(BoardModalType), StoreageKeys.ConfigName, TemplateTagCommand.name, CommandServer.name];
let keys = [...Object.values(BoardModalType), StoreageKeys.ConfigName, TemplateTagCommand.name, CommandServer.name, DownPanelStore.name];
let query = [];
const store = await IndexedDbStore.CADStore();
@ -503,6 +505,8 @@ export class UserConfigStore extends Singleton
localStorage.removeItem(StoreageKeys.IsLogin);
templateTagCommand.ClearTagList();
appCache.clear();
const drillStore = DrillStore.GetInstance() as DrillStore;
drillStore.deleteHoleTemps.clear();
app.Editor.ModalManage.DestoryAll();
app.WebSocket.Close();
}

Loading…
Cancel
Save