PBToolboxAI v3 ← Site

stepbar — u_pbt_stepbar #

← Referência dos componentes · Índice do guia

Sequência de etapas de um assistente: as etapas já concluídas, a etapa atual e as que estão por vir, na horizontal ou na vertical.

▶ Ver ao vivo — Aplicação de demonstração, mosaico Stepbar: a pré-visualização, o código que o produz e esta página, lado a lado.


Em resumo #

Userobjectu_pbt_stepbar
Classe de itemsn_pbt_stepbar_step (uma etapa)
Serve paraSituar o utilizador num assistente, num formulário de várias páginas, num processo de validação
PrincípioDeclaram-se as etapas e depois desloca-se ii_current: os estados calculam-se automaticamente

Início rápido #

// event open da janela
uo_etapes.of_add_step(/*key*/ "compte",  /*etiqueta*/ "Conta")
uo_etapes.of_add_step(/*key*/ "profil",  /*etiqueta*/ "Perfil")
uo_etapes.of_add_step(/*key*/ "paiement", /*etiqueta*/ "Pagamento")
uo_etapes.of_add_step(/*key*/ "fin",     /*etiqueta*/ "Confirmação")

// Etapa atual (1 = a primeira)
uo_etapes.ii_current = 1
// Botao Seguinte do assistente
uo_etapes.ii_current = uo_etapes.ii_current + 1

O modelo: uma etapa, três estados automáticos #

Uma etapa não tem estado a gerir manualmente. Ele deduz-se da sua posição relativamente a ii_current:

PosiçãoEstadoRepresentação
Antes da etapa atualdone — concluídaMarcador assinalado
A etapa atualcurrent — em cursoMarcador realçado
Depois da etapa atualtodo — por virMarcador numerado, tonalidade discreta

Um quarto estado, error, nunca se obtém automaticamente: é forçado numa etapa que falhou (ver mais abaixo).


Propriedades #

PropriedadeTipoPredefiniçãoFunção
ii_currentinteger1Etapa atual, numerada a partir de 1
is_positionstring"top"Orientação: top / bottom (sequência horizontal) ou start / end (sequência vertical) — constantes POSITION_TOP, POSITION_BOTTOM, POSITION_START, POSITION_END. START/END são lógicas e acompanham o sentido de escrita
is_navigation_modestring"free"Aquilo que um clique pode alcançar: NAV_FREE (qualquer etapa, a predefinição), NAV_BACKWARD (apenas as etapas já percorridas — voltar atrás, nunca saltar em frente) ou NAV_NONE (nada: um simples indicador de progresso, conduzido apenas pelo seu código). O que continua clicável lança ue_step_clicked; a barra, essa, nunca se move num clique
is_overflow_modestring"auto"Demasiadas etapas para a largura: OVERFLOW_AUTO compacta a barra abaixo de um mínimo legível por etapa (cada etapa passa a um ponto, apenas a atual conserva a etiqueta, e todas continuam clicáveis), OVERFLOW_SCROLL conserva as etiquetas e desloca, mantendo a etapa atual à vista, OVERFLOW_SHRINK comprime-as até às reticências. Uma sequência vertical nunca compacta
is_theme_stylestringfluentEstilo visual do componente (constantes THEME_STYLE_*)
is_theme_modestringlightVariante clara ou escura (constantes THEME_MODE_*)
il_theme_accentlong-1Cor de destaque deste componente (-1 = destaque do tema)
is_tooltipstring""Tooltip simples apresentado ao passar sobre o componente
is_super_tooltip_titlestring""Título do tooltip enriquecido (prevalece sobre is_tooltip)
is_super_tooltip_textstring""Texto do tooltip enriquecido (aceita marcação enriquecida)
is_super_tooltip_imagestring""Imagem do tooltip enriquecido

Propriedades de uma etapa — n_pbt_stepbar_step #

Obtidas através de of_step(id):

