Skip to content

Commit b64565b

Browse files
committed
feat: 增加节点退出编辑状态时,自动格式化树形结构的功能
1 parent 9f67ec1 commit b64565b

File tree

7 files changed

+41
-13
lines changed

7 files changed

+41
-13
lines changed

app/src/core/service/Settings.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,7 @@ export const settingsSchema = z.object({
127127
textNodeBackspaceDeleteWhenEmpty: z.boolean().default(false),
128128
allowAddCycleEdge: z.boolean().default(false),
129129
autoLayoutWhenTreeGenerate: z.boolean().default(true),
130+
textNodeAutoFormatTreeWhenExitEdit: z.boolean().default(false),
130131
enableBackslashGenerateNodeInInput: z.boolean().default(false),
131132
gamepadDeadzone: z.number().min(0).max(1).default(0.1),
132133
showGrid: z.boolean().default(true),

app/src/core/service/SettingsIcons.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -163,4 +163,5 @@ export const settingsIcons = {
163163
clearHistoryWhenManualSave: Undo,
164164
historyManagerMode: Undo,
165165
soundPitchVariationRange: ListMusic,
166+
textNodeAutoFormatTreeWhenExitEdit: ListTree,
166167
};

app/src/core/service/controlService/controller/concrete/utilsControl.tsx

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ import { DateChecker } from "@/utils/dateChecker";
2525
import { TextNodeSmartTools } from "@/core/service/dataManageService/textNodeSmartTools";
2626
import { ReferenceManager } from "@/core/stage/stageManager/concreteMethods/StageReferenceManager";
2727
import _ from "lodash";
28+
import { Settings } from "@/core/service/Settings";
2829

2930
/**
3031
* 这里是专门存放代码相同的地方
@@ -119,6 +120,11 @@ export class ControllerUtils {
119120
// 实验
120121
this.finishChangeTextNode(clickedNode);
121122
await this.autoChangeTextNodeToReferenceBlock(this.project, clickedNode);
123+
// 文本节点退出编辑模式后,检查是否需要自动格式化树形结构
124+
if (Settings.textNodeAutoFormatTreeWhenExitEdit) {
125+
// 格式化树形结构
126+
this.project.keyboardOnlyTreeEngine.adjustTreeNode(clickedNode, false);
127+
}
122128
});
123129
}
124130

app/src/core/service/controlService/keyboardOnlyEngine/keyboardOnlyTreeEngine.tsx

Lines changed: 20 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -339,7 +339,7 @@ export class KeyboardOnlyTreeEngine {
339339
* 根据某个已经选中的节点,调整其所在树的结构
340340
* @param entity
341341
*/
342-
adjustTreeNode(entity: ConnectableEntity) {
342+
adjustTreeNode(entity: ConnectableEntity, withEffect = true) {
343343
const rootNodeParents = this.project.graphMethods.getRoots(entity);
344344
const rootNode = rootNodeParents[0];
345345
this.project.autoAlign.autoLayoutSelectedFastTreeMode(rootNode);
@@ -352,18 +352,26 @@ export class KeyboardOnlyTreeEngine {
352352
);
353353
const rootNodeRect = rootNode.collisionBox.getRectangle();
354354

355-
// 使用成功阴影颜色作为闪烁特效颜色
356-
const flashColor = this.project.stageStyleManager.currentStyle.effects.successShadow;
357-
358-
// 为树的外接矩形添加闪烁特效
359-
this.project.effects.addEffect(
360-
new RectangleRenderEffect(new ProgressNumber(0, 60), treeBoundingRect, flashColor.toTransparent(), flashColor, 3),
361-
);
355+
if (withEffect) {
356+
// 使用成功阴影颜色作为闪烁特效颜色
357+
const flashColor = this.project.stageStyleManager.currentStyle.effects.successShadow;
358+
359+
// 为树的外接矩形添加闪烁特效
360+
this.project.effects.addEffect(
361+
new RectangleRenderEffect(
362+
new ProgressNumber(0, 60),
363+
treeBoundingRect,
364+
flashColor.toTransparent(),
365+
flashColor,
366+
3,
367+
),
368+
);
362369

363-
// 为根节点添加闪烁特效
364-
this.project.effects.addEffect(
365-
new RectangleRenderEffect(new ProgressNumber(0, 60), rootNodeRect, flashColor.toTransparent(), flashColor, 4),
366-
);
370+
// 为根节点添加闪烁特效
371+
this.project.effects.addEffect(
372+
new RectangleRenderEffect(new ProgressNumber(0, 60), rootNodeRect, flashColor.toTransparent(), flashColor, 4),
373+
);
374+
}
367375

368376
// 恢复选择状态
369377
rootNode.isSelected = false;

app/src/locales/en.yml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -449,6 +449,10 @@ settings:
449449
title: Delete Text Node When Backspace Pressed on Empty Content
450450
description: |
451451
When enabled, pressing the Backspace key on an empty text node in edit mode will delete the entire node.
452+
textNodeAutoFormatTreeWhenExitEdit:
453+
title: Auto Format Tree Structure When Exiting Edit Mode
454+
description: |
455+
Automatically formats the tree structure when a text node exits edit mode.
452456
enableDragAutoAlign:
453457
title: Enable Automatic Alignment When Dragging Nodes
454458
description: |

app/src/locales/zh_CN.yml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -554,6 +554,10 @@ settings:
554554
title: 当在编辑模式下文本节点无内容时按Backspace键自动删除整个节点
555555
description: |
556556
开启后,在编辑文本节点且内容为空时,按下Backspace键会自动删除整个节点
557+
textNodeAutoFormatTreeWhenExitEdit:
558+
title: 退出编辑模式时自动格式化树形结构
559+
description: |
560+
当文本节点退出编辑模式时,自动对其所在的树形结构进行格式化布局
557561
enableDragAutoAlign:
558562
title: 鼠标拖动自动吸附对齐节点
559563
description: |

app/src/sub/SettingsWindow/settings.tsx

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -272,7 +272,11 @@ const categories = {
272272
"textNodeBackspaceDeleteWhenEmpty",
273273
],
274274
edge: ["allowAddCycleEdge", "autoAdjustLineEndpointsByMouseTrack", "enableRightClickConnect"],
275-
generateNode: ["autoLayoutWhenTreeGenerate", "enableBackslashGenerateNodeInInput"],
275+
generateNode: [
276+
"autoLayoutWhenTreeGenerate",
277+
"enableBackslashGenerateNodeInInput",
278+
"textNodeAutoFormatTreeWhenExitEdit",
279+
],
276280
gamepad: ["gamepadDeadzone"],
277281
},
278282
performance: {

0 commit comments

Comments
 (0)