29 #include <QHeaderView>
30 #include <QMouseEvent>
32 #include "QY2ListView.h"
34 #define YUILogComponent "qt-pkg"
35 #include <yui/YUILog.h>
38 : QTreeWidget( parent )
39 , _mousePressedItem(0)
40 , _mousePressedCol( -1 )
41 , _mousePressedButton( Qt::NoButton )
42 , _sortByInsertionSequence( false )
44 , _mouseButton1PressedInHeader( false )
45 , _finalSizeChangeExpected( false )
48 setRootIsDecorated(
false);
51 _toolTip =
new QY2ListViewToolTip(
this );
56 header()->installEventFilter(
this );
57 header()->setStretchLastSection(
false );
60 connect( header(), &pclass(header())::sectionResized,
63 connect(
this, &pclass(
this)::itemExpanded,
66 connect(
this, &pclass(
this)::itemCollapsed,
84 QTreeWidgetItemIterator it(
this );
90 if ( item && (item->flags() & Qt::ItemIsSelectable) )
92 item->setSelected(
true);
104 QTreeWidget::clear();
112 QTreeWidgetItemIterator it(
this );
129 QTreeWidgetItemIterator it(
this );
146 if ( ! listViewItem )
158 return item->
toolTip( column );
163 return checkListItem->
toolTip( column );
172 _savedColumnWidth.clear();
173 _savedColumnWidth.reserve( columnCount() );
175 for (
int i = 0; i < columnCount(); i++ )
177 int size = header()->sectionSize(i);
179 _savedColumnWidth.push_back( size );
187 if ( _savedColumnWidth.size() != (
unsigned) columnCount() )
190 for (
int i = 0; i < columnCount(); i++ )
191 resizeColumnToContents(i);
196 for (
int i = 0; i < columnCount(); i++ )
198 header()->resizeSection( i, _savedColumnWidth[ i ] );
201 yuiDebug() <<
"Restoring size " << _savedColumnWidth[i]
202 <<
" for section " << i
203 <<
" now " << header()->sectionSize(i)
215 QTreeWidgetItem * item = itemAt( ev->pos() );
218 if ( item && ( item->flags() & Qt::ItemIsEnabled ) )
220 _mousePressedItem = item;
221 _mousePressedCol = header()->logicalIndexAt( ev->pos().x() );
222 _mousePressedButton = ev->button();
226 _mousePressedItem = 0;
227 _mousePressedCol = -1;
228 _mousePressedButton = Qt::NoButton;
232 QTreeWidget::mousePressEvent( ev );
240 QTreeWidgetItem * item = itemAt( ev->pos() );
242 if ( item && ( item->flags() & Qt::ItemIsEnabled ) && item == _mousePressedItem )
244 int col = header()->logicalIndexAt( ev->pos().x() );
246 if ( item == _mousePressedItem &&
247 col == _mousePressedCol &&
248 ev->button() == _mousePressedButton )
250 emit(
columnClicked( ev->button(), item, col, ev->globalPos() ) );
257 _mousePressedItem = 0;
258 _mousePressedCol = -1;
259 _mousePressedButton = Qt::NoButton;
262 QTreeWidget::mouseReleaseEvent( ev );
269 QTreeWidgetItem * item = itemAt( mapToGlobal( ev->pos() ) );
271 if ( item && ( item->flags() & Qt::ItemIsEnabled ) )
273 int col = header()->logicalIndexAt( ev->pos().x() );
279 _mousePressedItem = 0;
280 _mousePressedCol = -1;
281 _mousePressedButton = Qt::NoButton;
284 QTreeWidget::mouseDoubleClickEvent( ev );
302 if ( _mouseButton1PressedInHeader || _finalSizeChangeExpected )
309 if ( ! _mouseButton1PressedInHeader )
310 _finalSizeChangeExpected =
false;
319 if ( event && obj && obj == header() )
321 if ( event->type() == QEvent::MouseButtonPress )
323 QMouseEvent * mouseEvent = (QMouseEvent *) event;
325 if ( mouseEvent->button() == 1 )
327 _mouseButton1PressedInHeader =
true;
328 _finalSizeChangeExpected =
false;
331 else if ( event->type() == QEvent::MouseButtonRelease )
333 QMouseEvent * mouseEvent = (QMouseEvent *) event;
335 if ( mouseEvent->button() == 1 )
337 _finalSizeChangeExpected =
true;
338 _mouseButton1PressedInHeader =
false;
343 return QTreeWidget::eventFilter( obj, event );
350 return QSize( 0, 0 );
359 header()->setSectionsClickable( ! _sortByInsertionSequence );
369 const QString & text )
370 : QTreeWidgetItem( parentListView, QStringList(text), 1)
377 const QString & text )
378 : QTreeWidgetItem( parentItem, QStringList(text), 1 )
384 if ( parentListView )
411 if ( otherCheckListItem )
413 return ( this->
serial() < otherCheckListItem->
serial() );
417 int column = treeWidget()->sortColumn();
424 return compare(text(column).trimmed(), otherListViewItem.text(column).trimmed());
433 if ( parentListView )
446 bool retval = text1.toLongLong(&ok1) < text2.toLongLong(&ok2);
450 else if (ok1 && !ok2)
452 else if (!ok1 && ok2)
456 return QString::localeAwareCompare(text1, text2) < 0;
463 return text(column).trimmed();
468 const QString & text )
471 setFlags(Qt::ItemIsUserCheckable | Qt::ItemIsEnabled);
472 setCheckState(0, Qt::Unchecked);
478 const QString & text )
484 setFlags(Qt::ItemIsUserCheckable | Qt::ItemIsEnabled);
485 setCheckState(0, Qt::Unchecked);
487 if ( parentListView )
500 QY2ListViewToolTip::maybeTip(
const QPoint & pos )
502 Q3Header * header = _listView->header();
503 QTreeWidgetItem * item = _listView->itemAt( pos );
508 int x = _listView->viewportToContents( pos ).x();
509 int column = header->sectionAt(x);
514 indent = item->depth() + ( _listView->rootIsDecorated() ? 1 : 0 );
515 indent *= _listView->treeStepSize();
517 if ( pos.x() < indent )
521 QString text = _listView->toolTip( item, column );
523 if ( ! text.isEmpty() )
525 QRect rect( _listView->itemRect( item ) );
530 rect.setWidth( indent );
534 QPoint topLeft( header->sectionPos( column ), 0 );
535 topLeft = _listView->contentsToViewport( topLeft );
536 rect.setX( topLeft.x() );
537 rect.setWidth( header->sectionSize( column ) );
549 if ( columnCount() == 1 && header() && header()->isHidden() )
550 resizeColumnToContents( 0 );
556 if ( columnCount() == 1 && header() && header()->isHidden())
557 resizeColumnToContents( 0 );