# View e dashboards

> A página View: a coluna Visualização com pastas, telas e painéis de unidade, a barra da tela aberta com Expandir e Tela cheia, a grade em que uma tela é composta, e quem pode pressionar o quê nela.

**View** é a primeira entrada do trilho de navegação depois de [Boas-vindas](welcome), e a página em que a estação abre sempre que Boas-vindas não está no trilho. Ela
lista toda tela que esta estação mostra e executa a que você escolher: os dashboards que
você monta numa grade sobre o espaço de endereços ao vivo da [Logic](logic), e os painéis
que as unidades do Process colocam aqui. Todo papel a alcança, porque "Ver dashboards" é a
única permissão que todo papel carrega (veja [Permissões](users-permissions)); o que um
papel pode então fazer na página se lê das outras permissões dele, verbo por verbo.

A página responde a quatro rotas. `/view` é o endereço canônico e `/` abre a mesma página;
`/home` continua valendo para que um atalho antigo ainda chegue aqui. `/d/{id}` abre uma
tela direto, que é como um favorito num tablet ou um link de outra página chega nela; um id
que o papel desta conexão não pode ver, ou que não existe mais, volta em silêncio para a
tela que a página abriria de qualquer forma. `/d/{id}?edit=true` abre a tela direto no
[editor](view-editor), o destino de um link de conserto vindo da [Validação](validation), e é ignorado quando a tela não pode ser editada.

## A coluna Visualização {#the-visualization-column}

A coluna da esquerda tem o cabeçalho **Visualização** e traz uma linha por coisa que a
estação sabe mostrar:

- **Pastas**, no máximo dois níveis de profundidade, cada uma com um chevron que dobra o
  grupo e um nome que abre a própria pasta no palco. A linha de uma pasta termina com
  quantas telas ela guarda, subpastas incluídas.
- **Telas**, os seus próprios dashboards, arquivados em pastas ou no nível de cima, cada um
  com o ícone escolhido nas [configurações](view-settings) dele e com a descrição como
  dica da linha.
- **Painéis da unidade**, as entradas que os modelos do Process colocam aqui, um por
  unidade, com o nome `Modelo · Unidade · Superfície`. Os que ninguém arquivou ficam juntos
  sob um cabeçalho **Painéis da unidade** depois da árvore; um painel arquivado entra na
  pasta dele, ao lado das suas telas.

Uma tela que traz um componente cujo ponto não está conseguindo ler ganha um ponto discreto
de atenção depois do nome, e toda pasta acima dela também, para que uma falha seja
encontrável com os grupos dobrados. O ponto não diz mais nada: nenhuma contagem, nenhum
movimento.

O rodapé carrega **Novo…** (desenhado só para um papel que pode editar dashboards; ele abre
um menu com **Novo dashboard** e **Nova pasta**, ambos no nível de cima), depois, enquanto o
editor está aberto, **Mover o dashboard para cima** e **Mover o dashboard para baixo** para a
tela aberta, e no canto final **Expandir tudo** e **Recolher tudo** sobre as pastas. O
clique direito numa linha de tela abre um menu que começa pelos verbos da barra dela, **Copiar**, **Editar** (ou **Concluir a edição**) e, na entrada de uma unidade, **Editar no Process**, e segue com **Mover para**; o de uma linha de pasta cria, renomeia e remove;
tudo isso está em [Telas e pastas](view-screens).

A coluna se recolhe até virar um trilho estreito, pelo chevron do cabeçalho dela. Um toque
nesse trilho abre a lista como uma sobreposição sobre o palco, para que o canvas fique com
cada pixel que ganhou; escolher uma linha fecha a sobreposição, e o alfinete devolve a
coluna fixa. O divisor entre a coluna e o palco arrasta entre 260 e 600 px. Quais pastas
você abriu, a largura e o estado recolhido são seus pela sessão: ficam por conexão, então um
navegador que dobra um grupo nunca o dobra na janela da própria estação, e nada disso é
salvo.

## A barra da tela aberta {#the-open-screens-bar}

A barra sobre o palco nomeia o que está aberto, com o ícone e o nome da tela, e carrega os
verbos dela. Enquanto o editor está aberto, o nome exibe um selo **Editando**.

