26 #define YUILogComponent "qt-ui"
27 #include <yui/YUILog.h>
29 #include <QHeaderView>
30 #include <QVBoxLayout>
35 #include <yui/YEvent.h>
36 #include "YQSignalBlocker.h"
37 #include <yui/YUIException.h>
39 #include "QY2ListView.h"
41 #include "YQApplication.h"
44 #define INDENTATION_WIDTH 10
51 YTableHeader * tableHeader,
52 bool multiSelectionMode )
53 : QFrame( (QWidget *) parent->widgetRep() )
54 , YTable( parent, tableHeader, multiSelectionMode )
57 QVBoxLayout* layout =
new QVBoxLayout(
this );
58 layout->setSpacing( 0 );
61 layout->setMargin( YQWidgetMargin );
64 YUI_CHECK_NEW( _qt_listView );
65 layout->addWidget( _qt_listView );
66 _qt_listView->setAllColumnsShowFocus(
true );
67 _qt_listView->setIndentation( INDENTATION_WIDTH );
68 _qt_listView->header()->setStretchLastSection(
false );
72 if ( multiSelectionMode )
73 _qt_listView->setSelectionMode( QAbstractItemView::ExtendedSelection );
75 _qt_listView->setContextMenuPolicy( Qt::CustomContextMenu );
82 _qt_listView->setColumnCount( columns() );
84 for (
int i=0; i < columns(); i++ )
86 headers << fromUTF8( header(i) );
89 _qt_listView->setHeaderLabels( headers );
90 _qt_listView->header()->setSectionResizeMode( QHeaderView::Interactive );
91 _qt_listView->sortItems( 0, Qt::AscendingOrder);
98 connect( _qt_listView, &pclass(_qt_listView)::itemDoubleClicked,
101 connect( _qt_listView, &pclass(_qt_listView)::customContextMenuRequested,
104 connect( _qt_listView, &pclass(_qt_listView)::itemExpanded,
107 connect( _qt_listView, &pclass(_qt_listView)::itemCollapsed,
110 if ( multiSelectionMode )
113 connect( _qt_listView, &pclass(_qt_listView)::itemSelectionChanged,
118 connect( _qt_listView, &pclass(_qt_listView)::currentItemChanged,
133 YTable::setKeepSorting( keepSorting );
135 _qt_listView->setSortingEnabled( ! keepSorting );
151 YTableItem * item =
dynamic_cast<YTableItem *
> (yitem);
152 YUI_CHECK_PTR( item );
154 YTable::addItem( item );
157 YUI_CHECK_NEW( clone );
159 if ( ! batchMode && item->selected() )
167 if ( item->hasChildren() )
170 _qt_listView->setRootIsDecorated(
true );
174 _qt_listView->sortItems( 0, Qt::AscendingOrder);
176 if ( resizeColumnsToContent )
178 for (
int i=0; i < columns(); i++ )
179 _qt_listView->resizeColumnToContents( i );
188 for ( YItemIterator it = parentItem->childrenBegin();
189 it != parentItem->childrenEnd();
192 YTableItem * childItem =
dynamic_cast<YTableItem *
>( *it );
197 YUI_CHECK_NEW( childClone );
210 for ( YItemConstIterator it = itemCollection.begin();
211 it != itemCollection.end();
221 YItem * sel = YSelectionWidget::selectedItem();
226 for (
int i=0; i < columns(); i++ )
227 _qt_listView->resizeColumnToContents( i );
236 YTableItem * item =
dynamic_cast<YTableItem *
> (yitem);
237 YUI_CHECK_PTR( item );
240 YUI_CHECK_PTR( clone );
243 if ( ! selected && clone == _qt_listView->currentItem() )
249 if ( ! hasMultiSelection() )
250 _qt_listView->setCurrentItem( clone );
252 clone->setSelected(
true );
253 YTable::selectItem( item, selected );
266 _qt_listView->resizeColumnToContents( 0 );
277 _qt_listView->resizeColumnToContents( 0 );
286 YTable::deselectAllItems();
287 _qt_listView->clearSelection();
294 _qt_listView->
clear();
295 YTable::deleteAllItems();
302 YTableItem * item = cell->parent();
303 YUI_CHECK_PTR( item );
306 YUI_CHECK_PTR( clone );
318 YUI_CHECK_PTR( tableListViewItem );
320 YTable::selectItem( tableListViewItem->
origItem(),
true );
334 if ( hasItems() && YSelectionWidget::hasSelectedItem() )
338 if ( immediateMode() )
340 if ( !
YQUI::ui()->eventPendingFor(
this ) )
344 yuiDebug() <<
"Sending SelectionChanged event" << endl;
354 YSelectionWidget::deselectAllItems();
357 QList<QTreeWidgetItem *> selItems = _qt_listView->selectedItems();
359 for ( QList<QTreeWidgetItem *>::iterator it = selItems.begin();
360 it != selItems.end();
365 if ( tableListViewItem )
367 tableListViewItem->
origItem()->setSelected(
true );
369 yuiDebug() <<
"Selected item: " << tableListViewItem->
origItem()->label() << endl;
373 if ( immediateMode() )
375 if ( !
YQUI::ui()->eventPendingFor(
this ) )
379 yuiDebug() <<
"Sending SelectionChanged event" << endl;
393 yuiDebug() <<
"Sending Activated event" << endl;
402 _qt_listView->setEnabled( enabled );
404 YWidget::setEnabled( enabled );
432 resize( newWidth, newHeight );
439 _qt_listView->setFocus();
448 if ( ! _qt_listView || ! _qt_listView->viewport() )
452 if ( notifyContextMenu() )
462 YTableItem * origItem )
465 , _origItem( origItem )
473 YTableItem * origItem )
476 , _origItem( origItem )
485 YUI_CHECK_PTR( _table );
486 YUI_CHECK_PTR( _origItem );
488 _origItem->setData(
this );
492 if ( _origItem->isOpen() && _origItem->hasChildren() )
500 for ( YTableCellIterator it = _origItem->cellsBegin();
501 it != _origItem->cellsEnd();
515 int column = cell->column();
521 setText( column, fromUTF8( cell->label() ) );
528 if ( cell->hasIconName() )
533 if ( ! icon.isNull() )
534 setData( column, Qt::DecorationRole, icon );
538 if ( ! data( column, Qt::DecorationRole ).isNull() )
540 setData( column, Qt::DecorationRole, QIcon() );
549 YUI_CHECK_PTR( _table );
551 for (
int col=0; col < _table->columns(); col++ )
553 switch ( _table->alignment( col ) )
555 case YAlignBegin: setTextAlignment( col, Qt::AlignLeft | Qt::AlignVCenter );
break;
556 case YAlignCenter: setTextAlignment( col, Qt::AlignCenter | Qt::AlignVCenter );
break;
557 case YAlignEnd: setTextAlignment( col, Qt::AlignRight | Qt::AlignVCenter );
break;
559 case YAlignUnchanged:
break;
568 const YTableCell* tableCell =
origItem()->cell(column);
570 if (tableCell && tableCell->hasSortKey())
571 return QString::fromUtf8(tableCell->sortKey().c_str());
573 return text(column).trimmed();