24 #include "gui/widgets/serverlistview.h"
26 #include "configuration/doomseekerconfig.h"
28 #include <QHeaderView>
29 #include <QItemDelegate>
30 #include <QMouseEvent>
32 #include <QSortFilterProxyModel>
33 #include <QTextDocument>
39 class CustomItemDelegate :
public QItemDelegate
42 void paint(QPainter *painter,
const QStyleOptionViewItem &option,
const QModelIndex &index)
const
46 bool rightAligned =
false;
47 QStyleOptionViewItem opt = option;
49 QVariant userRole = index.data(Qt::UserRole);
50 if(userRole.isValid() && userRole.type() == QVariant::Int && userRole.toInt() == USERROLE_RIGHTALIGNDECORATION)
52 opt.decorationAlignment = Qt::AlignRight|Qt::AlignVCenter;
57 QItemDelegate::paint(painter, opt, index);
66 if(rightAligned && (opt.state & QStyle::State_Selected))
68 QVariant decorationRole = index.data(Qt::DecorationRole);
69 if(decorationRole.isValid())
72 painter->setClipRect(opt.rect);
74 QPixmap pixmap = decoration(opt, decorationRole);
75 drawDecoration(painter, opt, opt.rect, pixmap);
83 void drawDecoration(QPainter *painter,
const QStyleOptionViewItem &option,
const QRect &rect,
const QPixmap &pixmap)
const
85 if(pixmap.isNull() || !rect.isValid())
88 if(option.decorationAlignment == (Qt::AlignRight|Qt::AlignVCenter))
90 QPoint p = QStyle::alignedRect(option.direction, option.decorationAlignment, pixmap.size(), option.rect).topLeft();
91 painter->drawPixmap(p, pixmap);
94 QItemDelegate::drawDecoration(painter, option, rect, pixmap);
100 ServerListView::ServerListView(QWidget* parent) : QTableView(parent)
103 verticalHeader()->setDefaultSectionSize(fontMetrics().height() + 6);
104 setShowGrid(gConfig.doomseeker.bDrawGridInServerTable);
106 bAllowAllRowsRefresh =
true;
107 setItemDelegate(
new CustomItemDelegate());
110 void ServerListView::mouseReleaseEvent(QMouseEvent* event)
112 QModelIndex index = indexAt(event->pos());
113 switch (event->button())
118 emit middleMouseClick(index, event->pos());
122 case Qt::RightButton:
125 emit rightMouseClick(index, event->pos());
130 QTableView::mouseReleaseEvent(event);
135 void ServerListView::mouseDoubleClickEvent(QMouseEvent* event)
137 if (event->button() != Qt::LeftButton)
139 QTableView::mouseDoubleClickEvent(event);
143 QModelIndex index = indexAt(event->pos());
146 emit leftMouseDoubleClicked(index, event->pos());
151 void ServerListView::updateRowVisuals(
int row)
153 resizeRowToContents(row);
156 void ServerListView::updateAllRows()
158 if (bAllowAllRowsRefresh)
160 QSortFilterProxyModel* pModel =
static_cast<QSortFilterProxyModel*
>(model());
161 int rowCount = pModel->sourceModel()->rowCount();
163 for (
int i = 0; i < rowCount; ++i)