Hoje vou postar um código que trata de dcl, mostrando duas “tiles” legais: toggle e slider… também mostrarei como se pode personalizar os botões “OK” e “CANCEL” que vemos nos diálogos, vejam:
;|mostra um diálogo para você escolher layers
tit -> título, string
maxl -> numero máximo de linhas a serem mostradas,
se omitido, assume o valor 15
lst -> lista de strings com os nomes dos layer que
devem estar pré selecionados|;
(defun get-lst-layer (tit maxl lst / lays tmp file filename
dcl n qtd lay key update-lst-lays)
;sub-rotina para atualizar a tela do diálogo
(setq update-lst-lays
(lambda (val / n)
(setq n 0
s val)
(repeat (min maxl qtd)
(setq lay (nth (+ n (– qtd maxl s)) lays)
n (1+ n)
key (itoa n))
(set_tile (strcat “tx” key) lay)
(set_tile (strcat “tg” key)
(if (member lay lst) “1” “0”))
(action_tile (strcat “tg” key)
(strcat
“(setq lst (if (= “1” $value) (cons “”
lay “” lst) (vl-remove “” lay “” lst)))”))))
;pegue a lista de layers do desenho em ordem alfabetica:
lays (vl-sort (get-tableof “layers”) ‘<)
;cria um nome de arquivo temporário:
filename (vl-filename-mktemp “gll.dcl”)
;cria o arquivo e abre ele para edição:
file (open filename “w”)
n 0
;se nao foi fornecido o numero de linhas, assume que sejam 15
maxl (if maxl maxl 15)
;quantidade de layers no desenho:
qtd (length lays))
;inicia a criação do diálogo:
(write-line
(strcat “getlstlayer : dialog {width = 50; label = “”
tit “”;n:row { :column {“) file)
;escreve tantas linhas quanto fornecido pela variavel MAXL:
(repeat (min maxl qtd)
(setq n (1+ n))
(write-line
(strcat “:row { :toggle { key = “tg” (itoa n)
“”;} :text{ width=50; key = “tx”
(itoa n) “”;}}”)
file))
;finaliza a criação do dcl construindo os botões:
(write-line
(strcat “}n”
(if (> qtd maxl)
(strcat
“:slider { key = “s”; min_value = 0; max_value = “
(itoa (– qtd maxl)) “; big_increment = “ (itoa maxl)
“; layout = vertical;}”) “”)
“} :row{ :button {key = “ALL”; label = “Tudo”;}
:button {key = “NEM”; label = “Nenhum”;} “
;botão ok:
“:button {label = “Ok”; key=”accept”;
is_default=true;}”
;botão cancel:
“:button {label = “Sair”; key=”cancel”;
is_cancel=true;}}}”)
file)
;fecha o arquivo, ele está pronto!
(close file)
;carrega o arquivo DCL na memória do cad:
(setq dcl (load_dialog filename)
s (– qtd maxl)) ;posição do slider…
;abre um quadro de diálogo:
(new_dialog “getlstlayer” dcl)
;define as ações de cada elemento do diálogo…
(action_tile “s” ;slider
“(update-lst-lays (atoi $value))”)
(action_tile “ALL”
“(progn (setq lst lays)
(update-lst-lays s))”);botao todos
(action_tile “NEM”
“(progn (setq lst nil)
(update-lst-lays s))”);botão nenhum
;marca a posição do slider:
(set_tile “s” (itoa s))
;atualiza o estados das toggles…:
(update-lst-lays s)
;inicia o diálogo, e salva o resultado
(setq lst (if (start_dialog) lst))
;descarrega o diálogo
(unload_dialog dcl)
;apaga o dcl temporário que criamos
(vl-file-delete filename)
lst)