编程 Roma Widget Set (C# X11) - 一个零依赖的 GUI 应用程序框架 - 小部件集





5.00/5 (5投票s)
如何在不依赖 GTK 或 KDE 等 GUI 框架的情况下,在 C# 中高效地最大化利用 Roma 部件集。部件的简要介绍。
引言
本文简要介绍了Roma 部件集 (Xrw) 的所有部件。之所以创建本文,是因为整个主题已经扩展到 50 多页,我决定将其分为三个部分(配合 )和四个部分(配合
)。使用
,我已将完整的 API 描述转移到单独的 HTML 文档(属于 Xrw 项目)中,并重构了所有四个文章,以使阅读更具娱乐性和趣味性。
原始文章:使用 Roma 部件集 (C# X11) 编程 - 一个零依赖的 GUI 应用程序框架 - 简介。它简要介绍了部件集的功能。(在
之前,文章内容是~基础。其中包含通用描述。)本文应始终作为首选起点。
第一篇分拆出来的文章:使用 Roma 部件集 (C# X11) 编程 - 一个零依赖的 GUI 应用程序框架 - 部件集。由于“枯燥”的 API 文档不断增长,API 文档已随
转移到单独的 HTML 文档(属于 Xrw 项目),而本文则专注于简要介绍所有部件。(在
之前,文章内容是~内置部件。其中仅包含内置部件的 API 参考描述。)
第二篇分拆出来的文章:使用 Roma 部件集 (C# X11) 编程 - 一个零依赖的 GUI 应用程序框架 - 编程技术。由于“枯燥”的 API 文档不断增长,API 文档已随
转移到单独的 HTML 文档(属于 Xrw 项目),而本文则专注于编程技术。(在
之前,文章内容是~简单部件。其中仅包含简单部件的 API 参考描述。)
第三篇分拆出来的文章:使用 Roma 部件集 (C# X11) 编程 - 一个零依赖的 GUI 应用程序框架 - MVVM/XAML 支持。由于“枯燥”的 API 文档不断增长,API 文档已随
转移到单独的 HTML 文档(属于 Xrw 项目),而本文则专注于介绍 Xrw 的 MVVM/XAML 支持。(在
之前,文章内容是~复合部件。其中仅包含复合部件的 API 参考描述。)
下面描述的所有功能都可以标记为
|
|
部件集
部件的名称和功能遵循“Athena 部件集”的理念,并略受“Motif 部件集”和 GTK 的影响。该部件集不完整,但仍在不断增长。从版本 开始,该部件集包含受现代 GUI 工具包影响的高级部件。部件层次结构如下所示:
内置部件
从版本 开始,内置部件在此文章中进行描述。从版本
开始,部件 API 描述已转移到单独的 HTML 文档中,而此在线版本已缩减为所有部件的简要介绍。
内置部件定义了部件集的基本继承结构 - 其中大部分是专业化部件/小部件的抽象基类。大多数与其等价物在“Athena 部件集”中有对应。内置部件包括:
XrwObject:IDisposable | 此部件集的最终基对象[1, ∅] |
⌊ XrwFigure | 2D 形状的基本基对象[1, ∅] |
⌊ XrwRectObject | 具有几何形状的基本基对象[1, ∅] |
⌊ XrwVisibleRectObj | 具有绘制功能的基本基对象[1, ∅] |
⌊ XrwCore | 通用基础小部件/控件[2/3, ∅] |
⌊ XrwComposite | 容器[2/3, ∅],管理多个子对象 |
⌊ XrwConstraint | 容器[2/3, ∅],具有几何管理功能 |
⌊ XrwShell | 基本 Shell 部件[3] |
⌊ XrwOverrideShell | 弹出窗口的基类,不与窗口管理器交互[4] |
⌊ XrwWmShell | 与窗口管理器交互的 Shell 基类[4] |
⌊ XrwApplicationShell | X11 应用程序 Shell 的通用代码 |
⌊ XrwTransientShell | 与窗口管理器交互的弹出窗口基类[4] |
[1] 对象 = 不可见且无窗口,不使用***父***窗口或***自有***窗口
[2] 小部件 = 使用***父***窗口而不是***自有***窗口,比控件节省资源,但只能接收其包含控件转发的事件
[3] 控件 = 拥有***自有***窗口,可直接接收窗口管理器的事件[4]
[4] WM = 窗口管理器
[∅] 请勿实例化
图形
图形小部件是 的新增功能。它们提供几何形状,通常在没有用户输入支持的情况下使用(例如,命令的点击、菜单项的选择、文本字段的编辑、列表项或树节点的选择)。图形小部件包括:
XrwObject:IDisposable | 此部件集的最终基对象[1, ∅] |
⌊ XrwFigure | 2D 形状的基本基对象[1, ∅] |
⌊ XrwArcFigure | 表示一个圆弧[2] |
⌊ XrwEllipseFigure | 表示一个椭圆[2] |
⌊ XrwLineFigure | 表示一条直线[2] |
⌊ XrwPathFigureCollection | 表示一系列连接的直线和曲线[2] |
⌊ XrwRectangleFigure | 表示一个矩形[2] |
[1] 对象 = 不可见且无窗口,不使用***父***窗口或***自有***窗口
[2] 小部件 = 使用***父***窗口而不是***自有***窗口,比控件节省资源,但只能接收其包含控件转发的事件
[3] 控件 = 拥有***自有***窗口,可直接接收窗口管理器的事件[4]
[4] WM = 窗口管理器
[∅] 请勿实例化
简单部件
从版本 开始,简单部件的介绍已在文章 使用 Roma 部件集 (C# X11) 编程 - 一个零依赖的 GUI 应用程序框架 - 简单部件(该文章现已将重点转移到编程技术)中进行了描述,并且已随
转移到本文。从版本
开始,部件 API 描述已转移到单独的 HTML 文档中,而此在线版本已缩减为所有部件的简要介绍。
简单部件/小部件的特点是它们既不是由多个部件/小部件组成的,也不包含子部件/小部件。它们包括:
XrwObject:IDisposable | 此部件集的最终基对象[1, ∅] |
⌊ XrwRectObject | 具有几何形状的基本基对象[1, ∅] |
⌊ XrwVisibleRectObj | 具有绘制功能的基本基对象[1, ∅] |
⌊ XrwCore | 通用基础小部件/控件[2/3, ∅] |
⌊ XrwSimple | 通用对象[2/3] |
⌊ XrwColorChooserComb | 命名颜色选择器部件[3],颜色排列为组合框 |
⌊ XrwImage | 图像对象[2/3] |
⌊ XrwLabelBase | 静态标签基对象[2/3, ∅] |
| ⌊ XrwComboBox | 下拉选择部件[3] |
| ⌊ XrwLabel | 静态标签[2/3] |
| | ⌊ XrwCommand | 命令按钮部件[3] |
| | | ⌊ XrwMenuButton | 按钮部件[3],用于弹出简单菜单 |
| | ⌊ XrwSme | 简单菜单项小部件[2] |
| ⌊ XrwLabelAndColor | 标签和颜色矩形部件[3],用于选择颜色 |
| ⌊ XrwTextSpinButton | 微调按钮部件[3],用于微调文本常量 |
| ⌊ XrwToggle | 切换按钮控件[3] |
| ⌊ XrwRadio | 单选按钮控件[3] |
| ⌊ XrwNotebookTab | 笔记本标签页按钮部件[3] |
⌊ XrwList | 列表部件[3] |
⌊ XrwRange | 滚动条和比例尺的通用基类[3] |
| ⌊ XrwScale | 比例尺部件[3] |
| ⌊ XrwScrollbar | 滚动条控件[3] |
⌊XrwRibbonCommandBase | 功能区命令小部件的基对象[2, ∅] |
| ⌊ XrwRibbonButton | 功能区命令按钮小部件[2] |
| | ⌊ XrwRibbonSplitButton | 功能区拆分按钮小部件[2],用于弹出简单菜单 |
| ⌊ XrwRibbonControlGroup | 功能区控件组小部件[2],用于组织控件组节点 |
⌊ XrwText | 单行文本编辑控件[3] |
⌊ XrwTree | 切换按钮控件[3] |
⌊ XrwViewportGridViewHeader | 视口嵌入式网格的列标题部件[3] |
[1] 对象 = 不可见且无窗口,不使用***父***窗口或***自有***窗口
[2] 小部件 = 使用***父***窗口而不是***自有***窗口,比控件节省资源,但只能接收其包含控件转发的事件
[3] 控件 = 拥有***自有***窗口,可直接接收窗口管理器的事件[4]
[4] WM = 窗口管理器
[∅] 请勿实例化
复合部件
从版本 开始,复合部件的介绍已在文章 使用 Roma 部件集 (C# X11) 编程 - 一个零依赖的 GUI 应用程序框架 - 复合部件(该文章现已将重点转移到 MVVM/XAML 支持)中进行了描述,并且已随
转移到本文。从版本
开始,部件 API 描述已转移到单独的 HTML 文档中,而此在线版本已缩减为所有部件的简要介绍。
复合部件/小部件的特点是它们要么由多个部件/小部件组成,要么可以包含子部件/小部件。它们包括:
XrwObject:IDisposable | 最终基对象[1, ∅] |
⌊ XrwRectObject | 具有几何形状的基本基对象[1, ∅] |
⌊ XrwVisibleRectObj | 具有绘制功能的基本基对象[1, ∅] |
⌊ XrwCore | 通用基础小部件/控件[2/3, ∅] |
⌊ XrwComposite | 容器[2/3, ∅],管理多个子控件 |
⌊ XrwConstraint | 容器[2/3, ∅],具有几何管理功能 |
| ⌊ XrwBox | 容器[2/3],水平/垂直排列子对象 |
| | ⌊ XrwHslColorPanel | 色相、饱和度、亮度颜色选择器小部件[2] |
| | ⌊ XrwNotebook | 容器[2/3],在页面上排列子对象 |
| | ⌊ XrwRadioBox | 小部件[2],水平/垂直排列 XrwRadio 子控件 |
| | ⌊ XrwSpinBox | 小部件[2],将不可见的子对象旋转为可见 |
| ⌊ XrwCanvas | 容器[2/3],用于 XrwFigure 的结构化图形 |
| ⌊ XrwDockPanel | 容器[2],将子对象排列到最多五个区域 |
| ⌊ XrwFrame | 容器[2/3],仅排列一个子对象 |
| ⌊ XrwGridForm | 容器[2/3],在列/行中排列子对象 |
| | ⌊ XrwColorSelector- | | GridForm |
容器[2/3],XrwGridForm 的子对象用于选择预定义颜色 |
| | ⌊ XrwCustomColorChooser- | | GridForm |
容器[2],XrwGridForm 的子对象用于通过 HSL 或 RGB 颜色模型选择自定义颜色 |
| | ⌊ XrwHslColorPanel | 色相、饱和度、亮度颜色选择器小部件[2] |
| | ⌊ XrwRgbColorPanel | 红、绿、蓝颜色选择器小部件[2] |
| ⌊ XrwPaned | 部件[3],控制两个或多个分块的子对象 |
| ⌊ XrwPortHole | 小部件[2],一次仅显示***一个***子对象 |
| ⌊ XrwPropertyGrid | 部件[3],用于浏览和编辑对象的属性 |
| ⌊ XrwRibbon | 部件[3],实现了功能区 GUI |
| ⌊ XrwRibbonPanel | 小部件[2],组织功能区的命令对象 |
| ⌊ XrwRibbonTab | 小部件[2],水平排列 XrwRibbonPanel 子对象 |
| ⌊ XrwUniformGrid | 容器[2],将子对象排列到大小相等的列/行中 |
| ⌊ XrwViewport | 容器[2/3],允许***一个***子对象滚动 |
⌊ XrwShell | 基本 Shell 部件[3] |
⌊ XrwOverrideShell | 基础弹出 shell,不与窗口管理器交互[4] |
| ⌊ XrwBaseCellEditorShell | 弹出编辑器 Shell 基类[2] |
| ⌊ XrwGenericCell- | EditorShell |
通用弹出编辑器 Shell[2] |
| ⌊ XrwRibbonAppMenu | XrwRibbon 的弹出应用程序菜单 Shell[2] |
| ⌊ XrwSimpleMenu | XrwSme 小部件的弹出菜单 Shell[2] |
| ⌊ XrwDropDownCell- | | ∙EditorShell |
下拉弹出编辑器 Shell[2] |
| ⌊ XrwSpinMenu | XrwSme 小部件的弹出可滚动菜单 Shell[2] |
| ⌊ XrwToolTipShell | 部件和小部件的弹出工具提示 Shell[2] |
⌊ XrwWmShell | 与窗口管理器交互的基本 Shell[4] |
⌊ XrwApplicationShell | X11 应用程序的通用代码 |
⌊ XrwTransientShell | 与窗口管理器交互的弹出窗口基类[4] |
⌊ XrwDialogShell | 与窗口管理器交互的对话框基类[4] |
[1] 对象 = 不可见且无窗口,不使用***父***窗口或***自有***窗口
[2] 小部件 = 使用***父***窗口而不是***自有***窗口,比控件节省资源,但只能接收其包含控件转发的事件
[3] 控件 = 拥有***自有***窗口,可直接接收窗口管理器的事件[4]
[4] WM = 窗口管理器
[∅] 请勿实例化
内置部件
详细的描述(包括 API)可作为单独的 HTML 文档获得,是 使用 Roma 部件集 (C# X11) 编程 - 一个零依赖的 GUI 应用程序框架 - 简介 示例应用程序项目 Xrw 的一部分。以下列表侧重于概述和每个部件/小部件的简要介绍。
XrwObject
XrwObject
类是部件集的最终基类。它可与 Athena 的“Object”相媲美。
X Toolkit Intrinsics 中关于“Object”的描述如下(X Toolkit Intrinsics 参考手册):
Object 是类层次结构的根;它没有超类。所有对象和部件都是 Object 的子类。Object 封装了资源管理机制,并且永远不会被实例化。
此类是抽象的,不能实例化。
继承 (↑)
IDisposable --> XrwObject
XrwFigure
XrwFigure
类是简单 2D 形状的通用基对象。Athena 和 GTK 中没有此类,其原型是 System.Windows.Shapes 中的“Shape”类。
图形对象是形状元素(如直线、圆弧、矩形、圆角矩形、椭圆、折线、多边形或路径)的基类。路径可以包括二次或三次贝塞尔曲线。
此类通常不被实例化。
派生类 XrwArcFigure、XrwEllipseFigure、XrwLineFigure 和 XrwRectangleFigure 根据其名称表示基本图形。派生类 XrwPathFigureCollection 表示一个复杂图形。它可以由多个子图形、各种直线和/或曲线段组成,并且可以是开放或闭合的图形。
即使折线和多边形不受 XrwFigure
派生类的支持,任何复杂度的折线和多边形都可以使用 XrwPathFigureCollection
创建。
由于 XrwArcFigure
、XrwEllipseFigure
、XrwRectangleFigure
和 XrwPathFigureCollection
支持使用图块位图填充,因此这些类可用于绘制图像图形。
图像在 XrwCanvas
上显示了几条直线、圆弧、矩形、椭圆、折线和多边形图形。
继承 (↑)
IDisposable --> XrwObject --> XrwFigure
XrwRectObject
XrwRectObject
类是矩形对象的基本基类。它可与 Athena 的“RectObj”相媲美。
X Toolkit Intrinsics 中关于“RectObj”的描述如下(X Toolkit Intrinsics 参考手册):
RectObj 是 Object 的直接子类。它没有窗口,但有宽度、高度和位置,并封装了几何管理机制。
RectObj 可被子类化以提供部件状对象(有时称为“小部件”),这些对象不使用窗口,并且不具有简单部件中经常未使用的功能。 这可以节省服务器和应用程序的内存资源。
此类是抽象的,不能实例化。
图像展示了 XrwRectObject
的一般功能。
继承 (↑)
IDisposable --> XrwObject --> XrwRectObject
XrwVisibleRectObj
XrwVisibleRectObj
类是可见矩形对象的基本基类。它可与 Athena 的“unnamed”相媲美。
此类是抽象的,不能实例化。
图像展示了 XrwVisibleRectObj
的一般功能。
继承 (↑)
IDisposable --> XrwObject --> XrwRectObject --> XrwVisibleRectObj
XrwCore
XrwCore
类是部件/小部件的通用基对象。它可与 Athena 的“Core”相媲美。
Athena 关于“Core”的描述如下(X Window System Athena Widgets, Quick Reference Guide):
Core 部件构成了所有其他部件类的基础。它是可以实际显示的最高级部件类(其类层次结构中的父对象没有关联的窗口,因此对应用程序程序员来说并不太有趣)。Core 部件有时用作绘图区域,但否则很少实例化。
此类通常不被实例化。
继承 (↑)
IDisposable --> XrwObject --> XrwRectObject --> XrwVisibleRectObj --> XrwCore
XrwComposite
XrwComposite
类是复合对象的基类。它可与 Xt 的“Composite”相媲美。
X Toolkit Intrinsics 中关于“Composite”的描述如下(X Toolkit Intrinsics 参考手册):
Composite 是所有可以拥有子对象的类的超类。它定义了这些子对象的几何管理方法。
此类是抽象的,不能实例化。
继承 (↑)
IDisposable --> XrwObject --> XrwRectObject --> XrwVisibleRectObj --> XrwCore --> XrwComposite
XrwConstraint
XrwConstraint
类是约束的基本基类。它可与 Xt 的“Constraint”相媲美。
X Toolkit Intrinsics 中关于“Constraint”的描述如下(X Toolkit Intrinsics 参考手册):
Constraint 部件是 Composite 的子类。它们的名字来源于它们根据与每个子对象关联的约束来管理子对象的几何形状。这些约束可以很简单,比如父对象允许子对象占据的最大宽度和高度,也可以很复杂,比如当该子对象移动或调整大小时其他子对象应如何变化。Constraint 部件允许父对象定义提供给其子对象的资源。例如,如果 Constraint 父对象定义了其子对象的最大尺寸,则会为每个子对象检索这些新的尺寸资源,就好像它们是子部件定义的资源一样。因此,约束资源可以像子对象的任何其他资源一样包含在参数列表或资源文件中。
Constraint 部件具有正常复合部件的所有职责,此外,还必须处理并根据与其每个子对象关联的约束信息进行操作。
为了方便部件和 intrinsics 跟踪与子对象关联的约束,每个部件都有一个“constraints”字段,它是指向父对象特定结构(包含子对象的约束信息)的地址。如果子对象的父对象不是 Constraint 的子类,则子对象的“constraints”字段为 NULL。
请注意,约束数据结构对子对象是透明的;也就是说,当一个子对象由 Constraint 部件的子类父对象管理时,从子对象的角度来看,与由正常 Composite 部件管理没有区别。
此类是抽象的,不能实例化。
图像展示了 XrwConstraint
的派生类 XrwGridForm
(带有四个按钮),这很好地演示了 XrwConstraint
派生类应用于其子对象的显式约束。
- 按钮 1:
Row
= 0,Column
= 0,ColumnSpan
= 2(第 2 列宽度为双倍) - 按钮 2:
Row
= 1,Column
= 0 - 按钮 3:
Row
= 2,Column
= 0(第 2 行高度为双倍) - 按钮 4:
Row
= 1,Column
= 1,RowSpan
= 2
继承 (↑)
IDisposable --> XrwObject --> XrwRectObject --> XrwVisibleRectObj --> XrwCore --> XrwComposite --> XrwConstraint
XrwShell
XrwShell
类是基本 Shell 部件。它可与 Xt 的“Shell”部件相媲美。
X Toolkit Intrinsics 中关于“Shell”的描述如下(X Toolkit Intrinsics 参考手册):
Shell 是 Composite 的子类,它处理其唯一允许的子部件的窗口管理器交互。
部件与其父部件(即直接包含它们的部件)协商其大小和位置。层次结构顶层的部件没有父部件。相反,它们必须与外部世界打交道。为了实现这一点,每个顶层部件都创建为特殊部件(称为 Shell)的子对象。Shell。
Shell 的设计尽可能地隐形。客户端必须创建它们(`XtAppInitialize()` 或 `XtCreateApplicationContext()` 的调用返回的顶层部件是 Shell 部件,由 `XtPopup()` 创建的弹出部件也是如此),但它们不应担心其大小。
如果 Shell 部件从外部(通常是窗口管理器)调整大小,Shell 部件也会自动调整其子部件的大小。同样,如果 Shell 的子部件需要更改大小,它可以向 Shell 发出几何请求,Shell 将与外部环境协商大小更改。客户端不应直接尝试更改其 Shell 的大小。
共有七种类型的 Shell。只有四种是公开的(即应用程序应实例化的):
- OverrideShell。
用于完全绕过窗口管理器的 Shell 窗口(例如,弹出菜单 Shell)。
- TransientShell。
用于可以由窗口管理器操纵但不能单独最小化的 Shell 窗口(例如,没有其关联应用程序就没有意义的对话框)。窗口管理器仅在主应用程序 Shell 被最小化时才将其最小化。
- TopLevelShell。
用于普通的顶层窗口(例如,应用程序需要的任何其他顶层部件)。
- ApplicationShell。
由窗口管理器用于定义单独的应用程序实例,这是应用程序的主顶层窗口。
三种 Shell 类是内部的,不应实例化或子类化:
- Shell。
为 Shell 部件和所有类型 Shell 所需的字段提供基类。Shell 是 Composite 的直接子类。
- WMShell。
包含公共窗口管理器协议所需的字段。
- VendorShell。
包含用于与供应商特定窗口管理器通信的字段。
Shell 部件的类层次结构如下:
Shell
⌊ OverrideShell
⌊ WMShell
∙⌊ VendorShell
⌊ TopLevelShell
| ⌊ ApplicationShell
⌊ TransientShell
此类是抽象的,不能实例化。
图像显示了一个空的 XrwWmShell
(带窗口装饰)和一个空的 XrwOverrideShell
(不带窗口装饰)。
继承 (↑)
IDisposable --> XrwObject --> XrwRectObject --> XrwVisibleRectObj --> XrwCore --> XrwComposite --> XrwShell
XrwOverrideShell
XrwOverrideShell
类是基本的弹出 Shell,不与窗口管理器交互。它可与 Xt 的“OverrideShell”部件相媲美。
X Toolkit Intrinsics 中关于“OverrideShell”的描述如下(X Toolkit Intrinsics 参考手册):
OverrideShell 用于完全绕过窗口管理器的 Shell 窗口,例如,弹出菜单 Shell。
XrwOverrideShell
在 `Realize()` 时自动向 `XrwApplicationShell` 的关联 Shell 列表(作为覆盖 Shell)注册自己,以转发事件,并在 `Unrealize()` 时从 `XrwApplicationShell` 的关联 Shell 列表中注销自己,以停止事件转发。
此类是抽象的,不能实例化。它必须由应用程序的弹出菜单、弹出工具提示或弹出内嵌编辑器继承。
图像显示了 XrwOverrideShell
(不带窗口装饰)的派生类 XrwToolTip
(空)、XrwSimpleMenu
(带两个菜单项)、XrwGenericCellEditorShell
(带一个用于编辑文本值的 XrwText
部件)和 XrwDropDownCellEditorShell
(带 4 个可选值)。
继承 (↑)
IDisposable --> XrwObject --> XrwRectObject --> XrwVisibleRectObj --> XrwCore --> XrwComposite --> XrwShell --> XrwOverrideShell
XrwWmShell
XrwWmShell
类是与窗口管理器交互的基本 Shell。它可与 Xt 的“WMShell”部件相媲美。
X Toolkit Intrinsics 中关于“WMShell”的描述如下(X Toolkit Intrinsics 参考手册):
WMShell 是 Shell 的直接子类,提供基本的窗口管理器交互。它本身不应被实例化;其子类 TransientShell、TopLevelShell 和 ApplicationShell 提供了适用于特定类型顶层窗口的其他功能。
此类是抽象的,不能实例化。
图像显示了一个空的 XrwWmShell
。
继承 (↑)
IDisposable --> XrwObject --> XrwRectObject --> XrwCore --> XrwComposite --> XrwShell --> XrwWmShell
XrwApplicationShell
XrwApplicationShell
类是与窗口管理器交互的基本 Shell。它可与 Xt 的“ApplicationShell”部件相媲美。
X Toolkit Intrinsics 中关于“ApplicationShell”的描述如下(X Toolkit Intrinsics 参考手册):
ApplicationShell 是应用程序的普通顶层窗口。它没有父对象,位于窗口部件树的根。应用程序应只有一个 ApplicationShell,除非应用程序实现为多个逻辑应用程序。通常,应用程序将使用 TopLevelShell 部件来处理其他顶层窗口。ApplicationShell 由调用 `XtVaAppInitialize()` 返回。它也可以通过调用 `XtVaAppCreateShell()` 来显式创建。
XrwApplicationShell
还管理应用程序的瞬态 Shell 和覆盖 Shell(必须自行注册/注销),以转发事件。
此类是抽象的,不能实例化。它必须由应用程序的主窗口继承。
图像显示了示例应用程序的 XrwApplicationShell
派生类 X11Window 。
继承 (↑)
IDisposable --> XrwObject --> XrwRectObject --> XrwVisibleRectObj --> XrwCore --> XrwComposite --> XrwShell --> XrwWmShell --> XrwApplicationShell
XrwTransientShell
XrwTransientShell
类是与窗口管理器交互的弹出窗口的基类。它可与 Xt 的“TransientShell”部件相媲美。
X Toolkit Intrinsics 中关于“TransientShell”的描述如下(X Toolkit Intrinsics 参考手册):
TransientShell 用于可以由窗口管理器操纵但不能单独最小化的 Shell 窗口。例如,对话框在没有其关联应用程序的情况下没有意义。窗口管理器仅在主应用程序 Shell 被最小化时才将其最小化。
XrwTransientShell
必须始终向其上级的 XrwApplicationShell
注册和注销。
此类是抽象的,不能实例化。它必须由应用程序的消息、输入或对话框窗口继承。
图像显示了 XrwTransientShell
派生类 X11About 。
继承 (↑)
IDisposable --> XrwObject --> XrwRectObject --> XrwVisibleRectObj --> XrwCore --> XrwComposite --> XrwShell --> XrwWmShell --> XrwTransientShell
图形
详细的描述(包括 API)可作为单独的 HTML 文档获得,是 使用 Roma 部件集 (C# X11) 编程 - 一个零依赖的 GUI 应用程序框架 - 简介 示例应用程序项目 Xrw 的一部分。以下列表侧重于概述和每个部件/小部件的简要介绍。
XrwArcFigure
XrwArcFigure
类表示一个简单的 2D 圆弧。Athena、Motif 和 GTK 中没有此类。
圆弧对象表示一个单一的圆形或椭圆形圆弧。圆弧由一个轴对齐的边界矩形以及两个(开始和结束)角度指定。圆或椭圆的中心是矩形的中心,主轴和次轴由宽度和高度指定。
此类有两个公共构造函数。其中一个使用中心、半径、开始角度和结束角度定义一个新的 XrwArcFigure
,其中两个角度均以度为单位,顺时针方向相对于 12 点钟位置。另一个使用边界框、开始角度和结束角度定义一个新的 XrwArcFigure
,其中两个角度均以弧度为单位,逆时针方向相对于 3 点钟位置。
通常,XrwArcFigure
不是一个闭合图形(除非开始角度和结束角度之间的幅度为 360°),但它仍然支持填充。
图像在 XrwCanvas
上显示了两个填充的圆弧。
继承 (↑)
IDisposable --> XrwObject --> XrwFigure --> XrwArcFigure
XrwEllipseFigure
XrwEllipseFigure
类表示一个简单的 2D 椭圆。Athena、Motif 和 GTK 中没有此类。
椭圆对象表示一个单一的椭圆。椭圆由一个轴对齐的边界矩形指定。椭圆的中心是矩形的中心,主轴和次轴由宽度和高度指定。
此类有两个公共构造函数。其中一个使用中心和半径定义一个新的 XrwEllipseFigure
。另一个使用边界框定义一个新的 XrwEllipseFigure
。
XrwEllipseFigure
始终是闭合图形并支持填充。
图像在 XrwCanvas
上显示了两个填充的椭圆。
继承 (↑)
IDisposable --> XrwObject --> XrwFigure --> XrwEllipseFigure
XrwLineFigure
XrwLineFigure
类表示一个简单的 2D 直线。Athena、Motif 和 GTK 中没有此类。
直线对象表示两个点之间的一条直线。直线由两个(开始和结束)点指定。
此类有两个公共构造函数。其中一个使用 x、y 坐标定义一个新的 XrwLineFigure
。另一个使用开始点和结束点坐标定义一个新的 XrwLineFigure
。
XrwLineFigure
始终是开放图形,不支持填充。
图像在 XrwCanvas
上显示了两条直线。
继承 (↑)
IDisposable --> XrwObject --> XrwFigure --> XrwLineFigure
XrwPathFigureCollection
XrwPathFigureCollection
类表示一个或多个 2D 连接的直线和曲线系列。Athena、Motif 和 GTK 中没有此类。
路径图形集合对象表示一个或多个 2D 系列(图形)的连接直线和曲线(段)。每个图形及其每个段都必须单独指定。
此类只有一个默认构造函数。可以将任意数量的 X11PathFigures 添加到路径实例中,并将任意数量的图形段添加到图形实例中。目前支持的图形段有 X11MoveToPathSegment
、X11LineToPathSegment
、X11LinePathSegment
、X11ArcPathSegment
、X11QuadraticBezierPathSegment
和 X11CubicBezierPathSegment
。
通常,XrwPathFigureCollection
不是一个闭合图形(除非最后一个插值点等于第一个点),但它仍然支持填充。
图像在一个 XrwCanvas
上显示了两个折线,在另一个 XrwCanvas
上显示了两个填充的多边形。
继承 (↑)
IDisposable --> XrwObject --> XrwFigure --> XrwPathFigureCollection
XrwRectangleFigure
XrwRectangleFigure
类表示一个简单的 2D 矩形。Athena、Motif 和 GTK 中没有此类。
矩形对象表示一个单一的矩形。矩形由一个轴对齐的边界矩形指定。
此类有两个公共构造函数。其中一个使用左、上、宽、高坐标定义一个新的 XrwRectangleFigure
。另一个使用左、上、宽、高、半径 X 和半径 Y 坐标定义一个新的圆角 XrwRectangleFigure
。
XrwRectangleFigure
始终是闭合图形并支持填充。
图像在一个 XrwCanvas
上显示了两个填充的矩形,在另一个 XrwCanvas
上显示了两个填充的圆角矩形。一个矩形演示了大多数图形都提供的图像填充和旋转功能。
继承 (↑)
IDisposable --> XrwObject --> XrwFigure --> XrwRectangleFigure
简单部件
详细的描述(包括 API)可作为单独的 HTML 文档获得,是 使用 Roma 部件集 (C# X11) 编程 - 一个零依赖的 GUI 应用程序框架 - 简介 示例应用程序项目 Xrw 的一部分。以下列表侧重于概述和每个部件/小部件的简要介绍。
XrwSimple
XrwSimple
类是一个通用部件。它可能是编写应用程序特定部件的一个不错的基类。它可与 Athena 的“Simple”部件相媲美。
Athena 关于“Simple”的描述如下(X Window System Athena Widgets, Quick Reference Guide):
Simple 部件本身不太有用,因为它没有自己的语义。它的主要目的是作为其他简单 Athena 部件的通用超类。此部件在 Core 部件及其超类提供的资源列表之上添加了五个资源。
继承 (↑)
IDisposable --> XrwObject --> XrwRectObject --> XrwVisibleRectObj --> XrwCore --> XrwSimple
XrwColorChooserComb
XrwColorChooserComb
类将 127 种颜色和 26 种灰色阴影排列为组合框,用于选择所需的颜色。Athena、Motif 和 GTK 中没有此类,其原型是 System.Windows.Forms 中的“ColorDialog”可用标准颜色选项卡页。
XrwColorChooserComb
类是一个部件,提供 127 种颜色和 26 种灰色阴影(均为 X11 命名颜色),允许用户选择预定义颜色。
此类没有公共构造函数,但有一个静态工厂方法。NewColorChooserCombWidget
创建一个新的 XrwColorChooserComb
部件。
图像显示了一个高亮的 XrwColorChooserComb
(颜色为紫红色)。
继承 (↑)
IDisposable --> XrwObject --> XrwRectObject --> XrwVisibleRectObj --> XrwCore --> XrwSimple --> XrwColorChooderComb
XrwImage
与 XrwLabel 不同,
XrwImage
类仅显示一张图像。它可以显示一个标记,指向图像中的特定位置。Athena、Motif 和 GTK 中没有此类,其原型是 System.Windows.Forms 中的“ColorDialog”的色相和饱和度选择器。
XrwImage
仅显示一张图像,并可选择显示一个位置标记。
此类没有公共构造函数,但有两个静态工厂方法。NewImageGadget/NewImageWidget
创建一个新的 XrwImage
。
图像显示了一个带有标记的 XrwImage
,标记位于绿色颜色范围内。
继承 (↑)
IDisposable --> XrwObject --> XrwRectObject --> XrwVisibleRectObj --> XrwCore --> XrwSimple --> XrwImage
XrwLabelBase
XrwLabelBase
类是静态文本显示部件和小部件的基类。
XrwLabelBase
类实现了静态文本显示的基本功能。Athena、Motif 和 GTK 中没有此类,但许多 Xrw 类受益于静态文本显示的基本功能,例如 XrwLabel
、XrwToggle
、XrwComboBox
或 XrwTextSpinButton
。
此类是抽象的,不能实例化。
XrwLabelBase
可以具有不同的 TextOverflowBehaviour
(文本溢出行为),定义了如何处理文本溢出:
Clip
仅剪裁无法显示的文本部分,Ellipsis
剪裁无法显示的文本部分,并显示省略号(“...”),AutolinebreakClip
如果有足够的高度,则创建自动换行,并剪裁无法显示的文本部分,-
AutolinebreakEllipsis
如果有足够的高度,则创建自动换行,剪裁无法显示的文本部分,并显示省略号(“...”)。
图像显示了 XrwMenuButton
的 TextOverflowBehaviour.Ellipsis
行为(弹出菜单),其中显示了完整的文本。
此版本引入了标记,与 GTK 的 Pango 标记语言广泛类似。标记文本的根标签是
<markup>
,这允许在一个文本中使用标记和非标记部分。支持的标记标签包括:
<span>
及其属性:foreground
(RGB 颜色规格,如“#00FF00”或颜色名称,如“red”),background
(RGB 颜色规格,如“#00FF00”或颜色名称,如“red”),underline
(值“single”、“double”和“low”与<u>
的处理方式相同,而值“none”则按</u>
处理),strikethrough
(值“true”按<s>
处理,值“false”按</s>
处理),style
(值“oblique”和“italic”按<i>
处理,值“normal”按</i>
处理),weight
(值“bold”、“ultrabold”和“heavy”按<b>
处理,值“normal”、“light”和“ultralight”按</b>
处理),size
(值“larger”按<big>
处理,值“smaller”按<small>
处理,值“xx-small”、“x-small”、“small”、“medium”、“large”、“x-large”和“xx-large”分别转换为 7、8、10、12、14、18 和 24),
<u>
表示下划线,<s>
表示删除线,<i>
表示斜体(对于 X11 字体/字体集,“oblige”比“italic”更常见),<b>
表示粗体,<big>
表示相对较大的字体大小,<small>
表示相对较小的字体大小。
要处理标记,文本将被转换为并存储为样式字符数组。样式字符数组可以转换回标记。此过程优先使用:
<u>
而不是<span underline="single">
、<span underline="double">
和<span underline="low">
,</u>
而不是<span underline="none
">
,<s>
而不是<span strikethrough="true
">
,</s>
而不是<span strikethrough="false">
,<i>
而不是<span style="oblique">
和<span style="italic">
,</i>
而不是<span style="normal
">
,<b>
而不是<span weight="bold">
、<span weight="ultrabold">
和<span weight="heavy">
,</b>
而不是<span weight="normal">
、<span weight="light">
和<span weight="ultralight">
,<big>
而不是<span size="larger
">
,<small>
而不是<span size="smaller
">
。
大多数派生类都可以利用标记,例如 XrwLabel
(以及 XrwToggle
、XrwRadio
、XrwComboBox
、XrwTextSpinButton
和 XrwLabelAndColor
)。
实现此样式文本的标记看起来像:
string markup = "<markup><i>Hello <b>App</b>!</i>\nWith<span strikethrough=\"true\">out</span> " +
"<span foreground=\"#AA0000\" background=\"#AADDDD\">markup</span>, " +
"<span foreground=\"#006600\" background=\"#DDCCDD\">multi lines</span> " +
"<span underline=\"single\">and</span> " +
"<span foreground=\"#6600AA\" background=\"#DDDDAA\">icons</span>!</markup>"
从样式字符数组转换回来的标记看起来像:
"<i><span foreground="#000000">Hello <b>App</b>!</span></i>\n" + "<span foreground="#000000">With<s>out</s> </span>" + "<span foreground="#AAAA00" background="#AAAADD">markup</span>" + "<span foreground="#000000">, </span>" + "<span foreground="#000066" background="#DDDDCC">multi lines</span>" + "<span foreground="#000000"> <u>and</u> </span>" + "<span foreground="#666600" background="#DDDDDD">icons</span>" + "<span foreground="#000000">!</span>
继承 (↑)
IDisposable --> XrwObject --> XrwRectObject --> XrwVisibleRectObj --> XrwCore --> XrwSimple --> XrwLabelBase
XrwComboBox
XrwComboBox
类实现了一个下拉选择调用按钮部件,该部件通过点击事件弹出 XrwSpinMenu
。它可与 Gtk 的 ComboBoxText 相媲美。
XrwComboBox
是一个允许用户从有效选项列表中选择的部件。XrwComboBox
显示选定的选项。激活时,XrwComboBox
显示一个 XrwSpinMenu
弹出窗口,允许用户进行新选择。
此类没有公共构造函数,但有一个工厂方法。NewComboBoxWidget
创建一个新的 XrwComboBox
。
此类包含一个 XrwSpinMenu
来实现选择弹出窗口(创建和处理由类自动完成)。
图像显示了一个 XrwComboBox
,带左右(透明多色)位图以及分隔符和右箭头。
此版本引入了标记。有关详细信息,请参阅 XrwLabelBase。
继承 (↑)
IDisposable --> XrwObject --> XrwRectObject --> XrwVisibleRectObj --> XrwCore --> XrwSimple --> XrwLabelBase --> XrwComboBox
XrwLabel
XrwLabel
类实现了一个静态标签。它可与 Athena 的“Label”部件相媲美。
Athena 关于“Label”的描述如下(X Window System Athena Widgets, Quick Reference Guide):
Label 部件包含一个显示在屏幕矩形区域内的图形。图形可以是包含多行字符的文本字符串,使用 8 位或 16 位字符集(以字体显示),或者使用多字节编码(用于字体集)。图形也可以是位图或像素图。Label 部件允许其图形左对齐、右对齐或居中对齐。通常,此部件既不能被用户选择也不能被直接编辑。它仅用作输出设备。
此类没有公共构造函数,但有两个工厂方法。NewLabelWidget
/NewLabelGadged
创建一个新的 XrwLabel
。
在显示任何更改(字体、文本、颜色...)期间,请使用 XrwLabel
部件。
在显示期间没有任何更改(字体、文本、颜色...)的情况下,请使用 XrwLabel
小部件以节省资源。
图像显示了一个多行 XrwLabel
,带左右(透明多色)位图。
此版本引入了四种特殊的字符串常量:
TextToArrowString.Up
,TextToArrowString.Down
,TextToArrowString.Left
和TextToArrowString.Right
,
这些常量(设置为部件/小部件的标签)被绘制为箭头而不是字符串。此行为特别应用于 XrwSpinBox
和 XrwSpinMenu
,但也可用于任何其他目的。
此版本引入了标记。有关详细信息,请参阅 XrwLabelBase。
此版本引入了当部件/小部件处于不活动状态时的替代左右位图。
继承 (↑)
IDisposable --> XrwObject --> XrwRectObject --> XrwVisibleRectObj --> XrwCore --> XrwSimple --> XrwLabelBase --> XrwLabel
XrwCommand
XrwCommand
类实现了一个命令按钮部件,该部件通过点击事件调用回调。它可与 Athena 的“Command”部件相媲美。
Athena 关于“Command”的描述如下(X Window System Athena Widgets, Quick Reference Guide):
Command 部件是一个区域,通常是矩形的,包含文本或图形图像。Command 部件通常被称为“推按钮”。当指针位于 Command 部件上时,该部件通过在其周边绘制矩形来突出显示。此突出显示表明该部件已准备好选择。按下鼠标按钮 1 时,Command 部件通过反转其前景色和背景色来指示其已被选中。
当释放鼠标按钮时,将调用 Command 部件的回调动作,调用其回调列表上的所有函数。如果在释放指针按钮之前指针移出了部件,则该部件会恢复到其正常的前景色和背景色,释放指针按钮将不起作用。此行为允许用户取消操作。
此类没有公共构造函数,但有一个工厂方法。NewCommandWidget
创建一个新的 XrwCommand
。
第一个图像显示了一个带左右(透明多色)位图的 XrwCommand
。
第二个图像显示了典型的 Gtk2 风格的“Cancel”XrwCommand
按钮 - 一个正常状态,一个突出显示 - 使用 -misc-fixed-
字体输出、渐变背景外观和边框。
第三个图像显示了“Cancel”XrwCommand
按钮 - 一个正常状态,一个突出显示 - 使用 -*-helvetica-
字体输出、平坦背景外观(无渐变的背景)且无边框。
此版本引入了标记。有关详细信息,请参阅 XrwLabelBase。第四张图像显示了“Cancel”
XrwCommand
按钮 - 一个正常状态,一个突出显示 - 带有标记文本、平坦背景外观(无渐变的背景)且无边框。
要绘制具有平坦外观的命令按钮,可以调用 `SetBackgroundFlatHighlighting()` 方法。要绘制具有渐变外观的命令按钮,可以调用 `SetBackgroundGradientHighlighting()` 方法。渐变背景外观是默认值。
实现此样式文本的标记看起来像:
string markup = "<markup><u>C</u><span foreground=\"#AA0000\" background=\"#AADDDD\">an</span>" +
"<b>c</b><span foreground=\"#6600AA\" background=\"#DDDDAA\">el</span></markup>"
如果需要提供活动链接,可以通过使用标记文本的平坦无边框命令按钮来实现。下一张图像显示了相同命令按钮的正常状态、突出显示和访问状态。
实现此目的的代码如下:
XrwCommand activeLink = XrwCommand.NewCommandWidget (hboxSpinNbTab,
"<markup><span foreground=\"#2222FF\">Link</span></markup>", null, false, null, false);
hboxSpinNbTab.AddChild (activeLink);
activeLink.SetBackgroundFlatHighlighting ();
activeLink.FrameType = TFrameType.None;
activeLink.FrameWidth = 0;
activeLink.Clicked += delegate(XrwRectObj source)
{
string label = activeLink.Lines.TotalMarkupText (activeLink.Styles, activeLink.Surface);
activeLink.Label = "<markup>" + label.Replace ("2222FF", "884488") + "</markup>";
};
此版本引入了当部件/小部件处于不活动状态时的替代左右位图。
继承 (↑)
IDisposable --> XrwObject --> XrwRectObject --> XrwVisibleRectObj --> XrwCore --> XrwSimple --> XrwLabelBase --> XrwLabel --> XrwCommand
XrwMenuButton
XrwMenuButton
类实现了一个弹出菜单调用按钮部件,该部件通过点击事件弹出 XrwSimpleMenu
。它可与 Athena 的 MenuButton 相媲美。
X Toolkit Intrinsics 中关于“MenuButton”的描述如下(Athena Widget Set — C Language Interface):
MenuButton 部件是一个区域,通常是矩形的,显示一个图形。图形可以是包含多行字符的文本字符串,使用 8 位或 16 位字符集(以字体显示),或者使用多字节编码(用于字体集)。图形也可以是位图或像素图。
当指针光标位于 MenuButton 部件上时,MenuButton 通过在其周边绘制矩形来突出显示。此突出显示表明 MenuButton 已准备好选择。按下指针按钮时,MenuButton 部件将弹出 `menuName` 资源中命名的菜单。
此类没有公共构造函数,但有一个工厂方法。NewMenuButtonWidget
创建一个新的 XrwMenuButton
。
此类包含一个 XrwSimpleMenu
来实现弹出菜单(创建和处理由类自动完成)。
图像显示了一个简单的 XrwMenuButton
,带左右(透明多色)位图 - 包括其弹出的菜单。
有关背景外观和边框的更多详细信息,请参阅 XrwCommand
。
此版本引入了标记。有关详细信息,请参阅 XrwLabelBase。
此版本引入了当部件/小部件处于不活动状态时的替代左右位图。
继承 (↑)
IDisposable --> XrwObject --> XrwRectObject --> XrwVisibleRectObj --> XrwCore--> XrwSimple --> XrwLabelBase --> XrwLabel --> XrwCommand --> XrwMenuButton
XrwSme
XrwSme
类实现了一个简单的菜单项小部件。它可与 Athena 的“SmeBSB”对象相媲美。
X Toolkit Intrinsics 中关于“SmeBSB”的描述如下(Athena Widget Set — C Language Interface):
SmeBSB 对象用于创建包含字符串的菜单项,并在其左右边距可选地包含位图。由于每个菜单项都是一个独立的对象,应用程序可以为每个菜单项更改字体、颜色、高度和其他属性。字符串的格式可以是 8 位字体使用的编码,也可以是用于字体集的 multibyte 编码。
此类没有公共构造函数,但有一个工厂方法。NewSmeGadget
创建一个新的 XrwSme
。
图像显示了一个包含在 XrwDialogShell
中的两个 XrwSme
,该对话框由 XrwMenuButton
弹出,并带有左右(透明多色)位图。
此版本引入了标记。有关详细信息,请参阅 XrwLabelBase。
此版本引入了当部件/小部件处于不活动状态时的替代左右位图。
继承 (↑)
IDisposable --> XrwObject --> XrwRectObject --> XrwVisibleRectObj --> XrwCore --> XrwSimple --> XrwLabelBase --> XrwLabel --> XrwSme
XrwLabelAndColor
XrwLabelAndColor
类实现了一个可选的静态标签和静态颜色矩形。Athena、Motif 和 GTK 中没有此类。
XrwLabelAndColor 显示一个填充颜色的矩形,并可选地显示静态文本。
此类没有公共构造函数,但有两个工厂方法。NewLabelAndColorWidget
/NewLabelAndTextGadget
创建一个新的 XrwLabelAndColor
。
图像显示了一个带有绿色填充矩形和颜色名称文本的 XrwLabelAndColor
。
此版本引入了标记。有关详细信息,请参阅 XrwLabelBase。
继承 (↑)
IDisposable --> XrwObject --> XrwRectObject --> XrwVisibleRectObj --> XrwCore --> XrwSimple --> XrwLabelBase --> XrwLabelAndColor
XrwTextSpinButton
XrwTextSpinButton
类实现了一个微调按钮部件,该部件可以通过点击事件微调文本常量。它大致可与 GTK 的 SpinButton 部件相媲美,但它不微调整数或浮点数。
XrwTextSpinButton 是允许用户设置某个属性值的理想方式。用户无需直接在 XrwText 中输入字符串,而是通过 XrwTextSpinButton 允许用户点击两个箭头之一来增加或减少显示的文本常量。用户无法输入任何文本,而必须选择预定义的文本常量之一。
此类没有公共构造函数,但有两个工厂方法。NewHTextSpinButton
/NewVTextSpinButton
创建一个新的水平/垂直微调 XrwTextSpinButton
。
图像显示了一个带有水平(左和右)导航器的 XrwTextSpinButton
,以及一个带有垂直(顶部和底部)导航器的 XrwTextSpinButton
。
此版本引入了标记。有关详细信息,请参阅 XrwLabelBase。
实现此样式文本的标记看起来像:
string markup = "<markup>Sp<b><span foreground=\"#006600\" background=\"#DDCCDD\">in</span> " +
"<span foreground=\"#AA0000\" background=\"#AADDDD\">te</span>" +
"<span foreground=\"#4400CC\" background=\"#DDDDAA\">xt</span></b> " +
"<u>1</u></markup>"
继承 (↑)
IDisposable --> XrwObject --> XrwRectObject --> XrwVisibleRectObj --> XrwCore --> XrwSimple --> XrwLabelBase --> XrwSpinButton
XrwToggle
XrwToggle
类实现了一个切换按钮部件。它可与 Athena 的“Toggle”部件相媲美。
Athena 关于“Toggle”的描述如下(X Window System Athena Widgets, Quick Reference Guide):
Toggle 部件是一个区域,通常是矩形的,包含一个文本标签或位图图像。此部件维护一个布尔状态(例如,True/False 或 On/Off),并且在每次选择时都会更改状态。当指针位于按钮上时,通过在其周边绘制矩形来突出显示按钮。此突出显示表明按钮已准备好选择。按下并释放指针按钮 1 时,Toggle 部件通过反转其前景色和背景色来指示其状态已更改,并调用其回调动作,调用其回调列表上的所有函数。如果在释放按钮之前指针移出了部件,则该部件会恢复到其正常的前景色和背景色,释放按钮将不起作用。此行为允许用户取消操作。
此类没有公共构造函数,但有一个工厂方法。NewToggleWidget
创建一个新的 XrwToggle
。
第一个图像显示了三个简单的 XrwToggle
- 一个已开启,两个已关闭 - 使用 -misc-fixed-
字体输出、渐变背景外观和边框。
要绘制带边框的切换按钮,
- 可以将 `FrameType` 属性设置为
(TFrameTypeExt)XrwTheme.InteractiveFrameType
,并将 `FrameWidth` 属性设置为XrwTheme.InteractiveFrameWidth
,或者 - 可以调用 `SetButtonAppearance()` 方法(该方法还设置了渐变背景外观)。
第二个图像显示了相同的三个 XrwToggle
,无边框,使用 -*-helvetica-
字体输出、平坦背景外观(无渐变的背景)且无边框。
要绘制无边框的切换按钮,可以将 `FrameType` 属性设置为 TFrameTypeExt.None
,并将 `FrameWidth` 属性设置为 0。无边框外观是默认值。
此版本引入了标记。有关详细信息,请参阅 XrwLabelBase。第三张图像显示了三个
XrwToggle
,带有标记文本、平坦背景外观(无渐变的背景)且无边框。
要绘制具有平坦背景外观的切换按钮,可以调用 `SetBackgroundFlatHighlighting()` 方法。要绘制具有渐变背景外观的切换按钮,可以调用 `SetBackgroundGradientHighlighting()` 方法。平坦背景外观是默认值。
实现这些样式文本的标记看起来像:
string markup = "<markup>Toggle <span foreground=\"#AA0000\" background=\"#AADDDD\">test " +
"<u>1</u></span></markup>"
string markup = "<markup>Toggle <span foreground=\"#006600\" background=\"#DDCCDD\">test " +
"<u>2</u></span></markup>"
string markup = "<markup>Toggle <span foreground=\"#6600AA\" background=\"#DDDDAA\">test " +
"<u>3</u></span></markup>"
继承 (↑)
IDisposable --> XrwObject --> XrwRectObject --> XrwVisibleRectObj --> XrwCore --> XrwSimple --> XrwLabelBase --> XrwToggle
XrwRadio
XrwRadio
类实现了一个单选按钮部件。它可与 Gtk 的“RadioButton”相媲美。
单选按钮通常由 XrwRadioBox
分组,并且在任何时候只有一个单选按钮被选中,所有其他按钮都被取消选中。单个单选按钮执行与 XrwToggle
基本相同的功能。
每个单选按钮都是某个单选按钮组的成员。当一个单选按钮被选中时,同一组中的所有其他单选按钮都会被取消选中。
此类没有公共构造函数,但有一个工厂方法。NewRadioWidget
创建一个新的 XrwRadio
。
第一个图像显示了一个水平方向的 XrwRadioBox
,其中包含三个简单的 XrwRadio
- 一个已选中,两个未选中 - 使用 -misc-fixed-
字体输出、渐变背景外观和边框。
要绘制带边框的单选按钮,
- 可以将 `FrameType` 属性设置为
(TFrameTypeExt)XrwTheme.InteractiveFrameType
,并将 `FrameWidth` 属性设置为XrwTheme.InteractiveFrameWidth
,或者 - 可以调用 `SetButtonAppearance()` 方法(该方法还设置了渐变背景外观)。
第二个图像显示了相同的三个 XrwRadio
,无边框,使用 -*-helvetica-
字体输出、平坦背景外观(无渐变的背景)且无边框。
要绘制无边框的单选按钮,可以将 `FrameType` 属性设置为 TFrameTypeExt.None
,并将 `FrameWidth` 属性设置为 0。无边框外观是默认值。
此版本引入了标记。有关详细信息,请参阅 XrwLabelBase。第三张图像显示了三个
XrwRadio
,带有标记文本、平坦背景外观(无渐变的背景)且无边框。
要以扁平背景外观绘制单选按钮,可以调用 SetBackgroundFlatHighlighting()
方法。要以渐变背景外观绘制单选按钮,可以调用 SetBackgroundGradientHighlighting()
方法。扁平背景外观是默认设置。
实现这些样式文本的标记看起来像:
string markup = "<markup>Radio <span foreground=\"#AA0000\" background=\"#AADDDD\">test " +
"<u>1</u></span></markup>"
string markup = "<markup>Radio <span foreground=\"#006600\" background=\"#DDCCDD\">test " +
"<u>2</u></span></markup>"
string markup = "<markup>Radio <span foreground=\"#6600AA\" background=\"#DDDDAA\">test " +
"<u>3</u></span></markup>"
继承 (↑)
IDisposable --> XrwObject --> XrwRectObject --> XrwVisibleRectObj --> XrwCore --> XrwSimple --> XrwLabelBase --> XrwToggle --> XrwRadio
XrwNotebookTab
XrwNotebookTab
类实现了一个笔记本标签页按钮控件。Athena 不知道此类,Motif 使用按钮,GTK 支持任何控件作为笔记本标签页。
笔记本标签页仅由 XrwNotebook
使用,并且在任何时候只有一个笔记本标签页处于激活状态,其他都处于非激活状态。单个笔记本标签页的功能与 XrwRadio
基本相同。
每个笔记本标签页都是笔记本的成员。当选择一个标签页时,笔记本中的所有其他标签页都会被取消选择。
此类没有公共构造函数,但有一个工厂方法 NewNotebookTabWidget
用于创建新的 XrwNotebookTab
。
图片显示了一个带有四个标签页(“文件”、“对话框测试”、“切换测试”和“单选测试”)的笔记本。第一个标签页“文件”被选中,并在页面堆栈中显示了第一个页面(带有四个按钮:“文件”、“关闭菜单”、“消息框”和“关闭应用程序”)。
继承 (↑)
IDisposable --> XrwObject --> XrwRectObject --> XrwVisibleRectObj --> XrwCore --> XrwSimple --> XrwLabelBase --> XrwToggle --> XrwRadio --> XrwNotebookTab
XrwList
XrwList
类实现了一个列表控件。它与 Athena 的“List”控件相似。
Athena 对“List”的描述是(X Window System Athena Widgets, Quick Reference Guide)
List 控件包含一系列格式化为行和列的字符串。当选择其中一个字符串时,它会被高亮显示,并且 List 控件的 Notify 操作会被调用,从而调用其回调列表中的所有例程。一次只能选择一个字符串。
此类没有公共构造函数,但有一个工厂方法。NewListWidget
用于创建新的 XrwList
。
图片显示了一个简单的
XrwList
,其中有一个选中的列表项。每个列表项都显示一个图像和一个文本。
从此版本开始,
XrwList.ListItem
不直接包含显示字符串,而是包含绑定的数据对象(该对象仍然可以是 System.String
)。并且 XrwList
类实现了 XrwIGridView
接口。
XrwList.ListItem
的绑定数据对象必须是System.Object
,以支持ToString()
方法用于回退的显示成员绑定。XrwIGridView
接口使列表能够显示多列,即使嵌入在XrwViewport
中。XrwIGridView
通过XrwGridViewColumnCollection
定义要显示的列。- 为了方便应用程序使用和向后兼容,新创建的
XrwList
实例已经包含了一个默认的XrwGridViewColumn
(在其XrwGridViewColumnCollection
中),没有显示成员绑定 - 因此显示字符串将回退到绑定数据对象的ToString()
方法结果。
图片显示了一个
XrwList
,它嵌入在一个 XrwViewport
中,包含五列和列标题,其中一个列表项被选中。每个列表项在“名称”列中显示一个图像和一个文本。第 2 到第 5 列仅为文本列。
从此版本开始,
XrwList
提供了 View
属性,并支持将其列表项显示为 ViewType.Details
、ViewType.List
、ViewType.SmallIcon
或 ViewType.LargeIcon
模式。
接下来的三张图片演示了新的显示功能。
为了兼容 Microsoft (R) 的命名,所有“node”命名均已更改为“item”命名。这会影响:
XrwList.ListNode
==>XrwList.ListItem
Nodes
==>Items
NodeCommandInvoke
==>ItemCommandInvoke
OnNodeCommandInvoke
==>OnItemCommandInvoke
FindListNode() ==>
FindListItem()
继承 (↑)
IDisposable --> XrwObject --> XrwRectObject --> XrwVisibleRectObj --> XrwCore --> XrwSimple --> XrwList
XrwRange
XrwRange
类实现了 XrwScale
和 XrwScrollbar
控件的通用功能。它与 GTK 的“Range”相似。
GTK 对“Range”的描述是
GtkRange 是可视化调整的控件的基类。
此类是抽象的,不能实例化。
继承 (↑)
IDisposable --> XrwObject --> XrwRectObject --> XrwVisibleRectObj --> XrwCore --> XrwSimple --> XrwRange
XrwScale
XrwScale
类实现了一个滑块控件。它与 GTK 的“Scale”相似。
GTK 对“Scale”的描述是
GtkScale 是用于选择数字值的滑块控件。要使用它,您可能需要研究其基类 GtkRange 的方法,以及 GtkScale 本身的方法。
...
此类没有公共构造函数,但有两个工厂方法。NewHScaleWidget
/NewVScaleWidget
用于创建新的 XrwScale
。
图片显示了一个水平方向的 XrwScale
。
继承 (↑)
IDisposable --> XrwObject --> XrwRectObject --> XrwVisibleRectObj --> XrwCore --> XrwSimple --> XrwRange --> XrwSale
XrwScrollbar
XrwScrollbar
类实现了一个滚动条控件。它与 Athena 的“Scrollbar”相似。
Athena 对“Scrollbar”的描述是(X Window System Athena Widgets, Quick Reference Guide)
Scrollbar 控件是一个矩形区域,包含一个滑动区域和一个滑块(也称为滑动条)。Scrollbar 可以单独使用,作为值生成器,或者与复合控件(例如 Viewport)一起使用。Scrollbar 可以是垂直或水平方向的。
创建 Scrollbar 时,它会以对比色绘制滑块。滑块通常用于滚动客户端数据,并提供关于可见客户端数据百分比的视觉反馈。
...
滚动进行时,应用程序会通过回调过程收到通知。
...
要使用 XrwScrollbar
类及其所有功能,需要使用其基类 XrwRange
的方法,以及 XrwScrollbar
本身的方法。
XrwScrollbar
支持通过自动重复 ButtonPress
事件进行连续滚动。
永久按下向上或向下按钮会重复步进移动。
永久按下滑动区域的指针按钮会重复页面移动。
此类没有公共构造函数,但有两个工厂方法。
NewHScrollWidget
/NewVScrollWidget
用于创建新的 XrwScrollbar
。
图片显示了一个水平方向的 XrwScrollbar
。
继承 (↑)
IDisposable --> XrwObject --> XrwRectObject --> XrwVisibleRectObj --> XrwCore --> XrwSimple --> XrwRange --> XrwScrollbar
XrwRibbonCommandBase
XrwRibbonCommandBase
是功能区内对象的基类,它通过按钮按下事件或点击事件调用回调。Athena、Motif 和 GTK 都不知道此类。
由于功能区被实现为一个整体控件,其几乎所有子项(包括功能区命令基类)都实现为小部件。功能区命令基类整合了功能区子项的通用功能,这些子项会调用回调。
此类是抽象的,不能实例化。
继承 (↑)
IDisposable --> XrwObject --> XrwRectObject --> XrwVisibleRectObj --> XrwCore --> XrwSimple --> XrwRibbonCommandBase
XrwRibbonButton
XrwRibbonButton
是一个命令按钮小部件,用于功能区内,通过点击事件调用回调。由于它是一个小部件,其功能区负责任何事件处理(高亮、按钮按下、暴露等)。Athena、Motif 和 GTK 都不知道此类。
由于功能区被实现为一个整体控件,其几乎所有子项(包括功能区按钮)都实现为小部件。功能区按钮是功能区子项,它为功能区提供了命令按钮的功能。
XrwRibbonButton
可以根据其 CurrentSizeMode
属性以不同的尺寸模式显示。
RibbonPanelSizePolicy.Large
以 32px x 32px 的图像显示XrwRibbonButton
,并在图像下方显示标签文本。RibbonPanelSizePolicy.Medium
以 16px x 16px 的图像显示XrwRibbonButton
,并在图像旁边显示标签文本。RibbonPanelSizePolicy.Small
以 16px x 16px 的图像显示XrwRibbonButton
,不显示标签文本。
此类没有公共构造函数,但有一个工厂方法。NewRibbonButton
用于创建新的 XrwRibbonButton
。
图片显示了两个 XrwRibbonPanel
,包括在功能区面板标签旁边用于启动对话框的图标。一个 XrwRibbonPanel
包含三个 XrwRibbonButton
,其 CurrentSizeMode
== RibbonPanelSizePolicy.Large
;另一个 XrwRibbonPanel
包含三个 XrwRibbonButton
,其 CurrentSizeMode
== RibbonPanelSizePolicy.Medium
。第一个功能区按钮处于焦点状态。
如果
XrwRibbonTab
的宽度不足以在其所有 XrwRibbonPanel
中显示所有 XrwRibbonButton
(根据其 PreferredSizeMode
),则 XrwRibbonButton
可以调整其大小。
规则 1A) 尝试缩小 XrwRibbonButton
的 PreferredSizeMode
的第一次尝试总是针对最右侧 XrwRibbonPanel
中的 XrwRibbonButton
。
规则 1B) 如果无法缩小或缩小不足,则尝试对下一个(从右到左)XrwRibbonPanel
中的 XrwRibbonButton
进行。只要缩小不适用或不足,每次下一次尝试都会针对下一个(从右到左)XrwRibbonPanel
中的 XrwRibbonButton
,直到到达第一个面板。
规则 1C) 如果没有缩小适用,或者所有缩小都无效,则剪裁 XrwRibbonTab
的内容。
规则 2A) 如果 XrwRibbonTab
的宽度不足,则 XrwRibbonTab
尝试将 XrwRibbonButton
的 CurrentSizeMode
从 RibbonPanelSizePolicy.Large
减小到 RibbonPanelSizePolicy.Medium
(如果适用)。
规则 2B) 否则,从 RibbonPanelSizePolicy.Medium
减小到 RibbonPanelSizePolicy.Small
(如果适用)。
规则集 1 优先于规则集 2。这意味着,规则 1B 强制应用规则 2A 于所有(从右到左)XrwRibbonPanel
,然后才强制规则 2B 应用于任何 XrwRibbonPanel
。
规则 3A) 如果 XrwRibbonPanel
中只有两个或更少的 XrwRibbonButton
,则无法将 XrwRibbonButton
的 PreferredSizeMode
从 RibbonPanelSizePolicy.Large
减小到 RibbonPanelSizePolicy.Medium
。
规则 3B) 如果 XrwRibbonPanel
中只有三个或更少的 XrwRibbonButton
,或者 XrwRibbonPanel
包含任何 XrwRibbonSplitButton
,则无法将 XrwRibbonButton
的 PreferredSizeMode
从 RibbonPanelSizePolicy.Medium
减小到 RibbonPanelSizePolicy.Small
。
图片显示了规则在示例 XrwRibbonTab
上的逐步应用。
![]() |
不需要宽度缩小。 将规则 1A 和 2A 应用于最右侧的面板。 将规则 1B 和 2A 应用于下一个(从右到左)面板。(规则 3B 不适用于 4 个按钮。) 将规则 1A 和 2B 应用于左侧面板。 (规则 3A 不适用于 3 个按钮。) 应用规则 3B 和 1C。 |
继承 (↑)
IDisposable --> XrwObject --> XrwRectObject --> XrwVisibleRectObj --> XrwCore --> XrwSimple --> XrwRibbonCommandBase --> XrwRibbonButton
XrwRibbonSplitButton
XrwRibbonSplitButton
是一个拆分按钮小部件,用于功能区内,通过按钮按下事件弹出菜单。由于它是一个小部件,其功能区负责任何事件处理(高亮、按钮按下、暴露等)。Athena、Motif 和 GTK 都不知道此类。
由于功能区被实现为一个整体控件,其几乎所有子项(包括功能区分拆按钮)都实现为小部件。功能区分拆按钮是功能区子项,它为功能区提供了菜单按钮的功能。
XrwRibbonSplitButton
可以根据其 CurrentSizeMode
属性以不同的尺寸模式显示。
RibbonPanelSizePolicy.Large
以 32px x 32px 的图像显示XrwRibbonButton
。标签文本和箭头位于图像下方。RibbonPanelSizePolicy.Medium
以 16px x 16px 的图像显示XrwRibbonButton
。标签文本和箭头位于图像旁边。
此类没有公共构造函数,但有一个工厂方法。NewRibbonSplitButton
用于创建新的 XrwRibbonSplitButton
。
图片显示了两个 XrwRibbonPanel
,一个 XrwRibbonPanel
包含一个 XrwRibbonSplitButton
,其 CurrentSizeMode
== RibbonPanelSizePolicy.Large
;另一个 XrwRibbonPanel
包含一个 XrwRibbonSplitButton
,其 CurrentSizeMode
== RibbonPanelSizePolicy.Medium
。第二个功能区分拆按钮已被点击,并显示了其弹出菜单。
如果
XrwRibbonTab
的宽度不足以在其所有 XrwRibbonPanel
中显示所有 XrwRibbonSplitButton
(根据其 PreferredSizeMode
),则 XrwRibbonSplitButton
可以调整其大小。
规则 1A) 尝试缩小 XrwRibbonButton
的 PreferredSizeMode
的第一次尝试总是针对最右侧 XrwRibbonPanel
中的 XrwRibbonSplitButton
。
规则 1B) 如果无法缩小或缩小不足,则尝试对下一个(从右到左)XrwRibbonPanel
中的 XrwRibbonSplitButton
进行。只要缩小不适用或不足,每次下一次尝试都会针对下一个(从右到左)XrwRibbonPanel
中的 XrwRibbonSplitButton
,直到到达第一个面板。
规则 1C) 如果没有缩小适用,或者所有缩小都无效,则剪裁 XrwRibbonTab
的内容。
规则 2) 如果 XrwRibbonTab
的宽度不足,则 XrwRibbonTab
尝试将 XrwRibbonSplitButton
的 CurrentSizeMode
从 RibbonPanelSizePolicy.Large
减小到 RibbonPanelSizePolicy.Medium
(如果适用)。
规则 3) 如果 XrwRibbonPanel
中只有两个或更少的 XrwRibbonSplitButton
,则无法将 XrwRibbonButton
的 PreferredSizeMode
从 RibbonPanelSizePolicy.Large
减小到 RibbonPanelSizePolicy.Medium
。
图片显示了规则在示例 XrwRibbonTab
上的逐步应用。
![]() |
不需要宽度缩小。 将规则 1A 和 2 应用于右侧面板。 将规则 1B 和 2 应用于左侧面板。 应用规则 1C。 |
继承 (↑)
IDisposable --> XrwObject --> XrwRectObject --> XrwVisibleRectObj --> XrwCore --> XrwSimple --> XrwRibbonCommandBase --> XrwRibbonButton --> XrwRibbonSplitButton
XrwRibbonControlGroup
XrwRibbonControlGroup
是一个用于功能区的小部件,它组织一组交互式控件组节点,并通过点击事件调用回调。由于它是一个小部件,其功能区负责任何事件处理(高亮、按钮按下、暴露等)。Athena、Motif 和 GTK 都不知道此类。
由于功能区被实现为一个整体控件,其几乎所有子项(包括功能区控件组)都实现为小部件。功能区控件组是功能区子项,它为功能区提供了单选框的功能。与 XrwRadioBox
不同,它还允许处理切换按钮和独占切换按钮。
XrwRibbonControlGroup
引入了四个内部类来提供单选按钮、切换按钮和独占切换按钮。
XrwRibbonControlGroupNode
是单选按钮、切换按钮和独占切换按钮在XrwRibbonControlGroup
内的抽象基类。XrwRibbonControlGroupRadioNode
从抽象的XrwRibbonControlGroupNode
基类派生,行为类似于单选按钮(如果选中,则将同一控件组中的所有其他单选按钮设为未选中)。XrwRibbonControlGroupToggleNode
从抽象的XrwRibbonControlGroupNode
基类派生,行为类似于切换按钮(可以独立于其控件组中其他切换按钮的状态进行切换)。XrwRibbonControlGroupExclusiveToggleNode
从抽象的XrwRibbonControlGroupNode
基类派生,行为类似于切换按钮(可以独立于其控件组中其他切换按钮的状态进行切换)和单选按钮(如果选中,则将同一控件组中的其他切换按钮设为未选中)的组合。
XrwRibbonControlGroupRadioNode
、XrwRibbonControlGroupToggleNode
和 XrwRibbonControlGroupExclusiveToggleNode
可以在同一个 XrwRibbonControlGroup
中使用。
在这种情况下,XrwRibbonControlGroupRadioNode
仅影响 XrwRibbonControlGroupRadioNode
,而 XrwRibbonControlGroupExclusiveToggleNode
仅影响 XrwRibbonControlGroupToggleNode
和 XrwRibbonControlGroupExclusiveToggleNode
。
此类没有公共构造函数,但有一个工厂方法。NewRibbonControlGroup
用于创建新的 XrwRibbonControlGroup
。
图片显示了两个 XrwRibbonPanel
,每个面板包含两个 XrwRibbonControlGroup
。第一个 XrwRibbonPanel
的顶部 XrwRibbonControlGroup
包含四个(水平左对齐、水平居中对齐、水平两端对齐和水平右对齐)单选按钮节点,下方 XrwRibbonControlGroup
包含三个(垂直顶部对齐、垂直居中对齐、垂直底部对齐)单选按钮节点。第二个 XrwRibbonPanel
的顶部 XrwRibbonControlGroup
包含三个(标记粗体、标记斜体和标记下划线)切换按钮节点,下方 XrwRibbonControlGroup
包含两个(位置下标、位置上标)独占切换按钮节点。
在任何时候,都只能选择一个水平对齐方式和一个垂直对齐方式(这由 XrwRibbonControlGroupRadioNode
实现)。三种可用的标记允许选择任意数量(0 到 3 个)标记(这由 XrwRibbonControlGroupToggleNode
实现)。而两个位置允许选择零个或一个(这由 XrwRibbonControlGroupExclusiveToggleNode
实现)。
继承 (↑)
IDisposable --> XrwObject --> XrwRectObject --> XrwVisibleRectObj --> XrwCore --> XrwSimple --> XrwRibbonCommandBase --> XrwRibbonControlGroup
XrwText
XrwText
类实现了一个单行文本编辑控件。它的原型是 Athena 的简化版 "Text" 控件。
XrwText
是一个用于渲染和编辑文本的控件。
XrwText
可以使用正则表达式验证文本,并通过剪贴板交换文本数据。
成功测试的文本传输包括:
- MS 记事本 (Win7), Notepad++ (V. 6.4.5), MS Write (Win7), MS WinWord 2013 ==>
XrwText
XrwText
==> MS 记事本 (Win7), Notepad++ (V. 6.4.5), MS Write (Win7), MS WinWord 2013XrwText
==>XrwText
- gedit (V. 2.30.20), Leafpad (V. 0.8.17) ==>
XrwText
XrwText
==> gedit (V. 2.30.20), Leafpad (V. 0.8.17)- KWrite (V. 4.4.4), Kate (V. 3.4.4) ==>
XrwText
XrwText
==> KWrite (V. 4.4.4), Kate (V. 3.4.4)
注意: 目前所有文本传输都使用 X11 ICCCM 选择机制,使用 CLIPBOARD 选择和 STRING 格式。这包括了复制源控件/小部件和复制目标控件/小部件在文本传输期间必须都存活的限制 - X11 中没有像 Windows 中那样的剪贴板数据缓冲区。
此类没有公共构造函数,但有一个工厂方法。
NewTextWidget
用于创建新的 XrwText
。
图片显示了一个简单的 XrwText
,包括选中的两个字母和一个插入符。
继承 (↑)
IDisposable --> XrwObject --> XrwRectObject --> XrwVisibleRectObj --> XrwCore --> XrwSimple --> XrwText
XrwTree
XrwTree
类实现了一个树控件。它不与 Athena 的“Tree”控件相似。
Athena 对“Tree”的描述是(X Window System Athena Widgets, Quick Reference Guide)
Tree 控件提供几何管理,用于将任意控件arranged 成有向无环图(即树)。树的结构是通过为每个控件附加一个名为 treeParent
的约束资源来构建的,该资源指示树中的哪个其他节点应被视为该控件的父节点。树的结构通过以标准树形图格式布局节点并绘制连接每个节点与其子节点的线条来显示。
Tree 根据其子控件的需求计算其大小,而不打算由其父控件调整大小。相反,它应该放置在另一个复合控件(例如 Porthole
或 Viewport
)中,该控件可用于滚动树。
相反,它与 Gtk 的“Tree”相似。
GtkTree 控件是一个容器,它以树形格式向用户显示项目列表,包括分支和叶节点。分支可以展开以显示其子项目,或折叠以隐藏它们。
此类没有公共构造函数,但有一个工厂方法。NewTreeWidget
用于创建新的 XrwTree
。
图片显示了一个简单的
XrwTree
,其中有一个选中的树节点。每个树节点(分支和叶)都显示展开器()、一个图像和一个文本。
从此版本开始,
XrwTree.TreeNode
不直接包含显示字符串,而是包含绑定的数据对象(该对象仍然可以是 System.String
)。并且 XrwTree
类实现了 XrwIGridView
接口。
XrwTree.TreeNode
的绑定数据对象必须是System.Object
,以支持ToString()
方法用于回退的显示成员绑定。XrwIGridView
接口使树能够显示多列,即使嵌入在XrwViewport
中。XrwIGridView
通过XrwGridViewColumnCollection
定义要显示的列。- 为了方便应用程序使用和向后兼容,新创建的
XrwTree
实例已经包含了一个默认的XrwGridViewColumn
(在其XrwGridViewColumnCollection
中),没有显示成员绑定 - 因此显示字符串将回退到绑定数据对象的ToString()
方法结果。
图片显示了一个
XrwTree
,它嵌入在一个 XrwViewport
中,包含五列和列标题,其中一个树节点被选中。每个树节点(分支和叶)在“名称”列中显示展开器、图像和文本。第 2 到第 5 列仅为文本列。
继承 (↑)
IDisposable --> XrwObject --> XrwRectObject --> XrwVisibleRectObj --> XrwCore --> XrwSimple --> XrwTree
XrwViewportGridViewHeader
XrwViewportGridViewHeader
类实现了 XrwViewPort
子控件的标题控件,用于显示网格视图。Athena、Motif 和 GTK 都不知道此类。
XrwViewportGridViewHeader 是 XrwViewport 控件的整体组成部分 - 它将由 XrwViewport 自动创建和销毁。XrwViewportGridViewHeader 负责显示 XrwViewport 子控件的列标题名称。它支持列大小调整和重新排序。
XrwViewportGridViewHeader
没有内部标题数据。它从 XrwIGridView
的 Child
中获取标题数据。只有当 XrwIGridView
的 Child
实现 XrwIGridView
接口时,XrwViewportGridViewHeader
才会显示列标题名称,否则它将保持为空。无论 XrwIGridView
的 Child
是否实现 XrwIGridView
接口,标题都可以通过 XrwViewPort.HeaderVisibility
属性控制可见、隐藏或折叠,并且可以通过 XrwViewPort.HeaderPreferredHeight
属性定义标题的首选高度。
目前,XrwList
和 XrwTree
实现 XrwIGridView
接口。
图片显示了一个 XrwViewportGridViewHeader
,显示了 4 个标题名称。
继承 (↑)
IDisposable --> XrwObject --> XrwRectObject --> XrwVisibleRectObj --> XrwCore --> XrwSimple --> XrwViewportGridViewHeader
复合部件
XrwBox
XrwBox
类按水平或垂直方向排列子控件。它与 GTK 的 Box 相似。它不与 Athena 的 "Box" 相似,后者仅移动子控件而不调整其大小。
XrwBox
类是 XrwConstraint
的子类。它评估其子控件的约束 ExpandToAvailableHeight
、ExpandToMaxSiblingHeight
、ExpandToAvailableWidth
和 ExpandToMaxSiblingWidth
,并在适当的时候调整子控件的大小。
此类没有公共构造函数,但有四个静态工厂方法。NewHBoxWidget
/NewHBoxGadged
创建一个具有水平子控件排列的新 XrwBox
,NewVBoxWidget
/NewVBoxGadged
创建一个具有垂直子控件排列的新 XrwBox
。
图片显示了一个 XrwBox
中两个水平排列的 XrwCommand
子控件。子控件对齐方式为 1.0。
继承 (↑)
IDisposable --> XrwObject --> XrwRectObject --> XrwVisibleRectObj --> XrwCore --> XrwComposite --> XrwConstraint --> XrwBox
XrwHslColorPanel
XrwHslColorPanel
类排列了一个用于色相和饱和度选择的位图以及一个用于亮度选择的滚动条。Athena、Motif 和 GTK 都不知道此类,其原型是 System.Windows.Forms 的“ColorDialog”自定义颜色选项卡页 HSL 自定义颜色选择。
XrwHslColorPanel
类是一个小部件,它允许用户从色相、饱和度和亮度颜色分量中选择自定义颜色值。
此类没有公共构造函数,但有一个静态工厂方法。NewHslColorPanelGadget
用于创建新的 XrwHslColorPanel
。
图片显示了一个选择颜色为白色的 XrwHslColorPanel
。
继承 (↑)
IDisposable --> XrwObject --> XrwRectObject --> XrwVisibleRectObj --> XrwCore --> XrwComposite --> XrwConstraint --> XrwBox --> XrwHslColorPanel
XrwNotebook
XrwNotebook
类按页面排列子控件。它与 GTK 的 Notebook 相似。
XrwNotebook
类是 XrwConstraint
的子类,其子控件是页面,可以通过边缘的标签页进行切换。
此类没有公共构造函数,但有两个静态工厂方法。
NewTopTabedNotebookGadget
创建一个标签页位于顶部的新的 XrwNotebook
。
NewBottomTabbedNotebookGadget
创建一个标签页位于底部的新的 XrwNotebook
。
此类引入了四个特殊常量
CaptionbarPosition.Top
,CaptionbarPosition.Left
,CaptionbarPosition.Right
和CaptionbarPosition.Bottom
,
这些常量定义了笔记本标题栏的位置。
下一张图片显示了一个带有四个
CaptionbarPosition.Top
标签页的笔记本(“文件”、“对话框测试”、“切换测试”和“单选测试”)。第一个标签页“文件”被选中,并在页面堆栈中显示了第一个页面(带有四个按钮:“文件”、“关闭菜单”、“消息框”和“关闭应用程序”)。
下一张图片显示了一个带有五个
CaptionbarPosition.Bottom
标签页的笔记本(“菜单”、“切换”、“单选”、“微调”和“编辑”)。第四个标签页“微调”被选中,并在页面堆栈中显示了第四个页面(带有一个文本微调按钮“Spin text 1”和一个组合框“A”,该组合框有一个微调菜单)。
继承 (↑)
IDisposable --> XrwObject --> XrwRectObject --> XrwVisibleRectObj --> XrwCore --> XrwComposite --> XrwConstraint --> XrwBox --> XrwNotebook
XrwRadioBox
XrwRadioBox
类按水平或垂直方向排列 XrwRadio
子控件。它与 GTK 中没有边框的单选按钮组表示相似。
XrwRadioBox
类是 XrwConstraint
的子类,它实现了其单选按钮子控件中一次只能选择一个的功能。
此类没有公共构造函数,但有两个静态工厂方法。NewHRadioBoxGadget
创建一个具有水平子控件排列的新 XrwRadioBox
,NewVRadioBoxGadget
创建一个具有垂直子控件排列的新 XrwRadioBox
。
图片显示了一个水平方向的 XrwRadioBox
,其中包含三个单选按钮。
继承 (↑)
IDisposable -->XrwObject --> XrwRectObject --> XrwVisibleRectObj --> XrwCore --> XrwComposite --> XrwConstraint --> XrwBox --> XrwRadioBox
XrwSpinBox
XrwSpinBox
类像 XrwBox
类一样按水平或垂直方向排列子控件,但它可以隐藏子控件以满足所需的几何形状。其原型是 GTK Nautilus(文件管理器)路径栏。
XrwSpinBox
类是 XrwConstraint
的子类,它可以组织比其可见区域显示更多的子控件。在这种情况下,它可以将隐藏的子控件旋转到可见区域,并将可见的子控件旋转到不可见区域 - 因此,如果需要,它会动态显示两个旋转导航器(前进和后退)。
此类没有公共构造函数,但有四个静态工厂方法。NewHSpinBoxWidget
/NewHSpinBoxGadget
创建一个具有水平子控件排列的新 XrwSpinBox
,NewVSpinBoxWidget
/NewVSpinBoxGadget
创建一个具有垂直子控件排列的新 XrwSpinBox
。
图片显示了一个水平方向的 XrwSpinBox
,带有前进和后退导航器以及八个按钮。
继承 (↑)
IDisposable --> XrwObject --> XrwRectObject --> XrwVisibleRectObj --> XrwCore --> XrwComposite --> XrwConstraint --> XrwBox --> XrwSpinBox
XrwCanvas
XrwCanvas
类根据偏移约束排列子图形。Athena、Motif 和 GTK 都不知道此类,其原型是 GTK 扩展 "crcanvas" 类或 "GnomeCanvas" 类,但不带滚动功能。
画布控件/小部件提供了一个用于结构化(主要是矢量)图形(例如直线、圆弧、矩形、圆角矩形、椭圆、折线、多边形或路径)绘制和便捷坐标操作的引擎。
此类没有公共构造函数,但有两个工厂方法。NewCanvasWidget
/NewCanvasGadged
用于创建新的 XrwCanvas
。
在所有典型用例中使用 XrwCanvas
WIDGET。
在事件处理极少的情况下使用 XrwCanvas
GADGET。
图片显示了一个画布,上面有一些绘图图元(直线、带实心填充和斜线填充的圆弧、带实心填充和瓦片填充的矩形、带斜线的圆角矩形、不带填充的椭圆、不带填充的折线以及带斜线填充的多边形)。
继承 (↑)
IDisposable --> XrwObject --> XrwRectObject --> XrwVisibleRectObj --> XrwCore --> XrwComposite --> XrwConstraint --> XrwCanvas
XrwDockPanel
XrwDockPanel
类将子控件排列在最多五个区域 - 顶部、底部、左侧或右侧,或者填充剩余空间。这使其成为许多需要将窗口划分为特定区域的情况下的绝佳选择。它可以替代嵌套的 XrwBox
布局。Athena、Motif 和 GTK 都不知道此类,其原型可以是 WPF 的“DockPanel”。
停靠面板评估其子控件的停靠样式约束,将它们停靠在顶部、左侧、右侧、底部或填充剩余空间,并在适当的时候调整子控件的大小。
此类没有公共构造函数,但有一个静态工厂方法。NewDockPanelGadget
用于创建新的 XrwDockPanel
。
图片显示了一个 XrwDockPanel
,其中所有五个停靠位置都被占用。
继承 (↑)
IDisposable --> XrwObject --> XrwRectObject --> XrwVisibleRectObj --> XrwCore --> XrwComposite --> XrwConstraint --> XrwDockPanel
XrwFrame
XrwFrame
类仅在一个装饰性框架内排列单个子控件。它与 GTK 的 Frame 相似。
GTK 手册页对“Frame”的描述是:
一个带有装饰性框架和可选标签的容器。
目前不支持标签。
此类没有公共构造函数,但有两个静态工厂方法。NewFrameWidget
/NewFrameGadget
用于创建新的 XrwFrame
。
继承 (↑)
IDisposable --> XrwObject --> XrwRectObject --> XrwVisibleRectObj --> XrwCore --> XrwComposite --> XrwConstraint --> XrwFrame
XrwGridForm
XrwGridForm
类使用预定义的列和行网格来排列子控件。它与 Motif 的“Form”控件相似,但不支持相对于表单边缘或彼此的对齐。
LessTif 手册页对“Form”的描述是(LessTif Manual)
XmForm 是一个允许您指定复杂几何形状的控件。该控件能够根据彼此的位置对齐子控件。控件可以链接到彼此的位置,固定到一个固定位置,或固定到表单的边缘。定位可以是相对的,也可以是绝对的。
用于布局子控件的算法是迭代的。在 LessTif 的开发版本中,控件支持的迭代次数在它希望达到稳定状态之前是 200。OSF/Motif® 使用的数字远高于此;如果 LessTif 中的低数字给您带来麻烦(它会生成一个提及“bailout”的警告消息),则该数字太低,或者您发现了一个错误。
代替 Motif 的 XmNfractionBase
资源,它支持具有固定尺寸的列和行,通过调用 AddColumn(
"128")
或 AddRow(
"256")
;以及动态尺寸,通过调用 AddColumn(
"1.0*")
或 AddRow(
"1.5*")
。固定尺寸期望一个整数值(以像素为单位),动态尺寸期望一个浮点数后跟“*”(将乘以剩余的可用尺寸)。固定尺寸和动态尺寸可以在同一表单控件中并行使用。XrwGridForm
不会迭代计算其子控件的位置,而是在一次单次传递中计算。
此类没有公共构造函数,但有一个静态工厂方法。NewGridFormGadget
用于创建新的 XrwGridForm
。
图片显示了一个 XrwGridForm
,它具有两列动态尺寸(“1.0*”和“2.0*”)和三行(静态“36”像素,动态“1.0*”和“1.5*”)。四个简单的按钮控件显示了列跨度(第 1 个)、行跨度(第 4 个)和边距(第 1 ... 第 4 个)。
继承 (↑)
IDisposable --> XrwObject --> XrwRectObject --> XrwVisibleRectObj --> XrwCore --> XrwComposite --> XrwConstraint --> XrwGridForm
XrwColorSelectorGridForm
XrwColorSelectorGridForm
类使用预定义的列和行网格来排列 XrwLabelAndColor
子控件。它被设计为作为控件,以小部件的形式保存子控件(以节省内存和 X 服务器通信),并将事件转发给其子控件。布局从其基类 XrwGridForm 中不变地获取。Athena、Motif 和 GTK 都不知道此类,其原型是 System.Windows.Forms 的“ColorDialog”可用标准颜色选项卡页颜色选择器网格。
XmColorSelecrorGridForm 是一个提供可选预定义颜色网格的控件。
此类没有公共构造函数,但有几个静态工厂方法。NewColorSelectorGridForm16
创建了一个包含 16 种可选预定义颜色的新 XrwColorSelectorGridForm
。NewColorSelectorGridForm140
创建了一个包含 140 种可选预定义颜色的新 XrwColorSelectorGridForm
(X11 定义了 140 种命名颜色)。
图片显示了一个 XrwColorSelectorGridForm
,它有 2 列(静态宽度)和 8 行(静态高度),包含 16 个 XrwLabelAndColor
子控件,每个子控件显示一个彩色矩形和颜色名称。
继承 (↑)
IDisposable --> XrwObject --> XrwRectObject --> XrwVisibleRectObj --> XrwCore --> XrwComposite --> XrwConstraint --> XrwGridForm --> XrwColorSelectorGridForm
XrwCustomColorChooserGridForm
XrwCustomColorChooserGridForm
类使用预定义的列和行网格来排列其子控件 XrwHslColorPanel
和 XrwHslColorPanel
。它与 GTK 的“ColorSelection”控件的某些部分相似,但其原型是 System.Windows.Forms 的“ColorDialog”用户定义颜色选项卡页。
XmColorSelecrorGridForm 是一个通过 HSL 或 RGB 颜色模型选择自定义颜色的控件。
此类没有公共构造函数,但有一个静态工厂方法。NewCustomColorChooserGridForm
用于创建新的 XrwCustomColorChooserGridForm
。
图片显示了一个 XrwCustomColorChooserGridForm
,其中 XrwHslColorPanel
用于通过 HSL 颜色模型选择自定义颜色,而 XrwHslColorPanel
用于通过 RGB 颜色模型选择自定义颜色。
继承 (↑)
IDisposable --> XrwObject --> XrwRectObject --> XrwVisibleRectObj --> XrwCore --> XrwComposite --> XrwConstraint --> XrwGridForm --> XrwCustomColorChooserGridForm
XrwRgbColorPanel
XrwRgbColorPanel
类排列了标签、滚动条和三个颜色分量(红色、绿色和蓝色)的编辑器。Athena、Motif 和 GTK 都不知道此类,其原型可以是互联网上许多免费颜色选择器之一。
XrwRgbColorPanel
类是一个小部件,它允许用户从红色、绿色和蓝色颜色分量中选择自定义颜色值。
此类没有公共构造函数,但有一个静态工厂方法。NewRgbColorPanelGadget
用于创建新的 XrwRgbColorPanel
。
图片显示了一个颜色选择为白色的 XrwRgbColorPanel
。
继承 (↑)
IDisposable --> XrwObject --> XrwRectObject --> XrwVisibleRectObj --> XrwCore --> XrwComposite --> XrwConstraint --> XrwGridForm --> XrwRgbColorPanel
XrwPaned
XrwPaned
类以平铺方式排列子控件,并允许更改其大小。它与 Athena 的 "Paned" 控件相似,已经包含了相应的 Athena "Grip" 控件。
X Toolkit Intrinsics 对“Paned”的描述是(X Toolkit Intrinsics Reference Manual)
Paned 控件以垂直或水平平铺方式管理子控件。用户可以通过使用出现在两个窗格之间边框附近的抓手(grips)来动态调整窗格大小。
当指针位于抓手处并按下时,会显示一个箭头,指示正在调整大小的窗格。在按住指针按钮的情况下,用户可以上下(或左右)移动指针。这会改变窗格之间的边界,导致一个窗格收缩,而另一个(或多个)窗格增长。Paned 控件的大小不会改变。Paned 控件可以接受任何控件类作为窗格,但 Grip 除外。Grip 控件对 Paned 控件具有特殊含义,将其 Grip 作为其自身的窗格会使 Paned 控件混乱。
此类没有公共构造函数,但有两个静态工厂方法。NewHPanedWidget
或 NewVPanedWidget
创建一个水平或垂直方向的 XrwPaned
。
图片显示了一个水平方向的 XrwPaned
,其中包含一个 XrwTree
和一个 XrwPropertyGrid
。
继承 (↑)
IDisposable --> XrwObject --> XrwRectObject --> XrwVisibleRectObj --> XrwCore --> XrwComposite --> XrwConstraint --> XrwBox --> XrwPaned
XrwPorthole
XrwPorthole
类堆叠排列子控件,但一次只显示一个。其原型是 Athena 的 "Porthole" 控件。
X Toolkit Intrinsics 对“Porthole”的描述是(X Toolkit Intrinsics Reference Manual)
Porthole 控件提供了一个任意控件列表的几何管理,在任何给定时间只能管理其中一个。被管理的子控件会被重新父化到 porthole 内部,并由应用程序(通常在 Panner 控件的控制下)移动。
Porthole 控件允许其被管理的子控件请求任何大于或等于 Porthole 本身的大小,以及任何位置,只要子控件仍然遮挡了整个 Porthole。
此类没有公共构造函数,但有一个静态工厂方法。NewPortholeGadget
用于创建新的 XrwPorthole
。
继承 (↑)
IDisposable --> XrwObject --> XrwRectObject --> XrwVisibleRectObj --> XrwCore --> XrwComposite --> XrwConstraint --> XrwPorthole
XrwPropertyGrid
XrwPropertyGrid
类允许浏览和编辑对象的属性。其原型是 System.Windows.Forms 的 "PropertyGrid" 控件。
属性网格控件类似于普通的双列树控件,不同之处在于它只提供两个层次的结构(分支节点和叶节点),并且叶节点是可编辑的。叶节点编辑器可以支持文本值、下拉列表、文件名浏览器或几乎任何其他可想象的类型。
PropertyGrid 控件显示给定对象(类实例)的属性,这些属性按类别分组,允许编辑这些属性。要显示和编辑的对象属性是通过反射确定的。
XrwPropertyGrid
或多或少是围绕一个特定配置的 XrwTree 控件的包装,并增加了一些附加功能。这包括:
- 一个显示当前指定对象的类型和名称的标题区域
- 一个具有叶节点第二列编辑功能的双列树
- 一个显示当前选定属性的名称和描述的描述区域
此类没有公共构造函数,但有一个静态工厂方法。NewPropertyGridWidget
用于创建新的 XrwPropertyGrid
。
图片显示了一个 XrwPropertyGrid
,其中包含两个类别(分支节点“Default”和“Demonstation”)、两个文本属性(叶节点“Name”和“Col2”)、一个布尔属性(叶节点“Col5”)、一个三态属性(叶节点“Col6”)和一个枚举属性(叶节点“Col7”)。所有叶节点都是可编辑的。目前,枚举属性(叶节点“Col7”)处于编辑模式。
继承 (↑)
IDisposable --> XrwObject --> XrwRectObject --> XrwVisibleRectObj --> XrwCore --> XrwComposite --> XrwConstraint --> XrwPropertyGrid
XrwRibbon
XrwRibbon
是一个命令栏,它将应用程序的功能组织到应用程序窗口顶部的标签系列中。功能区取代了传统的菜单栏和工具栏。功能区 UI 具有更好的功能可发现性,能够更快地学习应用程序,并使用户对他们的应用程序体验感觉更有掌控感。
一个功能区由几个组件组成。每个功能区都有一个应用程序菜单和任意数量的功能区标签。功能区标签包含面板,每个面板包含命令控件。相关的命令控件可以组合成控件组。Athena、Motif 和 GTK 都不知道此类。
XrwRibbon
的高度固定,并且应始终扩展到窗口的完整宽度。
此类没有公共构造函数,但有一个静态工厂方法。NewRibbonWidget
用于创建一个新的 XrwRibbon
实例,该实例已经包含了一个 XrwRibbonAppMenu
,并已准备好接受 XrwRibbonTab
子控件。
图片显示了一个带有应用程序菜单按钮()和三个标签页(“Dialog test”、“Radio & toggle test”以及“Split test”)的
XrwRibbon
。第一个标签页被选中,包含两个功能区面板。每个面板包含三个功能区按钮 - 第一个面板,“Large buttons”,显示在功能区面板标签旁边用于启动对话框的图标,其按钮的 CurrentSizeMode
== RibbonPanelSizePolicy.Large
;第二个面板,“Medium buttons”,也显示了在功能区面板标签旁边用于启动对话框的图标,其按钮的 CurrentSizeMode
== RibbonPanelSizePolicy.Medium
。
继承 (↑)
IDisposable --> XrwObject --> XrwRectObject --> XrwVisibleRectObj --> XrwCore --> XrwComposite --> XrwConstraint --> XrwRibbon
XrwRibbonPanel
XrwRibbonPanel
是应用程序命令控件的第二个最高级别排列,它将命令控件分组到功能区标签内的相关集合中。描述性的功能区面板标签解释了其命令控件的共同目的。Athena、Motif 和 GTK 都不知道此类。
由于功能区被实现为一个整体控件,其几乎所有子项(包括功能区面板)都实现为小部件。功能区面板是功能区子项,它为功能区提供了带标签框架的功能。
XrwRibbonPanel
的高度固定,并根据其子控件扩展到所需的宽度。如果功能区面板注册了 ButtonRelease
事件处理程序,它将显示一个对话框启动器()。
此类没有公共构造函数,但有一个静态工厂方法。NewRibbonPanelGadget
用于创建一个新的空 XrwRibbonPanel
实例。
图片显示了两个 XrwRibbonPanel
,包括在功能区面板标签旁边用于启动对话框的图标。一个 XrwRibbonPanel
包含三个 XrwRibbonButton
,其 CurrentSizeMode
== RibbonPanelSizePolicy.Large
;另一个 XrwRibbonPanel
包含三个 XrwRibbonButton
,其 CurrentSizeMode
== RibbonPanelSizePolicy.Medium
。第一个功能区按钮处于焦点状态。
继承 (↑)
IDisposable --> XrwObject --> XrwRectObject --> XrwVisibleRectObj --> XrwCore --> XrwComposite --> XrwConstraint --> XrwRibbonPanel
XrwRibbonTab
XrwRibbonTab
是应用程序命令控件的最高级别排列,应该在描述性的功能区标签和其中包含的命令控件之间提供清晰、明显且唯一的映射。它组织应用程序的功能以帮助发现。Athena、Motif 和 GTK 都不知道此类。
由于功能区被实现为一个整体控件,其几乎所有子项(包括功能区标签)都实现为小部件。功能区标签是功能区子项,它为功能区提供类似于笔记本标签页的功能。
功能区标签用于影响窗口内容的命令。例如,用于呈现、格式化、修改或使用文件或存储内容,或更改视图的命令。(相比之下,应用程序菜单用于呈现与文件或存储相关的操作命令,例如传统上在文件菜单中用于创建、打开和保存、打印以及发送或发布数据的命令。)
XrwRibbonTab
的高度固定,并且始终扩展到功能区的完整宽度。
此类没有公共构造函数,但有一个静态工厂方法。NewRibbonTabGadget
用于创建一个新的空 XrwRibbonTab
实例。
图片显示了一个带有应用程序菜单按钮()和三个标签页(“Dialog test”、“Radio & toggle test”以及“Split test”)的
XrwRibbon
。第一个标签页被选中,包含两个功能区面板。每个面板包含三个功能区按钮 - 第一个面板,“Large buttons”,显示在功能区面板标签旁边用于启动对话框的图标,其按钮的 CurrentSizeMode
== RibbonPanelSizePolicy.Large
;第二个面板,“Medium buttons”,也显示了在功能区面板标签旁边用于启动对话框的图标,其按钮的 CurrentSizeMode
== RibbonPanelSizePolicy.Medium
。
此版本引入了标记。有关详细信息,请参阅 XrwLabelBase。
继承 (↑)
IDisposable --> XrwObject --> XrwRectObject --> XrwVisibleRectObj --> XrwCore --> XrwComposite --> XrwConstraint --> XrwRibbonTab
XrwUniformGrid
XrwUniformGrid
类将子控件排列成大小相等的行和列。列数可以通过 ColumnCount
属性定义,行数可以通过 RowCount
属性定义。或者,行数和/或列数可以根据子控件的首选大小和 XrwUniformGrid
的可用大小动态计算。这使其成为许多需要将窗口划分为多个大小相等的区域的情况下的绝佳选择。它可以简化 XrwGridForm
布局的创建。子控件按行填充 XrwUniformGrid
,从最上面一行的最左边一列开始。Athena、Motif 和 GTK 都不知道此类,其原型可以是 WPF 的“UniformGrid”。
UniformGrid 就像 Grid 一样,具有多行和多列的可能性,但有一个重要区别:所有行和列的大小都相同!这可以用于需要网格行为但不需要为行和列指定不同大小的情况。
此类没有公共构造函数,但有一个静态工厂方法。NewUniformGridGadget
用于创建新的 XrwUniformGrid
。
除了影响所有子控件的 HorzSpacing
和 VertSpacing
属性之外,任何子控件的单个边距都可以应用于 XrwDockPanel.ChildConstraints
中。默认值为 0。
图片显示了一个 XrwUniformGrid
,其中包含十六个子控件和预定义的 ColumnCount
= 4 和 RowCount
= 4。网格对角线上的子控件没有边距,其他所有子控件都有。
继承 (↑)
IDisposable --> XrwObject --> XrwRectObject --> XrwVisibleRectObj --> XrwCore --> XrwComposite --> XrwConstraint --> XrwUniformGrid
XrwViewport
XrwViewport
类是一个可滚动视图区域控件。它与 Athena 的 "Viewport" 控件相似。
Athena 对“Viewport”的描述是(X Window System Athena Widgets, Quick Reference Guide)
Viewport 控件由一个框架窗口、一个或两个滚动条以及一个内部窗口(通常包含一个子控件)组成。框架窗口的大小由要显示的数据的查看大小以及 Viewport 创建的尺寸决定。内部窗口是要显示的数据的完整大小,并被框架窗口裁剪。Viewport 控件直接控制滚动。滚动不需要应用程序回调。当框架窗口的尺寸等于内部窗口的尺寸,或者当数据不需要滚动时,Viewport 控件会自动移除任何滚动条。“forceBars”选项会导致 Viewport 控件永久显示所有滚动条。
XrwViewport
使用四个内部控件 - 一个 Clip
控件(由 XrwSimple
实现),用于裁剪被控制 Child
的不可见区域 - 一个 VScroll
控件(由垂直 XrwScroll
实现),用于控制 Child
的垂直位置 - 一个 HScroll
控件(由水平 XrwScroll
实现),用于控制 Child
的水平位置 - 以及被控制的 Child
。Child
是唯一用户定义的控件,必须通过 AddChild()
或 InsertChild()
分配,并且可以是任何 XrwCore
或其派生类。
此类没有公共构造函数,但有两个工厂方法。NewViewportWidget
/NewViewportGadged
用于创建新的 XrwViewport
。
图片显示了 XrwViewport
的一般功能。
从此版本开始,
XrwViewport
有了一个新的整体组成部分,即 XrwViewportGridViewHeader
控件 - 它将由 XrwViewport
自动创建和销毁。XrwViewportGridViewHeader
负责显示 XrwViewport
的子控件的列标题名称,但它没有内部标题数据。它从 Child
中获取标题数据。Child
属性支持任何 XrwCore
或其派生类,但只有当 Child
实现 XrwIGridView
接口时,XrwViewportGridViewHeader
才会显示列标题名称,否则它将保持为空。无论 Child
是否实现 XrwIGridView
接口,都可以通过 HeaderVisibility
属性控制标题的可见性、隐藏或折叠,并且可以通过 HeaderPreferredHeight
属性定义标题的首选高度。
目前,XrwList
和 XrwTree
实现 XrwIGridView
接口。
图片显示了 XrwViewport
的一般功能,包括 XrwViewportGridViewHeader
。
继承 (↑)
IDisposable --> XrwObject --> XrwRectObject --> XrwVisibleRectObj --> XrwCore --> XrwComposite --> XrwConstraint --> XrwViewport
XrwBaseCellEditorShell
XrwBaseCellEditorShell
是弹出式单元格编辑器的抽象基类,它用于就地编辑 XrwList
、XrwTree
和 XrwPropertyGrid
元素值(非枚举类型)。它实现了 XrwICellEditorShell
。Athena、Motif 和 GTK 都不知道此类。
基单元格编辑器外壳用于确定列表中或树中的列就地编辑的适当单元格编辑器。编辑器作为列单元格的叠加层弹出以进行编辑,并且必须适合单元格的数据类型。
此类是抽象的,不能实例化。
继承 (↑)
IDisposable --> XrwObject --> XrwRectObject --> XrwVisibleRectObj --> XrwCore --> XrwComposite --> XrwShell --> XrwOverrideShell --> XrwBaseCellEditorShell
XrwGenericCellEditorShell
XrwGenericCellEditorShell
提供了一个弹出式单元格编辑器,用于就地编辑 XrwList
和 XrwTree
的文本值单元格。Athena、Motif 和 GTK 都不知道此类。
通用单元格编辑器外壳用作弹出文本值编辑器,用于就地编辑列表或树单元格。
此类没有公共构造函数,但有一个静态工厂方法。NewGenericCellEditorShell
用于创建一个新的空 XrwGenericCellEditorShell
实例。通常,用户代码不需要调用工厂方法,因为 XrwBaseCellEditorShell
的静态 FindCellEditor
方法会在需要时创建一个实例。
图片显示了一个 XrwPropertyGrid
,其中行 Name 列 Value 的单元格编辑器已弹出。
继承 (↑)
IDisposable --> XrwObject --> XrwRectObject --> XrwVisibleRectObj --> XrwCore --> XrwComposite --> XrwShell --> XrwOverrideShell --> XrwBaseCellEditorShell --> XrwGenericCellEditorShell
XrwRibbonAppMenu
XrwRibbonAppMenu
是 XrwRibbon
的弹出式应用程序菜单,显示 XrwSme
。Athena、Motif 和 GTK 都不知道此类。
应用程序菜单用于呈现与文件或存储相关操作的命令,例如传统上在文件菜单中用于创建、打开和保存、打印以及发送或发布数据的命令。(相比之下,功能区标签用于呈现影响窗口内容的命令。例如,用于呈现、格式化、修改或使用文件或存储内容,或更改视图的命令。)
此类没有公共构造函数,但有一个静态工厂方法。NewRibbonAppMenu
用于创建一个新的空 XrwRibbonAppMenu
实例。通常,用户代码不需要调用工厂方法,因为 XrwRibbon
类默认始终创建一个应用程序菜单。
由于 XrwRibbonAppMenu
源自 XrwOverrideShell
,它使用 XrwOverrideShell
的机制,在 Realize()
时将其注册到 XrwApplicationShell
的关联外壳列表中(作为覆盖外壳),以接收事件转发,并在 Unrealize()
时从 XrwApplicationShell
的关联外壳列表中注销,以停止事件转发。
图片显示了一个包含命令面板和详细信息面板的 XrwRibbonAppMenu
。
继承 (↑)
IDisposable --> XrwObject --> XrwRectObject --> XrwVisibleRectObj --> XrwCore --> XrwComposite --> XrwShell --> XrwOverrideShell --> XrwRibbonAppMenu
XrwSimpleMenu
XrwSimpleMenu
类是一个弹出式外壳,显示 XrwSme
。它与 Athena 的 "SimpleMenu" 相似。
Athena 对“SimpleMenu”的描述是(Athena Widget Set — C Language Interface)
SimpleMenu 控件是菜单窗格的容器。它是 shell 的直接子类,应该使用 XtCreatePopupShell() 创建,而不是 XtCreateManagedWidget()。这是菜单中实际与窗口关联的唯一部分,因为每个菜单窗格都是一个小部件。SimpleMenu 作为粘合剂,将单独的菜单项绑定成一个菜单。
此类没有公共构造函数,但有一个静态工厂方法。NewSimpleMenu
用于创建一个新的空 XrwSimpleMenu
实例。通常,用户代码不需要调用工厂方法,因为 XrwMenuButton
和 XrwRibbonSplitButton
类默认始终创建一个简单菜单。
由于 XrwSimpleMenu
源自 XrwOverrideShell
,它使用 XrwOverrideShell
的机制,在 Realize()
时将其注册到 XrwApplicationShell
的关联外壳列表中(作为覆盖外壳),以接收事件转发,并在 Unrealize()
时从 XrwApplicationShell
的关联外壳列表中注销,以停止事件转发。
图片显示了一个包含两个 XrwSme
的 XrwSimpleMenu
。
继承 (↑)
IDisposable --> XrwObject --> XrwRectObject --> XrwVisibleRectObj --> XrwCore --> XrwComposite --> XrwShell --> XrwOverrideShell --> XrwSimpleMenu
XrwDropDownCellEditorShell
XrwDropDownCellEditorShell
提供了一个弹出式单元格编辑器,用于就地编辑 XrwList
和 XrwTree
的可枚举值单元格。它实现了 XrwICellEditorShell
。Athena、Motif 和 GTK 都不知道此类。
下拉式单元格编辑器外壳用作弹出式可枚举值编辑器,用于就地编辑列表或树单元格。
此类没有公共构造函数,但有一个静态工厂方法。NewDropDownCellEditorShell
用于创建一个新的空 XrwDropDownCellEditorShell
实例。通常,用户代码不需要调用工厂方法,因为 XrwBaseCellEditorShell
的静态 FindCellEditor
方法会在需要时创建一个实例。
图片显示了一个 XrwPropertyGrid
,其中行 Col7 列 Value 的单元格编辑器已下拉。
继承 (↑)
IDisposable --> XrwObject --> XrwRectObject --> XrwVisibleRectObj --> XrwCore --> XrwComposite --> XrwShell --> XrwOverrideShell --> XrwSimpleMenu --> XrwDropDownCellEditorShell
XrwSpinMenu
XrwSpinMenu
类是一个弹出式外壳,显示 XrwSme
。如果空间不足以显示所有 XrwSme
,内容可以滚动。
XrwSpinMenu
类是 Xrw
Simple
Menu
的子类。它是菜单中唯一实际与窗口关联的部分,因为每个菜单窗格都是一个小部件。XrwSpinMenu
作为粘合剂,将各个菜单窗格绑定到一个菜单中。与 Xrw
Simple
Menu
不同的是,它可以组织比其可见区域显示更多的菜单窗格。在这种情况下,它可以将不可见的菜单窗格滚动到可见区域,并将可见的菜单窗格滚动到不可见区域——因此,如果需要,它会动态显示两个滚动导航器(前进和后退)。
此类没有公共构造函数,但有一个静态工厂方法。NewSpinMenu
创建一个新的空 XrwSpinMenu
实例。通常,用户代码不需要调用工厂方法,因为 XrwComboBox
类默认总是创建一个滚动菜单。
由于 XrwSpinMenu
源自 XrwOverrideShell
(通过 XrwSimpleMenu
),因此它使用 XrwOverrideShell
的机制在 Realize()
时向 XrwApplicationShell
的关联外壳列表(作为覆盖外壳)注册自己,以转发事件,并在 Unrealize()
时从 XrwApplicationShell
的关联外壳列表中注销自己,以停止事件转发。
图像显示了一个 XrwSpinMenu
,其中包含 10 个菜单窗格 XrwSme
以及后退和前进导航器。
继承 (↑)
IDisposable --> XrwObject --> XrwRectObject --> XrwVisibleRectObj --> XrwCore --> XrwComposite --> XrwShell --> XrwOverrideShell --> XrwSimpleMenu --> XrwSpinMenu
XrwToolTipShell
XrwToolTipShell
类是一个弹出外壳,它在当前指针位置旁边显示一个带有工具提示的 XrwLabel
。它类似于 GTK 的“GtkTooltip”。
GTK 对“GtkToolTip”的描述是(GTK — C 语言接口)
可以通过使用 gtk_widget_set_tooltip_text() 或 gtk_widget_set_tooltip_markup() 而无需任何显式的工具提示对象来简单地实现基本工具提示。当您需要一个内容更丰富的工具提示时,例如添加图像,或者您希望工具提示为每个 GtkTreeView 行或单元格具有不同的内容,您将需要做更多的工作。
目前 XrwToolTipShell
只支持文本和标记文本。未来提供更多功能(图标、用户控件)的选项是存在的。工具提示更多地是相应 XrwCore
小部件和控件的属性,而不是独立的功能,并且可以设置,例如 notebooktabTextBoxTest.ToolTip = "<markup><b>XrwNotebookTab:</b> This is a notebook tab,\nthat represents a top aligned tab.</markup>";
。
在指针在设置了工具提示文本的小部件/控件上停止移动约 600 毫秒后,工具提示会显示出来。指针重新开始移动后,工具提示会立即消失。延迟时间由 XrwToolTipManager
类实现,工具提示的启动由 XrwToolTipWrapper
类实现。
此类没有公共构造函数,但有一个静态工厂方法。NewToolTipShell
创建一个新的空 XrwToolTipShell
实例。通常,用户代码不需要调用工厂方法,因为 NewToolTipWrapper
会负责工具提示的整个生命周期。
由于 XrwToolTipShell
源自 XrwOverrideShell
,因此它使用 XrwOverrideShell
的机制在 Realize()
时向 XrwApplicationShell
的关联外壳列表(作为覆盖外壳)注册自己,以转发事件,并在 Unrealize()
时从 XrwApplicationShell
的关联外壳列表中注销自己,以停止事件转发。
图像显示了一个 XrwNotebookTab
的 XrwToolTipShell
。
继承 (↑)
IDisposable --> XrwObject --> XrwRectObject --> XrwVisibleRectObj --> XrwCore --> XrwComposite --> XrwShell --> XrwOverrideShell --> XrwToolTipShell
XrwDialogShell
XrwDialogShell
类是对话框弹窗的基类。它类似于 GTK 的“GtkDialog”。
GTK 对“GtkDialog”的描述是
创建弹出窗口。
Xrw 通常将对话框视为一个窗口,垂直分割。顶部区域称为“内容区域”,底部区域称为“操作区域”。XrwDialogShell
可以实现为模态(阻塞应用程序)或非模态。
此类是抽象的,必须由应用程序的对话框窗口继承。
图像显示了标准的 XrwMessageBox
,它是 XrwDialogShell
的预定义继承。它的“内容区域”包含一个 XrwLabel
,其“操作区域”包含两个 XrwCommand
。
继承 (↑)
IDisposable --> XrwObject --> XrwRectObject --> XrwVisibleRectObj --> XrwCore --> XrwComposite --> XrwShell --> XrwWmShell --> XrwTransientShell --> XrwDialogShell
历史
本文已从文章 Programming the Roma Widget Set (C# X11) - a zero dependency GUI application framework - Intrinsic widgets 和 Programming the Roma Widget Set (C# X11) - a zero dependency GUI application framework - Composite widgets 中分离出来,使用 Roma 小部件集的第六个公共版本,版本 ,发布于 2014 年 10 月 5 日。
Roma 小部件集的第七个公共版本是版本 ,发布于 2014 年 12 月 14 日。
Roma 小部件集的第八个公共版本是版本 ,发布于 2015 年 3 月 8 日。
Roma 小部件集的第八个公共版本是版本 ,发布于 2015 年 10 月 11 日。