dockcontainer — u_pbt_dockcontainer #
← Referência dos componentes · Índice do guia
Painéis acopláveis ao estilo do Visual Studio: acoplagem por arrastar e largar, empilhamento em separadores, divisores redimensionáveis, janelas flutuantes, ocultação automática — e gravação/reposição da disposição.
▶ Ver ao vivo — Aplicação de demonstração, mosaico Dock container: a pré-visualização, o código que o produz e esta página, lado a lado.
Em resumo #
| Userobject | u_pbt_dockcontainer |
| Classe de items | n_pbt_dock_panel (um painel) |
| Serve para | Dar a uma window PowerBuilder a ergonomia de um IDE moderno: o próprio utilizador organiza os seus painéis e a disposição é reencontrada na sessão seguinte |
Tal como em tab, cada painel aloja um controlo PowerBuilder verdadeiro (dragobject): userobject, DataWindow ou outro componente PBToolboxAI. Ver Alojar controlos reais do PowerBuilder.
Início rápido #
// event open da window : os controlos de painel ja estao colocados sobre ela
uo_dock.of_add_panel(/*key*/ "document", /*position*/ "", /*relative_to*/ "", /*size*/ 0, /*title*/ "Document", /*content*/ uo_editor)
// O explorador, acoplado ao inicio do documento, com 260 pixels
uo_dock.of_add_panel(/*key*/ "explorer", /*position*/ uo_dock.POSITION_START, /*relative_to*/ "document", /*size*/ 260, /*title*/ "Explorador", /*content*/ uo_tree)
// As propriedades, acopladas ao fim do documento, com 300 pixels
uo_dock.of_add_panel(/*key*/ "properties", /*position*/ uo_dock.POSITION_END, /*relative_to*/ "document", /*size*/ 300, /*title*/ "Propriedades", /*content*/ uo_props)
// A zona central : nao pode ser fechada pela acoplagem, nem flutuar, nem ser ocultada
uo_dock.is_main = "document"
Propriedades #
| Propriedade | Tipo | Predefinição | Função |
|---|---|---|---|
is_main | string | "" | Chave do painel principal: a zona de documento central, que não pode ser ocultada nem destacada, e sobre a qual nenhum painel é empilhado. Definida antes de adicionar esse painel, é guardada e aplicada no seu of_add_panel; "" retira o painel principal |
ib_veto_close | boolean | false | Opt-in: perguntar antes de um painel se fechar — a cruz do seu cabeçalho, Fechar / Fechar os outros no menu, a cruz de um painel deslizante e of_close_panel (dispara ue_panel_closing, que pode recusar; uma ordem recusada devolve -4). Desativado por omissão, como todo evento cancelável da biblioteca: defina true para manter aberto um painel com trabalho não guardado |
is_theme_style | string | "" | Estilo visual do componente (constantes THEME_STYLE_*); vazio = o da aplicação, seguido a cada mudança |
is_theme_mode | string | "" | Variante clara ou escura (constantes THEME_MODE_*); vazio = a da aplicação, seguida a cada mudança |
il_theme_accent | long | -1 | Cor de destaque deste componente (-1 = destaque da aplicação, ou o do tema) |
is_tooltip | string | "" | Tooltip simples apresentado ao passar sobre o componente |
is_super_tooltip_title | string | "" | Título do tooltip enriquecido (prevalece sobre is_tooltip) |
is_super_tooltip_text | string | "" | Texto do tooltip enriquecido (aceita marcação enriquecida) |
is_super_tooltip_image | string | "" | Imagem do tooltip enriquecido |
Posições de acoplagem #
As constantes do componente alimentam as_position em of_add_panel e of_move_panel:
| Constante | Valor | Efeito |
|---|---|---|
POSITION_START | "start" | O novo painel acopla-se do lado do início de leitura do painel de referência (à esquerda numa escrita da esquerda para a direita) |
POSITION_END | "end" | … do lado do fim de leitura |
POSITION_TOP | "top" | … por cima |
POSITION_BOTTOM | "bottom" | … por baixo |
POSITION_STACK | "stack" | O painel é empilhado em separador sobre o painel de referência. Valor adotado se as_position estiver vazio |
Propriedades de um painel — n_pbt_dock_panel #
Obtidas através de of_panel(chave).
| Propriedade | Tipo | Predefinição | Função |
|---|---|---|---|
is_title | string | "" | Título apresentado no separador do painel; vazio (nenhum título dado), o separador mostra a chave e o painel principal não tem cabeçalho — dar-lhe um título depois fá-lo aparecer. Aceita a formatação com etiquetas |
is_short_title | string | "" | Forma curta do título, para os locais onde falta espaço: a calha de um painel afixado (sempre — é uma faixa estreita) e o separador de uma pilha, mas apenas quando o título completo já não cabe, o que é medido e não adivinhado. O cabeçalho do painel mantém o título completo. "" = sem forma curta |
ib_visible | boolean | true | Mostra ou oculta este painel. O painel principal não se oculta; ocultar um painel flutuante fecha a sua janela, e ele regressará acoplado ao seu lugar. Mostrado de novo, passa para a frente da sua pilha (ue_panel_selected segue); num grupo recolhido, a sua patilha volta à calha |
ib_pinned | boolean | true | true = fixado no lugar; false = todo o grupo do painel (separadores incluídos) recolhe-se em patilhas junto ao bordo. Uma patilha expande o seu painel ao passar o ponteiro (após 400 ms) ou de imediato com um clique; aberto ao passar o ponteiro, recolhe-se quando o rato o deixa sem que o foco lá esteja, aberto com um clique permanece até um clique noutro sítio. O botão de pionés do cabeçalho dispara ue_panel_pinned para cada painel do grupo, e também definir ib_pinned pelo código (uma ordem dispara-o como o gesto); um painel movido para um grupo recolhido recolhe-se com ele, e ue_panel_pinned di-lo |
ib_front | boolean | true | Só leitura: true quando este painel é o que a sua pilha mostra (acoplado, fixado, à frente da sua faixa de separadores). Perguntado ao componente a cada leitura: segue os cliques, as ordens do seu código, um painel fechado ou destacado à frente dele. ue_panel_selected diz quando muda |
ib_closable | boolean | true | O utilizador pode fechar este painel (cruz do cabeçalho, cruz do painel deslizante, Fechar / Fechar os outros no menu)? Definida ao adicionar com of_add_panel(…, ab_closable), alterável a qualquer momento: a cruz e as entradas do menu acompanham de imediato. of_close_panel recusa (-5) um painel não fechável |
is_header_color | string | "" | Cor do cabeçalho deste painel. Vazio = o tema decide; HEADER_COLOR_ACCENT acompanha o acento do tema (e continua a acompanhá-lo após uma mudança de tema, o que um código fixo não faria); caso contrário um #rrggbb. A cor de texto legível é calculada |
is_border_color | string | "" | Cor do contorno deste painel, mesma gramática. Contorna a moldura e o cabeçalho, que têm cada um o seu: colorir apenas um deixa uma emenda visível. Acompanha o painel no seu painel deslizante |
is_tooltip | string | "" | Tooltip simples apresentado ao passar sobre o item |
is_super_tooltip_title | string | "" | Título do tooltip enriquecido do item (prevalece sobre is_tooltip) |
is_super_tooltip_text | string | "" | Texto do tooltip enriquecido do item (aceita marcação enriquecida) |
is_super_tooltip_image | string | "" | Imagem do tooltip enriquecido do item |
il_back_color | long | -1 | Fundo do separador DESTE painel numa pilha, e da sua patilha no bordo depois de desafixado (-1 = o do componente, que segue o tema). O cabeçalho de um painel sozinho usa is_header_color |
il_text_color | long | -1 | Cor do texto do separador e da patilha DESTE painel (-1 = a do componente) |
il_back_color_hover | long | -1 | Fundo do separador e da patilha DESTE painel ao passar (-1 = o do componente) |
il_text_color_hover | long | -1 | Cor do texto do separador e da patilha DESTE painel ao passar (-1 = a do componente) |
il_accent | long | -1 | Destaque DESTE painel (-1 = destaque do componente); o cabeçalho segue-o quando is_header_color vale HEADER_COLOR_ACCENT |
Métodos #
| Método | Função |
|---|---|
of_add_panel (string as_key, string as_position, string as_relative_to, integer ai_size, string as_title, dragobject ado_content) | Adiciona um painel fechável e aloja o controlo. as_relative_to = chave do painel contra o qual se acopla (vazio = a raiz); ai_size = tamanho inicial em píxeis (0 = automático). Devolve 0 depois de aplicado, -5 perante uma chave vazia, já usada ou contendo / ou uma barra vertical, um controlo já alojado ou que contém o dock, um as_relative_to desconhecido ou um empilhamento (POSITION_STACK) sobre o painel principal, ou uma posição desconhecida — nada é tocado, -6 em modo de demonstração quando o dock já tem os seus três painéis (o controlo fica no seu lugar, visível), -2 se o componente não estiver criado |
of_add_panel (…, boolean ab_closable) | Idem, com ab_closable = false para um painel sem botão de fecho. Devolve 0 depois de aplicado, -5 perante uma chave vazia, já usada ou contendo / ou uma barra vertical, um controlo já alojado ou que contém o dock, um as_relative_to desconhecido ou um empilhamento (POSITION_STACK) sobre o painel principal, ou uma posição desconhecida — nada é tocado, -6 em modo de demonstração quando o dock já tem os seus três painéis (o controlo fica no seu lugar, visível), -2 se o componente não estiver criado |
of_select_panel (string as_key) | Torna um painel visível: em primeiro plano na sua pilha, o seu painel deslizante aberto quando o grupo está recolhido, a sua janela trazida para a frente quando flutua. Quando um painel acoplado passa para primeiro plano na sua pilha, segue ue_panel_selected, como num clique no seu separador. Devolve 0 depois de aplicado, -5 perante uma chave desconhecida ou um painel OCULTO (mostrá-lo é o papel de ib_visible), -2 se o componente não estiver criado |
of_move_panel (string as_key, string as_target, string as_position) | Reorganiza a partir do código, como um separador largado sobre uma guia de acoplagem: as_target designa o grupo do painel visado — outro painel da sua pilha designa o mesmo grupo, é assim que se divide uma pilha —, vazio = o bordo exterior do dock. Um painel movido para um grupo recolhido recolhe-se com ele (ue_panel_pinned segue), e o painel que passa para a frente de uma pilha lança ue_panel_selected. Devolve 0 depois de aplicado, -5 perante uma chave desconhecida, um destino (as_target) desconhecido ou que é o próprio painel, uma posição desconhecida, um empilhamento sobre o painel principal ou um empilhamento DO painel principal, -2 se o componente não estiver criado |
of_move_panel (string as_key, string as_target, string as_position, integer ai_index) | O mesmo, indicando a posição do painel na pilha do destino (1 = primeiro, 0 o menos = último) — uma posição que o rato ainda não sabe dar: um separador largado sobre um grupo chega sempre em último. Só uma pilha é uma lista ordenada: o índice é ignorado para POSITION_START / END / TOP / BOTTOM. Devolve 0 depois de aplicado, -5 perante uma chave desconhecida, um destino (as_target) desconhecido ou que é o próprio painel, uma posição desconhecida, um empilhamento sobre o painel principal ou um empilhamento DO painel principal, -2 se o componente não estiver criado |
of_float_panel (string as_key) | Destaca o painel numa verdadeira janela flutuante deslocável e redimensionável; um painel já destacado antes recupera o lugar da sua janela. Ao fechá-la, o painel volta a acoplar-se (ue_panel_docked). Não o painel principal (is_main): é a zona de documento à volta da qual os outros se dispõem, constrói o seu próprio cabeçalho, e não pode ser nem destacado, nem ocultado, nem fechado. Segue ue_panel_floated, como para o botão do cabeçalho, o duplo clique no cabeçalho ou no separador, ou Destacar no menu do clique direito. Devolve 0 depois de aplicado, -5 perante uma chave desconhecida, o painel principal ou um painel OCULTO, -2 se o componente não estiver criado |
of_close_panel (string as_key) | Fecha o painel como a sua cruz: fica oculto (ib_visible = true volta a mostrá-lo) e segue ue_panel_closed. Com ib_veto_close = true, ue_panel_closing é colocado primeiro. Devolve 0 depois de aplicado, -4 quando o seu ue_panel_closing recusou (o painel fica), -5 perante uma chave desconhecida, o painel principal, um painel oculto ou não fechável (ib_closable = false), -2 se o componente não estiver criado |
of_notify_panel (string as_key) | Assinala conteúdo novo: se o painel não estiver visível, o respetivo separador apresenta um contador de elementos não vistos, apagado ao selecioná-lo. Devolve 0 depois de aplicado, -5 perante um argumento inválido (chave vazia, endereço errado), -2 se o componente não estiver criado |
of_clear_notify (string as_key) | Apaga esse contador sem mostrar o painel. Selecionar o separador era a única outra forma, o que é errado quando o seu código sabe que o próprio conteúdo desapareceu. Devolve 0 depois de aplicado, -5 perante um argumento inválido (chave vazia, endereço errado), -2 se o componente não estiver criado |
of_remove_panel (string as_key) | Retira o painel e devolve o controlo à window de origem, no seu lugar, com o seu tamanho e com a visibilidade que tinha antes de of_add_panel — visível se o era: para um painel que se fecha e pode voltar, of_close_panel (ou ib_visible = false) oculta-o sem o devolver. Devolve 0 depois de aplicado, -5 perante um argumento inválido (chave vazia, endereço errado), -2 se o componente não estiver criado |
of_active_panel ( ) | Devolve a chave do painel ativo: o que tem o teclado — um controlo do seu conteúdo tem o foco, ou o seu separador ou cabeçalho foi clicado por último. Vazia quando o teclado está noutro controlo da mesma janela; uma caixa de mensagem, um menu ou outra janela não mudam nada. Não é o painel à frente da sua pilha (ib_front do painel). Perguntado ao componente a cada chamada; ue_active_panel_changed diz quando muda |
of_get_layout ( ) | Devolve a disposição atual (árvore das divisões, rácios, separadores, visibilidade, painéis flutuantes e lugar da sua janela) sob a forma de uma cadeia, para armazenar em ficheiro, base de dados ou registo |
of_set_layout (string as_json) | Repõe uma disposição obtida através de of_get_layout. Os painéis têm de ter sido recriados antes da chamada; os que estiverem ausentes da disposição — ou todos, se ela não conhecer nenhum — juntam-se a um grupo ao lado dos outros, nunca ao painel principal. Os painéis flutuantes recuperam a sua janela no seu lugar, trazida de volta para um ecrã se o deles desapareceu; uma disposição que não nomeia nenhum painel principal mantém o atual. ue_layout_changed é lançado uma vez; os painéis que ela volta a pôr à frente não lançam ue_panel_selected. Devolve 0 depois de aplicado, -5 perante um texto que não é uma disposição (não é JSON, ou sem tree): o dock fica então como está, -2 se o componente não estiver criado |
of_panel (string as_key) | Handle n_pbt_dock_panel do painel (criado no primeiro acesso) |
of_refresh_panel (string as_key) | Atualiza a representação de um painel construído fora do ecrã, sem cintilação. Devolve 0, -5 se a chave não designar nenhum painel, -2 se o componente não estiver criado |
of_relayout ( ) | Recalcula e volta a publicar todas as zonas para que os controlos alojados sejam reposicionados. Devolve 0 depois de aplicado, -2 se o componente não estiver criado |
of_reset ( ) | Esvazia o contentor: cada controlo alojado é devolvido à respetiva window de origem, os handles de painéis são libertados e a disposição memorizada é apagada. Devolve 0 depois de aplicado, -2 se o componente não estiver criado |
of_set_redraw (boolean) | Agrupa uma rajada de modificações numa única representação. Devolve 0 depois de aplicado, -2 se o componente não estiver criado |
of_save_as_png (string) · of_save_as_jpg (string) | Exporta a representação como imagem. Devolve 0 depois de a imagem ser escrita, -4 se a escrita falhar, -2 se o componente não estiver criado |
Eventos #
| Evento | Acionado quando |
|---|---|
ue_panel_selected (string as_key) | Um painel acoplado passa para primeiro plano no seu grupo: clique no separador, setas da faixa de separadores, of_select_panel (uma ordem do seu código também o dispara), e qualquer outra forma de uma pilha mudar o painel mostrado — um painel empilhado sobre ela, o da frente fechado, destacado, movido ou retirado, um painel reacoplado ou mostrado de novo. Depois de ue_panel_closed, ue_panel_floated ou ue_panel_docked quando foi um deles a causá-lo. Uma disposição reposta não o anuncia; n_pbt_dock_panel.ib_front relê o estado |
ue_panel_closed (string as_key) | Um painel é fechado: a cruz do seu cabeçalho, Fechar ou Fechar os outros no menu do clique direito sobre o cabeçalho ou o separador, a cruz de um painel deslizante, ou of_close_panel (uma ordem do seu código também o dispara). O painel fica oculto (ib_visible = true volta a mostrá-lo); com ib_veto_close = true, só depois de ue_panel_closing o ter permitido |
ue_panel_closing (string as_key) → boolean | Cancelável, colocado antes de um painel se fechar — a cruz do seu cabeçalho, Fechar ou Fechar os outros no menu (uma pergunta por painel), a cruz de um painel deslizante, ou of_close_panel —, e só quando ib_veto_close = true (desativado por omissão). Devolva false para manter o painel aberto (trabalho não guardado): ue_panel_closed não se segue, e of_close_panel devolve -4 |
ue_panel_pinned (string as_key, boolean ab_pinned) | Um painel é fixado (true) ou desafixado em ocultação automática (false): botão de pionés do cabeçalho, botão de acoplar do painel deslizante, ou ib_pinned definido pelo seu código (uma ordem também o dispara), ou um painel movido para um grupo recolhido ou para fora dele |
ue_panel_floated (string as_key) | Um painel é destacado numa janela flutuante: botão do cabeçalho, duplo clique no cabeçalho ou no separador, Destacar no menu do clique direito, ou of_float_panel (uma ordem do seu código também o dispara). Uma disposição reposta (of_set_layout) reabre as suas janelas e dispara em vez disso ue_layout_changed, uma vez |
ue_panel_docked (string as_key) | O UTILIZADOR volta a acoplar um painel flutuante: fecha a sua janela, ou faz duplo clique na sua barra de título — o painel regressa ao seu lugar |
ue_active_panel_changed (string as_key) | O painel ativo muda: um controlo de outro painel recebe o foco (um clique, a tecla Tab, um SetFocus do seu código), ou o separador ou o cabeçalho de um painel é clicado. as_key fica vazia quando o teclado passa para outro controlo da mesma janela, fora do dock; uma caixa de mensagem, um menu ou outra janela não mudam nada. of_active_panel relê-o |
ue_layout_changed (string as_json) | A disposição foi alterada (arrastamento, redimensionamento, acoplagem, uma janela flutuante deslocada ou redimensionada, mas também um painel fechado, ocultado, selecionado, renomeado, ou outro painel principal). O parâmetro transporta a nova disposição, pronta a ser gravada. Agrupado: uma rajada enquadrada por of_set_redraw(false) … of_set_redraw(true) (a construção do dock) lança-o uma vez, na retoma, como of_set_layout; também alterações com menos de 40 ms de intervalo |
ue_ready ( ) | O componente terminou o carregamento; tudo o que foi enviado antes foi reproduzido |
ue_runtime_missing ( ) | O runtime WebView2 está ausente: o componente permanece vazio |
ue_bg_color (long al_color) | O componente calculou a cor de fundo do respetivo tema; o userobject já a adotou (backcolor) |
Com o rato #
Para além de arrastar separadores e divisores, três gestos atuam sobre um painel — nunca sobre o painel principal:
| Gesto | Efeito |
|---|---|
| Duplo clique no cabeçalho de um grupo ou num separador | Destaca o painel (para o cabeçalho: o painel ativo do grupo) numa janela flutuante — ue_panel_floated |
| Duplo clique na barra de título de uma janela flutuante | Volta a acoplar o painel no seu lugar, como a cruz da janela — ue_panel_docked |
| Clique direito no cabeçalho, num separador ou numa patilha da calha | Menu Destacar / Ocultar automaticamente / Fechar / Fechar os outros (os outros painéis fecháveis do mesmo grupo). Ocultar automaticamente fica marcado enquanto o grupo está recolhido: escolhê-lo recolhe o grupo, ou volta a fixá-lo — ue_panel_pinned. Uma entrada que nada pode fazer fica a cinzento; com ib_veto_close = true, cada fecho coloca ue_panel_closing — uma pergunta por painel |
Com o teclado #
O conteúdo de um painel é um verdadeiro controlo PowerBuilder: aí o teclado pertence ao seu código, como em qualquer janela. Aquilo de que o componente trata é o seu próprio invólucro — cabeçalhos, separadores, divisores:
| Tecla | Efeito |
|---|---|
| Setas sobre um separador | Passam ao painel anterior / seguinte do grupo e selecionam-no. Uma banda de separadores é uma única paragem de tabulação |
| Home / End sobre um separador | Primeiro / último painel do grupo |
| Setas sobre um divisor | Deslocam a separação em 2 %, apenas no eixo do divisor |
| Page Up / Page Down sobre um divisor | O mesmo, em passos de 10 % |
| Shift+F10 ou a tecla Menu num separador, num botão do cabeçalho ou numa patilha da calha | Abre o menu do painel sob o elemento (com o clique direito, abre-se no ponteiro) |
| Esc | Abandona um arrastamento em curso, senão fecha o painel deslizante aberto a partir de um botão de margem; sem nada disso, a tecla vai para a janela (o seu botão Cancelar) |
Um divisor é um separator focável que anuncia a sua posição; os botões do cabeçalho (destacar, ocultar, fechar) têm um nome, e o painel ativo de um grupo está marcado com aria-selected. Uma deslocação com o teclado é comunicada em ue_layout_changed exatamente como um arrastamento com o rato.
Exemplos #
Uma window ao estilo de um IDE #
// event open : cada conteudo e um controlo PB verdadeiro colocado sobre a window
uo_dock.of_add_panel(/*key*/ "document", /*position*/ "", /*relative_to*/ "", /*size*/ 0, /*title*/ "Document", /*content*/ uo_editor)
uo_dock.of_add_panel(/*key*/ "explorer", /*position*/ uo_dock.POSITION_START, /*relative_to*/ "document", /*size*/ 260, /*title*/ "Explorador", /*content*/ uo_tree)
uo_dock.of_add_panel(/*key*/ "properties", /*position*/ uo_dock.POSITION_END, /*relative_to*/ "document", /*size*/ 300, /*title*/ "Propriedades", /*content*/ uo_props)
uo_dock.of_add_panel(/*key*/ "output", /*position*/ uo_dock.POSITION_BOTTOM, /*relative_to*/ "document", /*size*/ 200, /*title*/ "Saida", /*content*/ uo_console)
// Um segundo painel empilhado em separador sobre "properties"
uo_dock.of_add_panel(/*key*/ "help", /*position*/ uo_dock.POSITION_STACK, /*relative_to*/ "properties", /*size*/ 0, /*title*/ "Ajuda", /*content*/ uo_help)
// O documento e a zona central
uo_dock.is_main = "document"
Memorizar e repor a disposição do utilizador #
// event close da window : gravar aquilo que o utilizador organizou
// Local variables
string ls_layout
// A disposicao atual, pronta a guardar
ls_layout = uo_dock.of_get_layout()
of_save_setting(/*name*/ "main_dock", /*value*/ ls_layout)
// event open : LER a disposicao gravada, DEPOIS criar os paineis
// Local variables
string ls_layout
// Primeiro a definicao : construir o dock lanca ue_layout_changed, que a poderia substituir
ls_layout = of_read_setting(/*name*/ "main_dock")
// Depois os paineis e a disposicao, numa SO rajada : um unico ue_layout_changed, na retoma
uo_dock.of_set_redraw(/*on*/ false)
of_create_panels()
// E a disposicao do ultimo fecho, se existir
if ls_layout <> "" then uo_dock.of_set_layout(/*json*/ ls_layout)
// Fim da rajada
uo_dock.of_set_redraw(/*on*/ true)
A ordem é imperativa:
of_set_layoutnão cria nenhum painel, limita-se a recolocar os que já existem. E a definição lê-se antes da construção: cadaof_add_panelmuda a disposição, e umue_layout_changedque a grave escreveria uma disposição construída a meio por cima daquela que ia repor.
Acompanhar as alterações continuamente #
// event ue_layout_changed de uo_dock : (string as_json)
// Lancado uma vez por rajada de alteracoes (a construcao, uma disposicao reposta) : gravado tal como esta.
of_save_setting(/*name*/ "main_dock", /*value*/ as_json)
Comandar um painel através do respetivo handle #
// Local variables
n_pbt_dock_panel lnv_panel
// O painel das propriedades : um titulo que conta as alteracoes, recolhido no seu bordo
lnv_panel = uo_dock.of_panel(/*key*/ "properties")
lnv_panel.is_title = "Propriedades (3 modificadas)"
lnv_panel.ib_pinned = false // recolhe-se numa patilha junto ao bordo
// Ocultar um painel reservado aos administradores
uo_dock.of_panel(/*key*/ "audit").ib_visible = gb_administrator
Chamar a atenção para um painel em segundo plano #
// Um processamento em segundo plano escreveu na consola : assinalar sem roubar o foco
uo_dock.of_notify_panel(/*key*/ "output")
Reorganizar a partir do código #
// Deslocar um painel como se o utilizador tivesse arrastado o seu separador
uo_dock.of_move_panel(/*key*/ "output", /*target*/ "document", /*position*/ "bottom")
// Empilha-lo em separador sobre outro painel
uo_dock.of_move_panel(/*key*/ "help", /*target*/ "properties", /*position*/ "stack")
Destacar um painel para um segundo ecrã #
// Janela flutuante nativa : o utilizador pode coloca-la noutro ecra
uo_dock.of_float_panel(/*key*/ "properties")
// event ue_panel_docked de uo_dock : (string as_key)
// O utilizador voltou a fechar a janela flutuante : o painel regressou.
of_log(/*msg*/ "Painel novamente acoplado: " + as_key)
Fechar um painel, voltar a abri-lo #
// event ue_panel_closed de uo_dock : (string as_key)
// O painel esta apenas oculto : o seu controlo fica no dock, nada surge na window.
st_status.Text = "Painel fechado: " + as_key
// Menu Ver, Propriedades : voltar a abrir o painel, a frente da sua pilha
uo_dock.of_panel(/*key*/ "properties").ib_visible = true
Fechar um painel oculta-o: o seu controlo fica alojado, e
ib_visible = truevolta a abri-lo à frente da sua pilha.of_remove_paneldevolve o controlo à janela, ao seu lugar e visível se o era: reserve-o para um controlo que destrói a seguir.
Recusar o fecho de um painel com trabalho não guardado #
// event open da window : perguntar antes de um painel se fechar (desativado por omissao)
uo_dock.ib_veto_close = true
// ue_panel_closing event of uo_dock : (string as_key) returns boolean
// O editor ainda tem alteracoes nao guardadas : o seu painel fica aberto.
if as_key = "editor" then
if ib_editor_modified then return false
end if
return true
// O seu codigo coloca a mesma pergunta : -4 quando e recusada
if uo_dock.of_close_panel(/*key*/ "editor") = -4 then
st_status.Text = "Guarde o documento antes de fechar o editor."
end if
Boas práticas #
- Designar sempre um painel principal com
is_main: sem zona central, o utilizador pode ocultar tudo e ficar perante uma window vazia. - Ler a disposição gravada antes de criar os painéis, e depois gravá-la em
ue_layout_changedem vez de o fazer apenas no fecho: assim, um encerramento anormal não perde nada, e a construção do dock já não substitui aquilo que ia repor. of_set_layoutvem depois dosof_add_panel, nunca antes.- Utilizar
of_notify_panelpara os processamentos em segundo plano: é menos intrusivo do que uma caixa de diálogo e a informação permanece visível. - Um controlo alojado é uma janela nativa: desenha-se por cima da camada web, e nenhum efeito visual do componente passa por cima dele.
- Um controlo é alojado por um só contentor: dá-lo a um segundo dock (ou a um tab) retira-o ao primeiro. Um controlo que contém o próprio dock é recusado (
-5). - Fechar um painel oculta-o (
ib_visible = truevolta a abri-lo);of_remove_paneldevolve o controlo à janela, visível se o era. of_reset()antes de qualquer reconstrução: sem ele, os controlos anteriormente alojados permanecem reparentados no contentor esvaziado e a reutilização de uma chave falha.- Para simples páginas exclusivas, sem acoplagem nem flutuação, tab é mais leve.
Herdado da base comum #
Estes membros existem em todos os componentes visuais — não são próprios deste. São detalhados uma só vez, nos capítulos transversais; esta tabela apenas diz onde os ler.
| Membros | Função | Detalhado em |
|---|---|---|
of_count · of_keys_at · of_has | Percorrer o que o componente contém | 3.2 Os items |
of_reset | Repor o componente a zero | 3.6 Repor um componente a zero: of_reset() |
of_register_shortcut · of_clear_shortcuts | Atalhos de teclado do componente | 3.5 Os atalhos de teclado |
of_is_created · of_is_ready · of_get_last_error | Se nasceu, se está pronto, o que falhou | 3.7 Diagnóstico |
of_save_as_png · of_save_as_jpg | Exportar a renderização como imagem | 3.8 Exportar a representação como imagem |
of_set_redraw | Agrupar as alterações num único repinte | 3.10 Boas práticas |
of_preload_icons | Ícones mostrados sem atraso | Apresentação instantânea: of_icon |
of_set_translation | Traduzir uma legenda do componente | 5.2 Adaptar uma etiqueta: of_set_translation |
of_focus_webview | Dar o foco ao componente | 6.4 Teclado e focus |
of_print · of_print_to_pdf | Imprimir, ou escrever um PDF | 6.9 Imprimir |
of_set_property · of_get_property · of_component_name | Controlar uma propriedade pelo nome | 3.1 O motor de propriedades |
is_accessible_name · is_accessible_description | O nome e a descrição que um leitor de ecrã diz | 3.4 Propriedades e eventos opcionais |
Duas ajudas não são herdadas: of_icon e of_escape_markup vivem em n_pbt_utils. Declare um — n_pbt_utils lnv_utils, nada a criar — e chame-as nele.