| Comando | O que faz | Esmaecido quando (situação) | Não aparece quando (papel) |
|---|---|---|---|
| Copiar | Faz uma cópia editável da tela aberta ao lado dela, na mesma pasta, com o nome do original mais "(2)", "(3)" e assim por diante até um nome estar livre, e não a abre: o palco mostra a parede dessa pasta (a parede **Nível superior** para uma tela do nível superior), com o cartão da cópia destacado e rolado até ficar à vista. | Nada está aberto ("Abra uma tela para copiá-la."), a engenharia está travada, o runtime está parado. | O papel não pode editar dashboards, ou a entrada aberta é um painel de unidade ou uma tela de unidade (não há o que copiar: ela é arranjada no modelo dela). |
| Editar / Concluir edição | Entra no [editor](view-editor) sobre a tela aberta, ou sai dele e volta a apenas ver. Sair nunca é recusado. | Nada está aberto ("Abra uma tela para editá-la."), a engenharia está travada ("A configuração está travada enquanto uma Unidade está em execução."), o runtime está parado ("Runtime parado"). | O papel não pode editar dashboards, ou a entrada aberta é um painel de unidade ou uma tela de unidade. |
| Editar no Process | Abre a definição da própria entrada no ambiente do Process: a linha do painel ou a linha da tela do modelo dela. | Nunca fica esmaecido; ele só é desenhado quando pode rodar. | A entrada aberta é uma tela sua, ou o papel não pode gerenciar modelos. |
| Expandir | Esconde o trilho, a barra de título e a própria barra e entrega a janela inteira à tela; a janela continua como está. | Nada está aberto. | Nunca, mas ele é retirado enquanto você edita. |
| Tela cheia | A coisa de verdade: a janela da estação cobre o monitor, ou um navegador entra em tela cheia de documento. F11 faz o mesmo. | Nada está aberto. | Nunca, mas ele é retirado enquanto você edita. |

Expandir e Tela cheia servem para operar uma tela pronta, então a barra retira os dois
enquanto o editor está aberto e o F11 não faz nada nesse momento. Tudo sobre os dois modos,
o painel deslizante e a barra de status está em
[Modo de operador em tela cheia](view-fullscreen).

Quando o que está aberto é uma pasta, e não uma tela, a barra troca de assunto: ela nomeia a
pasta e carrega **Renomear a pasta** (abre o campo de nome na própria linha da pasta) e, na
tinta de perigo à direita, **Remover a pasta** (a mesma confirmação do menu da linha). Os dois
são desenhados só para um papel que pode editar dashboards, e ficam esmaecidos enquanto a
engenharia está travada.

## O palco {#the-stage}

O que o palco desenha segue a linha que você escolheu:

- Uma **tela** roda no canvas: a grade dela cresce até preencher o palco, sem rolagem, e os
  componentes leem o espaço de endereços no ritmo da própria página (a cada 150 ms na janela
  da estação, a cada 400 ms num navegador remoto).
- Uma **pasta** abre como uma visão geral: uma linha dizendo o que está arquivado ali, uma
  linha por subpasta com a contagem dela, e um cartão por tela com ícone, nome e descrição.
  Pressionar um cartão abre a tela.
- Um **painel de unidade** não é um layout e sim uma pilha de cartões, então o palco vira
  uma coluna deles com rolagem: veja [Painéis de unidade na View](view-unit-panels). Uma
  **tela de unidade** (uma tela de modelo mostrada na View) roda no canvas como qualquer
  tela, resolvida para a unidade dela.

Sem nada a mostrar, o palco diz isso: uma estação sem nenhum dashboard mostra "Nenhum
dashboard ainda. Crie um para montar leituras ao vivo, gráficos e comandos para a sua bancada,
e depois abra em tela cheia para operar." com um botão **Novo dashboard** para um papel que
pode editar; um papel do qual todo dashboard está escondido lê "Nenhum dashboard está
visível para o seu papel."; uma lista com pastas mas sem tela, ou uma pasta aberta sem tela
escolhida, diz qual dos dois casos é.

## A grade {#the-grid}

Todo dashboard tem uma grade de **Colunas × Linhas** células (24 × 12 até você mudar, cada
uma entre 1 e 96) que preenche o palco e se ajusta à janela. Um componente ocupa um
retângulo de células (X, Y, largura e altura); os componentes podem se sobrepor livremente,
e cada um carrega um número de **camada** (Z): a camada maior é desenhada por cima e recebe
o clique. É assim que uma [Moldura](component-frame) vira um fundo de verdade: mande-a para
trás e desenhe o grupo sobre ela. A posição, o tamanho e a ordem das camadas são do
[editor](view-editor); o tamanho da grade é uma
[configuração do dashboard](view-settings).

## Comandos, permissões e a marca de trava {#commands-permissions-and-the-lock-mark}

Todo componente de comando escreve pelo funil único de escrita da lógica da estação, com
registro no diário, e responde a um mesmo modelo de permissão. Isso vale para qualquer
controle que dá para pressionar numa tela, para os cartões de procedimento que um painel de
unidade traz e para o reconhecimento num
[Aviso de alarme](component-alarm-banner):

- Pressionar um controle num dashboard seu exige a permissão **Operar dashboards** do papel,
  concedida por papel na página [Usuários](users).
- Um acionamento cujo alvo é uma mudança no Process (um comando de execução de unidade, um
  campo de preparação, um comentário de execução) exige além disso **Executar procedimentos**. O que um acionamento exige se
  lê do alvo resolvido, nunca do tipo do componente: um botão que escreve um valor ou abre
  outro dashboard fica na permissão de dashboard.
- Num painel de unidade ou numa tela de unidade, só a permissão do Process governa:
  **Executar procedimentos**, nada sobre dashboards.
