void ItemDelegate::setIndexWidget(const QModelIndex &index, ItemWidget *w) { reset(&m_cache[index.row()], w); if (w == NULL) return; QWidget *ww = w->widget(); if (!m_antialiasing) { QFont f = ww->font(); f.setStyleStrategy(QFont::NoAntialias); ww->setFont(f); foreach (QWidget *child, ww->findChildren<QWidget *>("item_child")) child->setFont(f); } // Try to get proper size by showing item momentarily. ww->show(); w->updateSize(m_maxSize, m_idealWidth); ww->hide(); ww->installEventFilter(this); w->setCurrent(m_view->currentIndex() == index); emit rowSizeChanged(); }
bool ItemDelegate::eventFilter(QObject *, QEvent *event) { // resize event for items if ( event->type() == QEvent::Resize ) emit rowSizeChanged(); return false; }
void ItemDelegate::dataChanged(const QModelIndex &a, const QModelIndex &b) { // recalculating sizes of many items is expensive (when searching) // - assume that highlighted (matched) text has same size // - recalculate size only if item edited int row = a.row(); if ( row == b.row() ) { reset(&m_cache[row]); emit rowSizeChanged(); } }
void ClipboardBrowser::connectModelAndDelegate() { Q_ASSERT(&m != model()); // set new model QAbstractItemModel *oldModel = model(); setModel(&m); delete oldModel; // delegate for rendering and editing items setItemDelegate(&d); connect( &m, SIGNAL(dataChanged(QModelIndex,QModelIndex)), SLOT(onDataChanged(QModelIndex,QModelIndex)) ); connect( &m, SIGNAL(tabNameChanged(QString)), SLOT(onTabNameChanged(QString)) ); connect( &m, SIGNAL(unloaded()), SLOT(onModelUnloaded()) ); // update on change connect( &m, SIGNAL(rowsInserted(QModelIndex, int, int)), SLOT(onModelDataChanged()) ); connect( &m, SIGNAL(rowsAboutToBeRemoved(QModelIndex,int,int)), SLOT(onModelDataChanged()) ); connect( &m, SIGNAL(rowsInserted(QModelIndex, int, int)), SLOT(onItemCountChanged()) ); connect( &m, SIGNAL(rowsRemoved(QModelIndex,int,int)), SLOT(onItemCountChanged()) ); connect( &m, SIGNAL(rowsAboutToBeMoved(QModelIndex, int, int, QModelIndex, int)), SLOT(onModelDataChanged()) ); connect( &m, SIGNAL(dataChanged(QModelIndex,QModelIndex)), SLOT(onModelDataChanged()) ); connect( &d, SIGNAL(rowSizeChanged()), SLOT(updateCurrentPage()) ); connect( &m, SIGNAL(rowsInserted(QModelIndex, int, int)), &d, SLOT(rowsInserted(QModelIndex, int, int)) ); connect( &m, SIGNAL(rowsAboutToBeRemoved(QModelIndex,int,int)), &d, SLOT(rowsRemoved(QModelIndex,int,int)) ); connect( &m, SIGNAL(rowsAboutToBeMoved(QModelIndex, int, int, QModelIndex, int)), &d, SLOT(rowsMoved(QModelIndex, int, int, QModelIndex, int)) ); connect( &m, SIGNAL(dataChanged(QModelIndex,QModelIndex)), &d, SLOT(dataChanged(QModelIndex,QModelIndex)) ); updateCurrentPage(); }