前面讨论过,节点的名字在树表和细节表中都保存的有。当用户通过点击treeview节点的标签来改节点名字的时候,如果不是多挂节点,就只需要把树表、细节表、treeview控件上node的text改掉,另外给同名树发消息改同节点(已存在的话)的名字就行了。如果是多挂节点的话,就得费点口舌讨论一哈。
1、改多挂节点的名字涉及的诸多细节@H_403_7@
如果用户要改多挂节点的名字,那就问问她是想改该节点的所有其它挂的名字还是只改它自己的名字。
(1)如果是只改自己的名字(我们以后不妨称这种只改自己不改同挂的情形为“独改”)。那需要在细节表里添个新节点,原来细节的多挂计数减一。具体步骤如下
a)首先改细节表的多挂计数,减一;
b)然后遍历树表,找到所有同挂,发同名树(含自己)tag更改消息(多挂计数位减一)
c)其次在细节表里添新纪录,名字用新名字,多挂计数为1,其他照抄原细节;
d)改树表上节点的名字和细节ID
e)发同树同节点改名改tag消息,在消息处理过程中改树控件上的标签和tag,包括自己(这里为了编程方便,在最初的afterlabeledit事件过程里把cancel设为true)。
(2)如果是要改所有的挂的地方的名字,那就需要
a)首先改细节的名字;
b)其次遍历树表,找到其它同挂,在树表里改同挂(包括自己)的名字.
c)同时对每个同挂发同树改名消息,在消息处理过程中改已存在节点的名字。
(3)如果是同树独改。那需要在细节表里添个新节点,同树多挂和异树多挂的多挂计数做相应改动。具体步骤如下
a)首先细节表里添新纪录,名字用新名字,其他照抄原细节;
b)然后遍历树表,对所有同树同挂,在树表里改名字,发同名树(含自己)tag/text更改消息(多挂计数位等于同树同挂计数、细节ID为新的细节ID、标签为新名字)
c)其次然后遍历树表,对所有异树同挂,发同树同节点改tag消息,多挂计数位改为原多挂计数减去同树多挂计数。
d)最后把细节表里的新细节的多挂计数改为同树同挂计数,老细节的多挂计数改为原多挂计数减去同树多挂计数
2、改节点名字的测试用例:
通过以上的讨论,改名字的测试用例需要包括如下情况:
(0)拒绝改名的情况:根节点;新名字与其他名字重名。
(1)非多挂节点改名字。要分别试试多树已存在同节点、多树未展开同节点的情况。
a)检查细节表里的名字是否改了;
b)检查树表里的名字是否改了.
c)检查同树上(包括自己)已存在节点的名字是否改了。
(2)多挂节点独改:
a)检查原细节多挂计数是否减一;
b)树上其他同挂节点的多挂计数位是否减1
c)检查新添细节记录的各字段是否正确:名字用新名字,多挂计数为1,其他照抄原细节;
d)检查树表上本节点的名字和细节ID是否正确
e)检查本节点的同挂(包括自己)的名字和tag(新的detailid、多挂计数位1)是否正确
(3)多挂同树独改:
a)检查细节表里原细节多挂计数是否正确:原多挂计数减去同树多挂计数
c)检查细节表里新添细节记录的各字段是否正确:名字用新名字,多挂计数为同树多挂计数,其他照抄原细节;
b)检查树表上异树同挂节点的多挂计数位是否正确:原多挂计数减去同树多挂计数
d)检查树表上同树同挂节点的名字和细节ID和是否正确
e)检查树控件上,同树同挂(包括自己)的名字和tag(新的detailid、多挂计数位为同树同挂)是否正确,异树同挂的tag的多挂标志位是否正确。
(4)多挂节点全改。要试试单树、双树节点已展开、双树节点未展开的情况:
a)检查细节表里的名字是否改了;
c)检查每个同挂(包括自己)的同树上已存在节点的名字是否改了。