面向目标的光标工具的利记博彩app

文档序号:6408490阅读:347来源:国知局
专利名称:面向目标的光标工具的利记博彩app
技术领域
本发明涉及计算机系统的改进,具体而言,涉及一种在面向目标的操作系统中使用工具目标和工具目标菜单的系统和方法。版权通告本专利申请的某些部分中含有受版权保护的内容。版权所有者对出现在专利商标局的专利文件或者记录中的复制专利文档或者专利公开文件不予反对,但在其它情况下保留所有的版权。
与本发明相关的背景技术光标工具通过改变用户控制的“光标”的行为,来指定用户与文档或者方框(frame)的特定交互模式。例如,用户可以选择“矩形”光标工具,以指示操作环境,在点按鼠标按钮并且拖拽鼠标时,在文档的画布上产生一个矩形。光标工具可以为数据选择、数据操作与数据创建指定模式。在MacPaint_或MacDraw_等类似的应用程序中可以找到以前的光标工具的例子。但是,这些应用程序不能给用户提供同时对多个光标的管理。更进一步说,这些应用程序没有提供集成到操作系统中的光标工具,使得在一个应用程序中有效的工具在另一个应用程序中也能使用。在先有技术的例子中,光标工具与应用程序之间的协同能力是未知的。
本发明的目的本发明涉及一种具有创新性的系统和方法,通过使用面向目标的技术,把光标工具集成到面向目标的操作系统中。这种集成包括在多任务下同时管理多个光标工具。本发明的技术方案用于实现本发明的方法涉及在具有内存,图形,视窗目标,以及显示器的计算机上进行的操作,其步骤包括检测选择信号;检测到了选择信号后,根据光标的位置辨识出图形目标;根据位置确定窗口;在图形目标上根据位置判断是哪一个目标;检测到了选择信号后,根据光标的位置执行与特定观察目标相联系的命令目标;把与命令目标相联系的工具目标传送到工具服务器目标;把工具服务器目标中的光标的当前工具设置成工具目标;以及经由工具服务器目标,把工具目标和应用程序连接起来。
根据本发明的光标工具处理装置则包括一个处理器;与处理器相连并受处理器控制的存储器;与处理器相连并受处理器控制的显示器;检测选择信号的装置;检测到了选择信号后,根据光标的位置辨识出图形目标的装置;根据位置判断窗口的装置;在图形目标上根据位置判断是哪一个观察目标的装置;检测到了选择信号后,根据光标的位置,执行与特定视窗目标相联系的命令目标的装置;把与命令目标相联系的工具目标传送到工具服务器目标的装置;把工具服务器目标中的光标的当前工具设置成工具目标的装置;以及经由工具服务器目标,把工具目标和应用程序连接起来的装置。本发明的有益效果本发明提供了协同能力,从而允许任何光标工具和任何应用程序同时工作。这种独特能力使用交叉分区式的内存管理,从而允许光标工具跨应用程序使用及跨区使用。面向目标的体制提供了光标工具与应用程序间交叉分配的结构,使得除非需要光标工具功能,否则应用程序不会觉察到光标工具的存在。按技术术语说,这意味着任何应用程序,只要可以确定光标工具能够成功地修改其信息,就可以不必在光标工具共享库中进行变换,就使用光标工具。
附图的简要说明

