# 窗口

> 围着每一个页面的那个框：带着帮助键、反馈按钮、主题按键和用户小块的标题栏、导航栏以及什么让每一个条目显示出来、状态栏和它的操作记录条、运行时停止那条带子、帮助面板、各种通知、崩溃同意窗口、连接断了时显示的那几块画面、全屏、桌面缩放，以及系统托盘。

Ganter Lab 的每一个页面都画在同一个框里：一条标题栏、左边一条导航栏、页面本身，以及底部一条状态栏。这个框在每一个页面上、在每一块看着这台工作站的屏幕上都一样，工作站自己的窗口和网络上的浏览器都一样（见[远程访问](remote-access)）；两者少数几处不同在下面点名。看到这个框不需要任何权限，但它的好几个条目和标记只为持有相应权限的身份画出来，和它们背后那些页面完全一样。

## 这个框一眼看过去 {#the-frame-at-a-glance}

| 部分 | 在哪里 | 它装着什么 |
|---|---|---|
| 标题栏 | 顶部 | 品牌标记、帮助键、反馈按钮、三个主题按键和用户小块。在工作站自己的窗口上，标题由操作系统来画（“Ganter Lab”，带最小化、最大化和关闭），网页那条标题栏收起来，帮助键、反馈按钮、主题按键和小块靠在右上角。浏览器保留完整的那条栏，左边是品牌标记和名字。设了[品牌](settings-branding)以后，标题写工作站的名称并带它的图标，那条栏也用工作站的徽标代替品牌标记和名字。 |
| 运行时停止带子 | 标题栏下面 | 只有运行时停止期间才有（见下）。 |
| 导航栏 | 左边缘 | 两组共最多十一个条目：上面是工作组，底部钉着的是工作站那一组。 |
| 内容 | 中间 | 页面。画不出来的页面退化成一条通知（“此面板里出了问题”，“画面的其余部分继续工作。该故障已记录在事件页面的控制台里。”，带**重试**），而这个框照样活着；下一次导航拿到的是干净的页面。 |
| 弹出消息 | 压在内容上，右下角 | 那些会打断人的通知，最新的在上面。 |
| 状态栏 | 底部 | 各个指示（最后一个是版本标记）、操作记录条和时钟。 |