PropriedadeTipoPredefiniçãoFunção
is_statestringSTATE_TODOForça o estado da etapa: STATE_TODO, STATE_CURRENT, STATE_DONE, STATE_ERROR. STATE_AUTO = regresso ao cálculo automático; a releitura devolve o estado efetivo da etapa, não o forçado
is_textstring—Altera a etiqueta da etapa, etiquetas de texto rico aceites
is_descriptionstring""Segunda linha da etapa — «Facultativo», uma data, um montante. Etiquetas de texto rico aceites. Anunciada a um leitor de ecrã como a descrição da etapa, depois do seu nome. Uma cadeia vazia retira-a; uma barra compactada abandona-a para caber numa linha
is_imagestring""Ícone apresentado no lugar do número da etapa (formas aceites)
ib_enabledbooleantrueEtapa ativa; uma etapa desativada deixa de reagir ao clique
ib_visiblebooleantrueOculta a etapa sem a retirar do modelo

Métodos #

MétodoFunção
of_add_step (string as_key, string as_label)Acrescenta uma etapa no fim da sequência. 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_add_step (string as_key, string as_label, string as_icon_file)O mesmo, com o ícone no lugar do número da etapa. 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_add_step (string as_key, string as_label, string as_icon_file, string as_desc)O mesmo, com o ícone e a segunda linha. 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_insert_step (string as_key, string as_label, integer ai_index)Insere uma etapa na posição indicada (contada a partir de 1). 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_insert_step (string as_key, string as_label, string as_icon_file, integer ai_index)O mesmo, com o ícone. 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_insert_step (string as_key, string as_label, string as_icon_file, string as_desc, integer ai_index)O mesmo, com o ícone e a segunda linha. 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_move_step (string as_key, integer ai_index)Desloca uma etapa existente. 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_next ( )Passa à etapa seguinte, saltando as ocultas e as desativadas — aquelas em que ii_current + 1 aterraria. Para na última alcançável. O modo de navegação não é consultado: limita o utilizador, não o seu código. Nenhuma pergunta é colocada, mas ue_step_changed é lançado. Devolve 0 depois de aplicado, -2 se o componente não estiver criado
of_previous ( )Regressa à etapa anterior, as mesmas regras. A partir da posição «tudo terminado» regressa à última etapa. Devolve 0 depois de aplicado, -2 se o componente não estiver criado
of_remove_step (string as_key)Retira uma etapa; as restantes conservam o seu estado. 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_steps ( )Esvazia a sequência. Devolve 0 depois de aplicado, -2 se o componente não estiver criado
of_step (string as_key) → n_pbt_stepbar_stepHandle de uma etapa, para definir as suas propriedades
of_reset ( )Esvazia as etapas e repõe todas as propriedades nos seus valores predefinidos. Devolve 0 depois de aplicado, -2 se o componente não estiver criado
of_set_redraw (boolean)Agrupa uma sequência de alteraçõ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

O terceiro argumento é o ícone, como em todo o resto da biblioteca (of_add_item da listbar, of_add_panel da statusbar, of_add_tile da tilesbox). A segunda linha vem depois.


Eventos #

EventoAcionado quando
ue_step_clicked (integer ai_index, string as_key)O utilizador clicou num passo. A barra não se move: programe este evento, faça as suas verificações e depois defina ii_current se aceitar
ue_step_changed (integer ai_from_index, string as_from_key, integer ai_index, string as_key)A barra deslocou-se: ii_current foi definido, ou of_next / of_previous chamado. Um clique nunca chega aqui
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)

A barra NÃO navega sozinha. Um clique comunica (ue_step_clicked) e mais nada: a barra fica onde está. É o utilizador que a desloca, definindo ii_current ou chamando of_next / of_previous — e esses deslocamentos anunciam-se com ue_step_changed.

Esta divisão não é uma limitação, é o sentido do componente: uma barra de passos reflete um percurso que a sua aplicação conduz. Chegar ao passo 3 costuma significar que um formulário era válido e que um registo foi guardado; nenhum clique pode decidir isso por si.

ue_step_clicked transporta o passo visado, ue_step_changed transporta além disso o passo deixado — tanto pelo identificador de negócio como pela ordem. É esse par que permite escrever «recuar sim, saltar à frente não» numa linha.

is_navigation_mode continua a ser o filtro do clique: NAV_NONE deixa de lançar seja o que for, NAV_BACKWARD só deixa clicar as etapas já percorridas.


Com o teclado #

A barra é uma única paragem de tabulação: uma vez alcançada, percorre-se inteiramente com o teclado.

TeclaEfeito
SetasDeslocam o foco de uma etapa para outra, em ciclo; as etapas ocultas, desativadas ou fora de alcance (ver is_navigation_mode) são saltadas
Home / EndPrimeira / última etapa alcançável
Enter ou EspaçoComunica um clique na etapa com o foco (ue_step_clicked) — a barra não se move por isso

