void BlogListDelegate::paint ( QPainter * painter, const QStyleOptionViewItem & option, const QModelIndex & index) const { BlogListWidget * listWidget = qobject_cast<BlogListWidget *>(this->parent()); if (listWidget == NULL) return; QStyle * style = listWidget->style(); if (style == NULL) return; painter->save(); QFont itemFont(painter->font()); style->drawPrimitive(QStyle::PE_PanelItemViewItem, &option, painter, listWidget); QPixmap pixmap = qvariant_cast<QPixmap>(index.data(IconRole)); QString title = index.data(TitleRole).toString(); QString date = index.data(DateRole).toString(); QString author = index.data(AuthorRole).toString(); QString intro = index.data(IntroRole).toString(); // QRect rect; int imageSpace = ImageSpace + 10; // TITLE painter->setPen(listWidget->titleTextColor()); QFont titleFont(listWidget->titleTextFontFamily()); titleFont.setPixelSize(pixelSize(listWidget->titleTextFontSize())); painter->setFont(titleFont); QRect rect = option.rect.adjusted(imageSpace, TopSpace, 0, 0); style->drawItemText(painter, rect, Qt::AlignLeft, option.palette, true, title); QFontMetrics titleFontMetrics(titleFont); // INTRO painter->setPen(listWidget->introTextColor()); QFont introFont(listWidget->introTextFontFamily()); introFont.setPixelSize(pixelSize(listWidget->introTextFontSize())); painter->setFont(introFont); rect = option.rect.adjusted(imageSpace, TopSpace + titleFontMetrics.lineSpacing() + pixelSize(listWidget->titleTextExtraLeading()) , 0, 0); style->drawItemText(painter, rect, Qt::AlignLeft, option.palette, true, intro); QFontMetrics introFontMetrics(introFont); // DATE painter->setPen(listWidget->dateTextColor()); QFont font(listWidget->dateTextFontFamily()); font.setPixelSize(pixelSize(listWidget->dateTextFontSize())); painter->setFont(font); rect = option.rect.adjusted(imageSpace, TopSpace + titleFontMetrics.lineSpacing() + introFontMetrics.lineSpacing() + pixelSize(listWidget->introTextExtraLeading()), 0, 0); style->drawItemText(painter, rect, Qt::AlignLeft, option.palette, true, date); QFontMetrics dateTextFontMetrics(font); // AUTHOR QRect textRect = style->itemTextRect(dateTextFontMetrics, option.rect, Qt::AlignLeft, true, date); rect = option.rect.adjusted(imageSpace + textRect.width() + 7, TopSpace + titleFontMetrics.lineSpacing() + introFontMetrics.lineSpacing() + pixelSize(listWidget->introTextExtraLeading()), 0, 0); style->drawItemText(painter, rect, Qt::AlignLeft, option.palette, true, author); if (!pixmap.isNull()) { //ic.paint(painter, option.rect, Qt::AlignVCenter|Qt::AlignLeft); style->drawItemPixmap(painter, option.rect.adjusted(0, TopSpace, 0, -TopSpace), Qt::AlignLeft, pixmap); } painter->restore(); }
void MpcImportWindow::populateCandidateObjects(QList<SsoElements> objects) { candidatesForAddition.clear(); //Get a list of the current objects QHash<QString,QString> defaultSsoIdentifiers = ssoManager->getDefaultSsoIdentifiers(); QHash<QString,QString> loadedSsoIdentifiers = ssoManager->listAllLoadedSsoIdentifiers(); //Separating the objects into visual groups in the list int newDefaultSsoIndex = 0; int newLoadedSsoIndex = 0; int newNovelSsoIndex = 0; int insertionIndex = 0; QStandardItemModel * model = candidateObjectsModel; model->clear(); model->setColumnCount(1); foreach (SsoElements object, objects) { QString name = object.value("name").toString(); if (name.isEmpty()) continue; QString group = object.value("section_name").toString(); if (group.isEmpty()) continue; //Prevent name conflicts between asteroids and moons if (loadedSsoIdentifiers.contains(name)) { if (loadedSsoIdentifiers.value(name) != group) { name.append('*'); object.insert("name", name); } } QStandardItem * item = new QStandardItem(); item->setText(name); item->setFlags(Qt::ItemIsUserCheckable | Qt::ItemIsEnabled); item->setCheckState(Qt::Unchecked); if (defaultSsoIdentifiers.contains(name)) { //Duplicate of a default solar system object QFont itemFont(item->font()); itemFont.setBold(true); item->setFont(itemFont); candidatesForUpdate.append(object); insertionIndex = newDefaultSsoIndex; newDefaultSsoIndex++; newLoadedSsoIndex++; newNovelSsoIndex++; } else if (loadedSsoIdentifiers.contains(name)) { //Duplicate of another existing object QFont itemFont(item->font()); itemFont.setItalic(true); item->setFont(itemFont); candidatesForUpdate.append(object); insertionIndex = newLoadedSsoIndex; newLoadedSsoIndex++; newNovelSsoIndex++; } else { candidatesForAddition.append(object); insertionIndex = newNovelSsoIndex; newNovelSsoIndex++; } model->insertRow(insertionIndex, item); }