Help-Site Computer Manuals
  Algorithms & Data Structures   Programming Languages   Revision Control
  Cameras   Computers   Displays   Keyboards & Mice   Motherboards   Networking   Printers & Scanners   Storage
  Windows   Linux & Unix   Mac

A simple data model with Gtk::Clist views

Gtk::CListModel - A simple data model with Gtk::Clist views


Gtk::CListModel - A simple data model with Gtk::Clist views


        my $model = tie @data, 'Gtk::CListModel', 

                titles => ["Fruit", "Price", "Quantity"];

        # all data manipulation is done on @data now

        push @data, ["Oranges", 5, 16];

        # Create a view (a Gtk::Clist widget) to represent the data

        # Include only some of the data in the view (fruit type and price)

        # Also, do not include fruits that cost more than 6 price units.

        my $clist = $model->create_view('main', 

                titles => ['Fruit', 'Price'],

                filter => sub {$_[1] > 6? () : @_});



Gtk::CListModel lets you keep your data in a perl array and easily create a numer of different views on that data using Gtk::CList widgets. The views can show only some of the columns, or a subset of the data or even munge the data with user-defined filters.

All the data manipulations will be performed on a tied array and the changes will be propagated to the views created for that data.

To create the model use tie:

        my $model = tie @data, 'Gtk::CListModel', 

                titles => ["head1", "head2",...];

The titles attribute should be an array reference with the titles of the columns of data. They will be used also for the default titles in the views.

You can also provide the initial data using the data attribute. Remember that the data elements you insert and retreive from the @data array are array references with as many items as the columns in the model. The order is the one defined by the titles attribute.

Later you can manipulate the @data array with the usual perl array operators, push, splice and so on.


create_view ($name[, %options])
Create a Gtk::Clist widget that represents the data in the model. The name can be used later to disconnect the view from the data.

Options can be one of the following:

  • titles
  • An array reference of the titles of the columns to display in the list in the order they should appear in the view. The default is the titles specified at the model creation.

  • filter
  • A function that can manipulate the data just before it is inserted in the Gtk::CList. The function will receive the data and can either make a copy and modify the data or return an empty list. In the latter case the data will not be added to the view or, if the corresponding row was already present, it will be removed from the view.

  • postfilter
  • A function that receives the view, the row and the data that was just inserted/modified in the view. By default all the data is inserted in the views as text. This filter can be used to display pixmaps, for example or do any other kind of manipulations on the Gtk::CList row.

remove_view ($name)
Disconnect the named view from the data. The current data displayed in the view will not be affected, but changes in the model will not propagate to this view anymore.

map_row ($clist, $row)
Get the index in the data array cooresponding to the row displayed in the Gtk::CList widget.


Molaro Paolo