Add full hidden item support to QIconView

This will enable TDE to efficiently filter icon views via Konqueror
(cherry picked from commit 660a32cfcf)
v3.5.13-sru
Timothy Pearson 13 years ago committed by Slávek Banko
parent 8d8e01fb8e
commit 7413b3b4e5

@ -1138,6 +1138,9 @@ void QIconViewItem::setKey( const QString &k )
void QIconViewItem::setPixmap( const QPixmap &icon )
{
if (isVisible() == FALSE)
return;
if ( itemIcon && itemIcon == unknown_icon )
itemIcon = 0;
@ -1236,6 +1239,9 @@ void QIconViewItem::setText( const QString &text, bool recalc, bool redraw )
void QIconViewItem::setPixmap( const QPixmap &icon, bool recalc, bool redraw )
{
if (isVisible() == FALSE)
return;
if ( itemIcon && itemIcon == unknown_icon )
itemIcon = 0;
@ -3012,7 +3018,7 @@ void QIconView::insertItem( QIconViewItem *item, QIconViewItem *after )
//insertInGrid( item );
d->cachedW = QMAX( d->cachedW, item->x() + item->width() );
d->cachedH= QMAX( d->cachedH, item->y() + item->height() );
d->cachedH = QMAX( d->cachedH, item->y() + item->height() );
d->updateTimer->start( 0, TRUE );
} else {
@ -3591,6 +3597,9 @@ void QIconView::arrangeItemsInGrid( bool update )
int w = 0, h = 0, y = d->spacing;
QIconViewItem *item = d->firstItem;
while (item && (item->isVisible() == FALSE)) {
item = item->next;
}
bool changedLayout = FALSE;
while ( item ) {
bool changed;
@ -3608,21 +3617,37 @@ void QIconView::arrangeItemsInGrid( bool update )
break;
item = item->next;
while (item && (item->isVisible() == FALSE)) {
item = item->next;
}
}
if ( d->lastItem && d->arrangement == TopToBottom ) {
item = d->lastItem;
int x = item->x();
while (item && (item->isVisible() == FALSE)) {
item = item->prev;
}
int x = 0;
if (item)
x = item->x();
while ( item && item->x() >= x ) {
w = QMAX( w, item->x() + item->width() );
h = QMAX( h, item->y() + item->height() );
item = item->prev;
while (item && (item->isVisible() == FALSE)) {
item = item->prev;
}
}
}
d->containerUpdateLocked = FALSE;
w = QMAX( QMAX( d->cachedW, w ), d->lastItem->x() + d->lastItem->width() );
h = QMAX( QMAX( d->cachedH, h ), d->lastItem->y() + d->lastItem->height() );
QIconViewItem *lastVisibleItem = d->lastItem;
while (lastVisibleItem->prev && (lastVisibleItem->isVisible() == FALSE)) {
lastVisibleItem = lastVisibleItem->prev;
}
w = QMAX( QMAX( d->cachedW, w ), lastVisibleItem->x() + lastVisibleItem->width() );
h = QMAX( QMAX( d->cachedH, h ), lastVisibleItem->y() + lastVisibleItem->height() );
if ( d->arrangement == TopToBottom )
w += d->spacing;
@ -3981,8 +4006,8 @@ void QIconView::ensureItemVisible( QIconViewItem *item )
if ( !item )
return;
if ( d->updateTimer && d->updateTimer->isActive() ||
d->fullRedrawTimer && d->fullRedrawTimer->isActive() )
if ( (d->updateTimer && d->updateTimer->isActive()) ||
(d->fullRedrawTimer && d->fullRedrawTimer->isActive()) )
slotUpdate();
int w = item->width();
@ -5838,6 +5863,15 @@ QIconViewItem *QIconView::makeRowLayout( QIconViewItem *begin, int &y, bool &cha
{
QIconViewItem *end = 0;
// Find the first visible item
while (begin->next && (begin->isVisible() == FALSE)) {
begin = begin->next;
}
if (!begin->next) {
changed = TRUE;
return begin;
}
bool reverse = QApplication::reverseLayout();
changed = FALSE;
@ -5853,12 +5887,18 @@ QIconViewItem *QIconView::makeRowLayout( QIconViewItem *begin, int &y, bool &cha
x += d->spacing + item->width();
if ( x > visibleWidth() && item != begin ) {
item = item->prev;
while (item && (item->isVisible() == FALSE)) {
item = item->prev;
}
break;
}
h = QMAX( h, item->height() );
ih = QMAX( ih, item->pixmapRect().height() );
QIconViewItem *old = item;
item = item->next;
while (item && (item->isVisible() == FALSE)) {
item = item->next;
}
if ( !item ) {
item = old;
break;
@ -5914,12 +5954,18 @@ QIconViewItem *QIconView::makeRowLayout( QIconViewItem *begin, int &y, bool &cha
}
if ( x > visibleWidth() && item != begin ) {
item = item->prev;
while (item && (item->isVisible() == FALSE)) {
item = item->prev;
}
break;
}
h = QMAX( h, item->height() );
ih = QMAX( ih, item->pixmapRect().height() );
QIconViewItem *old = item;
item = item->next;
while (item && (item->isVisible() == FALSE)) {
item = item->next;
}
if ( !item ) {
item = old;
break;
@ -5960,6 +6006,9 @@ QIconViewItem *QIconView::makeRowLayout( QIconViewItem *begin, int &y, bool &cha
if ( item == end )
break;
item = item->next;
while (item && (item->isVisible() == FALSE)) {
item = item->next;
}
}
y += h + d->spacing;
}
@ -5977,11 +6026,17 @@ QIconViewItem *QIconView::makeRowLayout( QIconViewItem *begin, int &y, bool &cha
y += d->spacing + item->height();
if ( y > visibleHeight() && item != begin ) {
item = item->prev;
while (item && (item->isVisible() == FALSE)) {
item = item->prev;
}
break;
}
w = QMAX( w, item->width() );
QIconViewItem *old = item;
item = item->next;
while (item && (item->isVisible() == FALSE)) {
item = item->next;
}
if ( !item ) {
item = old;
break;
@ -6011,6 +6066,9 @@ QIconViewItem *QIconView::makeRowLayout( QIconViewItem *begin, int &y, bool &cha
if ( item == end )
break;
item = item->next;
while (item && (item->isVisible() == FALSE)) {
item = item->next;
}
}
x += w + d->spacing;
}
@ -6324,6 +6382,10 @@ void QIconView::rebuildContainers()
}
}
}
else {
// Skip this hidden item
item = item->next;
}
}
}

Loading…
Cancel
Save