---
name: "Clutter::Model"
section: "3pm"
platform: "linux"
package: "libclutter-perl"
version: "1.002-1"
release: "Debian 6.0 (Squeeze)"
platforms: ["linux"]
url: "https://new.carta.tech/Clutter::Model"
---

# Clutter::Model(3pm)

A generic Model base class

## NAME

Clutter::Model - A generic Model base class

## DESCRIPTION

**Clutter::Model** is a generic list model API which can be used to implement the model-view-controller architectural pattern in Clutter.

Clutter::Model provides the base API for manipulating and iterating over strongly typed storages.

## HIERARCHY

```
  Glib::Object
  +----Clutter::Model
```

## METHODS

### boolean = $model-\>append ($column, $value, ...)

- •

  ... (list)

### string or undef = $model-\>get\_column\_name ($column)

- •

  `$column` (integer)

### string = $model-\>get\_column\_type ($column)

- •

  `$column` (integer)

### boolean = $model-\>filter\_iter ($iter)

- •

  `$iter` (Clutter::Model::Iter)

### boolean = $model-\>filter\_row ($row)

- •

  `$row` (integer)

### $model-\>set\_filter ($func, $data=undef)

- •

  `$func` (scalar)

- •

  `$data` (scalar)

### iter = $model-\>get\_first\_iter

### $model-\>foreach ($func, $data=undef)

- •

  `$func` (scalar)

- •

  `$data` (scalar)

### $model-\>insert ($row, $column, $value, ...)

- •

  `$row` (integer)

- •

  ... (list)

### iter = $model-\>get\_iter\_at\_row ($row)

- •

  `$row` (integer)

### iter = $model-\>get\_last\_iter

### integer = $model-\>get\_n\_columns

### integer = $model-\>get\_n\_rows

### boolean = $model-\>prepend ($column, $value, ...)

- •

  ... (list)

### $model-\>remove ($row)

- •

  `$row` (integer)

### $model-\>resort

### $model-\>set\_sort ($column, $func, $data=undef)

- •

  `$column` (integer)

- •

  `$func` (scalar)

- •

  `$data` (scalar)

### integer = $model-\>get\_sorting\_column

### $model-\>set\_sorting\_column ($column)

- •

  `$column` (integer)

## CREATING A CUSTOM MODEL

### MODEL

```
  package MyModel;
  use Clutter;
  use Glib::Object::Subclass
      'Clutter::Model';
```

- **rows = GET\_N\_ROWS ($model)**

  - **columns = GET\_N\_COLUMNS ($model)**

  - **type = GET\_COLUMN\_TYPE ($model)**

  - **name = GET\_COLUMN\_NAME ($model)**

  - **iterator = INSERT\_ROW ($model, $position)**

  ```
    sub INSERT_ROW {
        my ($model, $position) = @_;
        if ($position > 0)     {
          # if position is a positive integer, set at the given position
          @{$model->{data}}[$position] = { col1 => undef, col2 => "Default", };
        }
        elsif ($position == 0) {
          # if position is zero, then prepend
        }
        else                   {
          # if position is a negative integer, then append
          push @{$model->{data}}, { col1 => undef, col2 => undef, };
          $position = scalar @{$model->{data}};
        }
        # return the iterator for the new row
        return Glib::Object->new('MyModel::Iter',
                                 model => $model,
                                 row   => $position);
    }
  ```

- **REMOVE\_ROW ($model, $position)**

  - **iterator = GET\_ITER\_AT\_ROW ($model, $position)**

  ### ITERATORS

```
  package MyModel::Iter;
  use Clutter;
  use MyModel;
  use Glib::Object::Subclass
      'Clutter::Model::Iter';
```

- **boolean = IS\_LAST ($iter)**

  - **NEXT ($iter)**

  - **boolean = IS\_FIRST ($iter)**

  - **PREV ($iter)**

  - **model = GET\_MODEL ($iter)**

  - **row = GET\_ROW ($iter)**

  - **value = GET\_VALUE ($iter, $column)**

  - **SET\_VALUE ($iter, $column,** ***$value*****)**

  ## PROPERTIES

- 'filter-set' (boolean : readable / private)

  Whether the model has a filter

## SIGNALS

- **row-added** (Clutter::Model, Clutter::Model::Iter)

  - **row-removed** (Clutter::Model, Clutter::Model::Iter)

  - **row-changed** (Clutter::Model, Clutter::Model::Iter)

  - **sort-changed** (Clutter::Model)

  - **filter-changed** (Clutter::Model)

  ## SEE ALSO

Clutter::ListModel

## COPYRIGHT

Copyright (C) 2006, 2007, 2008  OpenedHand Ltd

Copyright (C) 2009  Intel Corporation

This module is free software; you can redistribute it and/or modify it under the terms of either:

- •

  the GNU Lesser General Public Library version 2.1; or

- •

  the Artistic License, version 2.0.

See Clutter for the full copyright notice.