图1是适用于最佳实施例的个人计算机的方块图;图2是在MacDraw_中所使用的以前的光标工具的例子;图3是根据最佳实施例的命令面板;图4示出了根据最佳实施例的命令面板条的例子;图5示出了根据最佳实施例的命令面板的例子;
图6是根据最佳实施例的工具组的示意图;图7示出了根据最佳实施例的各种类型的方框的一些例子;图8示出了根据最佳实施例的带有各种方框的桌面;图9表示用户选择了矩形光标工具,该工具是根据最佳实施例的一个创建器;以及图10示出了选择箭头;图11示出了光标矩形工具变成了有效工具;图12示出了选择箭头穿过非活动文档,因此选择箭头变成了有效工具;图13示出了选择指点工具的过程,它是一个选择/影响器;图14示出了只有当光标穿过特定的方框时,才能使用指点工具;图15和16示出了工具光标穿过内容区的动态过程;图17总结了根据最佳实施例的窗口和方框的处理过程;图18示出了根据最佳实施例的工具处理逻辑的流程图;图19示出了根据最佳实施例的类层级的方块图;图20是根据最佳实施例的TToolServer类图;图21示出了根据最佳实施例的命令类;图22示出了根据最佳实施例的一些事先构筑好的几何图形;以及图23示出了根据最佳实施例的实用程序类。
本发明的最佳实施例本发明最好用于位于个人电脑(例如IBM_PS/2_或者Apple_Macintosh_等)里的操作系统的正文中。图1描绘了一种具有代表性的硬件环境,它示出了参照本发明的带有一个中央处理单元10的典型硬件结构,例如一个带内置不易失存储器11的通用微处理器,以及经由系统总线12连接的许多其它单元。图1中所显示的工作站包括一个随机访问存储器(RAM)14,只读存储器(ROM)16,用于把类似硬盘单元20、软盘单元21等之类的外部设备连接到总线上的I/O适配器18,用于把键盘24、鼠标26、扬声器28、话筒32以及其它用户接口设备(例如触摸屏等,没有示出来)连接到总线上的用户接口适配器22,用于连接工作站到数据处理网络23的通讯适配器34,用于连接总线和显示设备38的显示适配器36。计算机上还必须有一个操作系统,例如Apple System/7_操作系统等。
在最佳实施例中,本发明用C++编程语言并通过面向目标的编程技术实现。就象精通本领域的人所能够理解到的那样,面向目标的编程(OOP)对象是包含数据结构和数据操作的软件实体。这些元素放在一起,可以使现实世界中的任何实体都虚拟地模型化,其方法是借助于它们的特征(由数据元素代表),以及它们的行为(由数据操作功能代表)。通过这种方式,目标能使得象人和计算机等具体事物模型化,并且它们还能使抽象的概念,如数字或几何概念等模型化。目标技术的好处来自三个基本原理封装,多形,和继承。
目标隐藏或封装数据和使得功能能够运行的算法的内部结构。目标存在界面,这些界面没有外部信息,是纯粹的抽象,而不是把所有的实现细节都暴露出来。多形进一步地进行封装,其想法是许多形状,一个界面。软件的一个组成部分可能需要请求另一个组成部分,但不必知道它到底是什么。接受了请求的软件组成部分根据它的变量和数据,解释并且判断如何执行请求。第三个原理是继承,它允许开发人员再利用先前存在的设计和代码,这个能力允许开发人员避免从起始创建软件。而且,通过继承,开发人员可以得到继承了行为的子类,这样开发人员就可以进行再定制以适应他们特殊的需要。
以前的工作方法是把目标和类库放在过程环境中。市场上的许多应用程序系统采用这种设计方法。在这种设计中,在一个独立的操作系统之上,有一个或多个目标层。尽管这种方法在目标层中利用了所有原理封装,多形和继承,而且对过程编程是一个潜在的改进,但它仍有许多限制。由于对开发人员来说,再利用他们自己的目标很容易,而从其它系统中再使用目标则很困难,而且开发人员仍然需要通过过程操作系统的调用来进入内部的非目标层,因此产生了许多困难。
面向目标的编程的另一种方面是应用程序开发的体系解决方案。体系(framework)的一个最合理的定义来自于Illinois大学的Ralph E.Johnson和Purdue大学的Vincent F.Russo。他们于1991年发表了一篇论文,该论文的名称是“Reusing Object-Oriented Designs”,即再利用面向目标的设计,该论文发表于Illinois技术报告UIUCDCS91-1696,在这篇论文中,他们提出了下面的定义“一个抽象类是一系列目标设计,它们协作实现一系列的响应。因此,一个体系就是一系列的目标类,它们协作实现已定义的一系列的计算响应”。从编程角度来说,体系本质上是互相连接的目标类组,目标类提供预先构造好的工作应用程序的结构。例如,一个用户界面体系可能提供对绘画窗口、滚动条、菜单等的支持和其缺省行为。由于体系以目标技术为基础,因此这种行为可以得到继承和置换,从而允许开发人员在特殊的专业知识领域中扩展体系和创建定制的解决方案。由于编程人员不是在改变最初的代码,而是在扩展软件,因此这是它超过传统编程方法的一个主要优势。另外,开发人员可以清楚地操作代码层,因为体系提供了结构指导和模型,但同时他们能够自由地根据特定的问题区域来支持特定的操作。
从商业角度来说,体系可以被看作是一种封装或实现特殊领域的专业知识的方法。合作开发组织、独立软件销售商和系统集成人员已经获得了特殊领域的专业知识,例如生产、结帐或者货币交易。这些专业知识通过它们的代码得以实现。体系使得各个组织能够收集和封装专业知识的常规属性,方法是通过在该组织的代码中实现它们。首先,这允许开发人员利用专业知识创建或扩展一个应用程序,这样问题就得到了一次性的解决,而且前后一致地实施了商业原则和设计。体系和其所实现的专业知识对于那些已经获得了生产、结帐或者生物技术等市场的专业知识的组织来说,同样具有至关重要的意义,在这些市场中,存在有包装、销售和使用专业知识乃至进一步的技术开发和推广等的分配机制。
历史上,体系只是在最近才在计算平台上作为主流的概念出现。面向目标的语言,如C++的易用性帮助了这种观念的转变。以前C++主要是在UNIX系统和研究人员的工作站上使用,而不是在商用的计算机上使用。编程语言,例如C++和其它面向目标的语言(如SmallTalk和其它语言)使许多大学和研究工程能够为今天的商用体系及其类库提供先驱产品。这样的例子有Standford大学的InterViews,Carnegie-Mellon大学的Andrew工具,以及Zurich大学的ET++体系等。
根据系统级别和问题特点,有许多种体系。体系的类型范围从用来帮助开发用户界面的应用程序体系,到更低级的提供基本系统软件服务的体系,例如通讯、打印、文件系统支持、图形等。应用程序体系的产品实例有MacApp(Apple),Bedrock(Symantec),OWL(Borland),NeXTStepApp Kit(NeXT)以及Smalltalk-80(ParcPlace)。
使用体系编程需要为那些习惯于在其它种类系统下编程的开发人员提供一种新的方法。事实上,从传统意义上来说,它根本不象是在编程。在老式的操作系统中,如DOS和UNIX,开发人员为自己的程序提供了所有的结构,操作系统通过系统调用提供服务----开发人员的程序在需要服务时产生调用,在服务完成时控制返回。程序结构基于控制流,通过用户编写的代码实现。
使用体系编程时,这个顺序被颠倒过来。开发人员不再对控制流负责。他们必须向前认识趋势,借助于执行流理解编程任务。而且,想法必须借助于目标的可用性,必须依据体系来决定什么时候应该执行任务。开发人员所编写的例程,被不是开发人员所编写的代码激活,开发人员甚至永远都不会看见这些代码。控制流中的这种转换对于那些仅仅对过程编程比较熟悉的开发人员来说,可能会有较大的心理障碍。然而,一旦理解了这些,体系编程所要做的工作要比其它种类编程所要做的工作少得多。
同样,一个应用程序体系提供给开发人员预制的功能函数和系统体系,例如在最佳实施例中包括的那样。同样重要的是,通过提供系统级服务,开发人员例如系统编程员使用这些服务来置换子类,以创建定制的解决方案。例如,考虑一个多媒体体系,它能提供多种支持,如新的、多种多样的设备,例如声音、视频、MIDI动画等。需要支持新设备的开发人员将需要编写设备驱动程序。为完成这个任务,使用体系编程时开发人员仅仅需要支持新设备特有的特征和行为即可。
在这种情况下,开发人员仅需要实现一定的成员功能。这些功能被多媒体体系调用。对开发人员来说,一个马上可以得到的好处是多媒体体系已经提供了每一种装置都需要的从属性代码。这意味着设备驱动程序开发人员编写、测试、排错的代码量减少。利用系统体系的另一个例子是为SCSI设备、NuBus卡和图形设备等实现I/O体系。由于有继承功能,因此每个体系为它所能支持的设备提供常规支持。其它开发人员依靠这些一致的界面可以构造出许多其它的设备。
最佳实施例中采用体系的概念并把它应用到整个系统中。对于商业或者合作开发人员、系统集成人员,或者OEM等来说,这意味着前面所示的体系的所有优点,例如MacApp等,都可以不仅应用于应用程序级,例如文本或者用户界面,而且可以应用于系统级,例如图形服务、多媒体服务、文件系统、I/O、测试等等。
在最佳实施例的结构中创建应用程序基本上可以看做编写附加到体系协议上的与区域相关的特定程序。在这种情况下,整个编程的概念都改变了。与叫做多API层级的一行接着一行地编写代码相反的是,软件开发将从现有的体系环境中获取类,并且加入新的行为,以及(或者)根据需要置换继承的行为。
这样,开发人员的应用程序变成由其自己编写的代码加上与其它应用程序共享的代码的集合。这是一个强有力的概念,因为开发人员将能够在其它人的工作基础上工作。它还同样提供给开发人员选择余地,即根据需要或多或少地定制自己的程序。一些体系将以它们自己的方式使用。在有些情况中,很少需要定制自己的程序,因此开发者插入的特定程序段很小。在其它一些情况下,开发者可能需要做很多的修改,乃至创建全新的类或目标。在最佳实施例中,如图1所示,程序位于RAM14中,受CPU10的控制,用面向目标的图形体系管理多任务。程序使用新的结构以实现光标工具。“工具”与图符相联系,可以单击这些图符以选择它们。一旦选择了某工具,它就改变光标形状,并且让用户在文档的内容区中画图。MacPaint的画笔工具是光标工具的典型例子。这些工具被称做光标工具,是因为它们改变了光标,并且直接在光标下影响数据。与光标工具有关的特征包括通过单击工具图符来选择它;改变当前光标形状以指示用户正在“使用”所选定的工具。光标工具有多种类型,包括创建器,选择器,以及选择/影响器。创建器可以在有效文档的内容区域中使用。选择器和选择/影响器只有在有效文档里的已知类型的方框中才能使用。
共存性在Apple_Macintosh_计算机中,选定的光标工具与应用程序同时存在。例如,如果你在MacPaint中选择画笔工具,然后切换到MacDraw_并选择矩形工具,然后再切换回MacPaint_,选定工具将是画笔----你在MacPaint_中最近选择的工具。在最佳实施例中工具将与位置共存,而不会交叉共存。例如,如果在一个应用程序中选择了矩形光标工具,则不论哪一个方框或者文档激活,它都将是所选的光标工具。
光标工具示例多边形光标工具 箭头选择光标工具 着色器光标工具 光标工具组工具组是一种逻辑地,并可视地把有联系的光标工具分组的方法。可以把它们看做是放有多种光标工具的视窗。工具组本身不是面板----开发人员可在面板中使用它们。图2是MacDraw_中所用的以前的光标工具组的例子。
命令面板命令面板分组并组织所有的不直接出现在方框内容或者方框菜单中的方框命令。命令面板为这些命令提供界面,以代表光标工具(分组的或者没有分组的)、按钮、幻灯片、下拉菜单、滚动列表、文本域、附加面板或者任何开发人员可能创建的定制控制。所有的命令面板都必须具有方框创建工具----一种可用于画出由面板代表的类型的方框的工具。
命令面板和方框的关系类似于应用程序和文档的关系。命令面板可以用做创建方框,它为操作方框和其中的内容提供了大量的界面。但是有一个明显的不同。在以前的光标工具系统中,应用程序有它自己的文档,差不多围绕着它们。而在最佳实施例中,文档是最主要的。文档拥有并且围绕着方框,命令面板仅仅是一个用户可以使用的工具,用它在文档中创建或者操作方框。
在这种模型中,应用程序仅仅是一个命令面板和一个文具盒,用来给特定类型的方框所使用的命令提供界面,并且为该类方框提供方框创建光标。命令面板把工作在单方框类型中的各种控制组织到一起,销售商一般为它们的每一种方框类型都创建一个命令面板,因此销售商可能会让命令面板组织控制。例如,WordPerfect_将为WordPerfect_方框类型开发一个WordPerfect_命令面板。对于通用的方框类型来说,例如图形编辑应用程序,可能有几种不同的命令面板。命令面板可以最终由用户来构造,使得用户可以不管选择了什么销售商,都能在单个的命令面板中组织所有的图象操作控制。
通过整体命令面板盒或者命令面板条可以访问命令。通过多个键顺序组合,可把有效方框的命令面板带到前台,例如Ctrl+某键。图3是最佳实施例中的一个命令面板。
命令面板条中有许多图符,这些图符用来表示用户可安装的多种命令面板。另外,面板条的最上面两个图符是特殊的最上面的图符代表有效方框的命令面板,上面第二个图符则包含可用于任何方框类型中的具有工具组的命令面板。图符中含有一个选择箭头,一个可选的放大镜和着色器。早期设计要求命令面板条填满文档或者桌面中的所有命令面板,而本设计与早期设计不同,由用户来决定可以使用哪一个面板。
用户在命令面板间可以采取的操作中包括单击--拖拽图符把它从相应的命令面板中拖出来。也可以从命令面板条中把命令面板删除并把它放到桌面上。单击命令面板图符通常会选择方框创建工具,该工具是缺省工具。在选择工具命令面板的情况下,缺省工具是箭头选择工具。图4示出了最佳实施例中的命令面板条的例子。
命令面板盒当用户安装命令面板时,它们被集中到工作区的整体命令面板盒中。用户可以在这个盒中访问面板,或者把它们放入不同的命令面板条中。图5示出了最佳实施例中的一个命令面板的例子。
当前工具与有效工具用户通过从工具组中选择工具来设置当前工具。图6是最佳实施例中的工具组的示意图。只有当用户把光标移动到工具可以起作用的区域时,当前工具才变成有效工具。不论任何时候光标位于当前工具不起作用的区域时,有效工具都将转变成选择工具,而光标形状为箭头。
有效区域只有在有效文档中才有有效区域。在有效文档之外的任何位置,包括有效文档的外部装饰等,有效工具都将变成选择箭头。在有效文档里面时,有效区域取决于当前工具以及光标所处方框的类型。由于击穿效应,方框是否有效并不重要。象上面所提到的那样,光标工具有三种,创建器,选择器,以及选择/影响器。
创建器创建新的数据,例如圆形画图工具。
选择器选择已经存在的数据,例如PhotoShop_的魔棍(MagicWand)。
选择/影响器选择并且改变数据,例如MacPaint_的擦除器工具。
创建器光标工具在所有可嵌入的方框中都能工作。如果用户在没有圆形数据类型的方框中画圆,则工具体系(Tool Framework)将创建新的确实明白圆形的方框,把圆放在新方框中,并把新方框嵌入现有方框中。这种明确的创建方框的操作允许用户在它们需要的位置以及需要的时候创建数据,而不用事先创建一个适当方框。选择器以及选择/影响器光标工具只有在它们所理解的方框类型中才能工作。例如,MacPaint_的擦除器工具只有在MacPaint_方框中才能工作。在其它类型方框中时,活动工具变成选择箭头。
图7示出了最佳实施例中的不同类型的方框的一些例子。有效方框700,无效方框720,图形方框(PinkDraw)710以及文本方框740,每一个都有不同的特点。图8示出了最佳实施例中带有多种类型方框的桌面。图中用户打开了两个文档,其中一个是有效的(800),另一个是无效的(810)。两个文档都有两个方框,一个图形方框(PinkDraw)以及一个文本方框。用户正从画图命令面板830中选择工具。图9示出用户选择了矩形光标工具,它是最佳实施例中的创建器。在有效文档的内容区的外面(根方框),有效工具是选择箭头。图10示出了最佳实施例中的选择箭头。图11示出了最佳实施例中光标矩形工具变成了有效工具。图12示出了最佳实施例中,选择箭头穿过无效文档,因此选择箭头变成有效工具。
图13示出了根据最佳实施例,指点工具(一种选择/影响器)的选择过程。图14示出了在最佳实施例中,只有当光标穿过特定的方框时,指点工具才可以使用。图15和16示出了最佳实施例中光标工具穿过内容区时的动态过程。光标穿过有效文档的内容区和其它非图形方框时,有效工具变成选择工具。
访问/检索命令面板访问命令面板有好几种方法。用户可以在整体命令面板盒或者其它任何工作区盒中双击命令面板的图符来打开命令面板。对于任何放入面板条中的命令面板,用户可以简单地选择命令面板的图符并且进行检索。当用户选择了一个方框后,可发出“显示命令面板”命令,之后工作区将打开一个缺省的当前方框类型的命令面板。这样,如果选择了PinkDraw的方框,并使用“显示命令面板”命令,工作区将打开PinkDraw命令面板。
每种方框类型的多个命令面板一些类型的文挡可以被多种应用程序打开。例如Painter、MacPaint、PhotoShop_、MacDraw_以及TeachText都可以打开PICT文件。根据最佳实施例,一定的方框类型,例如图象和文本,将具有许多不同的命令面板。当操作这些特定的方框时,为了在所有可能的命令面板中进行选择,一种方框特性表允许用户选择命令面板,甚至可以为特定的方框类型设置缺省的命令面板。“显示命令面板”命令打开缺省的命令面板。
方框与窗口激活理解窗口是如何被激活的非常重要,因为与选择箭头不同,工具只有在有效窗口里才是可用的。讨论激活时,需要考虑两个方面。首先,什么时候窗口或者方框激活?其次,单击无效方框或者窗口将如何影响数据?
方框方框只有在鼠标按下的时候才被激活,因为它们的激活反馈对于用户正在开始进行的操作来说可能是重要的。例如,如果用户在一个带有矩形光标工具的方框中按下鼠标,则该方框应该被激活,从而显示出它的边界,使用户知道将要在什么地方剪接矩形。在无效方框中第一次单击鼠标不仅激活该方框,并且由于击穿效应,方框里的内容看起来象是早已被激活的样子。因此,如果选择了擦除光标工具,并且拖拽它穿过无效方框,所检测到的第一次单击将擦除某些数据。
窗口在窗口的边界内释放鼠标按键时,将激活该窗口。释放鼠标按键事件可以是在窗口边界内单击后产生,也可以是用户拖拽一个目标进入窗口后释放按键时产生。由于窗口在释放鼠标按键前不会被激活,因此拖拽过程中有效工具始终是选择箭头。如果当前工具不是选择箭头,那么该工具只有在完成拖拽并且激活目标窗口后才能变为有效的。在无效窗口中第一次单击不影响窗口的内容,而是选择或者拖拽它们。第一次单击并不破坏任何事情,这一点是很重要的,因为它可以使用户不会因为穿过屏幕游移选择/影响器而偶然破坏数据。但是,通过让第一次单击选择和拖拽数据,可以加速进行拖—放操作。由于窗口在鼠标释放前不会被激活,因此可以从无效窗口中选择目标然后拖拽进入一个有效窗口中,这一操作不会使无效窗口变成有效窗口。图17总结了最佳实施例的窗口和方框的处理过程。
工具构造概述工具系统提供了开发可在方框和文档中交叉使用的光标工具的结构,并且提供了从工具选择控制(例如工具面板)中向影响用户数据的方框中传送工具的必要的系统服务。TTool类提供了从工具选择控制中传送工具的系统服务。它是一个简单类,含有TToolInteractor、光标图形、面板图形、文本名、类型协同信息。TToolInteractor是一个TInteractor的直接子类。它仅仅为传递视窗和展示到交互器中增加了协议。一旦用户在适当的带有工具的方框中按下鼠标,TToolInteractor就修改在方框中可以见到的数据。通过控制使用面板图形和文本来设置当前工具,显示和辩识图形或文本串。光标图形是光标穿过可以使用的方框中时将采取的形状。类型协同信息是工具可用于其中的方框的选择类型的列表。这个列表用来确定工具是否可以在给定的方框中工作。
设置与分配当前工具三种目标协同工作,用以设置并分配当前工具。它们是SetCurrentToolCmd(设置当前工具命令),ToolServer(工具服务器),ToolNegotiator(工具协同器)。SetCurrentToolCmd激活后,SetCurrentToolCmd采用给定的TTool,并且把它传送到ToolServer。SetCurrentToolCmd被设计用于放在控制例如按钮以及工具面板等中。开发人员将经常用一系列按钮来构造工具面板,每一个都带有一个SetCurrentToolCmd,每一个命令保持一个不同的TTool。Tool ServerToolServer的任务是联系光标和工具。当SetCurrentToolCmd向ToolServer传递了一个光标和工具时,ToolServer目标把传来的工具设置成为给定光标的当前工具。然后,当一个视窗询问给定光标的当前工具时,ToolServer查找光标并且通过ToolNegotiator把工具传回到发出请求的视窗中。ToolNegotiatorToolNegotiator的角色是试图与视窗协同,如果协同成功,就把当前工具传送到该视窗中。光标进入时,产生以下序列的命令。首先,光标传给有效方框。然后,方框的内容视窗接收“光标输入了”的通知并且从ToolServer中请求协同器。然后,ToolServer为当前工具构造一个协同器,并把它传送回发出请求的视窗中,视窗然后向工具协同器(ToolNegotiator)给出选择,并且执行命令以改变光标形状。最后,工具协同器把它自己的选择类型列表和视窗提供的选择类型进行比较。如果该选择是工具能够理解的类型,协同器就把光标形状改变成当前工具的光标图形。
按下鼠标后的调用顺序在多光标环境中,视窗无法确定按下鼠标时哪一个光标是它最近协同的光标,因此它必须再次从ToolServer中请求协同器。服务器返回一个协同器,视窗把选择传递到协同器中。如果协同成功,协同器请求当前的ToolInteractor。也就是,如果工具理解所做的选择,协同器就向视窗返回一个ToolInteractor。视窗在ToolInteractor中设置适当的值并启动交互作用。在这点上,交互器接管并且继续运行用户交互作用。
流程18示出了根据最佳实施例的工具处理逻辑的流程图。处理过程从1800开始,在那里,工具面板1840检测到了对特定工具进行的选择,当前工具被激活,与其相联的信息被传递到工具服务器1810。工具服务器1810受工具协同器1830调用,经由对工具服务器1810的调用1820来激活工具的相应特征。工具服务器1810然后经由工具协同消息1820把返回的状态信息传送给应用程序,并更新显示。TAbstractTool图19是根据最佳实施例的类体系的原理图。其中一些有特殊意义的是,TGlobalID GetID()const;它获取工具的I.D.;以及virtual void SetID(TGlobalID),它设置工具的I.D.。光标工具体系使用工具的整体I.D.,以在工具服务器上唯一地标识这些工具,并且给工具设置命令提供适当的工具变化通知。TtoolTTool是定义工具的抽象的超类。它同样具有几个与工具服务器联络的静态方法。TTool子类实际上很少执行任务。它们为菜单和工具面板提供图形和文本名,当工具有效时为工具提供能够代表它的光标图形,提供工具在其中可以使用的选择类型列表,以及创建当用户在合法方框中用所选择的工具按下鼠标时被激活的交互器子类。真正在方框中进行创建或者修改数据工作的目标是交互器(interactor)。
纯虚拟方法virtual MGraphic* CreatePaletteGraphic()const=0;该子类必须返回新的MGraphic,以用于工具面板或者菜单中。
virtual void GetPaletteText(TText&)const=0;该子类必须设置TText的文本为适合做菜单条目的文本串,该菜单条目代表工具。
virtual MGraphic*CreateCursorGraphic()const=0;该子类必须返回新的MGraphic,以在工具有效时用作光标。
virtual TToolInteractor*CreateInteractor(TToken)const=0;该子类必须返回新的TToolsInteractor,当用户在正确的方框中点按鼠标时启动该子类。通过的标记是代表点按框的选择类型,该TTool可根据该标记在接收框的类型生成不同的交互器。
virtual void CreateTypeInfoList(Tsequence&)const=0;该子类必须为在工具可以工作的所有模型中所选择的每个类型,用记号填充序列(当TType可用时,每一个适当选择的记号都将被替换成TType)。例如,如果工具使用GrafEdit模型以及TTextContainer模型,子类将在序列中放置TGrafEditSelection∷kType和TTexSelection∷kType。
另外,工具有两种通过布尔方法设置的行为Boolean IsOneShot()const;其缺省值是FALSE。为单用途选取“单射(One-Shot)”工具。一旦使用了这个工具,工具服务器自动地把当前工具切换到缺省工具上(选择箭头)。缺省情况下,这种方法返回FALSE,以保持当前所用工具,直到用户从面板或者菜单上选择了一个新的工具为止。
void SetIsOneShot(Boolean isOne=TRUE);使用本方法可动态地设置工具为单射工具或者不是单射工具。例如,面板开发者可以把工具设置成当用户单击面板时,总是单射工具,而当双击鼠标时,是其它工具。
virtual Boolean IsCreationTool()const;其缺省值是FALSE。在任何嵌入的方框中,可以创建数据的工具都是可用的。如果工具对所用的方框没有明确的认识,体系将创建并且嵌入一个新的工具所知道的方框。目前体系并不提供嵌入支持,因此只有在你的工具能够明确地创建和嵌入方框时,才能置换本方法。
访问工具服务器的静态方法static void SetCurrentTool(const TTool& theTool);把“theTool”设置成为当前的工具。
static TTool* CopyCurrentTool();返回当前工具的拷贝。
static TToolNegotiator* CopyCurrentToolNegotiator();为当前工具返回新的TToolNegotiator。
static TTool* CopyDefaultTool();返回系统缺省工具的拷贝。现在缺省工具是TSelectionArrow。
static void SetToDefaultTool();把当前工具设置为缺省工具。
创建通知注意的静态方法static TInterest* CreateCurrentToolChangedInterest();每次当前工具发生改变时返回用于接收通知的注意事项。
static TInterest*CreateCurrentToolTypeChangedInterest();每次当前工具改变成为不同类的工具时返回用于接收通知的注意事项。TToolSurrogate非常简单的TAbstractTool的子类。它不增加数据成员。它唯一的方法是一个已经定义的操作器,使得TToolSurrogates可以被设置成任何TAbstractTool。TSelectionArrow非常简单的TTools子类,具有以下属性Palette Graphic(面板图形)标准左倾箭头。
Cursor Graphic(光标图形)标准左倾箭头。
PaletteText(面板文本)“Arrow(箭头)”。
TypeInfo(类型信息)TModelSelection∷kType。箭头在任何方框内都是合法的。
Tool Interactor(工具交互器)没有。选择箭头为其交互器返回NIL。单击的方框必须提供它自己的选择交互器。TToolNegotiatorTToolNegotiator是在接收队伍中代表当前工具的轻量级的单种目标。例如,当光标穿过活动文档的方框时,方框被传递一个TToolNegotiator。方框与TToolNegotiator协同,并且告诉协同器是否改变光标形状。鼠标按下时,方框同样也得到一个TToolNegotiator,看当前光标工具在方框中是否正确。如果正确,方框从TToolNegotiator中得到TToolInteractor,并且启动交互作用。
TToken Accepts(const TModelSelection&)const;如果当前工具对于给定选择来说正确,并且具有明确的知识,则返回选择类型。如果当前工具是创建工具并且对给定选择来说正确的,则返回TTool∷kEmbeddingSelections,因为当前选择是嵌入选择。如果当前工具对给定选择来说不正确,则返回TTool∷kSelectionRejected。
void AdjustCursorShapeFor(const TModelSelection&)const;如果工具可以应用到给定选择中,则把光标形状设置成当前工具的形状。
TToolInteractor*CreateInteractor(const TModelSelection &amp;)const;首先为选择调用Accepts(接受)。如果当前工具接受了给定选择,则返回工具的交互器。否则返回NIL。通常的用法是<pre listing-type="program-listing"><![CDATA[TToolInteractor* anInteractor=NIL;TToolNegotiator* negotiator=TTool∷CopyCurrentToolNegotiator();if(anInteractor=negotiator->CreateInteractor(aSelection))anInteractor->StartTracking();else{//start a selection interactor}TToken GetToolType()const;]]></pre>返回当前工具的类型。TToolInteractorTToolInteractor中含有设置和得到视窗和选择的方法,在这些选择中子类经常被传递到它们的交互状态。TToolInteractor知道它们是否是用单射工具创建的。如果是,它们在TToolInteractor∷StopTracking中调用TTool∷SetToDefaultTool。
<pre listing-type="program-listing"><![CDATA[void SetView(TView*);void SetSelection(TModelSelection&amp;);TView*GetView()const;TModelSelection*GetSelection()const;]]></pre>调用器/分配器类TToolServerTToolServer是一个分配器类,它实现工具服务器功能。图20是根据最佳实施例的TToolServer类的原理图。TToolServerCallerTToolServerCaller是一个由TTool使用,用于与工具服务器通讯的分配器类。应该不会示例这些类或与其直接谈话。
命令类TSetCurrenToolCmd在工具服务器中把当前工具设置为它的边界工具。图21示出了根据最佳实施例的命令类。
TSetCurrentToolCmd(const TTool&amp;the Tools);用theTool把命令构造成它的边界工具。
void SetTool(const TTool&amp; theTool);设置theTool为命令边界工具。该命令如果已经有的话,就放弃旧的工具。
Boolean GetSelected();返回命令边界工具是否是当前工具(例如,控制保持命令是否应该把它自己显示成“selected”)。
void SetSelected(Boolean);可被用作CommandBooleanSetter控制,但是它不做任何事情。该命令基于从工具服务器得来的通知,设置它自己的选择状态。
TInterest* CreateSelectionStateChangedInterest()const;当特定命令的选定状态改变时,使用这个注意事项接收通知。当一个控制调用TSetCurrentToolCmd∷connectData()时,该命令使用这个注意事项。
TSetToDefaultToolCmd设置当前工具为缺省工具。
光标图形MGraphic子类带预制好的几何图形。图22示出了一些已经制作好的图形。
TCrossHairGraphic绘画程序风格的十字交叉线+。
TExGraphic大的×,用做排错(debugging)×。
TArrowGraphic是一个箭头
工具类TToolInstanceInterest本注意事项用TAbstractTool构造成。它用TAbstractTool变成当前工具的特定例子解释注意事项。图23示出了根据最佳实施例的工具类。
<pre listing-type="program-listing"><![CDATA[TToolInstanceInterest(const TAbstractTool&amp;,MNotifier*,const TToken&amp;);TToolChangedNotification]]></pre>每次当前工具变化时工具服务器都导出TToolChangedNotification。该通知为新的当前工具保持了TToolSurrogate。
从通知中释放数据的方法<pre listing-type="program-listing"><![CDATA[TToolSurrogate GetToolSurrogate()const;TToken GetToolType()const;TCursorToolException]]></pre>由光标工具体系导出的exception子类。
TCursorToolException定义的错误kNoBoundCursor=0×lD02TSetCurrentToolCmd∷Do()与无边界光标一起调用。目前不使用本错误。当光标服务器支持多光标时才可能导出本错误。那时,编程人员将需要在使用前把工具和光标连接到一起。
kNoBoundToolInCommand=0×1D02命令没有边界工具时,在TSetCurrentToolCmd中调用需要边界工具的方法会导出该错误。
kNoBoundToolServer=0×1D03在设置好当前工具之前就在TToolServer中调用需要当前工具的方法时导出本错误。
尽管在特定的系统环境中,通过最佳实施例描述了本发明,但本专业一般技术人员应该认识到,根据本发明的精神和所附加的权利要求,对本发明加以修改后,也可将之用于不同的硬件和软件环境中。
权利要求
1.一种在具有内存,图形,视窗目标,以及显示器的计算机上进行操作的方法,其特征在于包括以下步骤(a)检测选择信号;(b)检测到了选择信号后,根据光标的位置辨识出图形目标;(c)根据位置确定窗口;(d)在图形目标上根据位置判断是哪一个目标;(e)检测到了选择信号后,根据光标的位置执行与特定观察目标相联系的命令目标;(f)把与命令目标相联系的工具目标传送到工具服务器目标;(g)把工具服务器目标中的光标的当前工具设置成工具目标;以及(h)经由工具服务器目标,把工具目标和应用程序连接起来。
2.根据权利要求1所述的方法,包括在交叉的地址空间中进行工具目标与应用程序之间进行连接的步骤。
3.根据权利要求1所述的方法,包括在工具目标菜单上可视地修改工具目标以指示有效光标工具的步骤。
4.根据权利要求1所述的方法,包括从工具目标菜单中选择工具目标的步骤。
5.根据权利要求1所述的方法,包括在光标工具菜单上显示工具目标的步骤。
6.根据权利要求1所述的方法,包括显示一个方框以指示工具目标状态的步骤。
7.根据权利要求1所述的方法,包括根据工具目标改变光标的步骤。
8.根据权利要求1所述的方法,包括根据工具目标状态改变光标的步骤。
9.一种光标工具处理装置,其特征在于包括(a)一个处理器;(b)与处理器相连并受处理器控制的存储器;(c)与处理器相连并受处理器控制的显示器;(d)检测选择信号的装置;(e)检测到了选择信号后,根据光标的位置辨识出图形目标的装置;(f)根据位置判断窗口的装置;(g)在图形目标上根据位置判断是哪一个观察目标的装置;(h)检测到了选择信号后,根据光标的位置,执行与特定视窗目标相联系的命令目标的装置;(i)把与命令目标相联系的工具目标传送到工具服务器目标的装置;(j)把工具服务器目标中的光标的当前工具设置成工具目标的装置;以及(k)经由工具服务器目标,把工具目标和应用程序连接起来的装置。
10.根据权利要求9所述的装置,包括在交叉的地址空间中进行工具目标与应用程序之间的连接的方法。
11.根据权利要求9所述的装置,包括在工具目标菜单上可视地修改工具目标以指示有效光标工具的装置。
12.根据权利要求9所述的装置,包括从工具目标菜单中选择工具目标的装置。
13.根据权利要求9所述的装置,包括在光标工具菜单上显示出工具目标的装置。
14.根据权利要求9所述的装置,包括显示出一个方框以指示出工具目标状态的装置。
15.根据权利要求9所述的装置,包括根据工具目标改变光标的装置。
16.根据权利要求9所述的装置,包括根据工具目标状态改变光标的装置。
17.一种在具有存储器和目标以及至少一个光标和相连的显示器的计算机上使用面向目标的操作系统中进行操作的方法,其特征在于包括以下步骤(a)检测光标进人了某显示区域;(b)根据检测到的光标保持当前工具;(c)根据当前工具获取工具协同器目标;(d)调用工具协同器目标以判断当前工具是否在显示区域中;(e)根据当前工具获取图形目标;以及(f)把光标改变成图形目标。
18.根据权利要求17所述的方法,其中,工具协同器目标的协同操作包括以下步骤(a)获取与工具相关的选择类型的列表;以及(b)把选择类型列表与相关显示区域的数据所联系的选择类型列表相比较。
全文摘要
一种提供工具体系和工具服务器的系统和方法,用于在给定系统上支持多个光标并用一个光标支持光标工具的选择,该体系和服务器简化了光标工具与独立空间处理中的光标的关联,所以工具可用于交叉处理和交叉文档。该体系还在光标工具及可用的画布之中提供通讯和协同操作的缺省功能。协同操作允许任意光标工具和文档一起工作,以致光标工具可以无需文档开发者的知识而予完成。体系以一有效方式实现了交叉处理和文本的光标工具分配,从而文档无需知道工具,直至工具与文档已进行了协同操作以修改文档数据。
文档编号G06F3/0481GK1130431SQ94193272
公开日1996年9月4日 申请日期1994年1月3日 优先权日1993年11月9日
发明者杰佛瑞·韦氏尼 申请人:塔里根特公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1