- Enquanto o runtime está parado, todo comando é recusado com "Runtime parado", qualquer que
  seja o papel.

Um comando que o papel autenticado não pode pressionar continua na tela e ganha a discreta
**marca de trava**: um cadeado pequeno no canto do componente, com a razão inteira ("É preciso
a permissão de operar dashboards." ou "É preciso a permissão Executar procedimentos.") na dica
do componente. Ela é discreta de propósito, porque um papel que
só vê a encontra em todos os controles de uma vez, e uma planta rodando normalmente não pode
parecer uma tela de avisos. A autorização é reconferida no instante de cada acionamento,
então uma saída ou uma troca de papel com a tela aberta não consegue despachar um clique
velho.

Cada componente de comando responde na própria **linha de feedback** sob o controle
("Escrito", "Concluído · 12 ms", ou a recusa), que expira depois de cinco segundos. Essa linha é a
única superfície que resta quando uma tela cheia esconde a barra de status, e é por isso que
os comandos respondem ali, e não no feed de ações da barra de status. Numa célula baixa demais
para o título de canto do componente, o controle e essa linha juntos, a resposta toma o lugar
do título de canto enquanto aparece, e o título volta quando a resposta expira. O editor avisa
disso na seção **Tipo** do controle quando um comando com título de canto tem uma linha de
altura, o tamanho que raramente comporta os três. Uma célula baixa demais até para o título de
canto e o controle cede a linha do título ao controle, então um campo ou uma tecla nunca é
desenhado cortado. Onde a resposta não tem linha própria e nenhum título de canto fica sobre o
controle (nenhum foi escrito, ou ele cedeu a linha), o Botão, o Interruptor, a Entrada, o
Controle deslizante de setpoint, o Seletor e as Teclas de passo desenham a resposta no lugar
do próprio texto enquanto ela aparece: a legenda do Botão, o rótulo do Interruptor, a tecla
com que a Entrada e o controle deslizante enviam, a tecla pressionada do Seletor ou das Teclas
de passo, e a opção que a lista fechada mostra num Seletor mostrado como lista. A resposta
fica sobre esse texto na tinta da linha de resposta (no Botão, um tom mais discreto da tinta
da própria legenda), uma recusa na tinta de erro, cortada com reticências onde o texto tem
menos espaço, e ela inteira fica na dica. Nada se move: o texto guarda o lugar e o nome, e
volta quando a resposta expira. Os outros comandos mantêm a resposta na linha deles, e uma
célula mais alta traz essa linha de volta.

## Travas {#locks}

Enquanto uma unidade está em execução, a página mostra o aviso **Engenharia travada**: "Uma
operação de unidade está ativa. A configuração fica somente leitura até todas as unidades
terminarem; os comandos de execução e as demais ações do operador continuam disponíveis."
Criar, copiar, editar, arquivar, renomear e reordenar ficam esmaecidos com essa razão, um
editor aberto se fecha, e as telas continuam rodando e aceitando os comandos permitidos. Um
runtime parado fecha os mesmos verbos e também os comandos; o aviso de pausa do próprio
shell diz onde fica o reinício.

## O que a página não faz {#what-the-page-does-not-do}

Ela nunca edita um painel de unidade nem uma tela de unidade (Editar no Process leva a onde
eles são arranjados), nunca os reordena, e nunca deixa um papel ver um dashboard escondido
dele, nem pela lista nem pelo endereço. Ela não guarda nenhum estado de layout seu além da
sessão: as pastas dobradas, a largura da coluna, o alfinete e a tela escolhida voltam ao
início junto com a conexão. Apagar uma tela se faz dentro das
[Configurações do dashboard](view-settings) no editor, não pela coluna.

## Nesta área {#in-this-area}

| Página | O que ela cobre |
|---|---|
| [Telas e pastas](view-screens) | Criar, copiar, arquivar, renomear, reordenar e remover o que a coluna lista, a tela de abertura e quem vê qual tela. |
| [O editor de dashboard](view-editor) | A bancada: a paleta, o canvas, a seleção, as seções de propriedade que todo componente compartilha, e as ligações desenhadas entre terminais de símbolo. |
| [Configurações do dashboard](view-settings) | O que uma tela declara sobre si mesma: nome, descrição, ícone, grade, abertura, a barra de status em tela cheia, papéis que a veem, exclusão. |
| [Modo de operador em tela cheia](view-fullscreen) | Expandir e Tela cheia, F11 e Esc, o painel deslizante e a preferência da barra de status. |
| [Painéis de unidade na View](view-unit-panels) | A pilha de cartões pela qual uma unidade do Process é operada, como ela aparece aqui. |
| [Gráficos](view-charts) | A barra de ferramentas que todo gráfico carrega, a escala, os painéis de estatísticas e de referência, e a janela de gráfico destacada. |
| [Componentes de dashboard](components) | O catálogo de tipos de componente, os endereços que eles vinculam, como uma leitura é desenhada, e uma página de referência por tipo. |
