Commit 98e0d3cd authored by techird's avatar techird

交互说明

parent 3de023b6
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<scenario xmlns="http://www.omnigroup.com/namespace/OmniPlan/v2" id="mFlQ8Rl4Gch">
<start-date>2014-02-11T00:00:00.000Z</start-date>
<prototype-task>
<task id="t4294967294">
<title>Task 1</title>
<effort>28800</effort>
</task>
</prototype-task>
<prototype-task>
<task id="t4294967293">
<title>Milestone 1</title>
<type>milestone</type>
</task>
</prototype-task>
<prototype-task>
<task id="t4294967292">
<title>Group 1</title>
<type>group</type>
</task>
</prototype-task>
<prototype-resource>
<resource id="r4294967294">
<name>Resource 1</name>
<type>Staff</type>
</resource>
</prototype-resource>
<prototype-resource>
<resource id="r4294967293">
<name>Equipment 1</name>
<type>Equipment</type>
</resource>
</prototype-resource>
<prototype-resource>
<resource id="r4294967292">
<name>Material 1</name>
<type>Material</type>
<units-available>0</units-available>
<efficiency>0</efficiency>
</resource>
</prototype-resource>
<prototype-resource>
<resource id="r4294967291">
<name>Group 1</name>
<type>Group</type>
</resource>
</prototype-resource>
<top-resource idref="r-1"/>
<resource id="r-1">
<type>Group</type>
<child-resource idref="r1"/>
<child-resource idref="r2"/>
<child-resource idref="r3"/>
<child-resource idref="r4"/>
</resource>
<resource id="r1">
<name>Resource 1</name>
<type>Staff</type>
</resource>
<resource id="r2">
<name>家鸣</name>
<type>Staff</type>
</resource>
<resource id="r3">
<name></name>
<type>Staff</type>
</resource>
<resource id="r4">
<name></name>
<type>Staff</type>
</resource>
<top-task idref="t-1"/>
<task id="t-1">
<type>group</type>
<child-task idref="t1"/>
<child-task idref="t2"/>
<child-task idref="t3"/>
<child-task idref="t4"/>
<child-task idref="t6"/>
<child-task idref="t5"/>
<child-task idref="t7"/>
<child-task idref="t8"/>
</task>
<task id="t1">
<title>数据导入导出</title>
<effort>28800</effort>
<max-estimate>115200</max-estimate>
<effort-done>28800</effort-done>
<start-constraint-date>2014-02-12T00:00:00.000Z</start-constraint-date>
<style>
<value key="font-fill">
<color r="0.299775" g="0.436444" b="1"/>
</value>
</style>
<assignment idref="r2"/>
<start-no-earlier-than>2014-02-12T00:00:00.000Z</start-no-earlier-than>
</task>
<task id="t2">
<title>undo/redo</title>
<effort>57600</effort>
<min-estimate>28800</min-estimate>
<max-estimate>102600</max-estimate>
<effort-done>57600</effort-done>
<start-constraint-date>2014-02-12T00:00:00.000Z</start-constraint-date>
<style>
<value key="font-fill">
<color r="0.299775" g="0.436444" b="1"/>
</value>
</style>
<assignment idref="r3"/>
<assignment idref="r4"/>
<start-no-earlier-than>2014-02-12T00:00:00.000Z</start-no-earlier-than>
</task>
<task id="t3">
<title>layout</title>
<effort>27900</effort>
<min-estimate>27000</min-estimate>
<max-estimate>28800</max-estimate>
<effort-done>27900</effort-done>
<start-constraint-date>2014-02-11T00:15:00.000Z</start-constraint-date>
<style>
<value key="font-fill">
<color r="0.299775" g="0.436444" b="1"/>
</value>
</style>
<assignment idref="r3"/>
<start-no-earlier-than>2014-02-11T00:15:00.000Z</start-no-earlier-than>
</task>
<task id="t4">
<title>拖放,改变子树</title>
<effort>57600</effort>
<min-estimate>28800</min-estimate>
<start-constraint-date>2014-02-13T00:00:00.000Z</start-constraint-date>
<assignment idref="r2"/>
<start-no-earlier-than>2014-02-13T00:00:00.000Z</start-no-earlier-than>
</task>
<task id="t5">
<title>添加icon</title>
<effort>86400</effort>
<min-estimate>28800</min-estimate>
<start-constraint-date>2014-02-13T00:00:00.000Z</start-constraint-date>
<assignment idref="r3"/>
<start-no-earlier-than>2014-02-13T00:00:00.000Z</start-no-earlier-than>
</task>
<task id="t6">
<title>ui美化</title>
<effort>55800</effort>
<min-estimate>28800</min-estimate>
<max-estimate>57600</max-estimate>
<start-constraint-date>2014-02-17T00:00:00.000Z</start-constraint-date>
<assignment idref="r2"/>
<assignment idref="r3"/>
<start-no-earlier-than>2014-02-17T00:00:00.000Z</start-no-earlier-than>
</task>
<task id="t7">
<title>官网</title>
<effort>115200</effort>
<min-estimate>28800</min-estimate>
<start-constraint-date>2014-02-18T00:00:00.000Z</start-constraint-date>
<assignment idref="r2"/>
<assignment idref="r3"/>
<start-no-earlier-than>2014-02-18T00:00:00.000Z</start-no-earlier-than>
</task>
<task id="t8">
<title>提测 </title>
<type>milestone</type>
<completion-percentage>1</completion-percentage>
<start-constraint-date>2014-02-20T00:45:00.000Z</start-constraint-date>
<start-no-earlier-than>2014-02-20T00:45:00.000Z</start-no-earlier-than>
</task>
<critical-path root="-1" enabled="false" resources="false">
<color r="1" g="0.5" b="0.5"/>
</critical-path>
</scenario>
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<omniplan xmlns="http://www.omnigroup.com/namespace/OmniPlan/v2">
<window x="1923" y="4" w="1920" h="1054">
<editing-scenario>mFlQ8Rl4Gch</editing-scenario>
<view>task</view>
<change-tracking/>
<draw-folded/>
<status-display>basic</status-display>
<task-view>
<split-view-divider-position>306</split-view-divider-position>
<outline x="0" y="0" w="306" h="935">
<column name="Violations" width="20"/>
<column name="Notes" width="20"/>
<column name="Title" width="191"/>
<column name="Effort" width="70"/>
<selected-items-at-filter-time idrefs="t9 t4 t7 t2 t5 t8 t3 t6"/>
</outline>
<gantt-view x="-26" y="0" w="1598" h="935">
<view-mode>actual</view-mode>
<dependency-lines/>
<constraints/>
<show-project-end/>
<task-bar-label task-type="group" position="left">
<key/>
</task-bar-label>
<task-bar-label task-type="group" position="center">
<key/>
</task-bar-label>
<task-bar-label task-type="group" position="right">
<key>Assigned</key>
</task-bar-label>
<task-bar-label task-type="milestone" position="left">
<key/>
</task-bar-label>
<task-bar-label task-type="milestone" position="center">
<key/>
</task-bar-label>
<task-bar-label task-type="milestone" position="right">
<key>Assigned</key>
</task-bar-label>
<task-bar-label task-type="task" position="left">
<key/>
</task-bar-label>
<task-bar-label task-type="task" position="center">
<key/>
</task-bar-label>
<task-bar-label task-type="task" position="right">
<key>Assigned</key>
</task-bar-label>
<scale scale-name="Automatic" full-day-width="300">
<selected/>
</scale>
<scale scale-name="Day" full-day-width="1215"/>
<scale scale-name="Hour" full-day-width="65880"/>
<scale scale-name="Minute" full-day-width="64800"/>
<scale scale-name="Month" full-day-width="34.5"/>
<scale scale-name="Quarter" full-day-width="9.6"/>
<scale scale-name="Week" full-day-width="162"/>
<scale scale-name="Year" full-day-width="2.3625"/>
</gantt-view>
</task-view>
<resource-view>
<split-view-divider-position>306</split-view-divider-position>
<outline x="0" y="0" w="291" h="935">
<column name="IM" width="20"/>
<column name="Notes" width="20"/>
<column name="Type" width="49"/>
<column name="Resource" width="135"/>
<column name="#" width="75"/>
</outline>
<timeline x="-65" y="0" w="1570" h="935">
<show-project-end/>
<task-bar-label task-type="group" position="left">
<key>Title</key>
</task-bar-label>
<task-bar-label task-type="group" position="center">
<key/>
</task-bar-label>
<task-bar-label task-type="group" position="right">
<key/>
</task-bar-label>
<task-bar-label task-type="milestone" position="left">
<key>Title</key>
</task-bar-label>
<task-bar-label task-type="milestone" position="center">
<key/>
</task-bar-label>
<task-bar-label task-type="milestone" position="right">
<key>Assigned</key>
</task-bar-label>
<task-bar-label task-type="task" position="left">
<key>Title</key>
</task-bar-label>
<task-bar-label task-type="task" position="center">
<key/>
</task-bar-label>
<task-bar-label task-type="task" position="right">
<key/>
</task-bar-label>
<scale scale-name="Automatic" full-day-width="300">
<selected/>
</scale>
<scale scale-name="Day" full-day-width="1215"/>
<scale scale-name="Hour" full-day-width="65880"/>
<scale scale-name="Minute" full-day-width="64800"/>
<scale scale-name="Month" full-day-width="34.5"/>
<scale scale-name="Quarter" full-day-width="9.6"/>
<scale scale-name="Week" full-day-width="162"/>
<scale scale-name="Year" full-day-width="2.3625"/>
</timeline>
</resource-view>
<calendar>
<split-view-divider-position>290</split-view-divider-position>
<outline x="0" y="0" w="275" h="900">
<column name="IM" width="20"/>
<column name="Notes" width="20"/>
<column name="Type" width="49"/>
<column name="Resource" width="139"/>
<column name="Custom Work Week" width="20"/>
<column name="Schedule Exception" width="20"/>
</outline>
</calendar>
</window>
<project>
<next-task-id>10</next-task-id>
<next-resource-id>5</next-resource-id>
<scenario id="mFlQ8Rl4Gch" name="Actual" filename="Actual.xml"/>
<date-display dates="true" times="true" seconds="false"/>
<numbering-style>wbs</numbering-style>
<critical-path-slack>0</critical-path-slack>
<currency-format>CN¥1,234.56</currency-format>
<duration-format hours-per-day="8" hours-per-week="40" hours-per-month="160" hours-per-year="1920" hours="true" days="true" weeks="true"/>
<effort-format hours-per-day="8" hours-per-week="40" hours-per-month="160" hours-per-year="1920" hours="true" days="true" weeks="true"/>
<base-style>
<style/>
</base-style>
<column-title-style>
<style>
<value key="font-weight">9</value>
<value key="paragraph-alignment">center</value>
</style>
</column-title-style>
<note-style>
<style>
<value key="font-family">Helvetica</value>
<value key="font-fill">
<color w="0.334677"/>
</value>
<value key="font-size">11</value>
</style>
</note-style>
<standard-task-style>
<style/>
</standard-task-style>
<overdue-task-style>
<style/>
</overdue-task-style>
<completed-task-style>
<style/>
</completed-task-style>
<group-task-style>
<style>
<value key="font-weight">9</value>
</style>
</group-task-style>
<milestone-task-style>
<style/>
</milestone-task-style>
<resource-style>
<style/>
</resource-style>
<not-editable-style>
<style>
<value key="font-fill">
<color w="0.334677"/>
</value>
</style>
</not-editable-style>
<subscribe-refresh>0</subscribe-refresh>
<leveling>
<constrains-completion-date/>
</leveling>
<page-adornment>
<master-page-headers>
<header location="left">
<text>
<p>
<run>
<lit><cell variable="OPDocumentTitleVariableIdentifier"/></lit>
</run>
</p>
</text>
</header>
<header location="right">
<text>
<p>
<run>
<lit><cell variable="OPPrintJobTimestampVariableIdentifier"/></lit>
</run>
</p>
</text>
</header>
<footer location="left">
<text>
<p>
<run>
<lit><cell variable="OPDocumentFilenameVariableIdentifier"/></lit>
</run>
</p>
</text>
</footer>
<footer location="right">
<text>
<p>
<run>
<lit><cell variable="OPPageNumberVariableIdentifier"/></lit>
</run>
</p>
</text>
</footer>
</master-page-headers>
</page-adornment>
</project>
</omniplan>
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<changelog xmlns="http://www.omnigroup.com/namespace/OmniPlan/v2">
<version>2.1</version>
<task-change-set user="campaign" date="2014-02-11T09:53:33.500Z" timestamp="2014-02-11T09:53:33.500Z">
<change idref="t2" to="t-1" to-position="1" resolved="yes">
<change idref="t2" attribute="effort" type="real" from="28800" to="57600"/>
<change idref="t2" attribute="internalAssignments" type="string" from="" to="3; 4"/>
<change idref="t2" attribute="noEarlierThanConstraintDate" type="date" to="2014-02-12T00:00:00.000Z"/>
<change idref="t2" attribute="title" type="string" to="undo/redo"/>
</change>
<change idref="t3" to="t-1" to-position="2" resolved="yes">
<change idref="t3" attribute="internalAssignments" type="string" from="" to="3"/>
<change idref="t3" attribute="title" type="string" to="layout"/>
</change>
<change idref="t4" to="t-1" to-position="3" resolved="yes">
<change idref="t4" attribute="effort" type="real" from="28800" to="57600"/>
<change idref="t4" attribute="internalAssignments" type="string" from="" to="2"/>
<change idref="t4" attribute="noEarlierThanConstraintDate" type="date" to="2014-02-17T00:00:00.000Z"/>
<change idref="t4" attribute="title" type="string" to="拖放,改变子树"/>
</change>
<change idref="t5" to="t-1" to-position="4" resolved="yes">
<change idref="t5" attribute="effort" type="real" from="28800" to="86400"/>
<change idref="t5" attribute="internalAssignments" type="string" from="" to="3"/>
<change idref="t5" attribute="noEarlierThanConstraintDate" type="date" to="2014-02-13T00:00:00.000Z"/>
<change idref="t5" attribute="title" type="string" to="添加icon"/>
</change>
<change idref="t6" to="t-1" to-position="5" resolved="yes">
<change idref="t6" attribute="effort" type="real" from="28800" to="55800"/>
<change idref="t6" attribute="internalAssignments" type="string" from="" to="2; 3"/>
<change idref="t6" attribute="noEarlierThanConstraintDate" type="date" to="2014-02-19T00:00:00.000Z"/>
<change idref="t6" attribute="title" type="string" to="ui美化"/>
</change>
<change idref="t7" to="t-1" to-position="6" resolved="yes">
<change idref="t7" attribute="effort" type="real" from="28800" to="115200"/>
<change idref="t7" attribute="internalAssignments" type="string" from="" to="2; 3"/>
<change idref="t7" attribute="noEarlierThanConstraintDate" type="date" to="2014-02-20T00:00:00.000Z"/>
<change idref="t7" attribute="title" type="string" to="官网"/>
</change>
<change idref="t1" attribute="title" type="string" from="Task 1" to="数据导入导出" resolved="yes"/>
<change idref="t1" attribute="effort" type="real" from="28800" to="86400" resolved="yes"/>
<change idref="t1" attribute="internalAssignments" type="string" from="" to="2" resolved="yes"/>
<change idref="t1" attribute="noEarlierThanConstraintDate" type="date" to="2014-02-12T00:00:00.000Z" resolved="yes"/>
</task-change-set>
<task-change-set user="campaign" date="2014-02-12T09:05:14.521Z" timestamp="2014-02-12T09:05:14.521Z">
<change idref="t8" to="t-1" to-position="7">
<change idref="t8" attribute="effort" type="real" from="28800" to="0"/>
<change idref="t8" attribute="isSplittableTask" type="real" from="1" to="0"/>
<change idref="t8" attribute="noEarlierThanConstraintDate" type="date" to="2014-02-24T01:00:00.000Z"/>
<change idref="t8" attribute="percentCompleteForMilestone" type="real" to="0"/>
<change idref="t8" attribute="taskType" type="real" from="0" to="1"/>
<change idref="t8" attribute="title" type="string" to="提测"/>
</change>
<change idref="t3" attribute="effort" type="real" from="28800" to="27900"/>
<change idref="t3" attribute="noEarlierThanConstraintDate" type="date" to="2014-02-11T00:15:00.000Z"/>
</task-change-set>
<task-change-set user="campaign" date="2014-02-12T10:24:17.663Z" timestamp="2014-02-12T10:24:17.663Z">
<change idref="t6" from="t-1" from-position="5" to="t-1" to-position="4"/>
<change idref="t1" attribute="effort" type="real" from="86400" to="28800"/>
<change idref="t1" attribute="styleDict" type="dict" to="{
&quot;font-fill&quot; = {
b = 1;
g = &quot;0.436444&quot;;
r = &quot;0.299775&quot;;
};
}"/>
<change idref="t1" attribute="internalEffortDone" type="real" from="0" to="28800"/>
<change idref="t2" attribute="styleDict" type="dict" to="{
&quot;font-fill&quot; = {
b = 1;
g = &quot;0.436444&quot;;
r = &quot;0.299775&quot;;
};
}"/>
<change idref="t2" attribute="internalEffortDone" type="real" from="0" to="57600"/>
<change idref="t3" attribute="styleDict" type="dict" to="{
&quot;font-fill&quot; = {
b = 1;
g = &quot;0.436444&quot;;
r = &quot;0.299775&quot;;
};
}"/>
<change idref="t3" attribute="internalEffortDone" type="real" from="0" to="27900"/>
<change idref="t4" attribute="noEarlierThanConstraintDate" type="date" from="2014-02-17T00:00:00.000Z" to="2014-02-13T00:00:00.000Z"/>
<change idref="t6" attribute="noEarlierThanConstraintDate" type="date" from="2014-02-19T00:00:00.000Z" to="2014-02-17T00:00:00.000Z"/>
<change idref="t7" attribute="noEarlierThanConstraintDate" type="date" from="2014-02-20T00:00:00.000Z" to="2014-02-18T00:00:00.000Z"/>
<change idref="t8" attribute="title" type="string" from="提测" to="提测 "/>
<change idref="t8" attribute="percentCompleteForMilestone" type="real" from="0" to="1"/>
<change idref="t8" attribute="noEarlierThanConstraintDate" type="date" from="2014-02-24T01:00:00.000Z" to="2014-02-20T00:45:00.000Z"/>
</task-change-set>
<resource-change-set user="campaign" date="2014-02-11T09:53:33.500Z" timestamp="2014-02-11T09:53:33.500Z">
<change idref="r2" to="r-1" to-position="1" resolved="yes">
<change idref="r2" attribute="name" type="string" to="家鸣"/>
</change>
<change idref="r3" to="r-1" to-position="2" resolved="yes">
<change idref="r3" attribute="name" type="string" to="潘"/>
</change>
<change idref="r4" to="r-1" to-position="3" resolved="yes">
<change idref="r4" attribute="name" type="string" to="战"/>
</change>
</resource-change-set>
<metadata-change-set user="campaign" date="2014-02-11T09:53:33.500Z" timestamp="2014-02-11T09:53:33.500Z">
<change idref="m1" attribute="fixedDate" type="date" from="2007-01-01T20:00:00.000Z" to="2014-02-11T00:00:00.000Z" resolved="yes"/>
</metadata-change-set>
</changelog>
测试要点
1. 操作模式
1.1 常规模式
1.1.1 只在该模式允许的操作:`节点选择`、`创建新节点`、`拖动到父节点`
1.2 拖动模式
1.1.2 只在该模式允许的操作:`画布拖放`
1.3 文本编辑模式
1.1.3 只在该模式允许的操作:`文本框选`、`文本编辑`
1.4 模式切换
1.4.1 常规模式下,在单个选中的节点上点击文字区域(多选的情况下不算),进入文本编辑模式,并且光标定在点击的位置上
1.4.2 常规模式下,在任意节点上双击文字区域,进入文本编辑模式,并且文本被选中
1.4.3 常规模式下,创建了新节点的时候,进入文本编辑模式,新节点文本被选中
1.4.4 常规模式下,有唯一选中的节点,按下字母和数字的按键会进入文本编辑模式,并且文字变为刚输入的字母或数字,或是弹出输入法框
1.4.5 文本编辑模式下,按 Tab 和 Enter 退出文本编辑模式,回到常规模式
1.4.6 文本编辑模式下,点击非文本区域的任何位置,退出文本编辑模式,回到常规模式
1.4.7 常规模式下,按 Space 或点击 UI 上的拖动图标进入拖动模式
1.4.8 拖动模式下,按 Space 或点击 UI 上的拖动图标退出拖动模式,回到常规模式
2. `节点选择` 交互
2.1 该交互只在常规模式下有效
2.2 点击任意未被选中的节点,会使其选中
2.3 点击空白处,会取消节点的选择
2.4 按着 Shift 键,点击的节点会切换选择状态
2.5 在空白处按下鼠标并移动10像素后,会显示选框;当选框跟节点有重合的时候,节点会被选中,没有重合的节点不被选中
2.6 按键盘方向键的时候:
2.6.1 对于一个节点“方向”的定义为:
2.6.1.1 以节点为坐标原点的直角坐标系顺时针旋转45度,第一象限为“上”,第二象限为“左”,第三象限为“右”,第四象限为“下”
2.6.2 假如当前没有节点被选中,任何方向键都将选中根节点
2.6.3 假如当前有唯一选中的节点,将导航至指定方向区域的最近的节点
2.6.4 假如有多个选择的节点,以选择顺序第一个节点为参照,导航至其指定方向区域的最近的节点
2.6.5 假如被导航的区域中没有节点,选区保持不变
3. `创建新节点` 交互
3.1 目标节点定义为:
3.1.1 如果有唯一选中的节点,其为目标节点
3.1.2 如果有多个选中的节点,则首个(时间上)被选中的节点为目标节点
3.2 如果存在目标节点:
3.2.1 按下键盘的 Tab 键,会创建一个目标节点的子节点,并且新节点在唯一选中状态,模式变为文本编辑模式
3.2.2 按下键盘的 Enter 键,并且目标节点不是根节点,会创建一个目标节点的兄弟节点(紧邻的位置上),并且新节点在唯一选中,模式变为文本编辑模式
3.3 如果存在目标节点:
3.3.1 创建子节点的 UI 是可用的,否则不可用
3.3.2 如果目标节点是根节点,则创建兄弟节点的 UI 是不可用的,否则是可用的
3.4 该交互只在常规模式下有效
4. `拖放到父节点` 交互
4.1 该交互只在常规模式下有效
4.2 在任意节点上 mousedown,并且移动10像素以上,确定拖放对象:
4.2.1 如果节点没被选中,则节点被选中,并且作为拖动对象
4.2.2 如果节点是被选中的,则所有选中的节点作为拖放对象
4.3 排除无效拖放对象:
4.3.1 如果存在一个拖放对象A和另一个拖放对象B,A是B的祖先,则B被排除
4.3.2 排除后剩余的对象成为真正的拖放对象
4.4 拖放对象表示为一个拖放图形,并且显示拖放对象的数量
4.5 拖放图形随鼠标移动,并且每次移动会判断是否遇到拖放目标:
4.5.1 拖放对象本身以及整棵子树都不能作为拖放目标
4.5.2 如果拖放图形和拖放目标的图形有重合,拖放目标会高亮,否则不会高亮
4.6 如果在遇到拖放目标的时候释放鼠标(mouseup),会让拖放对象成为拖放目标的子节点,并且:
4.6.1 保持之前拖放目标的选中状态
4.6.2 保证拖放目标的顺序与拖放之前保持一致
5. `画布导航` 交互
5.1 该交互只在拖动模式下有效
5.2 在任意位置鼠标按下(mousedown)之后画布可以随鼠标移动
5.3 鼠标释放(mouseup)之后画布不再随鼠标移动
5.4 按下方向键会让画布用动画朝反方向移动一定的距离
6. `画布缩放` 交互
6.1 在非文本编辑模式下,点击 `+` 和 `-` 分别可以拉近视野(放大画布)和拉远视野(缩小画布)
6.2 在任意模式下,使用鼠标滚轮可以缩放视野
6.2.1 往上滚动拉近视野
6.2.3 往下滚动拉远视野
6.3 在任意模式下,UI 上的 zoom-in 和 zoom-out 分别可以拉近视野和拉远视野
6.4 视野拉远和拉近都有最值,不能无限操作;当每个操作不可用的时候,UI 上的按钮呈不可用状态
7. `文本框选` 和 `文本编辑` 和默认行为一致即可
8. `字体样式` 功能
8.1 该功能在 `拖放模式` 下不可用
8.2 包括的子功能:
8.2.1 加粗
8.2.2 斜体
8.2.3 字体
8.2.4 字号
8.2.5 颜色
8.3 所有的子功能以节点为单位设置和读取
8.4 对于选中的节点在 UI 上应该反映当前的样式状态
8.5 UI 上设置样式针对所有选中的节点生效
8.6 没有选中节点的时候,UI 上的功能按钮应该呈不可用状态
9. `子节点收缩功能`
9.1 在一级节点及以上,如果存在子节点,显示收缩功能的图标,否则不显示
9.2 收缩图标显示 `-` 的时候,子节点显示;收缩图标显示 `+` 的时候,子节点不显示;点击图标切换这两种状态
10. `节点删除功能`
10.1 目标节点的计算方法同拖放到父节点的拖放目标的计算方法
10.2 如果目标节点包含根,把根从目标节点中移除
10.3 如果包含删除目标,删除操作的 UI 是可用的,否则是不可用的
10.4 把所有目标节点从其父节点中移除
11. `标签功能`
11.1 对于选中的节点,点击优先级标签和完成度标签可以在节点文本前添加标签图形
11.2 对于同一类的标签,只能添加一个标签
11.3 选中单个节点的时候,标签面板显示选中节点的当前标签;
11.4 多选的情况下,如果标签一致以任意一个节点为准来显示状态;标签不一致显示所有包含的状态
12. `导入导出功能`
12.1 导出数据应该能下载一个文件
12.2 下载的文件拖动到画布上,可以还原原来的数据
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment