带有简化的视图的用户界面组件表示的制作方法

文档序号:6443476阅读:178来源:国知局
专利名称:带有简化的视图的用户界面组件表示的制作方法
技术领域
本技术领域涉及用户界面组件的内部表示。
背景技术
随着计算机的激增,在软件用户界面领域已出现创新。例如,有许多现成的工具使程序员能建立及处理用户界面。此外,用户界面组件现在能放置在如网页或文字处理文档这样的文档中。
用户界面组件能采用许多形式编辑框、列表框、滚动条、选择表、按键等。虽然用户界面组件对用户来说是单个组合项。它实际上在计算机上能表示成许多互相组合的单独的项或子组件。此外,这些子组件的每个本身能从其他子组件合成。以此方式,用户界面组能用作构筑其他更复杂的用户界面组件的构件块。这种方法是有用的,因为管理用户界面的软件(如用户界面的框架软件)在将它们组合成合成组件时能重复使用某些公共组件的定义。
然而,将用户界面组件表示成合成的用户界面组件产生的复杂性是有问题的。例如,新的或非专职的程序员不希望知道合成的用户界面是如何组合的,或甚至不希望知道合成的用户界面原先是合成的。这些程序员在处理合成的用户界面组件时更愿意避免这样的复杂性。诚然,即使有经验的程序员也希望避免处理这样的复杂性。因此有必要设法简化合成的用户界面组件的表示。

发明内容
这里提到能提供一个或多个用户界面组件的表示的简化视图。例如,能选择地展示出在层次表示中表示用户界面组件的某些节点。这些节点能在某些情况下展示出,而在另外情况不展示出,在此示例的方法中能提供简化的表示视图(如不展示出经选择可展示的节点)。
在一个实施例中,当提供用户界面服务时,在用户界面的表示的简化视图上能完成各种操作,例如,在完成操作时,经选择可展示的节点能不展示。
这种方法对不希望熟悉表示的细节的程序员来说是有用的。
例如,多个用户界面的组件能合成可以完成操作的单个合成的单元。合成单元是多个用户界面组件所合成的事实在用户界面组件的表示的简化视图中是明白的。因此一个程序能研究并处理此表示而不用管未展示的节点。结果,程序员能写较简单的代码或标记码。而且,程序员不必完全熟悉底层结构,该底层结构可以包含合成单元的超过一个的节点。
因此,提供简化视图的用户界面服务能提供有力的工具,借此鼓励软件的再使用,且不精通的用户能在基本层上与用户界面组件互动。
从下面参考附图的示例性实施例的详细描述中,另外的特征与优点将变得显而易见。


