#! /usr/bin/perl -w use strict; use Gtk2 '-init'; use Glib qw/TRUE FALSE/; use Data::Dumper; my $window = Gtk2::Window->new( 'toplevel' ); $window->signal_connect( 'delete_event' => sub { Gtk2->main_quit; } ); $window->set_border_width( 5 ); $window->set_position( 'center_always' ); #this vbox will geturn the bulk of the gui my $vbox = &ret_vbox(); #add and show the vbox $window->add( $vbox ); $window->show(); #our main event-loop Gtk2->main(); sub ret_vbox { my $vbox = Gtk2::VBox->new( FALSE, 5 ); my $sw = Gtk2::ScrolledWindow->new( undef, undef ); $sw->set_shadow_type( 'etched-out' ); $sw->set_policy( 'automatic', 'automatic' ); $sw->set_size_request( 300, 300 ); $sw->set_border_width( 5 ); my $tree_store = Gtk2::TreeStore->new( qw/Glib::String Glib::String / ); #fill it with arbitry data foreach ( 1 .. 30 ) { my $parent_nr = $_; #the iter is a pointer in the treestore. We #use to add data. my $iter = $tree_store->append( undef ); $tree_store->set( $iter, 0 => "Parent $parent_nr" ); $tree_store->set( $iter, 1 => "----------" ); foreach ( 1 .. 3 ) { my $iter_child = $tree_store->append( $iter ); $tree_store->set( $iter_child, 0 => "Child $_ of Parent $parent_nr" ); } } my $tree_view = Gtk2::TreeView->new( $tree_store ); $tree_view->set_reorderable( 1 ); #drag and drop reordering my $tree_column = Gtk2::TreeViewColumn->new(); $tree_column->set_title( "Click to sort" ); my $renderer = Gtk2::CellRendererText->new; #add a data rider to store column $renderer->{ 'column' } = 0; $renderer->set_property( 'editable', TRUE ); $renderer->signal_connect( edited => \&cell_edited, $tree_store ); $tree_column->pack_start( $renderer, FALSE ); $tree_column->add_attribute( $renderer, text => 0 ); $tree_view->append_column( $tree_column ); #secon column my $tree_column1 = Gtk2::TreeViewColumn->new(); $tree_column1->set_title( "-----------------" ); my $renderer1 = Gtk2::CellRendererText->new; #add a data rider to store column # $renderer1->{ 'column' } = 1; #1 way $renderer1->set_data('column',1); $renderer1->set_property( 'editable', TRUE ); $renderer1->signal_connect( edited => \&cell_edited, $tree_store ); $tree_column1->pack_end( $renderer1, FALSE ); $tree_column1->add_attribute( $renderer1, text => 1 ); $tree_view->append_column( $tree_column1 ); $tree_view->set_search_column( 0 ); $tree_column1->set_sort_column_id( 0 ); $tree_view->set_reorderable( TRUE ); $sw->add( $tree_view ); $vbox->pack_start( $sw, TRUE, TRUE, 0 ); $vbox->show_all(); return $vbox; } ####################################################################### sub cell_edited { print "@_\n"; my ( $cell, $path_string, $new_text, $model ) = @_; # print Dumper( [ \$cell ] ), "\n"; # my @props = $cell->list_properties; # print join "\n",@props; # print "@props\n\n"; # foreach my $prop( @props ){ # print Dumper([\$prop]),"\n"; # } print "$path_string\n"; my $path = Gtk2::TreePath->new_from_string( $path_string ); my @indices = $path->get_indices; print "indices->@indices\n"; #Glib::Object::get_data(object, key) #my $column = $cell->get_data('column'); # this is what I did to get the column number # my $column = $cell->{ 'column' }; my $column = $cell->get_data('column'); print "column->$column\n"; my $iter = $model->get_iter( $path ); $model->set_value( $iter, $column, $new_text ); return FALSE; }