Oberon/ETH Oberon/教程/Columbus
这些教程页面由 André Fischer (afi) 编写,Hannes Marais 提供编辑协助,托管在 ETHZ 并保留在 ETH 许可证 下。相关内容通过 Book.Tool 在系统中找到。扩展内容也可在 纸质 上获取。一些教程页面在 WayBack 存档 中。
学习如何获取对象和库信息,以及如何使用检查工具 Columbus 自定义对象和操作公共库的内容。典型活动包括:检查和修改组件属性以及添加新属性。Columbus 不仅包含目前 Inspector 和 DetailInspector 提供的所有功能,而且远远超出了这些功能。因此,后者的工具将在中期逐步淘汰。
在你开始阅读本教程之前,你应该熟悉 Gadgets 系统及其组件,并且应该了解属性的概念。要了解更多关于 Gadgets 的信息,请参考 使用 Gadgets。一个非常重要的需要了解的是 RefGadgets 的使用。关于组件及其使用的描述位于 定义文件 RefGadgets.Def 的末尾。
在你开始操作公共库之前,你应该熟悉 Oberon System 3 中使用的库的概念。
预计时间:30 分钟。
Columbus 是一种非常通用的工具,可以应用于任何组件(视觉或模型)来检查其身份、属性、链接和属性。当应用于特定组件时,该工具会立即调整其形状,以表示该组件的属性形式。但是,请注意,此形式是由程序创建的文档。该工具还可以用于管理公共库及其内容。
在实践中,Columbus 以两种不同的“可变几何”文档形式呈现(它们始终适合系统轨道)。其中之一用于检查和配置对象的状态,称为“Objects.Panel”。另一个称为“Libraries2.Panel”,用于操作公共库。“Libraries2.Panel”的部分内容已集成到对象检查器中。“Objects.Panel”可以直接从库编辑器打开。
首先,按 Esc 键,确保删除所有标记和选择。检查器面板通过命令 Columbus.Inspect ~ 打开。
该命令在这里没有参数,但稍后你会了解到,也可以在命令之后指定对象的名称。该命令尝试查找要检查的组件:它可以是标记 (*) 或选定的视觉组件。如果找不到组件,就像现在一样,会打开一个最小的空白面板文档“Objects.Panel”。
它只包含 Columbus 徽标和一个带有放大镜的按钮。此按钮是检查按钮,用于检查对象。我们将将其称为 [检查] 按钮。
将面板移动到显示器的系统轨道或桌面的一侧,具体取决于你的操作模式。现在,选择该面板 -> 然后单击检查按钮。现在你看到的是正在检查的面板的属性视图;这是通过按钮中红色的小 LED 灯来证实的。但是,可以使用同一行中的其他按钮访问其他几个视图。它们将在后续章节中介绍和描述。obj1 面板的属性与其值一起呈现。
选择此按钮 -> 然后再次单击检查按钮。如你所见,一个新的按钮 出现在检查按钮的右侧。此按钮用于在面板的历史记录中后退一步。单击该按钮,你将返回到先前选择的面板的信息。
在右上角,你可以看到一个视觉参考,它代表了当前检查的对象。
现在将介绍该组件的特征和功能。
视觉参考组件存储对类型为 Objects.Object 的任何对象的引用。此框架可以有三种不同的表示形式
该组件的实际优势在于,无论其类型(视觉组件或模型)和大小如何,引用都表示一个对象。它可以像它所代表的对象一样轻松地拖放到另一个上下文或复制到另一个上下文。
视觉参考可以通过将视觉组件拖放到其框架中或复制选定的视觉组件来更改。或者,来自另一个引用的引用可以以相同的效果拖放或复制过去。当引用因这种用户交互而更改时,它将执行消耗命令(如果指定了)。要删除(或清除)引用,请在引用内使用从右到左的中间点击。像大多数其他视觉组件一样,引用在点击时可能会执行命令。
我们现在可以进行一些练习,以验证刚才介绍的内容。
要清除 Columbus 面板,请在当前对象引用内使用从右到左的中间点击。面板将恢复到最小尺寸。按 [后退] 按钮返回到“obj1”。现在,通过将组件拖放到引用中来设置新引用。用鼠标中键和右键点击你想要检查的任何组件的边框。鼠标指针将变为平坦的手形。在引用上释放鼠标按钮。Columbus 面板现在将显示有关拖放组件的信息。设置新对象的另一种方法是将选定的组件复制到引用中(左键单击和中键点击)。现在,关闭 Columbus 面板,然后单击以下命令。
总之,此视觉参考可以用于清除面板或设置要检查的新对象。
- Columbus.Inspect Columbus.Playground ~
一个新的 Columbus 面板再次打开(将其移动到屏幕的右侧)。被检查的对象是一个名为“Playground”的公共对象,它来自“Columbus.Lib”。现在,打开一个新的 文本,并将它的视觉参考拖放到文档面板中(在引用中使用鼠标中键和左键点击,将鼠标拖到文档上,然后释放鼠标按钮)。将插入的面板放在文档的左上角。选择组件并按下检查按钮。
请注意,根据对象的不同,此可用视图列表可能会有所不同。再次选中此复选框 -> 并使用检查按钮检查对象,或将其拖放到参考中。可以选择更少的视图。按下 按钮返回到 "Playground" 对象。
现在我们将详细描述对象的各种可能的视图。
对象视图
[edit | edit source]当前视图始终可以通过按钮中的红色 LED 识别。
[Attr] - 属性视图
此视图在 Attributes 部分显示被检查对象的属性及其值。这是首选视图,在检查新对象时始终首先显示(但对于库,库视图始终首先显示)。您可以更改属性值,并通过单击检查器面板右侧的 [Apply] 按钮将它们应用于对象。
试试看: 将属性 'Color' 更改为 1,然后按下 [Apply] 按钮。文档中先前插入的面板将颜色更改为红色。
New Attribute 部分用于向当前对象添加属性。它有两个文本字段:在第一个字段中输入新属性的名称,在第二个字段中输入其值。要添加属性,请单击 [Add] 按钮。添加的属性可以通过单击 [Del] 按钮删除。在 Attr. Name 字段中输入要删除的属性的名称。
试试看: 输入一个名称(例如 'New1')和一个值(例如 'Value1'),然后按下 [Add] 按钮。该属性将立即添加到对象的属性列表中。再试一次,使用 'Name2' 和值 'Yes'。
此视图是当前对象检查之旅的起点,并包含到其他相关对象或库的游览。每一步都记录在一个历史堆栈中,通过单击 按钮,可以逐步回退。但是,如果呈现任何其他视图(在下面描述的视图中),单击右上角的 Current Object 参考将重新投影此视图。
[Link] - 链接视图
此视图在 Links 部分显示被检查对象的链接。您可以更改对象链接,并通过单击检查器面板右侧的 [Apply] 按钮将它们应用于对象。
New Link 部分用于向当前对象添加链接。它包含一个用于指定新链接名称的文本字段,以及一个用于放置要链接对象的空可视参考。要添加链接,请单击 [Add] 按钮。添加的链接可以通过单击 [Del] 按钮删除。在 Link Name 字段中输入要删除的链接的名称。
要检查其工作原理,请将此参考 -> 的对象拖放到检查器面板上的 'Picture' 链接(使用鼠标中键右击)。按下 [Apply] 按钮,查看文本中的面板(不错吧?)。
[Coords] - 坐标视图
此按钮仅在检查可视工具时存在。此视图显示可视工具的坐标。此视图不适用于模型(请参见带有 'Columbus.Background' 的面板)。
试试看: 将 'W' 更改为 190,将 'H' 更改为 130,然后按下 [Apply] 按钮。随意使用面板及其内容,但不要忘记返回此处继续接下来的操作。
[Comp] - 组件视图
此按钮仅在检查容器工具时存在。此视图列出了容器工具及其生成器过程和可视参考的组件。您可以使用鼠标中键检查每个参考,但不能更改它们。检查其中一些,但在继续之前,请确保您已返回到此视图(后退按钮)。
- 调用 Watson
Columbus 使您可以查看被检查对象的附加描述。这些是教程、定义文件或模块文件。此按钮使用对象的生成器名称作为参数调用 Watson.ShowObj。单击该按钮,将打开文本 'Panels.Def'(如果存在,则为 'Panels.Mod')。
[Lib] - 库视图
此按钮仅在检查的对象绑定到公共或私有库时存在。显然,当检查库时,库视图是首选视图,始终首先显示。视图列出了库中包含的对象。每个对象都显示其生成器过程、参考号,以及在公共库的情况下,索引中的名称,以及可视参考(参见上面的组件视图)。使用参考检查库中的特定对象。被检查的公共库的名称显示在右上角。在私有库的情况下,文本 simply "(Private)"。当调用库视图时,正在被检查的对象很容易识别:寻找蓝色的文本行。如果没有当前对象,则没有行突出显示。
试试看: Columbus.Inspect Watson - 库视图立即显示。现在,检查 "ModFile" 文本字段(Ref # 4),然后再次访问库视图(不要单击 按钮!)。
[Editor] - 库编辑器
此按钮仅在检查的对象绑定到公共库时存在。库编辑器与下一节中描述的库面板大致相同。通过它,您可以从内存中删除库、将库存储到磁盘、检索对象、释放对象或将对象安装到库中。
您已到达此次操作的末尾。关闭您在此过程中打开的所有面板和文本,然后进入关于库面板的下一节。
使用库检查器
[edit | edit source]使用命令 Desktops.OpenDoc Libraries2.Panel ~ 打开库面板。
该面板分为三个部分。顶部包含按钮 [Directory]、两个复选框和一个列表。该列表显示库名称。您可以选择要查看的库类型。要查看存储在磁盘上的库列表,请选择 "Disk"。要查看当前加载到内存中的库列表,请选择 "Memory"。单击按钮 [Directory] 以查看您选择查看的列表。
单击选择列表中的一个库。Library 文本字段将更新:它显示将成为中间部分按钮控制的库管理操作目标的库。
- [Unload] - 从内存中删除库。
- [Store] - 将库存储到磁盘(库仍缓存在内存中)。
- [Cleanup] - 收集未使用的对象并将库存储到磁盘。
同时,还会显示库中包含的对象列表。可以通过单击右侧的可视参考检查每个对象。
单击 Name 按钮选择列表中的一个对象。Object 文本字段将更新:它显示将成为底部部分按钮控制的操作目标的对象。
- [Retrieve] - 将对象插入到插入点,或将其作为文档打开(如果它是文档工具)。右侧的三个复选框指示从库检索是否应涉及无副本、深层副本或浅层副本(深层副本为默认)。
- [Rename] - 使用指定的名称重命名对象。对对象所做的所有更改将立即反映到对象的客户端。右侧的文本字段用于指定新名称。
- [Install] - 使用指定的名称将对象插入库中。具有此名称的对象将被覆盖。右侧的文本字段用于指定名称。空的参考工具用于指定要安装的对象。
- [Free] - 从库中释放所选对象。
Columbus.Inspect 命令可以采用不同的形式,但在每种情况下它都会打开一个名为 "Objects.Panel" 的面板文档。
Columbus.Inspect ~ (不带参数!) 尝试定位一个标记 (*) 或一个选定 (最近选定的那个) 视觉 小工具,或最近选定对象的引用对象。后一种情况优先于其他情况,在下面描述。如果成功,将显示小工具的属性 视图。否则,将打开一个最小面板。星形 (*) 标记允许更细粒度的对象选择。正如你可能猜到的,此命令隐藏在 [Inspect] 按钮的Cmd 属性中。
要查看区别,请尝试以两种方式检查标题 "obj1" 。如果选择面板,你必须访问组件视图并单击 TextsFields.NewCaption 引用以到达与设置标记相同的视图。
Columbus.Inspect LibName [.ObjName] | [^] ~ 根据以下规则,显示有关命名公共库或公共库中对象的检查信息
- 如果参数中的名称代表一个库,例如 Watson,则 "Objects.Panel" 面板将包含列出库中所有对象的库 视图。
- 如果参数中的限定名称代表库中的一个对象,例如 Watson.Order,则将显示对象的属性 视图。
- 如果库中找不到该对象,例如 Watson.Disorder,则也会显示库中所有对象的枚举。
- 最后,如果第一个名称部分不是库的名称(库未找到),例如 What.Order 或 NotaLib,则将显示一个最小的库 视图(空库)。
尝试所有示例: Columbus.Inspect ^
Columbus.InspectLink LinkName 打开一个名为 "Objects.Panel" 的面板文档。要检查的对象取自执行小工具的链接 "LinkName" 。如果链接不存在或没有对象,则将打开一个最小的 'Objects.Panel' 文档。(此命令可以用作 RefGadget 的 Cmd 或 ConsumeCmd。)
Columbus.ShowObjs LibName 打开一个名为 "Columbus.ShowObjs" 的文本文档,其中列出了命名库导出的对象。名称必须具有 ".Lib" 扩展名。提供的信息是 Columbus.Inspect LibName 获得信息的子集,并且更简陋。
尝试此操作: Columbus.ShowObjs Watson.Lib 并与之前获得的结果进行比较。
Columbus.GetObj LibName.ObjName 从库 "LibName.Lib" 中检索对象 "ObjName" 。如果对象是文档小工具,则会打开文档的副本到显示器上。一个小工具框架将插入到插入点的位置。根据名为 "copy style" 的对象的价值进行复制。如果在当前上下文中找不到此对象,则假定复制样式为深层。将所有选定框架设置为 "Model" 链接。(模型不做复制)。
Columbus.FreeObj LibName.ObjName 从库 "LibName.Lib" 中删除对象 "ObjName" 。被释放对象包含的对象不会被删除(参见 Columbus.CleanupLib)。
Columbus.AddObj LibName.ObjName 将一个名为 "ObjName" 的新对象插入到库 "LibName.Lib" 中。如果库中已经存在同名对象,则用新对象替换该对象。新对象取自当前上下文中名为 "value" 的视觉引用。
Columbus.RenameObj LibName.OldName NewName 将库 "LibName.Lib" 的索引中的名称 "OldName" 替换为 "NewName" 。
Columbus.ShowLibs [ObjName] 将当前加载到内存缓存中的库的名称插入到当前上下文中的命名列表中。如果找不到列表,则改为打开一个名为 "Columbus.ShowLibs" 的文本文档。例如, "Libraries2.Panel" 中的 [Directory] 按钮使用此命令。此命令与命令 System.ShowLibraries 密切相关,不同之处在于不列出字体库。
Columbus.StoreLib ({LibName} | ^) 将命名库存储在当前目录中的磁盘上。名称必须具有 ".Lib" 扩展名。
Columbus.UnloadLib ({LibName} | ^) 从内存中删除命名库。名称必须具有 ".Lib" 扩展名。
Columbus.CleanupLib ({LibName} | ^) 从命名库中释放未引用的对象。清理后的库将存储在磁盘上并重新加载到内存中。名称必须具有 ".Lib" 扩展名。
C
Columbus.AddObj
Columbus.FreeObj
Columbus.GetObj
Columbus.Inspect
Columbus.InspectLink
Columbus.RenameObj
Columbus.ShowObjs
Columbus
L
O
V
修订,afi 1996年8月16日
安装于 1997年5月30日