Visual and scroll behavior changes to groupview
Scroll by rows, not pixels. Paint the checkboxy thing again! Make0 it behave. Set the group header height properly.
This commit is contained in:
parent
0d30a2655f
commit
18f532b0d7
@ -61,55 +61,6 @@ Group::HitResults Group::hitScan(const QPoint &pos) const
|
|||||||
|
|
||||||
void Group::drawHeader(QPainter *painter, const QStyleOptionViewItem &option)
|
void Group::drawHeader(QPainter *painter, const QStyleOptionViewItem &option)
|
||||||
{
|
{
|
||||||
/*
|
|
||||||
QStyleOptionViewItemV4 opt = option;
|
|
||||||
painter->save();
|
|
||||||
|
|
||||||
static const int margin = 2;
|
|
||||||
static const int spacing = 10;
|
|
||||||
int height = headerHeight();
|
|
||||||
int text_height = height - 2 * margin;
|
|
||||||
|
|
||||||
// set the text colors
|
|
||||||
QPalette::ColorGroup cg = QPalette::Normal;
|
|
||||||
painter->setPen(opt.palette.color(cg, QPalette::Text));
|
|
||||||
|
|
||||||
// set up geometry
|
|
||||||
QRect iconRect = QRect(view->m_leftMargin + margin, y + margin, text_height - 1, text_height - 1);
|
|
||||||
QRect iconSubrect = iconRect.adjusted(margin, margin, -margin, -margin);
|
|
||||||
QRect smallRect = iconSubrect.adjusted(margin, margin, -margin, -margin);
|
|
||||||
int midX = iconSubrect.center().x();
|
|
||||||
int midY = iconSubrect.center().y();
|
|
||||||
|
|
||||||
// checkboxy thingy
|
|
||||||
{
|
|
||||||
painter->drawRect(iconSubrect);
|
|
||||||
|
|
||||||
painter->setBrush(opt.palette.text());
|
|
||||||
painter->drawRect(smallRect.x(), midY, smallRect.width(), 2);
|
|
||||||
if(collapsed)
|
|
||||||
{
|
|
||||||
painter->drawRect(midX, smallRect.y(), 2, smallRect.height());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
int x_left = iconRect.right();
|
|
||||||
|
|
||||||
if(text.length())
|
|
||||||
{
|
|
||||||
// the text
|
|
||||||
int text_width = painter->fontMetrics().width(text);
|
|
||||||
QRect textRect = QRect(x_left + spacing, y + margin, text_width, text_height);
|
|
||||||
x_left = textRect.right();
|
|
||||||
view->style()->drawItemText(painter, textRect, Qt::AlignHCenter | Qt::AlignVCenter,
|
|
||||||
opt.palette, true, text);
|
|
||||||
}
|
|
||||||
// the line
|
|
||||||
painter->drawLine(x_left + spacing, midY + 1, view->contentWidth() - view->m_rightMargin,
|
|
||||||
midY + 1);
|
|
||||||
|
|
||||||
painter->restore();
|
|
||||||
*/
|
|
||||||
painter->setRenderHint(QPainter::Antialiasing);
|
painter->setRenderHint(QPainter::Antialiasing);
|
||||||
|
|
||||||
const QRect optRect = option.rect;
|
const QRect optRect = option.rect;
|
||||||
@ -181,11 +132,50 @@ void Group::drawHeader(QPainter *painter, const QStyleOptionViewItem &option)
|
|||||||
}
|
}
|
||||||
//END: right vertical line
|
//END: right vertical line
|
||||||
|
|
||||||
|
//BEGIN: checkboxy thing
|
||||||
|
{
|
||||||
|
painter->save();
|
||||||
|
painter->setRenderHint(QPainter::Antialiasing, false);
|
||||||
|
painter->setFont(font);
|
||||||
|
QColor penColor(option.palette.text().color());
|
||||||
|
penColor.setAlphaF(0.6);
|
||||||
|
painter->setPen(penColor);
|
||||||
|
QRect iconSubRect(option.rect);
|
||||||
|
iconSubRect.setTop(iconSubRect.top() + 7);
|
||||||
|
iconSubRect.setLeft(iconSubRect.left() + 7);
|
||||||
|
|
||||||
|
int sizing = fontMetrics.height();
|
||||||
|
int even = ( (sizing - 1) % 2 );
|
||||||
|
|
||||||
|
iconSubRect.setHeight(sizing - even);
|
||||||
|
iconSubRect.setWidth(sizing - even);
|
||||||
|
painter->drawRect(iconSubRect);
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
if(collapsed)
|
||||||
|
painter->drawText(iconSubRect, Qt::AlignHCenter | Qt::AlignVCenter, "+");
|
||||||
|
else
|
||||||
|
painter->drawText(iconSubRect, Qt::AlignHCenter | Qt::AlignVCenter, "-");
|
||||||
|
*/
|
||||||
|
painter->setBrush(option.palette.text());
|
||||||
|
painter->fillRect(iconSubRect.x(), iconSubRect.y() + iconSubRect.height() / 2,
|
||||||
|
iconSubRect.width(), 2, penColor);
|
||||||
|
if (collapsed)
|
||||||
|
{
|
||||||
|
painter->fillRect(iconSubRect.x() + iconSubRect.width() / 2, iconSubRect.y(), 2,
|
||||||
|
iconSubRect.height(), penColor);
|
||||||
|
}
|
||||||
|
|
||||||
|
painter->restore();
|
||||||
|
}
|
||||||
|
//END: checkboxy thing
|
||||||
|
|
||||||
//BEGIN: text
|
//BEGIN: text
|
||||||
{
|
{
|
||||||
QRect textRect(option.rect);
|
QRect textRect(option.rect);
|
||||||
textRect.setTop(textRect.top() + 7);
|
textRect.setTop(textRect.top() + 7);
|
||||||
textRect.setLeft(textRect.left() + 7);
|
textRect.setLeft(textRect.left() + 7 + fontMetrics.height() + 7);
|
||||||
textRect.setHeight(fontMetrics.height());
|
textRect.setHeight(fontMetrics.height());
|
||||||
textRect.setRight(textRect.right() - 7);
|
textRect.setRight(textRect.right() - 7);
|
||||||
|
|
||||||
@ -207,11 +197,20 @@ int Group::totalHeight() const
|
|||||||
|
|
||||||
int Group::headerHeight() const
|
int Group::headerHeight() const
|
||||||
{
|
{
|
||||||
|
QFont font(QApplication::font());
|
||||||
|
font.setBold(true);
|
||||||
|
QFontMetrics fontMetrics(font);
|
||||||
|
|
||||||
|
const int height = fontMetrics.height() + 1 /* 1 pixel-width gradient */
|
||||||
|
+ 11 /* top and bottom separation */;
|
||||||
|
return height;
|
||||||
|
/*
|
||||||
int raw = view->viewport()->fontMetrics().height() + 4;
|
int raw = view->viewport()->fontMetrics().height() + 4;
|
||||||
// add english. maybe. depends on font height.
|
// add english. maybe. depends on font height.
|
||||||
if(raw % 2 == 0)
|
if (raw % 2 == 0)
|
||||||
raw++;
|
raw++;
|
||||||
return std::min( raw , 25 );
|
return std::min(raw, 25);
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
int Group::contentHeight() const
|
int Group::contentHeight() const
|
||||||
|
@ -121,6 +121,8 @@ void GroupView::updateGeometries()
|
|||||||
category->m_verticalPosition = totalHeight;
|
category->m_verticalPosition = totalHeight;
|
||||||
totalHeight += category->totalHeight() + m_categoryMargin;
|
totalHeight += category->totalHeight() + m_categoryMargin;
|
||||||
}
|
}
|
||||||
|
auto category = m_groups.last();
|
||||||
|
int itemScroll = category->contentHeight() / category->numRows();
|
||||||
/*
|
/*
|
||||||
// remove the last margin (we don't want it)
|
// remove the last margin (we don't want it)
|
||||||
totalHeight -= m_categoryMargin;
|
totalHeight -= m_categoryMargin;
|
||||||
@ -128,6 +130,10 @@ void GroupView::updateGeometries()
|
|||||||
totalHeight += m_categoryMargin;
|
totalHeight += m_categoryMargin;
|
||||||
*/
|
*/
|
||||||
totalHeight += m_bottomMargin;
|
totalHeight += m_bottomMargin;
|
||||||
|
verticalScrollBar()->setSingleStep ( itemScroll );
|
||||||
|
const int rowsPerPage = qMax ( viewport()->height() / itemScroll, 1 );
|
||||||
|
verticalScrollBar()->setPageStep ( rowsPerPage * itemScroll );
|
||||||
|
|
||||||
verticalScrollBar()->setRange(0, totalHeight - height());
|
verticalScrollBar()->setRange(0, totalHeight - height());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user