用法
评论
建议
取 消
确 定
(defun ui:table (lst-data / tmp-data dcl-tmp dcl_fp dcl_id pkg para% curr-page per-page tbl-widths tbl-title page-up page-down *error* show-data-list callback-accept) "表格编辑,纯DCL方式实现,使用前先设置 ui:*table-title* 标题,赋值给 ui:*table-numbers-per-page* (整数),可以设置每页的行数(默认为20)。ui:*table-widths* 用于定义每列的宽度,默认每列宽度为10。最大支持列数为26列。" "修改后的数据" "(setq ui:*table-title* \"我的表格\")(setq ui:*table-widths* '(10 5 10 15))(ui:table '((\"姓名\"\n \"性别\"\n \"年龄\"\n \"身高\")(\"张三\"\n \"男\"\n 18 180)(\"李四\"\n \"女\"\n 18 170)(\"王五\"\n \"男\"\n 18 180)))" (defun *error* (msg) (if (= (quote file) (type dcl_fp)) (close dcl_fp)) (@:*error* msg)) (if (and ui:*table-title* (= (quote str) (type ui:*table-title*))) (setq tbl-title ui:*table-title*) (setq tbl-title (_ "Table Editor"))) (if (> (length (car lst-data)) 26) (progn (alert (_ "Max number of columns is 26.")) (exit))) (if (and ui:*table-widths* (apply (quote and) (mapcar (quote numberp) ui:*table-widths*)) (> (apply (quote min) ui:*table-widths*) 0) (= (length ui:*table-widths*) (length (car lst-data)))) (setq tbl-widths ui:*table-widths*) (progn (repeat (length (car lst-data)) (setq tbl-widths (cons 10 tbl-widths))))) (if (and ui:*table-numbers-per-page* (= (quote int) (type ui:*table-numbers-per-page*))) (setq per-page ui:*table-numbers-per-page*) (setq per-page 20)) (setq tmp-data lst-data) (defun save-table (/ lst-dcl) "save dcl data to lst-data" (setq lst-dcl (quote nil)) (setq r% 0) (repeat (min per-page (- (length (cdr tmp-data)) (* curr-page per-page))) (setq c% 64) (setq r% (1+ r%)) (setq lst-r% (quote nil)) (repeat (length (car tmp-data)) (setq lst-r% (cons (get_tile (strcat (chr (setq c% (1+ c%))) (itoa r%))) lst-r%))) (setq lst-dcl (cons (reverse lst-r%) lst-dcl))) (setq lst-dcl (reverse lst-dcl)) (setq i% 0) (setq tmp-data-prev (quote nil)) (repeat (min (* curr-page per-page) (length (cdr tmp-data))) (setq tmp-data-prev (cons (nth (setq i% (1+ i%)) tmp-data) tmp-data-prev))) (setq i% (* (1+ curr-page) per-page)) (setq tmp-data-last (quote nil)) (if (> (- (length (cdr tmp-data)) (* (1+ curr-page) per-page)) 0) (repeat (- (length (cdr tmp-data)) (* (1+ curr-page) per-page)) (setq tmp-data-last (cons (nth (setq i% (1+ i%)) tmp-data) tmp-data-last)))) (setq tmp-data (append (list (car tmp-data)) (reverse tmp-data-prev) lst-dcl (reverse tmp-data-last)))) (defun callback-accept nil (save-table) (setq lst-data (mapcar (quote (lambda (x type1) (mapcar (quote (lambda (y ty) (if (p:stringp y) (@:to-type y (type ty)) y))) x type1))) tmp-data lst-data))) (defun page-up nil (save-table) (setq curr-page (1- curr-page)) (set_tile "scrollbar" (itoa (- (1- total-page) curr-page))) (show-data-list)) (defun page-down nil (save-table) (setq curr-page (1+ curr-page)) (set_tile "scrollbar" (itoa (- (1- total-page) curr-page))) (show-data-list)) (defun to-page nil (save-table) (setq curr-page (- (1- total-page) (atoi (get_tile "scrollbar")))) (show-data-list)) (defun show-data-list (/ tmp-unit) (setq i% 0) (repeat (length (car tmp-data)) (set_tile (strcat "header" (itoa (setq i% (1+ i%)))) (nth (1- i%) (car tmp-data)))) (setq c% 64) (repeat (length (car tmp-data)) (setq r% 0 c% (1+ c%)) (repeat (min per-page (- (length (cdr tmp-data)) (* per-page curr-page))) (setq tmp-unit (nth (- c% 65) (nth (1- (+ (setq r% (1+ r%)) (* per-page curr-page))) (cdr tmp-data)))) (set_tile (strcat (chr c%) (itoa r%)) (cond ((p:intp tmp-unit) (string:number-format (@:to-string tmp-unit) 5 0)) ((numberp tmp-unit) (string:number-format (@:to-string tmp-unit) 5 3)) (t (@:to-string tmp-unit)))) (mode_tile (strcat (chr c%) (itoa r%)) 0) (set_tile (strcat "rno" (itoa r%)) (string:number-format (@:to-string (+ r% (* per-page curr-page))) 7 0))) (while (< r% per-page) (repeat (length (car tmp-data)) (set_tile (strcat (chr c%) (itoa (setq r% (1+ r%)))) "") (mode_tile (strcat (chr c%) (itoa r%)) 1) (set_tile (strcat "rno" (itoa r%)) "")))) (set_tile "curr_total" (strcat (itoa (1+ curr-page)) "/" (itoa (1+ (/ (1- (length (cdr tmp-data))) per-page))))) (if (= 0 curr-page) (mode_tile "prev" 1) (mode_tile "prev" 0)) (if (= (/ (1- (length (cdr tmp-data))) per-page) curr-page) (mode_tile "next" 1) (mode_tile "next" 0))) (if (/= (quote int) (type theme:bg-color)) (setq theme:bg-color 151)) (setq curr-page 0 total-page (fix (1+ (/ (1- (length (cdr tmp-data))) per-page)))) (progn (setq dcl-tmp (strcat @:*tmp-path* "tmp-table-ed.dcl")) (setq dcl_fp (open dcl-tmp "w")) (write-line (strcat "table_ed : dialog {" "label = \"" tbl-title "\";" ": column { " ":row{" ": column { ") dcl_fp) (write-line (strcat ": row { ") dcl_fp) (write-line (strcat ":edit_box{key=\"rno\";value=\"\n 行号\";width=2;fixed_width=true;horizontal_margin=none;vertical_margin=none;is_enabled=false;}") dcl_fp) (setq i% 0) (repeat (length (car tmp-data)) (write-line (strcat ":edit_box{key=\"header" (itoa (setq i% (1+ i%))) "\";value=\"\";width=" (itoa (nth (1- i%) tbl-widths)) ";fixed_width=true;horizontal_margin=none;vertical_margin=none;is_enabled=false;}") dcl_fp)) (write-line (strcat "}") dcl_fp) (setq r% 0) (repeat (min per-page (length (cdr tmp-data))) (write-line (strcat ":row{") dcl_fp) (setq r% (1+ r%) c% 64) (write-line (strcat ":edit_box{key=\"rno" (itoa r%) "\";value=\"\";width=2;fixed_width=true;horizontal_margin=none;vertical_margin=none;is_enabled=false;}") dcl_fp) (repeat (length (car tmp-data)) (write-line (strcat ":edit_box{key=\"" (chr (setq c% (1+ c%))) (itoa r%) "\";value=\"\";width=" (itoa (nth (- c% 65) tbl-widths)) ";fixed_width=true;horizontal_margin=none;vertical_margin=none;}") dcl_fp)) (write-line (strcat "}") dcl_fp)) (write-line (strcat "}") dcl_fp) (if (> (length (cdr tmp-data)) per-page) (write-line (strcat ":slider{key=\"scrollbar\";layout=vertical;value=" (itoa (1- total-page)) ";max_value=" (itoa (1- total-page)) ";min_value=0;small_increment=1;}") dcl_fp)) (write-line "}" dcl_fp) (if (> (length (cdr tmp-data)) per-page) (progn (write-line ":spacer{}}:spacer{}" dcl_fp) (write-line ":row{alignment=centered;children_alignment=centered;:button{label=\"(<)Prev\";mnemonic=\"<\";key=\"prev\";is_enabled=false;}:spacer{} :text_part{key=\"curr_total\"; value=\"\";alignment=\"centered\";width=10;}:button{label=\"Next(>)\";mnemonic=\">\";key=\"next\";is_enabled=false;}}" dcl_fp)) (write-line "}" dcl_fp)) (write-line ":spacer{} ok_cancel; }" dcl_fp) (close dcl_fp)) (setq dcl_id (load_dialog dcl-tmp)) (if (not (new_dialog "table_ed" dcl_id)) (exit)) (action_tile "prev" "(page-up)") (action_tile "next" "(page-down)") (action_tile "scrollbar" "(to-page)") (action_tile "accept" "(callback-accept)(done_dialog 0)") (show-data-list) (start_dialog) (unload_dialog dcl_id) (vl-file-delete dcl-tmp) lst-data)
函数库使用说明
应用包
技术支持
统计信息
函数库规模: 733 个
函数库类别: 51 种
上传记录
刷新