// We need to filter the calls to functions that would normally // connect directly to the itemChanged( QStandardItem* ) signal // because some would-be slots delete the item in question. // So, the signal connects here and this function calls the // appropriate item-handling functions. void HeadingSelector::ModelItemFilter(QStandardItem *item) { Q_ASSERT(item); if (!item->isCheckable()) { // Heading changed UpdateOneHeadingTitle(item, item->text()); return; } // Get the absolute row of the index in the table for later re-selection QModelIndex current_index = item->index().sibling(item->index().row(), 0); int row = GetAbsoluteRowForIndex(current_index); // Do the actual update of the list UpdateHeadingInclusion(item); QModelIndex new_index = SelectAbsoluteRow(row); // Expand the item and all its children if (new_index.isValid()) { QStandardItem *new_item = m_TableOfContents.itemFromIndex(new_index); QStandardItem *parent_item = GetActualItemParent(new_item); if (new_item) { for (int i = 0; i < parent_item->rowCount(); i++) { if (i >= new_item->row()) { ExpandChildren(parent_item->child(i)); } } } } }
// We need to filter the calls to functions that would normally // connect directly to the itemChanged( QStandardItem* ) signal // because some would-be slots delete the item in question. // So, the signal connects here and this function calls the // appropriate item-handling functions. void HeadingSelector::ModelItemFilter( QStandardItem *item ) { Q_ASSERT( item ); if ( item->isCheckable() ) UpdateHeadingInclusion( item ); }