25 #include <QHeaderView>
26 #include <QVBoxLayout>
28 #define YUILogComponent "qt-ui"
29 #include <yui/YUILog.h>
33 #include <yui/YEvent.h>
34 #include "YQSignalBlocker.h"
35 #include <yui/YUIException.h>
37 #include "QY2ListView.h"
39 #include "YQApplication.h"
43 YQTable::YQTable( YWidget * parent, YTableHeader * tableHeader,
bool multiSelectionMode )
44 : QFrame( (QWidget *) parent->widgetRep() )
45 , YTable( parent, tableHeader, multiSelectionMode )
48 QVBoxLayout* layout =
new QVBoxLayout(
this );
49 layout->setSpacing( 0 );
52 layout->setMargin( YQWidgetMargin );
55 YUI_CHECK_NEW( _qt_listView );
56 layout->addWidget( _qt_listView );
57 _qt_listView->setAllColumnsShowFocus(
true );
58 _qt_listView->header()->setStretchLastSection(
false );
62 if ( multiSelectionMode )
63 _qt_listView->setSelectionMode( QAbstractItemView::ExtendedSelection );
65 _qt_listView->setContextMenuPolicy( Qt::CustomContextMenu );
72 _qt_listView->setColumnCount( columns() );
74 for (
int i=0; i < columns(); i++ )
76 headers << fromUTF8( header(i) );
79 _qt_listView->setHeaderLabels( headers );
80 _qt_listView->header()->setResizeMode( QHeaderView::Interactive );
81 _qt_listView->sortItems( 0, Qt::AscendingOrder);
88 connect( _qt_listView, SIGNAL( itemDoubleClicked ( QTreeWidgetItem *,
int ) ),
91 connect( _qt_listView, SIGNAL( currentItemChanged ( QTreeWidgetItem *, QTreeWidgetItem * ) ),
94 connect( _qt_listView, SIGNAL( customContextMenuRequested (
const QPoint & ) ),
98 if ( multiSelectionMode )
102 connect( _qt_listView, SIGNAL( itemSelectionChanged() ),
118 YTable::setKeepSorting( keepSorting );
120 _qt_listView->setSortingEnabled( ! keepSorting );
136 YTableItem * item =
dynamic_cast<YTableItem *
> (yitem);
137 YUI_CHECK_PTR( item );
139 YTable::addItem( item );
142 YUI_CHECK_NEW( clone );
144 if ( ! batchMode && item->selected() )
157 for (
int col=0; col < columns(); col++ )
159 switch ( alignment( col ) )
161 case YAlignBegin: clone->setTextAlignment( col, Qt::AlignLeft | Qt::AlignVCenter );
break;
162 case YAlignCenter: clone->setTextAlignment( col, Qt::AlignCenter | Qt::AlignVCenter );
break;
163 case YAlignEnd: clone->setTextAlignment( col, Qt::AlignRight | Qt::AlignVCenter );
break;
165 case YAlignUnchanged:
break;
170 _qt_listView->sortItems( 0, Qt::AscendingOrder);
172 if ( resizeColumnsToContent )
174 for (
int i=0; i < columns(); i++ )
175 _qt_listView->resizeColumnToContents( i );
186 for ( YItemConstIterator it = itemCollection.begin();
187 it != itemCollection.end();
198 YItem * sel = YSelectionWidget::selectedItem();
203 for (
int i=0; i < columns(); i++ )
204 _qt_listView->resizeColumnToContents( i );
213 YTableItem * item =
dynamic_cast<YTableItem *
> (yitem);
214 YUI_CHECK_PTR( item );
217 YUI_CHECK_PTR( clone );
220 if ( ! selected && clone == _qt_listView->currentItem() )
226 if ( ! hasMultiSelection() )
227 _qt_listView->setCurrentItem( clone );
229 clone->setSelected(
true );
230 YTable::selectItem( item, selected );
240 YTable::deselectAllItems();
241 _qt_listView->clearSelection();
248 _qt_listView->
clear();
249 YTable::deleteAllItems();
256 YTableItem * item = cell->parent();
257 YUI_CHECK_PTR( item );
260 YUI_CHECK_PTR( clone );
272 YUI_CHECK_PTR( tableListViewItem );
274 YTable::selectItem( tableListViewItem->
origItem(), true );
282 if ( listViewItem && _qt_listView->selectedItems().count() > 0 )
288 if ( hasItems() && YSelectionWidget::hasSelectedItem() )
292 if ( immediateMode() )
298 yuiDebug() <<
"Sending SelectionChanged event" << std::endl;
308 YSelectionWidget::deselectAllItems();
309 yuiDebug() << std::endl;
311 QList<QTreeWidgetItem *> selItems = _qt_listView->selectedItems();
313 for ( QList<QTreeWidgetItem *>::iterator it = selItems.begin();
314 it != selItems.end();
319 if ( tableListViewItem )
321 tableListViewItem->
origItem()->setSelected(
true );
323 yuiDebug() <<
"Selected item: " << tableListViewItem->
origItem()->label() << std::endl;
327 if ( immediateMode() )
329 if ( !
YQUI::ui()->eventPendingFor(
this ) )
333 yuiDebug() <<
"Sending SelectionChanged event" << std::endl;
347 yuiDebug() <<
"Sending Activated event" << std::endl;
356 _qt_listView->setEnabled( enabled );
358 YWidget::setEnabled( enabled );
386 resize( newWidth, newHeight );
393 _qt_listView->setFocus();
402 if ( ! _qt_listView || ! _qt_listView->viewport() )
406 if ( notifyContextMenu() )
416 YTableItem * origItem )
419 , _origItem( origItem )
421 YUI_CHECK_PTR( _table );
422 YUI_CHECK_PTR( _origItem );
424 _origItem->setData(
this );
426 for ( YTableCellIterator it = _origItem->cellsBegin();
427 it != _origItem->cellsEnd();
441 int column = cell->column();
447 setText( column, fromUTF8( cell->label() ) );
454 if ( cell->hasIconName() )
458 string iconName = _table->iconFullPath( cell->iconName() );
459 QPixmap icon = QPixmap( iconName.c_str() );
462 yuiWarning() <<
"Can't load icon " << iconName << std::endl;
464 setData( column, Qt::DecorationRole, icon );
468 if ( ! data( column, Qt::DecorationRole ).isNull() )
470 setData( column, Qt::DecorationRole, QPixmap() );
476 #include "YQTable.moc"