示例#1
0
void CMultiLineListBox::DrawItem(LPDRAWITEMSTRUCT lpDIS)
{
	CDC* pDC = CDC::FromHandle(lpDIS->hDC);

	COLORREF rColor = (COLORREF)lpDIS->itemData; // RGB in item data

	CString sLabel;
	GetText(lpDIS->itemID, sLabel);

	// item selected
	if ((lpDIS->itemState & ODS_SELECTED) &&
		(lpDIS->itemAction & (ODA_SELECT | ODA_DRAWENTIRE)))
	{
		// draw color box
		CBrush colorBrush(rColor);
		CRect colorRect = lpDIS->rcItem;

		// draw label background
		CBrush labelBrush(::GetSysColor(COLOR_HIGHLIGHT));
		CRect labelRect = lpDIS->rcItem;
		pDC->FillRect(&labelRect,&labelBrush);

		// draw label text
		COLORREF colorTextSave;
		COLORREF colorBkSave;

		colorTextSave = pDC->SetTextColor(::GetSysColor(COLOR_HIGHLIGHTTEXT));
		colorBkSave = pDC->SetBkColor(::GetSysColor(COLOR_HIGHLIGHT));
		pDC->DrawText( sLabel, -1, &lpDIS->rcItem, DT_WORDBREAK );

		pDC->SetTextColor(colorTextSave);
		pDC->SetBkColor(colorBkSave);

		return;
	}

	// item brought into box
	if (lpDIS->itemAction & ODA_DRAWENTIRE)
	{
		CBrush brush(rColor);
		CRect rect = lpDIS->rcItem;
		pDC->SetBkColor(rColor);
		pDC->FillRect(&rect,&brush);
		pDC->DrawText( sLabel, -1, &lpDIS->rcItem, DT_WORDBREAK );

		return;
	}

	// item deselected
	if (!(lpDIS->itemState & ODS_SELECTED) &&
		(lpDIS->itemAction & ODA_SELECT))
	{
		CRect rect = lpDIS->rcItem;
		CBrush brush(rColor);
		pDC->SetBkColor(rColor);
		pDC->FillRect(&rect,&brush);
		pDC->DrawText( sLabel, -1, &lpDIS->rcItem, DT_WORDBREAK );

		return;
	}
}
QVariant ColumnDigikamProperties::data(TableViewModel::Item* const item, const int role) const
{
    if ( (role != Qt::DisplayRole)       &&
         (role != Qt::TextAlignmentRole) &&
         (role != Qt::ForegroundRole ) )
    {
        return QVariant();
    }

    if (role == Qt::TextAlignmentRole)
    {
        switch (subColumn)
        {
            case SubColumnRating:
                return QVariant(Qt::Alignment(Qt::AlignRight | Qt::AlignVCenter));

            default:
                return QVariant();
        }
    }

    if (role == Qt::ForegroundRole)
    {
        switch (subColumn)
        {
            case SubColumnPickLabel:
            {
                const ImageInfo info      = s->tableViewModel->infoFromItem(item);
                const PickLabel pickLabel = PickLabel(info.pickLabel());
                QColor labelColor;

                switch (pickLabel)
                {
                    case NoPickLabel:
                        labelColor = Qt::darkGray;
                        break;

                    case RejectedLabel:
                        labelColor = Qt::red;
                        break;

                    case PendingLabel:
                        // yellow is too hard to read
                        labelColor = Qt::darkYellow;
                        break;

                    case AcceptedLabel:
                        // green is too hard to read
                        labelColor = Qt::darkGreen;
                        break;

                    default:
                        break;
                }

                QBrush labelBrush(labelColor);

                return QVariant::fromValue(labelBrush);
            }

            case SubColumnColorLabel:
            {
                const ImageInfo info        = s->tableViewModel->infoFromItem(item);
                const ColorLabel colorLabel = ColorLabel(info.colorLabel());
                QColor labelColor;

                switch (colorLabel)
                {
                    case NoColorLabel:
                        labelColor = Qt::lightGray;
                        break;

                    case RedLabel:
                        labelColor = Qt::red;
                        break;

                    case OrangeLabel:
                        labelColor = QColor(0xff, 0x80, 0x00);
                        break;

                    case YellowLabel:
                        labelColor = Qt::darkYellow;
                        break;

                    case GreenLabel:
                        labelColor = Qt::darkGreen;
                        break;

                    case BlueLabel:
                        labelColor = Qt::darkBlue;
                        break;

                    case MagentaLabel:
                        labelColor = Qt::magenta;
                        break;

                    case GrayLabel:
                        labelColor = Qt::darkGray;
                        break;

                    case BlackLabel:
                        labelColor = Qt::black;
                        break;

                    case WhiteLabel:
                        labelColor = Qt::white;
                        break;

                    default:
                        break;
                }

                QBrush labelBrush(labelColor);

                return QVariant::fromValue(labelBrush);
            }

            default:
                return QVariant();
        }
    }

    const ImageInfo info = s->tableViewModel->infoFromItem(item);

    /// @todo Also display the pick label icon?
    /// @todo Make display of text/icon configurable.
    switch (subColumn)
    {
        case SubColumnRating:
        {
            const int itemRating = info.rating();
            
            if (itemRating <= 0)
            {
                // no rating
                return QString();
            }

            return QLocale().toString(itemRating);
        }

        case SubColumnPickLabel:
        {
            const PickLabel pickLabel = PickLabel(info.pickLabel());
            QString labelString;

            switch (pickLabel)
            {
                case NoPickLabel:
                    labelString = i18n("None");
                    break;

                case RejectedLabel:
                    labelString = i18n("Rejected");
                    break;

                case PendingLabel:
                    labelString = i18n("Pending");
                    break;

                case AcceptedLabel:
                    labelString = i18n("Accepted");
                    break;

                default:
                    break;
            }

            return labelString;
        }

        case SubColumnColorLabel:
        {
            const ColorLabel colorLabel = ColorLabel(info.colorLabel());
            QString labelString;

            switch (colorLabel)
            {
                case NoColorLabel:
                    labelString = i18n("None");
                    break;

                case RedLabel:
                    labelString = i18n("Red");
                    break;

                case OrangeLabel:
                    labelString = i18n("Orange");
                    break;

                case YellowLabel:
                    labelString = i18n("Yellow");
                    break;

                case GreenLabel:
                    labelString = i18n("Green");
                    break;

                case BlueLabel:
                    labelString = i18n("Blue");
                    break;

                case MagentaLabel:
                    labelString = i18n("Magenta");
                    break;

                case GrayLabel:
                    labelString = i18n("Gray");
                    break;

                case BlackLabel:
                    labelString = i18n("Black");
                    break;

                case WhiteLabel:
                    labelString = i18n("White");
                    break;

                default:
                    break;
            }

            return labelString;
        }

        case SubColumnTitle:
        {
            const QString title = info.title();

            return title;
        }

        case SubColumnCaption:
        {
            const QString caption = info.comment();

            return caption;
        }
    }

    return QVariant();
}