说明书允许嵌套对象拖放的方法及系统
技术领域
本发明涉及剪切-复制-粘贴,并且更具体地涉及嵌套拖放管理。
背景技术
数十年前,主要是由于个人计算设备允许的文档创建和管理所带来的方 便,个人计算在生产性方面取得了巨大进展。文字处理器这种最早的杀手级 (killer application)应用不仅允许终端用户构思(craft)文档的文本,还允 许通过从文档的一部分到另一部分的“剪切”和“粘贴”来处理文本的替换。 在提供了仅仅基于字符的单任务处理用户界面的早期计算环境下,尽管在基 于字符的用户界面时代的衰落时期(twilight)期间,终端和常驻应用不仅允 许在单个应用中跨不同文档进行剪切和粘贴,还允许分别在不同的应用中跨 不同文档地进行剪切和粘贴,但是剪切和粘贴的动作极大地限制于单个文 档。
图形用户界面(GUI)计算环境的出现加速了个人计算的发展,并且支 持了文字处理器的普及的全球化。剪切板变成新的环境的焦点,其不仅允许 文本数据的计算机内部移动,还允许包含图形对象的其他类型的数据的计算 机内部移动。在图形用户界面中的剪切和粘贴的一般范型(即,将对象从源 位置拖放至目标位置)在基于个人计算机的第一个图形用户界面的广泛分布 之后到如今持续了超过二十年。
使对象能够进行拖放是定义对所检测到的拖拽以及释放事件的编码反 应的问题。关于简单化的对象是相对非常直接地。然而,对于作为其他对象 的组合(composition)的对象,使组合对象能够如此会是非常有挑战性的。 更进一步地,对于作为其他对象的嵌套组合的对象,问题可能变得更加复杂。 具体地,用于拖放的程序代码必须初始确定被选择进行拖拽的对象是否是嵌 套在组合内的对象,整个嵌套的组合是否已经被选择进行拖放,或者仅仅嵌 套组合的子集已经被选择进行拖放。另外,确定要在拖放操作期间呈现的化 身(avatar)可能极大地取决于选择了对象的嵌套组合的哪个部分进行拖放 的确定。
发明内容
本发明的实施例关于拖放对象的嵌套组合解决现有技术的不足,并且提 供一种利用对象克隆允许嵌套对象拖放的新颖且非显而易见的方法、系统以 及计算机程序产品。在本发明的实施例中,利用对象克隆允许嵌套对象拖放 的方法包括检测在应用的GUI中的拖拽事件以及识别与该拖拽事件相关联 的GUI中的对象。该方法还包括在存储器中取得嵌套在所识别的对象中的 GUI中的其他对象的一个或多个克隆,以及为所识别的对象以及一个或多个 克隆产生化身。最后,该方法包括在显示器中将化身从拖拽事件的源位置移 动至在应用的GUI中检测到的释放事件的目标位置。
在实施例的一个方面中,在创建所识别的对象用于在GUI中使用时创建 所述克隆并且与所识别的对象一起存储。在实施例的另一方面中,在应用的 GUI中检测释放事件,并且根据该释放事件确定目标位置。最后,将所识别 的对象和在所识别的对象中嵌套的GUI中的其他对象移动到GUI中的目标 位置。
在本发明的另一个实施例中,GUI数据处理系统配备有:具有存储器和 至少一个处理器的主机计算机、在该主机计算机的存储器中执行的操作系 统、由操作系统控制并且提供在其上显示不同的对象的GUI的应用、以及耦 合到GUI的嵌套对象拖放模块。该模块包括程序代码,该程序代码当在主机 计算机的存储器中执行时被使能以通过以下处理来响应GUI中的拖拽事件: 识别GUI中的对象中与拖拽事件相关联的对象,将在所识别的对象中嵌套的 GUI中的其他对象的一个或多个克隆取得到存储器,对所识别的对象和所述 一个或多个克隆产生化身,并且将所述化身的显示从拖拽事件的源位置移动 到在应用的GUI中检测到的释放事件的目标位置。
本发明的另外的方面部分将在下面的说明中阐述,部分将从该说明而显 而易见,或者可以通过对本发明的实践而学习到。本发明的方面将通过在所 附的权利要求书中具体指出的要素和组合来实现并获得。要理解的是,前面 的一般性的描述和下面的详细说明都是示例性的,并且仅仅是示例性的,而 不是对如所要求保护的发明的限制。
附图说明
结合到本说明书中并构成本说明书的一部分的附图例示了本发明的实 施例,并且与说明书一起用于解释本发明的原理。此处例示的实施例是目前 优选的,然而,要理解的是,本发明并不限于所示的明确布置和手段,附图 中:
图1是利用对象克隆允许嵌套对象拖放(drag and drop)的过程的图示;
图2是被配置用于利用对象克隆允许嵌套对象拖放的GUI数据处理系统 的示意性例示;以及
图3是例示利用对象克隆允许嵌套对象拖放的过程的流程图。
具体实施方式
本发明的实施例提供用于利用对象克隆允许嵌套对象拖放。根据本发明 的实施例,对于对象的嵌套组合中的所选择的对象,可以在GUI中的源位置 处检测拖拽事件,嵌套组合中的每个对象单独地存储在计算机的存储器中。 此后,响应于拖拽事件,可以将嵌套在所选择的对象之下的对象中的各个对 象的克隆取得到存储器中,并且可以为所选择的对象及其克隆产生化身。随 后,在拖放期间并且在释放之前,该化身可以在GUI中可视地显示,并且可 以从源位置移动到GUI中的目标位置。响应于在目标位置处的释放,可以将 所选择的对象以及对应于克隆的嵌套组合中的那些对象放置在目标位置处。
在另外的例示中,图1图示了利用对象克隆允许嵌套对象拖放的过程。 如图1所示,可以对应用提供应用GUI 100,并且可以包括不同的对象110、 120。对象110、120可以包括与其他所包含的对象140的关联,以便提供对 象140的嵌套。进一步地,包含嵌套的对象140的对象110可以嵌套在GUI100 的对象110内。虽然为了简单说明的目的,此处仅仅示出了三个对象110、 120、130包含嵌套对象140,但是在GUI 100中支持另外的嵌套程度以及嵌 套对象的数量。
可以对GUI 100提供嵌套拖放逻辑170。可以将该嵌套拖放逻辑170与 对象110、120、由此包含的嵌套对象140的克隆190(或者确切的数据复本) 中的每一个相关地存储在存储器180中。因此,克隆190可以包括与对象110 相关的对象130的克隆(或者确切地,数据复本)以及对象130的嵌套对象 140的克隆。利用克隆190,嵌套拖放逻辑170可以通过识别已经与指针160 相关地选择的对象130并且通过基于所选择的对象130和嵌套在其中的对象 140的克隆产生化身150来响应拖拽事件。类似地,利用克隆190,嵌套拖 放逻辑170可以通过将所选择的对象130以及嵌套在其中的对象140放置在 GUI 100中、在释放事件内记录的指针160的位置附近的位置处来响应释放 事件。
结合图1所述的过程可以在GUI数据处理系统中实现。在又一个例示中, 图2示意性地示出了被配置用于利用对象克隆允许嵌套对象拖放的GUI数据 处理系统。该系统可以包括具有存储器和至少一个支持操作系统220的执行 的处理器的主机计算机210。操作系统220转而可以控制(host)提供GUI 240 的应用230的操作,通过该GUI 240,终端用户与应用230的程序逻辑进行 交互。GUI 240可以程序地链接到嵌套拖放模块300。
嵌套拖放模块300可以包括当在计算机210的存储器中被执行时可以被 使能以在存储器中创建用于GUI 270中的每个对象的克隆250或对象270中 的对应一个的确切数据复本的程序代码。例如,每个克隆250都可以在创建 对象270的嵌套的一个以用于在GUI 240中使用时被创建,并且与对象270 的对应的嵌套的一个一起存储。嵌套拖放模块300的程序代码还可以被使能 以通过识别对象270中所选择的一个以及在对象270中所选择的一个中嵌套 的对象270中的其他对象来拖拽事件。
嵌套拖放模块的程序代码还可以被使能以通过以下处理来响应拖拽事 件:首先利用对象270中的被选择的一个和对应于在对象270中的被选择的 一个中嵌套的对象270中的其他对象的那些克隆250来产生化身260,然后 通过利用化身260对GUI 240中的拖放操作进行可视化。嵌套拖放模块的程 序代码还可以被使能以通过以下处理来响应在GUI 240中的一位置处的释放 事件:将对象270中的被选择的一个以及在对象270中的被选择的一个之中 嵌套的对象270中的其他对象移动到GUI 240中的该位置处。
值得注意的是,在该实施例的一个方面中,嵌套对象拖放模块300的程 序代码可以利用“Dojo”模块化Javascript库。因此,此处例示了示例性的 基于Dojo的实现方式:
var source1=new dojo.dnd.Source(div1,{copyOnly:"true",creator:
this.documentSetCreator});
source1.checkAcceptance=function(){return false;}
source1.insertNodes(false,[{data:{name:docSetName,docSetDocs:
docSetDocs},type:["documentSet"]},]);
var source2=new dojo.dnd.Source(tr,{copyOnly:"true",creator:
this.documentCreator,});
source2.checkAcceptance=function(){return false;}
source2.insertNodes(false,[
{data:docSetDocs[0],type:["sendDocument"]},
{data:docSetDocs[1],type:["receiveDocument"]},
{data:docSetDocs[2],type:["sendDocument"]},
{data:docSetDocs[3],type:["receiveDocument"]},
]);
documentSetCreator:function(item,hint){
var div=dojo.create("div",{innerHTML:item.data.name});
if(hint=="avatar"){
var table=dojo.create("table",{},div,"last");
var tr=dojo.create("tr",{},table,"last");
for(var i=0;i<item.data.docSetDocs.length;i++){
var td=dojo.create("td",{style:"text-align:center;padding:10px;",innerHTML:
item.data.docSetDocs[i].number},tr,"last");
var img=dojo.create("img",{style:"display:block;margin-left:
auto;margin-right:auto",src:"
http://localhost:8080/TPMaaS/images/document_obj.tif"},td,"first");
}
}
return{node:div,data:item,type:item.type,copyOnly:true};
},
documentCreator:function(item,hint){
var td=dojo.create("td",{style:"text-align:center;padding:10px;"});
var img=dojo.create("img",{style:"display:block;margin-left:
auto;margin-right:auto",src:"
http://localhost:8080/TPMaaS/images/document_obj.tif"},td);
var div=dojo.create("div",{innerHTML:item.data.number},td);
return{node:td,data:item,type:item.type,copyOnly:true};
},
在嵌套拖放模块300的操作的又一个例示中,图3是例示利用对象克隆 允许嵌套对象拖放的过程的流程图。开始于框310,可以在GUI中检测到拖 拽事件。在框320中,可以识别出与拖拽事件相关联的对象,并且在决定框 330中,还可以确定是否已经与所识别的对象相关地存储了一个或多个克隆。 如果不是,则该过程可以继续经过框370。否则,该过程可以继续经过框340。
在框340中,可以取得与所识别的对象相关地存储的第一克隆,并且可 以在框350中创建组合作为所识别的对象和第一克隆的结合。此后,在决定 框360中,如果剩余另外的克隆要与所识别的对象相关地进行处理,则可以 在框340中取得与所识别的对象相关地存储的下一个克隆,并且可以在框 350中将所述组合扩大为该组合和下一个克隆的结合。在决定框360中,当 没有剩余另外的克隆要与所识别的对象相关地进行处理时,在框370中,可 以基于该组合产生化身。
在框380中,可以可视地利用该化身来表示将所识别的对象及其嵌套对 象从GUI中的源位置拖拽至GUI中的目标位置。在决定框390中,如果检 测到释放事件,则可以在框400中确定对应于该释放事件的位置。随后,在 框410中,可以将所识别的对象和被确定为嵌套在其中的那些对象从GUI 中的源位置移动到GUI中的目标位置。
所属技术领域的技术人员知道,本发明的各个方面可以实现为系统、方 法或计算机程序产品。因此,本发明的各个方面可以具体实现为以下形式, 即:完全的硬件实施方式、完全的软件实施方式(包括固件、驻留软件、微 代码等),或硬件和软件方面结合的实施方式,这里可以统称为“电路”、“模 块”或“系统”。此外,在一些实施例中,本发明的各个方面还可以实现为 在一个或多个计算机可读介质中的计算机程序产品的形式,该计算机可读介 质中包含计算机可读的程序代码。
可以采用一个或多个计算机可读介质的任意组合。计算机可读介质可以 是计算机可读信号介质或者计算机可读存储介质。计算机可读存储介质例如 可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装 置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子(非 穷举的列表)包括:具有一个或多个导线的电连接、便携式计算机盘、硬盘、 随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器 (EPROM或闪存)、光纤、便携式紧凑盘只读存储器(CD-ROM)、光存储器件、 磁存储器件、或者上述的任意合适的组合。在本文件中,计算机可读存储介 质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装 置或者器件使用或者与其结合使用。
计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的 数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采 用多种形式,包括——但不限于——电磁信号、光信号或上述的任意合适的 组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算 机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系 统、装置或者器件使用或者与其结合使用的程序。
可以以一种或多种程序设计语言的任意组合来编写用于执行本发明操 作的计算机程序代码,所述程序设计语言包括面向对象的程序设计语言—诸 如Java、Smalltalk、C++等,还包括常规的过程式程序设计语言—诸如“C” 语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部 分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机 上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉 及远程计算机的情形中,远程计算机可以通过任意种类的网络——包括局域 网(LAN)或广域网(WAN)—连接到用户计算机,或者,可以连接到外部计算 机(例如利用因特网服务提供商来通过因特网连接)。
附图中的流程图和框图显示了根据本发明的多个实施例的系统、方法和 计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或 框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、 程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行 指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以 以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本 并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。 也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的 方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实 现,或者可以用专用硬件与计算机指令的组合来实现。
也可以把这些计算机程序指令存储在计算机可读介质中,这些指令使得 计算机、其它可编程数据处理装置、或其他设备以特定方式工作,从而,存 储在计算机可读介质中的指令就产生出包括实现流程图和/或框图中的一个 或多个方框中规定的功能/动作的指令的制造品(article of manufacture)。计 算机程序指令还可以加载到计算机、其他可编程数据处理装置或其他设备 上,以使得一系列操作步骤在计算机、其他可编程装置或其他设备上执行, 以产生计算机实现的处理,使得在计算机或其他可编程装置上执行的指令提 供用于实现在流程图和/或框图的一个或多个方框中规定的功能/行为的处 理。
最后,此处使用的术语仅用于描述特定实施例的目的,并非用于限制本 发明。如在此处所使用的,单数形式的“一个”和“该”也意欲包括复数形 式,除非上下文清楚地表明是其他情形。还应该理解的是,术语“包含”、“包 括”、“具有”、“有”等,在本说明书中使用时,明确说明所述特征、整数、 步骤、操作、元件和/或组件的存在,但并不排除存在或附加一个或多个其他 的特征、整数、步骤、操作、元件、组件和/或这些特征、整数、步骤、操作、 元件、组件的组。
在下面的权利要求书中的所有部件或步骤加功能元件的对应的结构、材 料、动作和等效物旨在包括用于结合具体要求保护的其他所要求保护的元件 来实行功能的任何结构、材料或者动作。本发明的描述被提出用于示例和说 明目的,而不是意图穷尽性的或限制为所公开形式的本发明。对本领域的普 通技术人员来说,在不脱离本发明的范围和精神的情况下,许多修改和变化 是显而易见的。对实施例进行选择和描述,以对本发明的原理和实际应用做 出最好的说明,使本领域中的其他普通技术人员能够对于具有适合于预期的 特定用途的各种修改的多个实施例理解本发明。
由此已经详细地并且通过参照其实施例对本申请的发明进行了描述,显 然,在不脱离在所附权利要求书中定义的本发明的范围的情况下可以进行修 改和变型。