Re: treeview - gtk-cell-renderer-spin - 2 problems

David Pirotte <[email protected]> Thu, 25 Jul 2013 15:41:44 -0300
Newsgroups gmane.lisp.guile.gtk
Message-ID <20130725154144.1c218459@capac>
--MP_/4m.y3eE8J.KfF9avC8V6oIv
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
Content-Disposition: inline

Hello,

I slightly improved the example I sent because I forgot to mention that the
<gtk-spin-button> appears to work better then the renderer _but_ not always=
 [I am
talking about the value it stores and gives back, the spin itself always re=
spects
its 'contract': a float rounded to the tenth, between 0.0 and 100.0].

To convince yourself of the 'problem', you may press the up-arrow, page-up,
down-arrow page-down until it reaches values that shows the problem.

Cheers,
David

;; --

Le Wed, 24 Jul 2013 17:35:16 -0300,
David Pirotte <[email protected]> a =C3=A9crit :

> Hello guilers,
> guile-gnomers,
>=20
> 	guile-gnome from git - the latest
> 	GNU Guile 2.0.9.20-10454
>=20
> So far i did render floats myself, using text renderer, mono space right
> justified ... because i could never make the <gtk-cell-renderer-spin> cor=
rectly
> display the number of decimals i wanted.
>=20
> I'd like to see if it possible to solve this problem, so i built a small =
example to
> play with. As you can see there are 2 problems.
>=20
> 1-	the renderer does not implement the digits i am passing (line 35);
> 2-	the values it stores and give back are not [exactly] the values i am
> given (lines 64, 65).
>=20
> 	[i also tried to define and use an adjustment, but it does not change the
> 	fact that the renderer fails to display the right digit number it receiv=
es]
>=20
> Hints/debug suggestions welcome,
> David

--MP_/4m.y3eE8J.KfF9avC8V6oIv
Content-Type: text/x-scheme
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment;
 filename=gtk-cell-renderer-spin-digits-prob.scm

#!/bin/sh
# -*- mode: scheme; coding: utf-8 -*-
exec guile-gnome-2 -e main -s $0 "$@"
!#

(use-modules (ice-9 receive)
	     (oop goops) 
	     (gnome gobject)
	     (gnome gtk))

(define *model* #f)
(define *selection* #f)

(define (pack-tv-column tv column renderer pos)
  (pack-start column renderer #t)
  (add-attribute column renderer "text" pos)
  (append-column tv column))

(define (add-columns treeview)
  (let* ((renderer1 (make <gtk-cell-renderer-text>))
	 (column1 (make <gtk-tree-view-column>
		    #:title "What"
		    #:expand #t
		    #:alignment .5))
	 #;(adjustment2 (make <gtk-adjustment>
			#:value 0
			#:lower 0
			#:upper 100
			#:step-increment .1
			#:page-increment 1
			#:page-size 0))
	 (renderer2 (make <gtk-cell-renderer-spin>
		      ;; #:adjustment adjustment2
		      #:climb-rate 0.1
		      #:digits 1))
	 (column2 (make <gtk-tree-view-column>
		    #:title "Duration"
		    #:sizing 'fixed
		    #:fixed-width 90
		    #:alignment .5)))
    (pack-tv-column treeview column1 renderer1 0)
    (pack-tv-column treeview column2 renderer2 1)))

(define (add-model treeview)
  (let* ((column-types (list <gchararray>
			     <gfloat>))
	 (model (gtk-list-store-new column-types)))
    (set-model treeview model)
    (values model
	    (get-selection treeview))))

(define (setup-treeview treeview)
  (add-columns treeview)
  (receive (model selection)
      (add-model treeview)
    (set-mode selection 'single)
    (values model selection)))

(define (populate-model model)
  (for-each (lambda (row)
	      (let ((iter (gtk-list-store-append model)))
		(set-value model iter 0 (car row))
		(set-value model iter 1 (cadr row))))
      '(("contrib" 1.1)
	("sysadmin" 2.3))))

(define (status-push status-bar message source)
  (let ((context-id (gtk-statusbar-get-context-id status-bar source)))
    (gtk-statusbar-push status-bar context-id message)))

(define (status-pop status-bar source)
  (let ((context-id (gtk-statusbar-get-context-id status-bar source)))
    (gtk-statusbar-pop status-bar context-id)))

(define (display-both model iter spin)
  (string-append "duration, the spin: "  (number->string (get-value spin))
		 "  the cell renderer: " (number->string (get-value model iter 1))))

(define (animate)
  (let* ((window (make <gtk-window>
		   #:type 'toplevel
		   #:title "Gtk cell renderer spin"))
	 (vbox (make <gtk-vbox>
		 #:homogeneous #f
		 #:spacing 2))
	 (adjustment (make <gtk-adjustment>
		       #:value 0
		       #:lower 0
		       #:upper 100
		       #:step-increment .1
		       #:page-increment 1
		       #:page-size 0))
	 (spin (make <gtk-spin-button>
		 #:adjustment adjustment
		 #:climb-rate .1
		 #:digits 1))
	 (scrollw (make <gtk-scrolled-window>
		    #:hscrollbar-policy 'never
		    #:vscrollbar-policy 'automatic))
	 (treeview (make <gtk-tree-view>))
	 (statusbar (make <gtk-statusbar>)))
    (set-default-size window 400 150)
    (receive (model selection)
	(setup-treeview treeview)
      (populate-model model)
      (add window vbox)
      (add scrollw treeview)
      (pack-start vbox spin #f #f 0)
      (pack-start vbox scrollw #t #t 0)
      (pack-start vbox statusbar #f #f 0)
      (connect window
	       'delete-event
	       (lambda (widget event)
		 (destroy widget)
		 (gtk-main-quit)
		 #f))
      (connect spin
	       'value-changed
	       (lambda (widget)
		 (receive (model iter)
		     (get-selected selection)
		   (set-value model iter 1 (get-value widget))
		   (status-pop statusbar "")
		   (status-push statusbar (display-both model iter spin) ""))))
      (connect selection
	       'changed
	       (lambda (selection)
		 (receive (model iter)
		     (get-selected selection)
		   (status-pop statusbar "")
		   (status-push statusbar (display-both model iter spin) ""))))
      (select-path selection (list 0)))
    (show-all window)
    (gtk-main)))

(define (main args)
  (animate))

--MP_/4m.y3eE8J.KfF9avC8V6oIv
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
guile-gtk-general mailing list
[email protected]
https://lists.gnu.org/mailman/listinfo/guile-gtk-general

--MP_/4m.y3eE8J.KfF9avC8V6oIv--