void QgsAttributeActionDialog::insertRow( int row, const QgsAction& action )
{
  QTableWidgetItem* item;
  mAttributeActionTable->insertRow( row );

  // Type
  item = new QTableWidgetItem( textForType( action.type() ) );
  item->setData( Qt::UserRole, action.type() );
  item->setFlags( item->flags() & ~Qt::ItemIsEditable );
  mAttributeActionTable->setItem( row, Type, item );

  // Description
  mAttributeActionTable->setItem( row, Description, new QTableWidgetItem( action.name() ) );

  // Short Title
  mAttributeActionTable->setItem( row, ShortTitle, new QTableWidgetItem( action.shortTitle() ) );

  // Action text
  mAttributeActionTable->setItem( row, ActionText, new QTableWidgetItem( action.action() ) );

  // Capture output
  item = new QTableWidgetItem();
  item->setFlags( item->flags() & ~( Qt::ItemIsEditable ) );
  item->setCheckState( action.capture() ? Qt::Checked : Qt::Unchecked );
  mAttributeActionTable->setItem( row, Capture, item );

  // Capture output
  item = new QTableWidgetItem();
  item->setFlags( item->flags() & ~( Qt::ItemIsEditable ) );
  item->setCheckState( action.showInAttributeTable() ? Qt::Checked : Qt::Unchecked );
  mAttributeActionTable->setItem( row, ShowInAttributeTable, item );

  // Icon
  QIcon icon = action.icon();
  QTableWidgetItem* headerItem = new QTableWidgetItem( icon, "" );
  headerItem->setData( Qt::UserRole, action.iconPath() );
  mAttributeActionTable->setVerticalHeaderItem( row, headerItem );

  updateButtons();
}