窗口打开时不会小于 880 乘 520 像素，并在两次启动之间记住你把它留在了哪里（位置、大小、是否最大化）；见[首次启动](app-install#first-launch)。

## 标题栏 {#title-bar}

### 帮助键 {#the-help-key}

标题栏右边那一组最左边的一个问号，和主题按键之间隔着一条细分隔线。它打开[随页帮助](#contextual-help)下面讲的那块帮助面板，面板开着的时候它自己也做上标记。它在每一条路由上、对每一种身份、以及运行时停止期间都画出来。

### 反馈按钮 {#the-report-button}

帮助键右边的反馈按钮用窗口的屏幕截图给 Ganter 写一条反馈：缺陷、建议或者申请驱动。它只有一个图标，和帮助键一样大：提示文字写着名字**反馈**，下面写它做什么，屏幕阅读器也用这个名字读它。按一下会先截下窗口，然后才在页面上方的对话框里打开反馈表单，所以表单永远不会出现在它自己的图像里；表单、它发送什么以及服务器怎样答复，见[反馈](account-feedback#the-report-button)。对角色拥有向 Ganter 发送反馈的身份，它在每一条路由上都画出来，在管理员关掉之前所有角色都有这个权限；对角色没有它的身份，根本不画。某个情形拒绝这次反馈时，它照样画着但变灰，在提示文字里名字的下面说明原因：是浏览器而不是工作站的窗口、会话无法发送（演示配置，或者需要重新登录工作站的 Ganter 账户），或者截图正在进行中。没有登录 Ganter 账户的工作站不会被拒绝：它的反馈不带账户发出，表单会说明 Ganter 无法回复。公开演示不画它。

### 主题按键 {#theme-keys}

三个按键并排，顺序如下，每一个都有一句写出它名字的提示文字：

| 按键 | 提示文字 | 作用 |
|---|---|---|
| 系统（一个显示器字形） | 主题：跟随系统 | 跟随 Windows 的外观。在工作站的窗口上由宿主解析它，Windows 在浅色和深色之间切换的那一刻它就重新应用；浏览器则按它自己的浅色或深色偏好来解析。 |
| 浅色（一个太阳字形） | 主题：浅色 | 浅色外观，不管 Windows 怎么说。 |
| 深色（一个月亮字形） | 主题：深色 | 深色外观，不管 Windows 怎么说。 |

抬起来的那个按键是生效中的**选择**，绝不是它解析出来的那个外观：跟随系统看上去像浅色或者深色的时候，它照样标着跟随系统。在工作站自己的窗口上按一个按键，就把它实时应用，并把它作为工作站的偏好存进配置数据库，每个还没有选过自己主题的浏览器都立刻跟上。在浏览器上按一个按键，只改变那个浏览器：选择保存在那里，重新加载页面也还在，什么都不会到达工作站，从那以后那个浏览器不再跟随工作站的主题。按键不要求任何权限，因为一个浏览器的选择到不了任何别的屏幕。[设置的“外观”](settings-appearance)按同样的条件显示和改动同样这三个取值。

### 用户小块 {#the-user-chip}

在主题按键右边，隔着一条细分隔线，这个小块写明**这块屏幕**上登录的是谁：没有人时是**登录**，有人之后是那个显示名。人形字形上那个圆点，登录着是绿色，否则是灰色。这个小块在每一条路由、每一块屏幕上都画出来，因为角色始终生效，而没有登录本身就是一种身份（“未登录”角色）。

按下它就打开登录窗口：

- 标题写着**登录**；已经有人登录着而且名册显示着的时候，标题是**切换用户**。那时抬头那一行“当前登录身份 *名字*”带着一个**退出登录**按钮。
- 名册列出每一位本地用户，配一个两字母标记、名字和一个记号：有 PIN 的用户是一把锁（提示文字“需要 PIN”），没有 PIN 的是一个箭头（提示文字“轻触即可登录”），按下那一行的那一刻就登录了。
- 有 PIN 的用户会打开 PIN 那一步：这位用户的标记和名字、**返回**、抬头“输入 PIN”，以及一个收 4 到 6 位数字的键盘。确认键或者回车提交。
- 被拒绝时消息就留在键盘上、留在原处：“这个 PIN 不对。”，或者“PIN 输错太多次。请在 *n* 秒/分钟 后重试。”连错五次就把门关上一分钟；之后每再错五次等待时间翻倍，最多十五分钟。
- 工作站上还没有本地用户时，窗口显示的是原因，而不是一张空单子：“本工作站还没有本地用户。第一个，也就是主管理员，在‘用户’页面上创建。”

在工作站自己的窗口上，这个小块改的是工作站会话，也就是那个窗口的每一条命令所依据的身份；在浏览器里，它让那一条连接登录，别的什么都不动。不管哪一种，结果同样落到状态栏的操作记录条上（“已以 Ana 身份登录。”、“Ana 已退出登录。”、“登录被拒绝。 仍然以 Ana 身份登录。”），因为谁登录着决定了其他每一条命令可以做什么。整套流程在[登录](users-signing-in)下面讲。

## 导航栏 {#navigation-rail}

这条栏宽 64 像素：一个条目一个字形加一个标签，当前的那个条目高亮。每一个条目只有在这块屏幕上的身份至少持有所列权限之一时才画出来；页面本身在打开时还会再查一遍，所以这条栏只是把反正会被拒绝的东西修掉。这些权限就是角色编辑器上的那些开关；见[权限](users-permissions)。

| 条目 | 分组 | 打开 | 什么时候画出来 |
|---|---|---|---|
| 欢迎 | 上面 | 欢迎页面（`/welcome`）：程序的每个区域，一站一站地讲解 | 在工作站上，只在工作站保留这一页的时候（见[欢迎](welcome)），并且持有配置 Connector、配置 Logic、管理 Process、编辑仪表画面、管理本地用户、管理代理（MCP）中的任意一项。已发布的演示对每位访客都始终画出来。 |
| View | 上面 | 仪表画面页面（`/view`；`/`、`/home` 以及某幅画面自己的地址 `/d/…` 也会点亮它） | 始终：查看仪表画面这一项永远收不走 |
| Process | 上面 | Process 工作区，历史也在它里面（`/histories` 也点亮它） | 查看模型、运行流程、编辑配方与判定、管理 Process、查看历史，有其一即可 |
| Logic | 上面 | Logic 页面 | 查看 Logic |
| Connector | 上面 | Connector 页面 | 查看 Connector |
| 用户 | 上面 | 用户页面 | 在真实工作站上始终画出来（页面自己会告诉非管理员，管理是锁着的）。已发布的演示不带它。 |
| 验证 | 底部 | 验证页面 | 查看验证 |
| 事件 | 底部 | 事件页面 | 查看事件 |
| 代理 | 底部 | 代理页面 | 管理代理（MCP） |
| 远程访问 | 底部 | 远程访问页面 | 查看远程访问 |
| 设置 | 底部 | 设置页面 | 更改设置 |
| 账户 | 底部 | 账户页面。唯一一个用品牌 G 而不是字形画出来的条目。 | 在真实工作站上始终画出来。已发布的演示不带它。 |

没有人登录时，由“未登录”角色决定。它出厂时的权限包含除管理本地用户和远程访问（局域网）之外的一切，所以一台全新的工作站会画出每一个条目，直到管理员在[角色](users-roles)下面把那个角色收窄。一次角色改动把你所在页面的那个条目拿掉时，外壳把你挪到它仍然画着的第一个条目上。

有两个条目带着标记：

- **验证**戴一个警示色调的胶囊，写着待修复的数量（超过九十九写 99+），配置干净的时候藏起来。它跟着验证器的后台重扫走，所以你一边编辑它一边变；见[验证](validation)。
- **账户**只在许可需要留意的时候戴一个感叹号：订阅付款逾期、14 天内结束，或者设成要结束却不知道结束日期时是警示色调；订阅已取消，或者本来可以发一个许可证而这台工作站一个都没拿到时是红色。按下带标记的那个条目会落到订阅那一节，而不是页面顶部；见[订阅](account-subscription)。这里没有一个表示“已连接”的中性圆点。

## 状态栏 {#status-bar}

这条栏从左到右读：以版本标记收尾的那一组指示、有弹性的中间那段操作记录条，然后是独自待在右端的时钟。它每秒刷新一次。

### 那些指示 {#the-indicators}

| 指示 | 读作 | 什么时候显示 | 点击 |
|---|---|---|---|
| 免费模式倒计时 | 倒着走的“免费 · 12:34”，走完之后是“免费 · 运行时已停止”，不知道还剩多少时是“免费”；导航栏里账户条目的 G，用警示色调。提示文字：“免费模式：计时结束时运行时会停止。登录或添加许可证即可取消限制。 单击可打开账户。” | 工作站没有许可证时（见[免费模式与许可证](app-free-mode)） | 账户（在锁定于开始画面的设备上，它只是告知） |
| 健康状态 | 导航栏里 Connector 的标记，按 Connector 的健康状态着色，加上一段以 Connector 开头的文字。最差的那台设备：“Connector：*名字* 未在通信”（红色）或者“Connector：*名字* 不稳定”（警示色调）；每台设备都读得到数时是“Connector：在线”（绿色）；Connector 本身没在跑时是“Connector：已停止”（灰色）。内置 OPC UA 服务器不算在里面：服务器停着时 Connector 照样读设备，服务器的状态在[状态](connector-opcua-server)上。提示文字：“Connector 的健康状态（单击可打开）”。 | 始终 | Connector |
| 报警 | 一个铃铛和“报警：*n* 条活动（*m* 条未确认）”，字形和文字按其中最严重的那个优先级着色（和 Logic 树、事件页面用的是同一把尺子）。提示文字：“报警（单击可打开报警列表）”。 | 有任何报警处于活动或者仍在等待确认 | 事件页面的报警 |
| 记录 | “Process：*n* 条记录进行中”、“Process：*n* 条已暂停”，或者“Process：*n* 条记录进行中 · *m* 条已暂停”；导航栏里 Process 的标记，绿色，有任何一次运行被暂停时是警示色调（每次运行按其状态只算一次：被暂停的运行不会再算作记录进行中；停下来的只是它的计时，采集继续）。提示文字：“正在进行的记录（单击可打开 Process）”。 | 至少有一个单元在记录或已暂停 | Process |
| 新版本 | 一个强调色的箭头图形和“有可用的更新”；这个版本被标为含重要修复时，用警示色调写“有包含重要修复的更新”。不写版本号。提示文字说新版本已经发布，补上它是不是已经下载好（“它已下载完成，会在 Ganter Lab 下次重启时安装。”），最后是“单击可打开设置中的“更新”。” | 有更新的版本等着被接受，并且没有在[设置的“更新”](settings-updates)里被忽略；只为持有更改设置的身份画出来（远程平板前的操作员绝不会看见一个轮不到他的决定），在没有版本源的构建上也绝不画出来 | 设置的“更新” |

每个指示器都带着它所代表的那个区域的标记，文字也以那个区域的名称开头，所以一眼就能看出工作站哪一部分正常、哪一部分不正常：Connector 和 Process 的标记就是导航栏上的那两个，倒计时带着账户条目的 G，报警则保留铃铛，因为按下它打开的是事件页面上的报警列表，而不是 Logic。颜色和应用里每一个状态圆点一样：健康是绿色，降级或者正在启动是警示色调，故障或者离线是红色，中性是灰色。系统托盘图标说的是同一份 Connector 健康状态（见下）。

### 操作记录条 {#the-action-feed}

这条栏的中间是你刚做的事的结果落下来的那一个地方：一次保存、一次删除、一次重命名、一次导入、一次打印、一次扫描、一次确认。每一条会改变状态的命令，成功了和被拒绝了都会报出来。

- 成功的那一条六秒之后自己淡掉。失败的那一条留着一个红色记号，大约十秒之后自己淡掉；要是在这之前有更新的结果把它顶替，或者你按下它那个**关闭**（x）按钮，它就在那时消失。关于 Connector 里某台设备、某条串行线路或某个 MQTT Broker 的拒绝（它还缺的字段，或者工作站没有接受的一次编辑），在这块屏幕上对同一台设备、同一条线路或同一个 Broker 的后一次保存成功时也会消失，因为这时页面显示的正是已经保存的内容。
- 文字挤到时钟那里就省略；完整的文字是提示文字。
- 一条记录旁边可以带**一个**后续按钮，比如移除一个仪表画面组件之后的**撤销**。它和这条记录同生共死：这条记录到期、下一个结果、一次关闭以及按下它本身，都会把它带走，于是这条栏绝不会给出一个已经答不上旁边那段文字的动词。
- 这条记录条属于这条连接：这块屏幕显示的是这块屏幕做过的事的结果，绝不是别处某个浏览器做过的事。工作站自己的窗口另外还带着没有哪块屏幕要求过的那些工作（一次自动备份、一份自己生成的报告、宿主的一次失败）。
- 唯一的例外：在一个仪表画面组件里按下的命令（按钮、开关、输入框）在那个组件下面作答，因为全屏的仪表画面把这条栏藏起来时，那个界面还在。

页面从不自己长出一个“已保存”的闪光或者一行状态；你要找一次按下的答复，它就在这里。

### 时钟 {#the-clock}

**时钟**：本地日期和时间，按[设置的“语言与格式”](settings-localization)里选定的格式（比如 `dd/MM/yyyy HH:mm:ss`），每秒走一格。提示文字写着“设置：语言与格式”，那些格式就是在那一节里设的。

状态栏上不显示版本号：当前运行的版本在[关于](settings-about)里，也在[设置的“更新”](settings-updates)的标题下面。

### 运行时停止期间 {#while-the-runtime-is-stopped}

什么都没在读的时候，健康状态、报警和记录都断言不了，所以那一组指示让位给一条通向某个有用去处的消息：“登录可获得更长的免费时段”或者“添加许可证即可取消限制”（两条都打开账户页面），或者在已经没有什么可买的时候，工作站窗口上是“重启运行时以继续”，浏览器上是“重启在工作站上进行，也就是运行 Ganter Lab 的那台计算机。”倒计时仍然排在最左边，读作“免费 · 运行时已停止”。

## 运行时停止那条带子和暂停的页面 {#the-stopped-runtime-band-and-the-paused-page}

免费模式的时长走完时运行时停下来（见[免费模式与许可证](app-free-mode)），而外壳把这件事说一次，在每一条路由上、每一块屏幕上都用同样的方式：

- 标题栏下面一条带子：**运行时已停止**，“采集、Logic 和记录都已暂停。你的配置和已记录的运行记录完好无损。”，以及那唯一一个**重启运行时**按钮。这个按钮只存在于工作站自己的窗口上：浏览器在它的位置上读到的是“重启在工作站上进行，也就是运行 Ganter Lab 的那台计算机。”，于是一段免费时长永远没法从网络上被重置掉。
- 除了账户之外的每一个页面都让位给一条暂停通知：**此画面已暂停**，“它实时读取工作站，而运行时停止期间不会读取任何数据。它在这里等待，而不是显示已经不再成立的数值。”，然后在工作站上是“重启是立刻生效的，也没有次数限制。你一提出请求，运行时就回来了。”，在别处是“工作站的操作员随时可以重启，次数不限。此画面会自行恢复。”账户保留它的页面，因为登录或者添加许可证正是取消这个限制的办法。
- 全屏的仪表画面会退出全屏，好让那条带子和那条导航栏出现在屏幕上。
- 每一条会改动工作站的命令都以同样那几个字被拒绝，“运行时已停止”：在各条命令栏上、在各个菜单里、在弹出消息的按钮上（变灰，配那句提示文字），以及在代理 endpoint 上。

一次失败的重启会抬起一条警告通知，“运行时重启失败：运行时未能完全重启。请查看事件页面后重试。”，按钮留着等你再试一次。

## 随页帮助 {#contextual-help}

帮助键在右边打开一块面板，挨着页面而不是压在页面上：页面照常工作，于是那条说明可以就在它所讲的那块屏幕上照着做。在窄屏幕上（手机，或者竖着拿的平板），这块面板改为占满窗口。Esc 关掉它，它自己那个关闭键也一样，焦点回到帮助键上。

它显示的是你眼前那样东西所对应的那一页文档。由路由决定是哪一页，所以在 Logic 上打开这块面板，打开的就是本文档的 Logic 页面；在读作一整条长列的页面上（设置、代理、账户），则由你滚到的那一节决定，所以设置停在备份时打开的就是备份。挪到另一个页面，或者挪到同一个页面的另一节，带来的是属于此刻屏幕上那样东西的页面，而不是把上一篇文章晾在上面。

这块面板带着这一页的标题、它的摘要、它那些节的清单和它的全文。通向本文档其他页面和各节的链接在面板里面打开；离开本文档的链接在你的浏览器里打开。面板自己那个**打开完整文档**键会在网站上打开同一个页面，用同一种语言，对应本工作站运行的那个版本；它是这里唯一一样需要网络的东西。

面板顶部、文章上方的**开始导览**会走遍程序的各个区域，逐页打开页面并指向真实的控件，什么都不改动（见[程序导览](tour)）。从这里开始时会先关掉面板，让气泡独占整个窗口。导航栏上的欢迎这一项画给哪些身份，这个按钮就在每一页画给哪些身份，不管工作站是否保留那一页。面板没有帮助可显示时，它也照样留着，因为导览指向的是页面，而不是文章。

文档是随应用装上的，不是取回来的：它是你正在运行的那个版本的文档，用工作站的语言写的，而且完全不用联网就打得开。网络上的浏览器从工作站读的是同样这些页面，所以车间里的一块屏幕绝不会没有它们。一个安装包不带着正在运行的这个版本或者这台工作站这门语言的帮助时，这块面板会说明它找的是哪个版本、哪门语言，而不是打开别的东西，同一行也写进[事件的“控制台”](events-console)。

## 通知 {#notifications}

### 弹出消息 {#snackbars}

会打断人的通知在页面上叠在右下角，最新的在上面。每一张卡片带着一条按它严重程度着色的强调边（提示、警告、错误）、一个可选的标题、那条消息、若干动作按钮和一个**关闭**（x）。除非抬起它的那样东西给了它一个超时，卡片就一直留着。运行时停止期间，卡片上一个会改动工作站的按钮会变灰，提示文字是“运行时已停止”。

抬起它们的，包括这些：

| 卡片 | 按钮 | 留多久 |
|---|---|---|
| 一次报警成立（标题是这条报警的名字；消息是它的成立文本），凡是通知形式不是“状态栏”的报警都算 | **确认**（和别处一样的那次确认）和**打开报警**（事件页面的报警列表） | 一直留着；“定时”报警是 8 秒；一次确认或者恢复正常会把它关掉。关掉这张卡片**不是**一次确认。 |
| “免费模式时间限制”：“运行时将在大约 *n* 分钟后停止。登录或添加许可证即可取消限制。” | 没有 | 12 秒 |
| “运行时已停止”：“已达到免费模式的时间限制，运行时已停止。登录或添加许可证即可取消限制，也可以在工作站上重启运行时。” | 没有 | 直到运行时回来 |
| “服务器无法启动”（内置的 OPC UA 服务器，通常是端口已经被占用） | **打开 Connector** | 一直留着 |
| “配置已恢复”、“配置已恢复，但有一条警告”、“配置恢复已推迟”或者“配置恢复失败”，在一次排定的备份恢复之后 | 没有 | 一直留着 |
| “代理访问（MCP）无法启动”、“远程仪表画面不可用”、“Web 仪表画面无法启动” | 没有 | 一直留着 |
| “更新已推迟”：有记录正在进行时有人要求重启并更新 | 没有 | 一直留着 |
| 一次单元联锁动作，或者一个 OPC UA 客户端、一台现场设备在等着证书批准 | 一个打开对应页面的按钮 | 一直留着 |

弹出消息是给打断人的事用的；你自己那次动作的结果绝不是一张卡片（见上面的操作记录条）。

### Windows 通知 {#windows-notifications}

这些卡片活在窗口里面，所以窗口藏进托盘或者最小化的时候，同样这些时刻还会抬起一条 Windows 通知：一次报警成立（“*优先级*优先级报警：*名字*”）、一次联锁动作、免费模式的警告和那次停机、隐藏着启动时服务器或者恢复的一次失败，以及第一次隐藏时那条只出现一次的提示。点这条通知就打开窗口，卡片在那里等着。这些通知只在装出来的版本上存在；绿色版或者开发版只留窗口里的那些卡片。

## 崩溃同意窗口 {#the-crash-consent-dialog}

如果 Ganter Lab 上一次意外关闭了，下一次显示出窗口的启动会在页面上打开**要发送崩溃报告吗？**（藏进托盘的那次启动等着下一次可见的）：

- “Ganter Lab 上一次意外关闭了。发送这份报告有助于我们修复它。报告包含这个错误和最近日志的一小段。发送之前请在下面查看。”
- **崩溃详情**：会被发出去的那整份内容，配一个**复制**按钮（片刻之内写着“已复制”）。这份内容是抓取的时刻、上下文、应用版本、操作系统、带堆栈的那个异常，以及日志最后 60 行，Windows 用户名和配置文件路径都被洗掉了。工作站不会再有别的东西离开。
- **始终自动发送崩溃报告**：许可今后的崩溃不经询问直接发送（和[设置的“崩溃报告”](settings-crash-reports)是同一个开关）。运行时停止期间它变灰，写着“运行时已停止”，因为这项许可存不下来。
- **不发送**会清掉抓下来的那次崩溃，于是它不会再被提起。**发送报告**把它发出去；一次失败的发送会保住这次崩溃，下一次启动再问一遍。工作站登录着时，这份报告归到你的 Ganter 账户名下，否则匿名接收。

在被发出去或者被谢绝之前，这次崩溃作为 `crash\pending-crash.json` 留在数据文件夹下面。

## 屏幕和工作站断了的时候 {#when-the-screen-loses-the-station}

页面是由工作站实时供出来的，所以一块屏幕可能把它弄丢：连接断了、工作站重启了、页面撞上一次故障。网络上的浏览器最常碰到这几块画面；工作站自己的窗口也是同样供出来的，同样会显示它们。

- **回路提示条。** 一个在跑着的屏幕里面出问题的页面，会在底部显示一条安静的带子：“此页面遇到了问题，但应用仍在运行。详细信息在事件页面上。”，带**重新加载**和一个关闭记号。什么都没丢；重新加载就重新接上。
- **重连卡片**在连接断了的期间占满整块屏幕：

| 状态 | 标题 | 它说什么、给什么 |
|---|---|---|
| 正在重连 | 正在重新连接工作站 | “此画面实时读取工作站（运行 Ganter Lab 的那台计算机），而连接中断了。它正在自行重连，你的配置和已记录的运行记录完好无损。”进度：“第 *n* 次尝试，共 *m* 次”，有等待时还写“*s* 秒后重试”。 |
| 失败 | 工作站没有响应 | “此画面尝试多次后停止了重连。工作站（运行 Ganter Lab 的那台计算机）上的 Ganter Lab 可能已经关闭。这里的东西不会丢失：工作站一响应，画面就会完整地回来。”**重试**和**重新加载此画面**。在标签页藏着的时候放弃了的屏幕，会在它重新被看到的那一刻再试一次。 |
| 被搁置 | 此画面已被搁置 | “工作站把此画面放到了一边，并保留了上面的全部内容。恢复后它会原样回来。”**继续**和**重新加载此画面**；一次没走通的恢复之后：“恢复没有成功。请再请求一次，或者重新加载画面。” |
| 被回绝 | 此画面需要重新加载 | “工作站重新响应了，但它已经不再保留此画面上的内容，因此无法从中断的地方接着往下走。重新加载会让它恢复实时。你的配置和已记录的运行记录完好无损。”**重新加载此画面**。这次重新加载永远是你点的；绝不会有屏幕在你脚下被换掉。 |

- **窗口供不出来。** 工作站自己的窗口是从机器内部的一个端口供出来的。那个端口打不开的时候（几乎总是因为已经有第二份 Ganter Lab 在跑），窗口会画出它自己那条通知，而不是一张白页：**Ganter Lab 无法打开它的画面**，“应用正在运行，你的设备照样在被读取。缺的是那块画面…”，加上那个端口、系统报的内容和日志文件夹。它每五秒重试一次，端口一空出来就自己打开。
- **找不到。** 与任何页面都不匹配的地址会落在这个框里面：**此画面不属于本工作站**，“该地址与这里的任何画面都不匹配。它可能已被重命名或删除。”，带**前往 View**，按下去就打开 View。
- **登录才能查看。** 网络上身份没有远程访问（局域网）的浏览器，或者任何角色打不开它所请求页面的屏幕，在页面的位置上拿到那张登录卡片（“登录后即可从网络上查看这个工作站。”或者“登录后才能打开这个页面。”），并写明被拒绝的是哪个身份。登录之后就画出所请求的那个页面。工作站自己的窗口和工作站机器上的浏览器从不受远程访问把关。

## 全屏与展开 {#full-screen-and-expand}

View 上的一幅仪表画面，以及 Process 下面一个单元的面板或者画面，可以用两种办法把这个框藏起来，两个都在这幅画面那条栏后面那一组上：

| 动词 | 提示文字 | 作用 |
|---|---|---|
| 展开 | 占用整个窗口 | 把标题栏和导航栏藏起来；这幅仪表画面占满整个窗口。 |
| 全屏 | 全屏（F11） | 来真的：工作站的窗口铺满整台显示器；浏览器则请求文档的全屏（不肯给的浏览器照样把这个框藏起来）。 |

没有仪表画面开着的时候这两个动词都变灰，而一幅画面正在被编辑时它们不画出来：进入其中之一会在不吭声的情况下结束这次编辑。这两种模式下状态栏留不留在底部，是这幅仪表画面自己的设置（见[仪表画面的设置](view-settings)）。两种模式互斥：展开着的时候按全屏是升上去，不是来回切。

按键：**F11** 切换全屏（编辑期间或者有文件夹开着时它什么都不做）；**Esc** 从最里面往外退：先是正在重命名的文件夹，然后是导航浮层，然后是全屏，最后是展开。浏览器用它自己的手势退出全屏时，会把这个模式一起带走。离开这幅仪表画面的路由就把这个框恢复回来，而运行时停止会退出全屏，好让那条带子和那条导航栏回来。一张图表自己那件**全屏**工具也用同样的方式铺满显示器（见[图表](view-charts)）；Esc 先关掉那张图表。更多内容在[全屏](view-fullscreen)下面。

## 桌面缩放 {#desktop-zoom}

在工作站自己的窗口上，**Ctrl + 鼠标滚轮**按浏览器引擎原生的步长缩放整个界面（每一格乘以 1.2，在 25% 到 500% 之间），**Ctrl + 0** 回到 100%。每一次改动都在操作记录条上宣告（“缩放：120%”）并立刻保存，按安装保存在数据文件夹下的 `window-placement.json` 里（绝不在配置数据库里，绝不在备份里）。[设置的“外观”](settings-appearance)显示当前的级别，也可以把它复位。浏览器保留它自己的缩放。

## 系统托盘 {#the-system-tray}

Ganter Lab 一直开着：关掉窗口只是把它藏起来，而内置服务器、采集和记录照常工作（除非在[设置的“启动”](settings-startup)下面把“关闭窗口后继续在后台运行”关掉了，那时那个叉就是退出）。通知区域的那个图标是品牌方块，带一个映着 Connector 的健康状态圆点，和状态栏的健康状态读的是同一份，用的也是同样的字：在线是绿色，不稳定是警示色调，未在通信是红色，已停止是灰色。它的提示文字读作“Ganter Lab：*健康状态*”，也就是状态栏那一行，有任何一次运行在记录时加上“（正在记录）”（每 15 秒查一次）。在[设置里的品牌](settings-branding)中设了图标和名称后，图标换成带同样圆点的工作站图标，提示文字和菜单的打开项也用工作站的名称代替 Ganter Lab。

- 左键单击打开窗口；右键单击打开菜单：**打开 Ganter Lab**、一行只读的状态栏健康状态（有任何一次运行在记录时加上“（正在记录）”），以及**退出**。菜单里没有启动或者停止的控件：随手一点不该把正在读服务器的那些客户端掀掉。
- 那个叉第一次把窗口藏起来时，会先在窗口上面打开应用自己的一个小窗口，**Ganter Lab 仍在运行**。它说服务器、设备读取和正在进行的记录都会继续；图标留在时钟旁边的通知区域里（Windows 把它藏起来时，在任务栏的 ^ 箭头里），图标菜单里的**退出**会结束应用；在[设置的“启动”](settings-startup)里关掉“关闭窗口后继续在后台运行”，那个叉就每次都退出。**在后台继续运行**是默认项（Enter、Esc 和关掉小窗口也都选它），它把窗口藏起来。**立即退出**只这一次通过和菜单相同的退出来退出，所以有记录正在进行时仍会先问一句，开关也保持打开。无论选哪一个，这台工作站上都不会再出现它。它是应用自己的窗口，不是 Windows 通知，所以不管应用是怎样启动的都会出现。
- **退出**走同一条拆卸流程把一切停下来：代理访问、Web 宿主、各个监视器、Process 运行时（运行仍然可以续跑）、内置服务器、逻辑运行时（保留值被刷出去）、事件日志，最后是宿主。有记录正在进行时，窗口会先回来，带一句平静的确认，**记录正在进行**：“退出会停止数据采集。到目前为止记录的内容全部已保存，下次启动 Ganter Lab 时会重新打开，但应用关闭期间不会记录任何新内容。”**保持运行**是默认；**仍然退出**继续往下走。下载好的更新会在走出去的路上装上。

## 这个框不做什么 {#what-the-frame-does-not-do}

- 它绝不对非管理员把用户藏起来；那个页面自己带着它的通知。
- 它绝不在那条带子之外的地方给出运行时重启，也绝不给浏览器。
- 它绝不显示另一块屏幕的动作结果，也绝不把一个动作结果变成一张卡片。
- 它绝不从一个浏览器改动别的屏幕的主题：在浏览器上按下的按键只对那个浏览器有效。
- 帮助面板绝不去网站上取一篇文章来显示，绝不打开为另一个版本写的页面，也绝不在装上的帮助不带某门语言时退回到英文。
- 帮助键、反馈按钮、主题按键、用户小块、导航栏和状态栏是这个框仅有的控件；每一个作用于你正在配置的那样东西的动词，都属于那样东西自己的页面（见[页面是怎么用的](app-conventions)）。
