1;; Copyright (C) 2004 Patrick Bernaud 2;; GNU General Public License version 2 or later. No warrantee. 3 4(define-module (demos list-store) 5 :use-module (oop goops) 6 :use-module (gnome gobject) 7 :use-module (gnome gtk)) 8 9 10(define data 11 '((#f 60482 "Normal" "scrollable notebooks and hidden tabs") 12 (#f 60620 "Critical" "gdk_window_clear_area (gdkwindow-win32.c) is not thread-safe") 13 (#f 50214 "Major" "Xft support does not clean up correctly") 14 (#t 52877 "Major" "GtkFileSelection needs a refresh method. ") 15 (#f 56070 "Normal" "Can't click button after setting in sensitive") 16 (#t 56355 "Normal" "GtkLabel - Not all changes propagate correctly") 17 (#f 50055 "Normal" "Rework width/height computations for TreeView") 18 (#f 58278 "Normal" "gtk_dialog_set_response_sensitive () doesn't work") 19 (#f 55767 "Normal" "Getters for all setters") 20 (#f 56925 "Normal" "Gtkcalender size") 21 (#f 56221 "Normal" "Selectable label needs right-click copy menu") 22 (#t 50939 "Normal" "Add shift clicking to GtkTextView") 23 (#f 6112 "Enhancement" "netscape-like collapsable toolbars") 24 (#f 1 "Normal" "First bug :=)"))) 25 26 27(define (populate-model store) 28 ;; add data to the list store 29 (for-each 30 (lambda (b) 31 (let ((iter (gtk-list-store-append store))) 32 (for-each 33 (lambda (col data) 34 (set-value store iter col data)) 35 '(0 1 2 3) b))) 36 data)) 37 38(define (fixed-toggled treemodel pathstr) 39 (let* ( 40 ;; get toggled iter 41 (iter (get-iter treemodel pathstr)) 42 ;; get current value and invert 43 (fixed (not (get-value treemodel iter 0)))) 44 ;; set the new value 45 (set-value treemodel iter 0 fixed))) 46 47(define (add-columns treeview) 48 (let* ((model (get-model treeview)) 49 ;; column for fixed toggles 50 (renderer1 (make <gtk-cell-renderer-toggle>)) 51 (column1 (make <gtk-tree-view-column> 52 :title "Fixed?" 53 ;; set this column to a fixed sizing (of 50 pixels) 54 :sizing 'fixed 55 :fixed-width 50)) 56 ;; column for bug numbers 57 (renderer2 (make <gtk-cell-renderer-text>)) 58 (column2 (make <gtk-tree-view-column> 59 :title "Bug number")) 60 ;; column for severities 61 (renderer3 (make <gtk-cell-renderer-text>)) 62 (column3 (make <gtk-tree-view-column> 63 :title "Severity")) 64 ;; column for description 65 (renderer4 (make <gtk-cell-renderer-text>)) 66 (column4 (make <gtk-tree-view-column> 67 :title "Description")) 68 ) 69 (connect renderer1 'toggled (lambda (w p) 70 (fixed-toggled model p))) 71 (pack-start column1 renderer1 #f) 72 (add-attribute column1 renderer1 "active" 0) 73 (append-column treeview column1) 74 75 (pack-start column2 renderer2 #f) 76 (add-attribute column2 renderer2 "text" 1) 77 (set-sort-column-id column2 1) 78 (append-column treeview column2) 79 80 (pack-start column3 renderer3 #f) 81 (add-attribute column3 renderer3 "text" 2) 82 (set-sort-column-id column3 2) 83 (append-column treeview column3) 84 85 (pack-start column4 renderer4 #f) 86 (add-attribute column4 renderer4 "text" 3) 87 (set-sort-column-id column4 4) 88 (append-column treeview column4))) 89 90(define (main) 91 (let* ( 92 ;; create window, etc 93 (window (make <gtk-window> 94 :type 'toplevel :title "GtkListStore demo" 95 :default-width 280 :default-height 250 :border-width 8)) 96 (vbox (make <gtk-vbox> :homogeneous #f :spacing 8)) 97 (label (make <gtk-label> 98 :label (string-append 99 "This is the bug list (note: not based on real " 100 "data, it would be nice to have a nice ODBC " 101 "interface to bugzilla or so, though)."))) 102 (sw (make <gtk-scrolled-window> 103 :hscrollbar-policy 'never :vscrollbar-policy 'automatic 104 :shadow-type 'etched-in)) 105 ;; create list store 106 (model (gtk-list-store-new (list <gboolean> 107 <guint> 108 <gchararray> 109 <gchararray>))) 110 ;; create tree view 111 (treeview (make <gtk-tree-view> 112 :model model :rules-hint #t :search-column 3))) 113 (populate-model model) 114 115 (add window vbox) 116 117 (pack-start vbox label #f #f 0) 118 119 (pack-start vbox sw #t #t 0) 120 121 (add sw treeview) 122 123 ;; add columns to the tree view 124 (add-columns treeview) 125 126 (show-all window))) 127 128 129(define name "Tree View/List Store") 130(define description 131 (string-append 132 "The GtkListStore is used to store data in list form, to be used " 133 "later on by a GtkTreeView to display it. This demo builds a " 134 "simple GtkListStore and displays it. See the Stock Browser " 135 "demo for a more advanced example.")) 136