图1是具有简化视图的用户界面组件的示例性表示的图。
图2是图1的用户界面组件表示的示例性简化视图的图。
图3是具有简化视图的另一个示例性用户界面组件的表示的图。
图4是图3的用户界面组件表示的示例性简化视图的图。
图5是实现用户界面组件的表示的简化视图的示例性方法的流程图。
图6是处理具有用简化视图表示的用户界面组件的定义的示例性方法的流程图。
图7是调用具有如在图6中所处理的简化视图的用户界面组件的定义的示例性方法的流程图。
图8是完成在如在图7中建立的用户界面组件的层次表示上的操作的示例性方法的流程图。
图9是称之为组合框的示例性用户界面组件的屏幕示样。
图10A是如图9所示的组合框的示例性层次表示的图。
图10B是类似于图10的组合框的示例性层次表示的图,并包括示例性封装边界。
图11是如图10所示的组合框的层次表示的示例性简化视图的图。
图12是建立具有经选择可展示的节点的用户界面组件的层次表示的示例性方法的流程图。
图13是对包括将至少一个组件指示作为经选择可展示的组合框的示例性标记码定义。
图14A是对包括将至少一个组件指示为经选择可展示的组合框的示例性程序定义。
图14B是图14A的示例性标记码定义的继续。
图15是如图13或14A和B中定义的组合框的示例性标记码调用。
图16是如图13或14A和B中定义的组合框的示例性程序调用。
图17是实现使用用户界面组件表示的简化视图的操作的示例性方法的流程图。
图18是在完成经简化视图的操作后,具有在简化视图中指定为未展示的适当节点的组合框的层次表示的示例性完整视图的图,如图9。
图19是对应于图18的表示的示例性简化视图的图。
图20A是对用户界面组件经选择可展示的用户节点的另选的表示的图。
图20B是对应于图20A所示的表示的简化视图的图。
图21是使用重复器(repeater)特征的列表框用户界面组件的屏幕示样。
图22是包括重复器的用户界面组件的示例性层次表示的图。
图23是对应于图22的示例性简化视图的图。
图24是用于建立包括如图22的重复器的用户界面组件的层次表示的示例性方法的流程图。
图25是指定为经选择可展示的重复器的示例性标记码调用。
图26是指定为经选择可展示的重复器的示例性程序调用。
图27是指定为经选择可展示的重复器的另一个示例性调用。
图28是不使用重复器特征的列表框的示例性标记码定义,如图21。
具体实施例方式
概况这里描述的各种技术对建立,表示,和处理用户界面组件是有用的。用户界面组件能采用多种形式,如图形按键、编辑框、滚动条、选择列表、下拉菜单、ACTIVEX控件、图象等。用户界面组件能作为程序的一部分(如控制程序的功能)出现,或出现在文档中。这样的用户界面组件的内部表示的简化视图使用户界面组件的编程更简单。例如,一个非专职或不精通的程序员能写与简化视图互动的程序而不必熟悉某些复杂的内容。而且较精通的程序员也希望避免这种复杂性以防止可能的编程错误。
如果希望,这里描述的技术(如简化视图)能作为用户界面服务的部分提供。因此与服务互动的程序可如愿地利用此特征的好处。
在某些实施例中,用户界面组件能定义成具有简化视图的层次表示的组件。能调用这样的定义建立简化视图的层次表示。从而能在此层次表示上完成操作。这样的操作能在层次表示的完整的或简化的视图上完成。
若用户界面组件是包括多个用户界面组件的合成用户界面组件,就能展示一个主(如父)节点,而合成用户界面组件的其他节点能定义成经选择可展示的。当不展示时,该表示的视图显示主节点,而不是其他经选择可展示的节点。因此,对合成的用户界面组件能展示一个节点而不是多个节点。
合成的用户界面组件的完整视图可以是相当复杂的,其中在表示用户界面组件的层次表示中可能有多个节点。希望处理完整视图的程序员面临着要熟悉各种节点和它们的层次关系。如这里所述,程序能替代地使用简化视图完成操作。
在简化的视图中,当在一节点(如在层次中的父或子节点)上完成操作时,未展示的节点能忽略。例如,当将子节点加到一个节点时,未展示的中间节点能忽略或跳过。因此,将子节点加到用户界面的层次表示的简化视图的节点上的请求实际上导致将子节点加到该节点的合适子节点(如表示合成的用户界面组件的一个组件)。这样的方法是有用的,因为增加子节点到简化视图中不需要知道形成用户界面组件的多个节点以及它们互相关系的复杂性。
例如,列表框能表示成层次关系中的多个节点,而且这些节点之一能被指定为接收对于作为子节点的列表框的所显示选择的特定节点。然而,程序员可能不希望熟悉这样的复杂性。
使用简化视图,通过加入作为用户界面组件的主节点的子节点的附加用户选择(如经简化视图)可容易地完成这样的操作。在简化视图中,增加子节点到主节点的请求作为增加子节点到合适节点(如主节点的后代)的请求来实现。以此方式,程序能使用用户界面组件的简化表示完成用户界面组件上的操作。其结果是,程序员不需要熟悉完整视图的复杂性,并能使用较简单的程序码或标记码。
实现简化视图的一个方法是将在表示中的各种节点定义为封装父节点或封装容件。以此方式,一个特定节点能指定为主节点(如封装父节点)而另外的(子)节点能指定为接收子节点的特定节点(如,若在简化视图中父节点具有或将具有子节点)。
实现简化视图的另外方法是以这样的方法定义经选择能展示的节点,即在简化的视图中其子节点被认为是经选择能展示的节点的兄弟的兄弟。
如这里所述,除增加子节点以外,还能完成许多操作以查明或处理用户界面组件表示。此外,能完成在表示中任何节点上的操作,并能得益于简化的视图。
再则,考虑经选择可展示的节点能确定属性值(如对增加的节点)。在某些情况,希望使用与主节点(如忽略经选择可展示的节点),直接(如未展示的)父节点,或其组合相关的属性值。
因为涉及用户界面组件表示的某些细节是隐藏的,对合成的用户界面的主节点和经选择可展示的节点有时形成“封装的”用户界面组件,与简化视图互动的程序或标记语言能避免某些底层表示的复杂性。因此,合成的用户界面组件能由多个用户界面组件组装而不引起使用合成的用户界面的程序的附加复杂性。这样的方法在鼓励用户界面组件的开发者在建立新的界面时再次使用现有的用户界面组件是有用的,并在处理用户界面组件时不会引起不必要的复杂性。此外,支持规定经选择可展示的节点的定义的嵌套。
用户界面组件的示例性层次表示以软件方式表示用户界面组件的一个方法是将其以具有各种节点的分层树的方式存入。图1示出用户界面组件的示例性分层表示100。节点110和120示为有父-子关系。例如,节点110是子组件120的父组件。因为表示100包括超过一个的节点,它有时称为表示“合成的”用户界面组件。在合成的用户界面组件的情况,节点110对应于一个可视的表示,而节点120对应于另一个可视的表示,但是节点110或120中至少一个节点没有可视的图。
在表示100中的一个或多个节点能指定为经选择可展示的。在该例中指定节点120。在提出表示100的简化视图时,经选择可展示的节点120未展示。结果,只展示表示用户界面组件层次表示100的节点的根节点110,因此,所展示的节点110有时称为“主”节点。
包含多个组件的复杂得多的用户界面能以图1示出的方式。每个组件本身能包含未在图1中点击且增加了附加的复杂的层次的其他用户界面组件(如更多的节点,包括选择上可展示的节点)。此外,各种子节点可能是对于其他用户界面组件的表示的主节点。
图1示出用户界面组件的分层表示的完整视图,包括经选择可展示的子节点(如节点120)。然而,当对用户界面组件的表示完成各种操作时可能不希望分层表示100的完整视图。例如,在某些情况与节点120的直接互动可能是不必要的。如果这样,能提出如图2所表示的示例性简化视图200。
示例性简化视图200只示出一个节点210。节点210可以是完整视图的节点110和120的组合表示(如节点120被封装在节点110中),或者简单地是完整视图的节点110的表示。
用户界面组件的另外示例性层次表示图3中示出另外的示例性层次表示300。在此例中,节点310,320和325是表示合成的用户界面组件的节点组330。节点组330中,节点310是主节点,余下的节点320和325定义为经选择可展示的。另一个节点340不是经选择可展示的,且示作为经选择可展示的节点320之一的子节点。表示300包括经选择可展示的节点并在请求完整视图时提供此表示。
对应的简化视图示于图4。当请求简化视图时,经选择可展示的节点320和325未被展示。简化视图400替代地示出节点410(如节点310或节点310,320,和325的组合)和节点340。
现参考图3,一个节点320能指定为存储简化视图的子节点(如节点340)的节点。这样的节点有时称为“容件”节点(如对于封装的节点)。
因此用户界面的相对复杂的表示能如愿地以简单形式表示。对由不关心在层次表示中经选择可展示的节点的用户所写的程序不必要提供这样复杂的用户界面的层次表示的完整视图300。例如,程序员可以不关心有关经选择可展示节点320和325的用户界面组件的存在或确定其功能或表现。然而,程序需要与节点340互动。因此有时希望提供只画出所关心的节点的用户界面的层次表示的简化视图400。
这里描述的技术能应用于具有附加的或更少节点的各种其他表示。
示例性简化视图实现的概况图5示出用于实现用户界面组件的表示的简化视图的示例性方法500(如在用户界面服务中)。在510。定义具有层次表示的用户界面组件。例如该定义能包括多个节点,某些是经选择可展示的。
在定义建立之后,在520能调用它以建立用户界面。例如,通过该定义能建立所定义的用户界面组件的层次表示,并存储之。
在530,可以完成在该表示上的一个或多个操作。这样的操作能通过提供层次表示的简化视图来完成而不展示在表示中经选择可展示的节点。
若希望,能进行定义的调用并完成在该表示上的操作,而不必参考表示的完整视图。因此,程序员能写出程序码或标记码而不必熟悉完整视图的细节。实际上,任何一个图形活动是单独有用的,且不必立刻全部执行或由同一程序完成。
定义具有简化视图的用户界面组件的示例性方法图6示出用于接收具有简化视图的层次表示的用户界面组件的定义的示例性方法。使用如标记语言(如XML或HTML)或编程语言(如Java或C++)这样的各种语言能建立定义。因此,定义就能从程序接收或在标记文档中指定。
在610,接收为用户界面组件的表示而存储的一个或多个节点的指示。例如,能指定用户界面组件(如子组件)。该定义能指示在组件之间的层次关系。这样的定义能包括对形成合成的用户界面组件的各种组件的节点的定义。
在620,接收至少一个经选择可展示节点的指示。若希望,经选择可展示的节点能自动选择而不必在定义中规定。在提供所定义的用户界面组件的表示的简化视图时,经选择可展示的节点未展示。然后在630定义被存储,为以后调用。
调用具有简化视图的所定义的用户界面组件的示例性方法通过调用定义(如由图6示出的方法所定义的)能建立用户界面组件的一个范例。图7示出用于调用具有简化视图的用户界面组件的定义的示例性方法。在710,接收建立用户界面组件的请求。这样的请求能通过程序(如从软件程序)或从标记文档接收。该请求不需要从定义用户界面组件的同一实体接收。
在720,使用用户界面组件的层次表示的定义在用户界面(如对应于形成合成的用户界面组件的用户界面组件)的层次表示中建立合适的节点。若请求表示的完整视图,提供所建立的节点。
在730,适当的节点(如由定义所规定)被指定为经选择可展示的。在请求简化视图如(其中表示用户界面组件的表示的视图)时,这样的经选择可展示的节点未被展示(如未遇到)。
节点在用户界面组件的表示的视图中是否被展示无关于当用户界面组件被呈现时对应的用户界面组件是否在显示设备上显示(或隐藏)。
在具有简化视图的用户界面组件上完成一个操作的示例性方法一旦调用用户界面的定义来建立用户界面组件的层次表示(如图7所示),能完成对该表示的操作。这样的操作既可对该表示的完整视图又可对其简化视图完成。例如在简化视图上完成的操作包括,例如枚举一个节点的子节点,增加子节点到一个节点,去除节点的子节点,和在层次表示中定位。
在图8中示出在用户界面组件的表示的简化示图上完成操作的示例性方法。在810,接收在用户界面组件上(如合成的用户界面组的主节点)完成操作的请求。在820,使用用户界面组件的层次表示的简化视图完成所请求的操作。操作能导致层次表示的修改(如当加入或去除节点),或者该表示可以不改变(如当在节点中枚举或定位)。
例如,使用简化视图枚举一节点的子节点的请求能导致若该子节点被指定为经选择可展示的,就枚举存储在该节点的一个子节点的子节点(或孙节点)。
将一个子节点加到在简化视图中具有经选择可展示的子节点的父节点,能导致该子节点被加到用户组件的表示的完整视图的层次中的适当位置,而用户组件可以是在简化视图中可见的父节点,也可以不是。
因此,在简化视图中似乎子节点直接被加到父节点之下。对调用子节点的操作,能使用用户界面组件的层次表示的定义在层次表示的完整视图中找到加入或找到子节点的适当位置。以此方式,可以书写程序与简化视图互动,而程序员避免必须知道包括隐藏节点和它们在层次中安排的完整视图的细节的麻烦。
关于组合框的示例性实现某些下面的例子描述了有关称为组合框的示例性用户界面组件的各种处理。描述的技术能被应用于任何数目现有或随后将开发的用户接口组件。
示例性组合框用户界面组件图9示出通常称为组合框的示例性用户接口组件905。在此例中,组合框905是包括若干用户界面组件的合成的用户界面组件,它转而又包含用户界面组件。组合框905包含输入框910,下拉按键930,和弹出窗口920。通常,当用户点击下拉按键930时,显示弹出窗口920。在此例中,弹出窗口920包含列表框925(如视觉上不能与弹出窗口920区分)。然而,弹出窗口920能包含另选的或附加的用户界面组件(如下拉菜单)。列表框925也是带有其自己组件的合成的用户界面组件,例如滚动视图926(例如视觉上不能与弹出窗口920区分),它包含格栅面板935和用于使包含在格栅面板935中的列表项940滚动的滚动条945。
在组合框905的示例性图示中,列表框组件925被描绘成视觉上与滚动视图组件926和弹出组件920不能区分。因此,图中示出,弹出窗口920包含列表框组件925,它通过将格栅面板935加到包含在滚动视图926中的空白空间而形成。其他的安排也是可能的。例如,弹出窗口920有可能包含列表框925之外的用户组件。此外,滚动视图926有可能具有格栅面板935以外的组件(如菜单)包含在其空间中。
滚动条945也能表示成包含如滚动按键950,951,和956及滚动指(scrollthumb)960这样组件的合成的用户接口组件。可以使用任何数目的变化替代图形的组合框905。例如,组件可被去除,附加的组件能被加入,或能定义另选的组件。例如,能加入水平的滚动条,帮助用户水平地滚动列表项。
组合框用户接口组件的示例性表示(完整视图)图10A画出在请求完整的视图时需要提供的(如由用户界面服务)组合框的示例性层次表示1000(如图9所示)。如所示,节点被以层次方式安排在树状结构中。
对组合框的主节点在1005处表示成层次的最顶上的节点。组合框的其他组件(如图9中所示)也表示成在层次表示中的节点作为弹出1020,输入框1010,和下拉按键1030。弹出1020被示出包含列表框1025。列表框1025是层次表示的父节点,它进一步包含滚动视图1026。
滚动视图1026本身是在层次表示中的父节点。滚动视图节点1026是到位置保持组件1035,垂直滚动条1030和水平滚动条1040的父节点。如上参考图9看到,在父列表框节点1025和其子组件滚动视图1026之间没有视觉的差别。那是因为列表框1025是通过将格栅面板组件1045作为位置保持组件节点1035的子节点加入而形成。然而,在位置保持组件下能加入其他子节点以便结合其他用户组件使用滚动视图1026,形成其他更复杂的用户界面组件。最终,列表项1050A,1050B,和1050C是格栅面板1045的子节点。
此例子示出,如何能从其他用户界面组件构造成合成的用户界面组件,并然后由许多节点表示。例如,列表框的合成用户界面组件能定义为列表框节点1025和其后代节点。为了构造组合框合成用户界面组件,在组合框节点1005下组合输入节点1010,弹出节点1020,和按键节点1030。最后,在弹出节点1020下能插入(如借助标记或通过编程)列表框的合成的用户界面组件(如列表框节点1020和它的后代)。简单的参考列表框的合成用户界面组件能导致列表框1025及其后代的建立。实际上,关于列表项(如节点1050A,1050B,和1050C)的节点可以不包括在列表框用户界面组件的定义之中。
在例子中示出的节点的多重嵌套能增加定义和处理用户界面组件的复杂性,虽然组合框表示是相当复杂,但还能实现更复杂的例子。但是该技术也能应用于更简单的例子。
在该例子中,包含节点1010,1020,1025,1026,1030,1031A,1031B,1033,1034A,1034,1035,1040,1041A,1041B,1043,1044A,1044B,和1045的节点组1060被定义为经选择可展示的。当显示该表示的简化示图时,经选择可展示的节点未被展示。
希望有用户界面组件的层次表示的简单视图。例如,可希望增加附加的列表项而不必处理该层次表示的相对复杂性(如增加列表项作为子节点)。
组合框用户界面组件的示例性表示(简化视图)虽然合成的用户界面组件能包括复杂的多个节点,能希望提供用户界面组件的层次表示的简化视图。图11示出当请求的是组合框的简单视图(如图9的组合框)时所提供的示例性层次表示1100(如对应于图10A的表示1000)。在此例子中,列表项的节点1050A,1050B,和1050C被示出为组合框的主节点1105的直接子节点。未显示的其他节点有时称为由组合框节点1105“封装”的。使用简化的视图,涉及处理列表项的程序能将列表项看作主节点1110的子节点,并不需要包含与合成的用户界面组件中的其他组件有关的逻辑。组合框的用户界面组件的定义能包含足够的信息,借此,对简化视图的操作能转换成对层次表示的完整视图的适当操作。
具有简化示视图的用户界面组件的示例性嵌套这里描述的安排也能支持嵌套。在嵌套中,可有在其他用户界面组件中具有经选择可展示的节点的用户界面组件,而这些其他用户界面组件本身具有经选择可展示的节点。这样的嵌套能以各种方式解决。例如,虽然在合成的用户界面组件中的某些节点可被指定为展示的(如在简单视图中可见),但若用户界面组件是另外的合成的用户界面组件的一部分(如封装在其中),由于这些节点在表示指定为经选择可展示的封装合成的用户界面组件的层次的区域中(如借助封装合成的用户界面组件)。这些节点可认为是经选择可展示的(如在简单视图中不可见)。
此外,这样的嵌套支持相关性。例如,根据在其上作出完成操作的请求的节点,节点可以认为或也可以不认为是经选择可展示的。换言之,在封装在另外的用户界面组件的节点上完成操作的请求可能会导致当完成关于封装用户界面组件的操作时,有视图示出看不到的节点。
图10B示出如图10A表示的组合框的示例性层次表示。为简洁起见忽略了某些与滚动条有关的节点。
在该例中,滚动视图节点1026是包括滚动视图节点1026,容件组件节点1035,和各种滚动条节点(如节点1030)的合成用户界面组件的主节点。对于在简化视图中在滚动视图节点1026上完成的操作,合成的用户界面组件的其他节点可认为是选择可展示的(如被跳过的)并由滚动视图节点1026封装。例如,在简单视图中加一个子节点到滚动视图节点1026的请求将导致子节点被加到容件组件节点1035中。以此方式确定封装的边界1090。
类似地,列表框节点1025是包括滚动视图节点1026(如在那里封装的节点)和格栅面板节点1045的合成的用户界面组件的主节点。对于在列表框节点1025上完成的操作,合成的用户界面组件的其他节点被认为是选择上可展示的(如被跳过的)并由列表框节点1025封装。以此方式定义封装的边界1080。
此外,组合框节点1005是包括输入节点1010,弹出节点1020,按键节点1030,和列表框节点1025(和由此封装的节点)的合成用户界面的主节点。对于在组合框节点1005上完成的操作,合成用户界面组件的其他节点被认为是经选择可展示的(如被跳过的),并由组合框节点1005封装。以此方式,确定封装边界1070。因为列表框节点1025本身是封装边界的一部分,实际的封装边界1095是起作用的。换言之,对于在组合节点1005上完成的操作,除组合框节点1005和列表项节点1050A-C以外,所示出的节点被认为是选择上可展示的(如被跳过的)并由组合框1005封装。例如,在简化视图中加一个子节点到组合框节点1005的请求将导致子节点被加到格栅面板节点1045。
表示具有简化视图的用户界面组件的示例性方法能使用各种方法提供简化视图。一种方法是将节点的各种属性存入用户界面组件的表示中。下述例子描述使用属性(如“封装的父辈”和“封装容件”)指定在表示上哪个节点,是经选择可展示的。
通过将一个节点的适当属性(如“封装的父辈”)设定为TRUE(真),在层次中在该节点之下的节点被指定为经选择可展示的(如在简化图中未展示)。
如上所述,这样的节点有时称为“主”节点。此外,若在层次中在主节点之下的一个特定节点具有设定为真的适当属性(如“封装容件”),该特定节点的子节点被指定为不是经选择可展示的(如在简化视图中展示)。在此情况,对于简化视图的目标来说该特定节点的子节点认为是主节点的子节点。所以,若子节点经简化视图加到主节点,它们实际上作为具有设定成真的属性(如“封装容件”)的特定节点的子节点被加入。
如参照图10B所述,能支持嵌套。在此例中,在封装边界顶部的节点(如主节点)能设定合适的属性(如“封装父辈”属性),而在封装边界底部的节点能设定合适的属性(如“封装容件”属性)。以此方法,封装边界能通过属性设定确定。
图12示出示例性方法1200,用于通过指定在用户界面组件的层次表示中各节点的各种属性的值来表示具有简化视图的用户界面组件。层次表示的节点具有与经选择展示该节点本身,它的子辈,或它的父辈相关的属性。通过设定这样的属性,能表示具有简化视图的用户界面组件,且通过简化视图在该表示上能完成操作。
在1210,用户界面的层次表示的至少一个节点被选作主节点(如它封装选择上未展示的节点)。在1220,在选定节点上的封装父辈(Is EncapsulatingParent)属性设定为“真”。在1230,主节点的后辈被选作对于在简化视图中主节点的任何子辈(如,现在出现或以后加入的)的容件。然后在1240,后辈节点的封装容件(IsEncapsulating Container)属性设定为“真”。
通过如例子中解释地设置属性,容件和在主节点和容件之间的任何中间后辈(如子辈)被确定为经选择可展示的(如跳过简化视图或“封装”在父辈中)。在容件下的子节点在简化视图中被展示(如可见)。
在某些安排中,不再有任何子组件。在这样情况能设定叶子节点的适当属性。因此,当子节点经简化视图被加时,它们放在叶子节点之下。
组合框的示例性标记码定义能以各种方法确定具有其表示的简化视图的用户界面组件。一个方法是通过标记语言(如HTML或XML),它能被处理并存入,为以后调用,图13示出以XML编写的带有简化视图(如图11所示)的组合框的示例性定义。
在建立定义的组合框的范例时,对层次表示的各个节点能设定适当的属性以达到希望的简化视图。定义层次表示的各种节点的属性的方案适应于在除标记语言以外的其他类型语言中使用。
在该例子中达到了嵌套。图13的定义能导致如图10B中示出的安排。
组合框的示例性程序定义具有简化视图的用户界面组件也能用程序定义(如以如C++或Java这样的编程语言)。例如,图14A和14B示出带有简化视图的组合框的层次表示的程序定义。
图13的标记码定义和图14A和14B的程序定义均示出定义成具有包含用于容纳在简化视图中展示的组合框的子辈(即列表项)的列表框组件的弹出组件的组合框。列表框组件(是合成控件本身)还定义成具有包含用于容纳在简化视图中展示的列表框的子辈(即列表项)的格栅面板的滚动视图组件。
在程序定义的例子中也能再次达到嵌套。图14A和图14B的定义能导致图10B中示出的安排。因此,合成用户界面组件(如组合框)通过组装各种用户界面组件来定义,每个组件能具有用于经选择可展示的节点的规定。在组装成合成用户界面组件时,嵌套能以下述方法处理,当在外层(如封装)用户界面组件操作时,关于在封装的用户界面组件中如何定义经选择可展示的节点的细节保持透明。
组合框定义的示例性标记码调用能调用用户界面组件的定义(如图13和14中示出)以建立用户界面组件的表示,包括任何在简化视图中未展示的经选择可展示的节点。这样的调用能以各种方法达到(如经标记语言或通过程序)。
图15中示出以XML写的定义(如图13和14中示出)的示例性调用1500。通过在1510包括了标记“<COMBO BOX>”,调用采用了以前建立的组合框的定义,它方便了组合框的层次表示的简化视图。如例子所示,在调用部分上仅有的其他工作是规定列表项1520,而不必具有组合框的完整层次表示的任何知识。因此,即使组合框实际上包括多个其他用户界面组件,图15中调用的结构能对应于组合框的层次表示的简化视图。以此方法,鼓励用户界面组件的重新使用来建立合成的控件。在该例中,根据调用以XML完成的事实,系统能使用简化视图。
组合框定义的示例性程序调用类似地,如图16所示,调用组合框的方案转移到定义的程序调用1600。该例能以多种程序语言(如Java和C++)实现。在1610的代码行“COMBOBOX=NEW COMBOBOX()”调用以前建立的定义。上述对标记码版本所述的优点也应用于程序调用。为访问完整视图而不是简化视图,能使用其他语言(如“COMBOBOX,FULLVIEW,ELEMENTS”或类似的)。
在简化示图上完成操作的示例性方法一旦软件或标记码调用了定义的用户界面组件,建立具有简化视图的用户界面组件的层次表示,并可用于操作。操作包括增加子节点,去除子节点,枚举子节点,询问在简化视图中哪一个是一个节点的父节点,以及各种用于定位用户界面组件的层次表示的操作。根据它们是使用层次表示的简化视图还是完整视图,这些操作的结果是不同的。
在各种实施例中,程序能规定是否希望简化视图。或者在某些场合,从周围情况可以假设希望简化视图。
随着如在简化视图中加入子节点或去除子节点的某些操作,能使用用户界面组件的层次表示的定义来判断该操作应如何在完整视图上完成。
图17示出在简化视图上完成一个操作,即加一个子节点到用户界面组件(如表示这样组件的节点),的示例性方法1700。在1710,接收将子节点加到在用户界面组件的层次表示的简化视图上的节点上的指示。在1720,根据如何定义用户界面的层次表示,跳过经选择可展示的节点,且在1730新的子节点按照定义被加到适当的节点(如加到具有“封装容件”属性设定为“真”的节点)。
可以如图18中所示,使用图17中示出的过程,将一个新的子节点1850加到组合框的层次表示的简化视图中。一旦调用组合框的定义,如新的子节点1850D的新的子节点可以加入到组合框的层次表示的简化视图中,如图19所示。使用层次表示的定义,加新的子节点1850D到图19的简化视图被转换成加到在如图18所示的层次表示的完整视图的适当位置中。
完成操作的示例性细节在图18中示出组合框用户界面组件的示例性层次表示1800。当接收到将一个子节点加到组合框(如节点1005)的请求时,在节点1005检测“封装父辈”属性,并且对具有“封装容件”属性的有关的后代节点进行遍历处理。在此例中,遍历能通过指针1855达到。因为在节点1025检测到“封装父辈”属性,遍历继续对具有“封装容件”属性的有关后代节点进行。在此例中,遍历能通过指向节点1045的指针1860实现。然后新的子节点作为子节点1850D加到节点1045。
若希望,能应用直接指针1880以便更直接地定位到加入子节点的适当节点。此外能包括返回到主节点的指针1885。
当新的子辈加入到如图19所示的简化视图时,对调用程序看来似乎新的子节点1850D作为组合框主节点1905的子节点被加入。然而,该操作实际上作为加新的子节点1850D到图18的完整视图(如在格栅面板节点1045下)来实现(如借助用户界面服务)。
嵌套能以各种方法处理。例如能如所示出那样使用指针跳过封装的中间层。或者在遍历层次表示时能跟踪嵌套的层次。根据层次能确定跳过哪些节点。遍历也能从层次的底部进到顶部(如由子节点枚举其父辈的请求)。
经选择可展示的节点的另选的表示在图20A中示出经选择可展示的节点的另选的表示2000。在此例中,专门指定特定节点2020作为在该表示的完整视图的经选择可展示的节点。
在图20B中示出对应的简化视图2050。如所示,特定节点2020的子节点2030B和2030C认为是父节点2010的子节点(如节点2030A)的兄弟。换言之,特定节点2020的子节点2030B和2030C认为是特定节点2020的兄弟(如在完整视图中的兄弟2030A)的兄弟。
这样的实现能用各种方法达到。在一个例子中,对特定节点2020将专门的属性(如“隐藏容件”)设置成真,它在请求简化视图时不展示。
另选表示的示例性实现在某些用户界面组件场合,希望从指定的位置(如从数据库)产生节点。例如,图21示出示例性列表框2100。希望从数据库或其它数据源产生一个或多个列表项2110。
从数据库产生内容的一个方法是将一个专门的组件包括在用户界面组件的层次表示中。该专门组件对简化视图能保持不展示,但仍然操作以产生内容,并使其出现在完整视图上。若希望,该专门组件可联结到数据源以便将内容自动插入用户界面组件,如列表项2110。
一个这样的专门组件称为“重复器”。图22示出包含重复器节点2220的列表框(如图21所示)的层次表示2200,该重复器节点插入层次表示用于自动产生如列表项2230和2240这样的某些列表项。
使用重复器还使用户界面开发者能借助将重复器联结到记录的集合(如从数据库)而自动产生内容。此外,模板容件2221和2222能与重复器2220相关以包含与数据库中特定记录有关的信息,该记录对重复器的特定子辈产生内容。在此例中,列表项2230和2240联结到数据源的记录以产生文本内容2235和2245(如名字、位置、或记录的另外字段)。虽然图22只示出与每个模板容件2221、和2222相关的单个子组件(列表项2235和2240),可能具有多个子组件(如电话号、名字、个人的影像)。
在列表框的层次表示2200的完整视图中,重复器2220看来好象是列表框节点2205和流动面板(flow Panel)节点2210的子节点之一。模板容件2221和2222看来如重复器2220的子辈。
然而,调用列表框的程序不希望将重复器看作流动面板节点2210的子辈节点。而且,对列表框的定义具有规则组,使得它不接受除列表项以外的任何东西作为流动面板2210的子辈节点。因而,当使用简化视图时,在列表框的层次表示中,重复器2220和模块容件2221和2222不希望被展示(如应是隐藏的)。
通过在列表框的层次表示的简化视图中不展示重复器2220和模板容件2221和2220,列表项2230和2240被有效地提升为它们的父辈重复器的兄弟的兄弟(如列表项节点2250的兄弟)。这样的简化视图2300示于图23,其中不展示图22的重复器2220,且列表项2230、2240和2250在图23中作为兄弟出现。
建立示例的另选表示图24中示出建立经选择可展示的节点(如重复器)的另选表示的示例性方法2400。在2410,选择具有层次表示的用户界面组件。在2430,该层次表示的至少一个节点指定为经选择可展示的(如在该层次表示的简化视图中不展示)。
例如通过将指定节点的“隐藏容件”属性设定成‘真’能达到这样的指定。重复器的类构造器能设定这样的属性,所以每当重复器被事例创建时设定该属性。
重复器能如愿地激活(如自动调用定义成具有重复器的用户界面组件)。然而,调用程序不需要考虑未展示地重复器,它自动地填入列表项。至于谈到调用程序,只是调用用户界面组件的定义,而且不要知道用户界面组件定义成具有重复器。
或者,即使调用程序觉察到重复器,处理与重复器有关的列表项的软件或标记码也不需要熟悉涉及重复器的复杂性,在简化视图中,用户界面组件简单地看来具有列表项而没有重复器。
在用户界面组件中重复器的示例性标记调用用户界面组件能以各种方法调用重复器。一个方法是通过标记语言(如XML或HTML),图25示出使用XML包含重复器的示例性列表框2500。重复器的调用依赖于重复器类(如包括合适的构造器)的早期定义,因此不必要将重复器的“隐藏容件”属性指定为‘真’。
在用户界面组件中重复器的示例性程序调用重复器能用程序调用(如以C++或Java等语言),用于用户界面组件。图26示出对列表框的重复器的示例性程序调用的代码2600。
在用户界面组件中重复器的示例性另选调用图27示出包括在用户界面组件中的一个重复器的另选标记码的调用2710的标记语言。示出的例子导致对模板容件(如模板容件2221和2222)的多个(例如2个)子节点一个用于图像,一个用于客户名字。
在任何例子中,通过调用重复器,在2710调用用户或过程只需要定义一个列表项(如指出来源),来完成列表框,最终的列表项由重复器在调用时自动地产生(如通过引用来源)。
图28示出带有多个列表项的列表框的示例性定义,而不使用重复器的特征。因此,列表项2810清楚地用标记码列出,且当对应的数据库更新时将不更新。因此,当提供具有许多或动态更新的选择的用户界面组件时,在用户界面组件之中的重复器的可用性(例如包括能绑定到数据源的能力)能导致更有效的程序码和标记码。
通过另选的表示完成操作当操作在通过简化视图描述的表示上完成时,指定为“隐藏容件”的适当指定的节点(如重复器节点)未被展示。回来参考图22,列表项2230和2240能表现为任何另外的列表项,并可由再现的列表框的用户选取。
此外,通过简化视图对列表项2230的父辈的请求借助于指出,2230的父节点是流动面板节点2210(不是重复器2220或模板2221)而得到答复。因此,节点2220和节点2221(如指定为“隐藏容件”)被跳过(如不展示)。另外,若流动面板和滚动视图指定为经选择可展示的,则在简化视图中列表项2230的父辈将是列表项2205。
若希望,某些功能可以禁止,例如,可以禁止加入或删除由重复器2220填入的列表项2230和2240。
另一个另选的表示的示例性实现带有经选择可展示的节点的用户界面组件的另外的示例性表示通过指定一个节点来达到,使得只有指定的节点在简化视图中被展示。例如,节点的后代(例如所有的后代)认为是选择上可展示的,并在简化视图中未示出。这样的表示在简化视图中对用户界面组件只有一个节点被展示。
例如,在如图20A所示的用户界面组件的表示中,若节点2010是这样指定,其后代(如节点2020。2030A、2030B、2030C)被指定成经选择可展示的。在其简化视图中最终的表示只有节点2010被展示(如主节点)。
如果希望,增加一个子节点到这样的简化视图的操作将导致错误,因为节点2010定义成不支持简化视图子节点。相同原因,使用这样简化视图完成枚举子节点操作是错误的,或提供空集。
这样的表示对屏蔽某些用户不太感兴趣的那些用户界面的完整视图的细节方面是有用的。所示的表示能以许多的方法达到。例如,能设定指出后代是经选择可展示的单个属性。“封装父辈”容件属性能设成真以导致这样的安排(如,若没有具有“封装容件”的对应节点被设置成真)。
图象的示例性表示该技术的另一种示例性实现是将图象的内部表示作为具有带着文字的经选择上可展示的子节点实现,若不具备图象就出现文字。主节点能包含图象,而经选择可展示的子节点可以表示对应的文字。以此方法,就能处理简化视图而不必知道经选择可展示的子节点。
确定节点的属性的示例性方法在确定节点采用哪个属性值(如继承)时,能考虑经选择可展示的节点。若希望,这样的节点能忽略(如从主节点取得的属性),这样的节点能确定所采用的属性值,或者经选择可展示的节点能结合主节点一起运作,以确定采用哪个属性值。例如,这样的确定是关于何时增加节点到表示中。
在层次中的节点能通过属性规则(如通过样式表设定)指出对其他节点所希望的属性。例如,一个节点能规定子节点的字型属性是“粗体”。
例如在图10A中,若属性规则是主节点1005的子节点的字型属性是“粗体”,但与列表框节点1025相关的属性规则要求其子节点具有“斜体字”的字型属性,如1050A这样的列表项的属性应该是什么就会有二义性。
在一个实施过程中,不是经选择可展示的子节点的继承属性是从简化视图中最近的父辈继承的。在上例中,若简化视图如图11所示,在简化视图中对列表项1050A,1050B和1050C的最近父节点是主节点1105。因而,在此实施例中,列表项将采用组合框的字型属性。
在另一个实施过程中,在简化视图中的最近父辈能包括一些规则,用于查询它的任一个经选择可展示的子节点的任一个属性规则是否应施加到不是经选择可展示的子节点上。例如,应用属性规则的过程能询问与列表框相关的属性规则是否需要替代与组合框相关的属性规则而应用到列表项。
在另一个实施过程中,如上所述隐藏容件的子节点的属性能够从属性规则集由隐藏的容件本身确定而不是由层次表示的简化视图中的直接的父节点确定。
若希望,可提供实施过程的组合,它能支持灵活的属性确定。
便于合成的用户界面组件能使用这里描述的各种技术,以便于定义,建立合成的用户界面组件,并与其互动。例如,一次调用能是作为合成的用户界面的特定用户界面的简单指示。该调用能导致建立多个节点以表示用户界面组件。
然而,定义合成用户界面组件的程序员能采取步骤,指出各种节点是经选择可展示的。因此,调用该定义的程序员能选择对不展示这样节点的简化视图编程(或默认提供这样的视图)。在这样情况,调用该定义的程序员不需要关心,合成的控件确实包括多个节点。
此外,这些定义的附件控件能在其控件定义中嵌套合成的控件。关于哪个节点是经选择可展示的指示能保持,使能容易地完成嵌套。以此方式,第一合成控件能定义成包含第二合成控件,且将正确地出现简化视图(如指定对第二合成控件指定为经选择可展示的节点将对于第二合成控件是经选择可展示的)。若希望,第二合成控件的主节点也能指示为经选择可展示的。
对说明嵌套有用的例子包括在图14A和14B中示出的组合框的程序定义。在该例中,组合框包括一列表框。该列表框的定义包括设置属性以获得在列表框中经选择展示的节点。此外,列表框本身调用滚动视图的定义,后者本身设置属性,以获得在滚动视图中经选择展示的节点。然而,对访问组合框的软件或标记码能实现嵌套,所以列表框(如其中包括经选择可展示的节点)的内部细节不出现(如,在访问组合框的简化视图时)。
另一方面,在列表框上完成的操作仍然得益于其中的节点是经选择可展示的事实(如当在简化视图中完成在列表框上的操作时)。因此,选择的可展示性既能是可嵌套的又能是相对的。
其他参考图示的实施例已描述并说明了本发明原理,可以认识到,图示的实施例在安排和细节上能够修改而不背离本发明的原理。
例如,各种用户界面组件能互相组合及嵌套以提供更复杂的表示。用户界面组件能作为界面的一部分提供给程序或嵌入文档(如网页或文字处理文档)。这里描述的技术也能应用于以层次形式表示的任何其他文档或文件。
虽然上面使用了特定的属性名,但能将其他属性方案用于层次表示中的经选择展示的节点。
可以理解,这里描述的程序,过程,或方法不涉及或限于任何特定类型的计算机装置。按这里描述的教义,各种类型的通用或专用计算机装置都能被使用或完成操作。这里描述的动作能由包含为完成这样的动作的计算机可执行指令的计算机可读介质完成。以软件示出的图示实施例的组件能以硬件实现,反之亦然。从本发明的原理能应用的许多可能的实施例来说。可以认识到,详细的实施例只是说明性的,且不作为对本发明的范围的限止。相反,我们声明,落入下面权利要求及其等价的范围及精神内的所有这样的实施例都可作为本发明。
权利要求
1.处理在用户界面组件的层次表示上完成一个操作的请求的方法,其特征在于,所述方法包括接收完成该操作的请求;对该层次表示的简化视图完成所述操作。
2.一种计算机可读介质,包含用于完成如权利要求1所述的方法的计算机可执行指令。
3.如权利要求1所述的方法,其特征在于该层次表示包括形成合成的用户界面组件的多个节点;和一个合适的节点子集在合成的用户界面组件中形成用户界面组件。
4.如权利要求1所述的方法,其特征在于在该层次表示中的至少一个节点被指定为经选择可展示的;和该指定的节点在简化视图中不展示。
5.如权利要求1所述的方法,其特征在于,通过在该层次中跳过指定为在简化视图中经选择可展示的节点来完成所述操作。
6.如权利要求5所述的方法,其特征在于,通过在该层次的节点上设置属性来指定节点为在层次中经选择可展示的。
7.如权利要求1所述的方法,其特征在于该操作是请求枚举在该表示中一个节点的子节点;和在简化视图上完成该操作,从而该节点的至少一个直接子节点在简化视图中是未展示的。
8.如权利要求1所述的方法,其特征在于该操作是在该表示中提供一个节点的父节点的请求;和在简化视图上完成此操作,从而在简化视图中不展示该节点的一个直接父节点。
9.如权利要求1所述的方法,其特征在于该操作是请求在该表示中增加一个或多个子节点到一个节点上;和该操作在简化视图上完成,从而子节点被加到该节点的后代。
10.如权利要求1所述的方法,其特征在于该操作是请求提供对一个节点的属性;和该节点的至少一个经选择展示的先辈节点的属性被忽略。
11.如权利要求1的方法,其特征在于该操作是请求提供对一个节点的属性;和该节点的至少一个经选择展示的先辈节点的属性被选择地忽略,或根据该属性考虑。
12.如权利要求1所述的方法,其特征在于该操作是请求对一个节点提供属性;和该节点的至少一个经选择展示的先辈节点的属性规则被忽略。
13.如权利要求1所述的方法,其特征在于该操作是请求对一个节点提供属性;和该节点的至少一个经选择展示的先辈节点的规则被可选择地忽略或根据该属性考虑。
14.一个表示用户界面组件的方法,该方法包括建立具有多个节点的用户界面组件的层次表示;和在该表示中指定至少一个节点为经选择可展示的。
15.如权利要求14所述的方法,其特征在于,通过设置该节点的一个先辈上的属性将该节点指定为经选择可展示的。
16.如权利要求15所述的方法,其特征在于,通过设置该节点的一个父辈上的属性将该节点指定为经选择可展示的。
17.如权利要求14所述的方法,其特征在于,所述经选择可展示的节点中的至少一个被指定为接收一个先辈节点的简化视图子辈的节点。
18.如权利要求17所述的方法,其特征在于,该经选择可展示的节点通过设定在该经选择可展示节点上的属性而指定。
19.如权利要求14所述的方法,其特征在于,该经选择可展示的节点是包含嵌入合成的用户界面组件的用户界面组件的多个节点之一。
20.如权利要求14所述的方法,其特征在于该经选择可展示的节点是表示用户界面组件的多个节点之一;表示用户界面组件的节点包含至少一个在用户界面组件的定义中没有定义为经选择可展示的节点;表示用户界面组件的节点被嵌入合成的用户界面组件之中;和该合成的用户界面组件包括该表示用户界面组件的节点被指定为经选择可展示的指示;当通过表示用户界面组件的一个节点参考时,将指定为不是经选择可展示的节点作为不是经选择可展示的节点处理;和否则将指定为不是经选择可展示的节点作为经选择可展示的节点处理。
21.如权利要求14所述的方法,其特征在于,指定为经选择可展示的节点是可操作的,为在层次表示中该节点之下产生多个节点提供数据。
22.如权利要求21所述的方法,其特征在于,该数据来源于数据库。
23.如权利要求21所述的方法,其特征在于,在该节点之下的多个节点是列表项。
24.定义合成的用户界面组件的方法,该方法包括参考在合成的用户界面定义中对用户界面组件的多个定义;和在合成的用户界面定义中,将用户界面组件中的至少一个节点指定为经选择可展示的节点。
25.如权利要求24所述的方法,其特征在于,对用户界面组件本身的至少一个定义指定其中的一个节点为经选择可展示的节点。
26.如权利要求24所述的方法,其特征在于,合成的用户界面组件包括一个组合框。
27.如权利要求24所述的方法,其特征在于,通过合适地指定下列中一个或多个组件的属性来指定节点为经选择可展示的节点用于用户界面组件的一个节点;用于用户界面组件的一个父节点;和用于用户界面组件的一个先辈节点。
28.一个方法,其特征在于,包括调用权利要求24的合成用户界面定义;和响应对合成用户界面组件的表示的简化视图的请求,不展示该经选择可展示的节点的用户界面组件。
29.具有表示封装的用户界面组件的编码数据结构的计算机可读介质,其特征在于,该数据结构包括主节点;和层次上与主节点相关的一个或多个经选择可显示的节点。
30.如权利要求29所述的计算机可读介质,其特征在于,该数据结构还包括当经选择可展示的节点不展示时,关于哪个节点不是经选择可展示的节点的指定是接收主节点的子节点。
31.一个用户界面服务,其特征在于,包括用于接受用户界面组的定义的代码,其中该定义包括指定简化视图;用于根据该定义建立用户界面组件的层次表示的代码;和响应对经简化视图在层次表示上完成一个操作的请求的代码。
32.如权利要求31所述的用户界面服务,其特征在于,该简化视图至少包含一个经选择可展示的节点。
33.一个用户界面服务,其特征在于,包括用于接受用户界面组件的定义的装置,其中该定义包括指定一个简化视图;用于根据该定义建立用户界面组件的层次表示的装置;和响应对经简化视图在层次表示上完成一个操作的请求的装置。
34.用于完成与用户界面组件有关的操作的方法,其特征在于,该方法包括接收具有简化视图的用户界面组件的层次表示的定义;调用该定义;和完成在用户界面组件的层次表示的简化视图上的一个操作。
35.如权利要求34所述的方法,其特征在于,该定义包含可选择地将在用户界面的层次表示的完整视图中的节点定义为在简化视图中不被展示的。
36.如权利要求35所述的方法,其特征在于,通过适当地设定包含层次表示的节点的属性,定义在完整视图中的节点在简化视图中为未展示的。
37.自动产生合成用户界面组件的子组件的方法,其特征在于,该方法包括将用户界面组件生成器插入到表示界面组件的数据结构中;将该用户界面组件生成器与数据源相关;和使用该数据源生成用户界面组件;其中该用户界面组件生成器是在合成用户界面组件的层次表示的简化视图中经选择可展示的。
全文摘要
一个合成用户界面组件能从多个子组件组装。能提供用户界面组件的表示的简化视图,其中该合成用户界面组件看来是单个组件。在定义时,表示用户界面的各种节点能指定为经选择可展示的,当经简化视图完成操作时,这样的经选择可展示的节点能忽略。因而,程序员可以书写代码,而不需要考虑合成用户界面组件的复杂性。根据经选择可展示的节点能作为属性确定。简化视图能支持具有对应的经选择可展示节点的嵌套的用户界面组件。
文档编号G06F9/30GK1508704SQ0310778
公开日2004年6月30日 申请日期2003年4月3日 优先权日2002年12月18日
发明者P·F·奥斯特泰格, M·J·菲诺基奥, M·E·D·温斯特, B·F·W·J·S·卡特, N·克拉马, S·W·本特, N·古普塔, , D 温斯特, P F 奥斯特泰格, W J S 卡特, 本特, 菲诺基奥, 账 申请人:微软公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1