void ListItemDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const { QRect r = option.rect; //Color: #C4C4C4 QPen linePen(QColor::fromRgb(211,211,211), 1, Qt::SolidLine); //Color: #005A83 QPen lineMarkedPen(QColor::fromRgb(0,90,131), 1, Qt::SolidLine); //Color: #333 QPen fontPen(QColor::fromRgb(51,51,51), 1, Qt::SolidLine); //Color: #fff QPen fontMarkedPen(Qt::white, 1, Qt::SolidLine); if(option.state & QStyle::State_Selected) { QLinearGradient gradientSelected(r.left(),r.top(),r.left(),r.height()+r.top()); gradientSelected.setColorAt(0.0, QColor::fromRgb(119,213,247)); gradientSelected.setColorAt(0.9, QColor::fromRgb(27,134,183)); gradientSelected.setColorAt(1.0, QColor::fromRgb(0,120,174)); painter->setBrush(gradientSelected); painter->drawRect(r); //BORDER painter->setPen(lineMarkedPen); painter->drawLine(r.topLeft(),r.topRight()); painter->drawLine(r.topRight(),r.bottomRight()); painter->drawLine(r.bottomLeft(),r.bottomRight()); painter->drawLine(r.topLeft(),r.bottomLeft()); painter->setPen(fontMarkedPen); } else { //BACKGROUND //ALTERNATING COLORS painter->setBrush( (index.row() % 2) ? Qt::white : QColor(252,252,252) ); painter->drawRect(r); //BORDER painter->setPen(linePen); painter->drawLine(r.topLeft(),r.topRight()); painter->drawLine(r.topRight(),r.bottomRight()); painter->drawLine(r.bottomLeft(),r.bottomRight()); painter->drawLine(r.topLeft(),r.bottomLeft()); painter->setPen(fontPen); } //GET TITLE, DESCRIPTION AND ICON QIcon icon = QIcon(qvariant_cast<QPixmap>(index.data(Qt::DecorationRole))); QString title = index.data(Qt::DisplayRole).toString(); //QString description = index.data(Qt::UserRole + 1).toString(); int imageSpace = 10; if (!icon.isNull()) { //ICON QRect iconRect = option.rect.adjusted(4, 4, -4, -4); icon.paint(painter, iconRect, Qt::AlignVCenter|Qt::AlignCenter); imageSpace = 55; } //TITLE r = option.rect.adjusted(4, 0, 0, 0); painter->setFont( QFont( "Lucida Grande", 9, QFont::Normal ) ); painter->drawText(r.left(), r.top(), r.width(), r.height(), Qt::AlignBottom|Qt::AlignLeft, title, &r); /*QStyleOptionButton check_box_style_option; check_box_style_option.state |= QStyle::State_Enabled; check_box_style_option.rect = QRect(r.left(), r.top(), 32, 32); QApplication::style()->drawControl(QStyle::CE_PushButton, &check_box_style_option, painter);*/ /*//DESCRIPTION r = option.rect.adjusted(imageSpace, 30, -10, 0); painter->setFont( QFont( "Lucida Grande", 9, QFont::Normal ) ); painter->drawText(r.left(), r.top(), r.width(), r.height(), Qt::AlignLeft, description, &r);*/ }
void NickListDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const { // save painter->save(); QString strNicklistNickColor = Settings::instance()->get("nicklist_nick_color"); QString strNicklistSelectedNickColor = Settings::instance()->get("nicklist_selected_nick_color"); QString strNicklistBusyNickColor = Settings::instance()->get("nicklist_busy_nick_color"); QString strNicklistGradient1Color = Settings::instance()->get("nicklist_gradient_1_color"); QString strNicklistGradient2Color = Settings::instance()->get("nicklist_gradient_2_color"); QPen fontPen(QColor(strNicklistNickColor), 1, Qt::SolidLine); QPen selectedFontPen(QColor(strNicklistSelectedNickColor), 1, Qt::SolidLine); QPen busyPen(QColor(strNicklistBusyNickColor), 1, Qt::SolidLine); QColor cUserSexMale = QColor("#71A3FF"); QColor cUserSexFemale = QColor("#FF49BF"); QColor cUserSexUnknown = QColor("#999999"); QColor cGradient1 = QColor(strNicklistGradient1Color); QColor cGradient2 = QColor(strNicklistGradient2Color); int marginLeft = 3; int marginRight = 3; bool selected; if (option.state & QStyle::State_Selected) { QLinearGradient backgroundGradient(option.rect.left(), option.rect.top(), option.rect.left(), option.rect.bottom()); backgroundGradient.setColorAt(0.0, cGradient1); backgroundGradient.setColorAt(1.0, cGradient2); painter->fillRect(option.rect, QBrush(backgroundGradient)); painter->setPen(selectedFontPen); selected = true; } /* #ifndef Q_OS_WIN else if (option.state & QStyle::State_MouseOver) { painter->fillRect(option.rect, option.palette.highlight()); painter->setPen(selectedFontPen); selected = true; } #endif */ else { painter->setPen(fontPen); selected = false; } QString nick = index.data(Qt::DisplayRole).toString(); QString modes = index.data(NickListModesRole).toString(); QString userAvatar = index.data(NickListAvatarUrlRole).toString(); QChar userSex = index.data(NickListSexRole).toChar(); QString channel = index.data(NickListChannelRole).toString(); bool busy = false; bool statusIcons = true; QList<QIcon> icons; if (modes.contains(FLAG_BUSY)) { busy = true; } if ((modes.contains(FLAG_CAM_PRIV)) && (channel.at(0) == '^')) { icons << QIcon(":/images/privcam.png"); } if (modes.contains(FLAG_CAM_PUB)) { icons << QIcon(":/images/pubcam.png"); } if (modes.contains(FLAG_VOICE)) { icons << QIcon(":/images/voice.png"); } if (modes.contains(FLAG_SCREENER)) { icons << QIcon(":/images/screener.png"); } if (modes.contains(FLAG_MOD)) { icons << QIcon(":/images/mod.png"); } if (modes.contains(FLAG_HALFOP)) { icons << QIcon(":/images/halfop.png"); } if (modes.contains(FLAG_OP)) { icons << QIcon(":/images/op.png"); } if (modes.contains(FLAG_OWNER)) { icons << QIcon(":/images/owner.png"); } if (modes.contains(FLAG_DEV)) { icons << QIcon(":/images/dev.png"); } else if (modes.contains(FLAG_BOT)) { icons << QIcon(":/images/bot.png"); } else if (modes.contains(FLAG_ADMIN)) { icons << QIcon(":/images/admin.png"); } // avatar if (Themes::instance()->isCurrentWithNicklistAvatar()) { // is valid avatar if (userAvatar.isEmpty()) { if (nick.at(0) == '~') userAvatar = Avatar::instance()->getEmptyUnregisteredUserAvatar(); else userAvatar = Avatar::instance()->getEmptyRegisteredUserAvatar(); } else userAvatar = Avatar::instance()->getAvatarPath(userAvatar); QIcon avatar(userAvatar); int x = option.rect.left(); int y = option.rect.top(); int w = 35; int h = 35; avatar.paint(painter, x, y, w, h); } // sex if ((nick.at(0) != '~') && (Themes::instance()->isCurrentWithNicklistAvatar())) { if (userSex == USER_SEX_MALE || userSex == USER_SEX_FEMALE) { QColor cSexColor; if (userSex == USER_SEX_MALE) cSexColor = cUserSexMale; else if (userSex == USER_SEX_FEMALE) cSexColor = cUserSexFemale; else cSexColor = cUserSexUnknown; QRect rect = option.rect; int x = rect.x()+35+2; int y = rect.top()+1; int w = 2; int h = 35-2; painter->fillRect(x, y, w, h, cSexColor); } } // nick if (Themes::instance()->isCurrentWithNicklistAvatar()) { QRect rect = option.rect; // with avatars if ((busy) && (!selected)) painter->setPen(busyPen); // gray QFont font = option.font; font.setWeight(busy ? QFont::Light : QFont::Normal); font.setItalic(busy ? true : false); painter->setFont(font); if (nick.at(0) != '~') rect.setX(rect.x()+35+5+5); else rect.setX(rect.x()+35+5); painter->drawText(rect, Qt::AlignVCenter | Qt::AlignLeft, nick); } else { QRect rect = option.rect; rect.setX(rect.x() + marginLeft); // without avatars if ((busy) && (!selected)) painter->setPen(busyPen); // gray QFont font = option.font; font.setWeight(busy ? QFont::Light : QFont::Normal); font.setItalic(busy ? true : false); painter->setFont(font); painter->drawText(rect, Qt::AlignVCenter | Qt::AlignLeft, nick); } // status icons if (statusIcons) { QRect rect = option.rect; rect.setX(rect.right() - marginRight); foreach (const QIcon &icon, icons) { rect.setX(rect.x() - 16); icon.paint(painter, rect, Qt::AlignVCenter | Qt::AlignAbsolute, QIcon::Normal, QIcon::On); } }
void ListDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const { QRect r = option.rect; //Color: #C4C4C4 QPen linePen(QColor::fromRgb(211, 211, 211), 2, Qt::SolidLine); //Color: #005A83 QPen lineMarkedPen(QColor::fromRgb(0, 90, 131), 1, Qt::SolidLine); //Color: #333 QPen fontPen(QColor::fromRgb(51, 51, 51), 1, Qt::SolidLine); //Color: #fff QPen fontMarkedPen(Qt::white, 1, Qt::SolidLine); //BORDER painter->setPen(linePen); painter->drawLine(r.topLeft(), r.topRight()); painter->drawLine(r.topRight(), r.bottomRight()); painter->drawLine(r.bottomLeft(), r.bottomRight()); painter->drawLine(r.topLeft(), r.bottomLeft()); if(option.state & QStyle::State_Selected) { QLinearGradient gradientSelected(r.left(), r.top(), r.left(), r.height() + r.top()); gradientSelected.setColorAt(0.0, QColor::fromRgb(119, 213, 247)); gradientSelected.setColorAt(0.9, QColor::fromRgb(27, 134, 183)); gradientSelected.setColorAt(1.0, QColor::fromRgb(0, 120, 174)); painter->setBrush(gradientSelected); painter->drawRect(r); //BORDER painter->setPen(lineMarkedPen); painter->drawLine(r.topLeft(), r.topRight()); painter->drawLine(r.topRight(), r.bottomRight()); painter->drawLine(r.bottomLeft(), r.bottomRight()); painter->drawLine(r.topLeft(), r.bottomLeft()); painter->setPen(fontMarkedPen); } else { //BACKGROUND //ALTERNATING COLORS painter->setBrush((index.row() % 2) ? Qt::white : QColor(252, 252, 252)); painter->drawRect(r); //BORDER painter->setPen(linePen); painter->drawLine(r.topLeft(), r.topRight()); painter->drawLine(r.topRight(), r.bottomRight()); painter->drawLine(r.bottomLeft(), r.bottomRight()); painter->drawLine(r.topLeft(), r.bottomLeft()); painter->setPen(fontPen); } //GET TITLE, DESCRIPTION AND ICON QIcon ic = QIcon(qvariant_cast<QPixmap>(index.data(Qt::DecorationRole))); QString title = index.data(Qt::DisplayRole).toString(); QString description = index.data(CP_DESC_ROLE).toString(); int imageSpace = 10; if(!ic.isNull()) { //ICON r = option.rect.adjusted(5, 10, -10, -10); ic.paint(painter, r, Qt::AlignVCenter | Qt::AlignLeft); imageSpace = 80; } //TITLE r = option.rect.adjusted(imageSpace, 0, -10, -30); painter->setFont(QFont("Lucida Grande", PGEDefaultFontSize + 2, QFont::Bold)); painter->drawText(r.left(), r.top(), r.width(), r.height(), Qt::AlignBottom | Qt::AlignLeft, title, &r); //DESCRIPTION r = option.rect.adjusted(imageSpace, 30, -10, 30); painter->setFont(QFont("Lucida Grande", PGEDefaultFontSize, QFont::Normal)); painter->drawText(r.left(), r.top(), r.width(), r.height(), Qt::AlignLeft, description, &r); }
void ListDelegate::paint ( QPainter * painter, const QStyleOptionViewItem & option, const QModelIndex & index ) const{ QRect oR = option.rect; //oR.setHeight(option.rect.height() + 15); QRect r = oR; //Color: #C4C4C4 QPen linePen(QColor::fromRgb(211,211,211), 0, Qt::SolidLine); //Color: #005A83 QPen lineMarkedPen(QColor::fromRgb(0,90,131), 0, Qt::SolidLine); //Color: #333 QPen fontPen(QColor::fromRgb(51,51,51), 1, Qt::SolidLine); //Color: #fff QPen fontMarkedPen(Qt::white, 1, Qt::SolidLine); if(option.state & QStyle::State_Selected){ QLinearGradient gradientSelected(r.left(),r.top(),r.left(),r.height()+r.top()); //gradientSelected.setColorAt(0.0, QColor::fromRgb(119,213,247)); //gradientSelected.setColorAt(0.9, QColor::fromRgb(27,134,183)); //gradientSelected.setColorAt(1.0, QColor::fromRgb(0,120,174)); //painter->setBrush(QPalette::Highlight); //painter->drawRect(r); painter->fillRect(oR, option.palette.color(QPalette::Highlight)); //BORDER painter->setPen(lineMarkedPen); painter->drawLine(r.topLeft(),r.topRight()); painter->drawLine(r.topRight(),r.bottomRight()); painter->drawLine(r.bottomLeft(),r.bottomRight()); painter->drawLine(r.topLeft(),r.bottomLeft()); painter->setPen(fontMarkedPen); } else { //BACKGROUND //ALTERNATING COLORS painter->setBrush( (index.row() % 2) ? Qt::white : QColor(252,252,252) ); painter->drawRect(r); //BORDER painter->setPen(linePen); painter->drawLine(r.topLeft(),r.topRight()); painter->drawLine(r.topRight(),r.bottomRight()); painter->drawLine(r.bottomLeft(),r.bottomRight()); painter->drawLine(r.topLeft(),r.bottomLeft()); painter->setPen(fontPen); } //GET TITLE, DESCRIPTION AND ICON //QIcon ic = QIcon(qvariant_cast<QPixmap>(index.data(Qt::DecorationRole))); QString title = index.data(Qt::DisplayRole).toString(); QString description = index.data(Qt::DisplayRole + 1).toString(); int imageSpace = 20; // if (!ic.isNull()) { //ICON // r = option.rect.adjusted(5, 10, -10, -10); //ic.paint(painter, r, Qt::AlignVCenter|Qt::AlignLeft); //imageSpace = 55; //} QString family = QApplication::font().family(); QFont tite(family, 16, QFont::Bold); QFont desc(family, 15, QFont::Normal); //TITLE r = oR.adjusted(imageSpace, 6, 0, 0); painter->setFont( tite ); painter->drawText(r.left(), r.top(), r.width(), r.height(), Qt::AlignLeft, title, &r); //DESCRIPTION r = oR.adjusted(imageSpace, 30, 0, 0); painter->setFont( desc ); painter->drawText(r.left(), r.top(), r.width(), r.height(), Qt::AlignLeft, description, &r); }
void UserListDelegate::paint ( QPainter * painter, const QStyleOptionViewItem & option, const QModelIndex & index ) const { // Get title, description and icon QIcon mediaIcon = QIcon(qvariant_cast<QIcon>(index.data(Qt::DecorationRole))); QString title = index.data(Qt::DisplayRole).toString(); QString description = index.data(Qt::UserRole + 1).toString(); QString time = index.data(Qt::ToolTipRole).toString(); QRect r = option.rect; QPen linePen(QColor::fromRgb(211,211,211), 1, Qt::SolidLine); QPen lineMarkedPen(QColor::fromRgb(0,90,131), 1, Qt::SolidLine); QPen fontPen(QColor::fromRgb(51,51,51), 1, Qt::SolidLine); QPen fontMarkedPen(Qt::white, 1, Qt::SolidLine); // If a user is selected (pressed), changing the color(background) and size of the border area if (option.state & QStyle::State_Selected) { QLinearGradient gradientSelected(r.left(),r.top(),r.left(),r.height()+r.top()); gradientSelected.setColorAt(0.0, QColor::fromRgb(195,213,255)); gradientSelected.setColorAt(1.0, QColor::fromRgb(177,215,246)); painter->setBrush(gradientSelected); painter->drawRect(r); //BORDER painter->setPen(lineMarkedPen); painter->drawLine(r.topLeft(),r.topRight()); painter->drawLine(r.topRight(),r.bottomRight()); painter->drawLine(r.bottomLeft(),r.bottomRight()); painter->drawLine(r.topLeft(),r.bottomLeft()); painter->setPen(fontMarkedPen); } else { //BACKGROUND //ALTERNATING COLORS painter->setBrush( (index.row() % 2) ? Qt::white : QColor(252,252,252) ); painter->drawRect(r); //BORDER painter->setPen(linePen); painter->drawLine(r.topLeft(),r.topRight()); painter->drawLine(r.topRight(),r.bottomRight()); painter->drawLine(r.bottomLeft(),r.bottomRight()); painter->drawLine(r.topLeft(),r.bottomLeft()); painter->setPen(fontPen); } // The offset for the installation image int imageSpace = 10; if (!mediaIcon.isNull()) { r = option.rect.adjusted(2, 2, -1, -1); mediaIcon.paint(painter, r, Qt::AlignVCenter|Qt::AlignLeft); imageSpace = 85; } //TITLE r = option.rect.adjusted(imageSpace, 10, -10, -27); painter->setFont( QFont( "Lucida Grande", 12, QFont::Normal ) ); painter->drawText(r.left(), r.top(), r.width(), r.height(), Qt::AlignTop|Qt::AlignLeft, title, &r); // TIME r = option.rect.adjusted(60, 10, -10, -27); painter->setFont( QFont( "Lucida Grande", 8, QFont::Normal ) ); painter->drawText(r.left(), r.top(), r.width(), r.height(), Qt::AlignTop|Qt::AlignRight, time , &r); //DESCRIPTION r = option.rect.adjusted(imageSpace, 35, -10, 10); painter->setFont( QFont( "Lucida Grande", 8, QFont::Normal ) ); //If the last message is long, it is cut, for convenient display if (description.size() > 30) { description.remove(30, description.size()); description.append("..."); } painter->drawText(r.left(), r.top(), r.width(), r.height(), Qt::AlignLeft, description, &r); }