Bug 1154 - SEVEN GTK TreeView bugs
: SEVEN GTK TreeView bugs
Status: CLOSED INVALID
Product: Desktop platform
gtk
: unspecified
: All All
: Medium normal (vote)
: ---
Assigned To: Tommi Komulainen
: HAF QA mailing list
:
:
:
:
  Show dependency tree
 
Reported: 2007-03-20 01:53 UTC by Sean Luke
Modified: 2007-11-28 12:50 UTC (History)
0 users (show)

See Also:


Attachments
testcase (4.28 KB, text/plain)
2007-03-22 17:47 UTC, Tommi Komulainen
Details


Note

You need to log in before you can comment on or make changes to this bug.


Description Sean Luke (reporter) 2007-03-20 01:53:15 UTC
Some bugs reported on pymaemo which are actually underlying gtk bugs in hildon:

BUG GROUP 1.
Reported as:  https://garage.maemo.org/tracker/?group_id=40&atid=229&func=detail&aid=519
-------------

See the following code:   http://www.pygtk.org/pygtk2tutorial/sec-CellRenderers.html#cellrendererfig

1. GTK documentation and examples show column headers on by default; but they're off by default in 
maemo.

2. You cannot select multiple checkboxes -- if you select one the others are deselected.


BUG GROUP 2
Reported as:    https://garage.maemo.org/tracker/?group_id=40&atid=229&func=detail&aid=521
-------------

See the code at the end of this message.


1. The gtk.TreeView property "show-expanders" is listed in the documentation, but pymaemo's version 
doesn't recognize it.  How am I to turn on display of the expander triangles?

2. Reordering columns is hillarious to watch.  When you press down on a column header, it shifts to the 
row BENEATH it.  You must then drag that shifted header BELOW where you want it to go, with lots of 
weird screen artifacts, then let up and hope for the best.  Theoretically usable, but some major display 
bugs there!



BUG GROUP 3
Reported as:  https://garage.maemo.org/tracker/?group_id=40&atid=229&func=detail&aid=522
-------------

See the code at the end of this message.

1.  If you edit any TreeView row, you can change the text with the keyboard, but not with the large 
thumb-board.  The text appears to be modified, but when the thumb-board goes away, the text 
remains the same.

2. It's possible to resize a column out to the right such that you can't reach it any more. 

3. The minimum size for a CellRendererToggle is smaller than the toggle button itself, by one pixel.  
This minimum size should be set to at least 10 pixels wider.


ATTACHED CODE (for BUG GROUPS 2 and 3)

import pygtk
pygtk.require("2.0")
import gtk, gobject

tasks =  {
    "Buy groceries": "Go to Asda after work",
    "Do some programming": "Remember to update your software",
    "Power up systems": "Turn on the client but leave the server",
    "Watch some tv": "Remember to catch ER"
    } 

class GUI_Controller:
    """ The GUI class is the controller for our application """
    def __init__(self):
        # setup the main window
        self.root = gtk.Window(type=gtk.WINDOW_TOPLEVEL)
        self.root.set_title("CellRenderer Example")
        self.root.connect("destroy", self.destroy_cb)
        # Get the model and attach it to the view
        self.mdl = Store.get_model()
        self.view = Display.make_view( self.mdl )
        # Add our view into the main window
        self.root.add(self.view)
        self.root.show_all()
        return
    def destroy_cb(self, *kw):
        """ Destroy callback to shutdown the app """
        gtk.main_quit()
        return
    def run(self):
        """ run is called to set off the GTK mainloop """
        gtk.main()

class InfoModel:
    """ The model class holds the information we want to display """
    def __init__(self):
        """ Sets up and populates our gtk.TreeStore """
        self.tree_store = gtk.TreeStore( gobject.TYPE_STRING,
                                         gobject.TYPE_BOOLEAN )
        # places the global people data into the list
        # we form a simple tree.
        for item in tasks.keys():
            parent = self.tree_store.append( None, (item, None) )
            self.tree_store.append( parent, (tasks[item],None) )
        return
    def get_model(self):
        """ Returns the mo
del """
        if self.tree_store:
            return self.tree_store 
        else:
            return None

class DisplayModel:
    """ Displays the Info_Model model in a view """
    def make_view( self, model ):
        """ Form a view for the Tree Model """
        self.view = gtk.TreeView( model )
        self.view.set_headers_visible(True)
        self.view.set_fixed_height_mode(False)
        ######### COMMENT OUT THE FOLLOWING LINE, IT INCORRECTLY FAILS ###########
        self.view.set_property("show-expanders", True)
        # setup the text cell renderer and allows these
        # cells to be edited.
        self.renderer = gtk.CellRendererText()
        self.renderer.set_property( 'editable', True )
        self.renderer.connect( 'edited', self.col0_edited_cb, model )
        # The toggle cellrenderer is setup and we allow it to be
        # changed (toggled) by the user.
        self.renderer1 = gtk.CellRendererToggle()
        self.renderer1.set_property('activatable', True)
        self.renderer1.connect( 'toggled', self.col1_toggled_cb, model )
        
        # Connect column0 of the display with column 0 in our list model
        # The renderer will then display whatever is in column 0 of
        # our model .
        self.column0 = gtk.TreeViewColumn("Name", self.renderer, text=0)
        self.column0.set_reorderable(True)
        self.column0.set_resizable(gtk.TREE_VIEW_COLUMN_FIXED)
        
        # The columns active state is attached to the second column
        # in the model.  So when the model says True then the button
        # will show as active e.g on.
        self.column1 = gtk.TreeViewColumn("Complete", self.renderer1 )
        self.column1.add_attribute( self.renderer1, "active", 1)
        self.column1.set_reorderable(True)
        self.column1.set_resizable(gtk.TREE_VIEW_COLUMN_FIXED)
        self.view.append_column( self.column0 )
        self.view.append_column( self.column1 )
        return self.view
    def col0_edited_cb( self, cell, path, new_text, model ):
        """
        Called when a text cell is edited.  It puts the new text
        in the model so that it is displayed properly.
        """
        print "Change '%s' to '%s'" % (model[path][0], new_text)
        model[path][0] = new_text
        return
    def col1_toggled_cb( self, cell, path, model ):
        """
        Sets the toggled state on the toggle button to true or false.
        """
        model[path][1] = not model[path][1]
        print "Toggle '%s' to: %s" % (model[path][0], model[path][1],)
        return

if __name__ == '__main__':
    Store = InfoModel()	
    Display = DisplayModel()
    myGUI = GUI_Controller()
    myGUI.run()
Comment 1 Sean Luke (reporter) 2007-03-20 01:55:55 UTC
*** Bug 1155 has been marked as a duplicate of this bug. ***
Comment 2 Tommi Komulainen nokia 2007-03-22 17:47:48 UTC
Created an attachment (id=254) [details]
testcase
Comment 3 Tommi Komulainen nokia 2007-03-22 17:59:58 UTC
Too many bugs in one report, resolving as invalid.

Separated the bugs to
  bug 1159
  bug 1160
  bug 1161
  bug 1162
  bug 1163
  bug 1164
  bug 1165
Comment 4 Jake Kunnari 2007-11-28 12:50:26 UTC
Closing. Bug has been marked as INVALID. If problem/bug still exists, please
reopen it with proper comments.