As setas não selecionam, ao contrário dos separadores de um dockcontainer. Alcançar uma etapa coloca uma pergunta à sua aplicação: percorrer uma barra de oito etapas enviaria oito, e uma recusa a meio caminho deixaria o foco e a etapa atual dessincronizados.

Cada etapa é um verdadeiro botão: leva a sua etiqueta e o seu estado no nome falado («Conta - concluída»), a etapa atual está marcada com aria-current="step", e uma etapa desativada é um botão desativado — não apenas um texto esbatido. O marcador numerado não é lido em voz alta: uma ordem não ensina nada.


Exemplos #

Avançar no assistente #

uo_etapes.of_add_step(/*key*/ "compte",   /*etiqueta*/ "Conta")
uo_etapes.of_add_step(/*key*/ "profil",   /*etiqueta*/ "Perfil")
uo_etapes.of_add_step(/*key*/ "paiement", /*etiqueta*/ "Pagamento")
uo_etapes.of_add_step(/*key*/ "fin",      /*etiqueta*/ "Confirmação")

// As etapas 1 e 2 passam automaticamente a "concluida" (assinalada)
uo_etapes.ii_current = 3

Assinalar uma etapa em erro #

// O estado de uma etapa forca-se atraves do seu handle
uo_etapes.of_step(/*key*/ "profil").is_state = n_pbt_stepbar_step.STATE_ERROR
// Uma vez corrigido o problema, devolve-se o controlo ao calculo automatico
uo_etapes.of_step(/*key*/ "profil").is_state = n_pbt_stepbar_step.STATE_AUTO

Sequência vertical #

// left / right : a sequencia desenha-se verticalmente, ideal a margem de um formulario
uo_etapes.is_position = uo_etapes.POSITION_START

// O TERCEIRO argumento e o icone : ocupa o lugar do numero da etapa
uo_etapes.of_add_step(/*key*/ "compte", /*etiqueta*/ "Conta", /*icone*/ "mono:img\packimages.dll:svg/samples/folder-open")

Etiquetas enriquecidas em duas linhas #

// A etiqueta de uma etapa aceita as etiquetas de texto rico
uo_etapes.of_add_step("compte",   "[b]Conta[/b][br][size=9](ligação)")
uo_etapes.of_add_step("profil",   "[b]Perfil[/b][br][size=9](os seus dados)")
uo_etapes.of_add_step("paiement", "[b]Pagamento[/b][br][size=9](cartão)")
uo_etapes.of_add_step("fin",      "[accent][b]Concluído[/b][/accent]")

uo_etapes.ii_current = 2
// event ue_step_clicked de uo_etapes : (integer ai_index, string as_key)
// A barra NAO se moveu : e aqui que se decide.
if ai_index > uo_etapes.ii_current then
    MessageBox("Assistente", "Conclua o passo atual antes de prosseguir.")
    return
end if
uo_etapes.ii_current = ai_index

Etapa condicional #

// Um cliente ja conhecido nao tem etapa "Perfil" a preencher
uo_etapes.of_step("profil").ib_visible = false

Boas práticas #

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.

MembrosFunçãoDetalhado em
of_count · of_keys_at · of_hasPercorrer o que o componente contém3.2 Os items
of_resetRepor o componente a zero3.6 Repor um componente a zero: of_reset()
of_register_shortcut · of_clear_shortcutsAtalhos de teclado do componente3.5 Os atalhos de teclado
of_is_created · of_is_ready · of_get_last_errorSe nasceu, se está pronto, o que falhou3.7 Diagnóstico
of_save_as_png · of_save_as_jpgExportar a renderização como imagem3.8 Exportar a representação como imagem
of_set_redrawAgrupar as alterações num único repinte3.10 Boas práticas
of_preload_iconsÍcones mostrados sem atrasoApresentação instantânea: of_icon
of_set_translationTraduzir uma legenda do componente5.2 Adaptar uma etiqueta: of_set_translation
of_focus_webviewDar o foco ao componente6.4 Teclado e focus
of_print · of_print_to_pdfImprimir, ou escrever um PDF6.9 Imprimir
of_set_property · of_get_property · of_component_nameControlar uma propriedade pelo nome3.1 O motor de propriedades

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.


← Referência dos componentes · Índice do guia