1 /*---------------------------------------------------------------------\
3 | __ __ ____ _____ ____ |
4 | \ \ / /_ _/ ___|_ _|___ \ |
5 | \ V / _` \___ \ | | __) | |
6 | | | (_| |___) || | / __/ |
7 | |_|\__,_|____/ |_| |_____| |
11 \----------------------------------------------------------------------/
15 Author: Stefan Hundhammer <sh@suse.de>
19 #include <QHeaderView>
20 #include <QVBoxLayout>
22 #define y2log_component "qt-ui"
23 #include <ycp/y2log.h>
28 #include "YQSignalBlocker.h"
29 #include "YUIException.h"
31 #include "QY2ListView.h"
35 YQTable::YQTable( YWidget * parent, YTableHeader * tableHeader )
36 : QFrame( (QWidget *) parent->widgetRep() )
37 , YTable( parent, tableHeader )
40 QVBoxLayout* layout = new QVBoxLayout( this );
41 layout->setSpacing( 0 );
44 layout->setMargin( YQWidgetMargin );
46 _qt_listView = new QY2ListView( this );
47 YUI_CHECK_NEW( _qt_listView );
48 layout->addWidget( _qt_listView );
49 _qt_listView->setAllColumnsShowFocus( true );
57 _qt_listView->setColumnCount(columns());
58 for ( int i=0; i < columns(); i++ )
60 headers << QString::fromUtf8(header(i).c_str());
62 int qt_alignment = Qt::AlignLeft;
64 switch ( alignment( i ) )
66 case YAlignBegin: qt_alignment = Qt::AlignLeft; break;
67 case YAlignCenter: qt_alignment = Qt::AlignCenter; break;
68 case YAlignEnd: qt_alignment = Qt::AlignRight; break;
70 case YAlignUnchanged: break;
73 //FIXME _qt_listView->setColumnAlignment( i, qt_alignment );
74 // _qt_listView->adjustColumn( column );
76 _qt_listView->setHeaderLabels( headers );
79 // Connect signals and slots
82 connect( _qt_listView, SIGNAL( itemDoubleClicked ( QTreeWidgetItem *, int ) ),
83 this, SLOT ( slotActivated ( QTreeWidgetItem * ) ) );
85 connect( _qt_listView, SIGNAL( spacePressed ( QTreeWidgetItem * ) ),
86 this, SLOT ( slotActivated ( QTreeWidgetItem * ) ) );
88 connect( _qt_listView, SIGNAL( currentItemChanged ( QTreeWidgetItem *, QTreeWidgetItem * ) ),
89 this, SLOT ( slotSelected ( QTreeWidgetItem * ) ) );
100 YQTable::setKeepSorting( bool keepSorting )
102 YTable::setKeepSorting( keepSorting );
103 _qt_listView->setSortByInsertionSequence( keepSorting );
108 YQTable::addItem( YItem * yitem )
110 YTableItem * item = dynamic_cast<YTableItem *> (yitem);
111 YUI_CHECK_PTR( item );
113 YTable::addItem( item );
115 YQTableListViewItem * clone = new YQTableListViewItem( this, _qt_listView, item );
116 YUI_CHECK_NEW( clone );
118 if ( item->selected() )
120 YQSignalBlocker sigBlocker( _qt_listView );
121 clone->setSelected(true);
127 YQTable::selectItem( YItem * yitem, bool selected )
129 YQSignalBlocker sigBlocker( _qt_listView );
131 YTableItem * item = dynamic_cast<YTableItem *> (yitem);
132 YUI_CHECK_PTR( item );
134 YQTableListViewItem * clone = (YQTableListViewItem *) item->data();
135 YUI_CHECK_PTR( clone );
137 //FIXME selected first
138 if ( ! selected && clone == _qt_listView->currentItem() )
144 clone->setSelected( true );
145 YTable::selectItem( item, selected );
151 YQTable::deselectAllItems()
153 YQSignalBlocker sigBlocker( _qt_listView );
155 YTable::deselectAllItems();
156 _qt_listView->clearSelection();
161 YQTable::deleteAllItems()
163 _qt_listView->clear();
164 YTable::deleteAllItems();
169 YQTable::cellChanged( const YTableCell * cell )
171 YTableItem * item = cell->parent();
172 YUI_CHECK_PTR( item );
174 YQTableListViewItem * clone = (YQTableListViewItem *) item->data();
175 YUI_CHECK_PTR( clone );
177 clone->updateCell( cell );
182 YQTable::selectOrigItem( QTreeWidgetItem * listViewItem )
186 YQTableListViewItem * tableListViewItem = dynamic_cast<YQTableListViewItem *> (listViewItem);
187 YUI_CHECK_PTR( tableListViewItem );
189 YTable::selectItem( tableListViewItem->origItem(), true );
195 YQTable::slotSelected( QTreeWidgetItem * listViewItem )
197 selectOrigItem( listViewItem );
199 if ( immediateMode() )
201 if ( ! YQUI::ui()->eventPendingFor( this ) )
203 // Avoid overwriting a (more important) Activated event with a SelectionChanged event
205 YQUI::ui()->sendEvent( new YWidgetEvent( this, YEvent::SelectionChanged ) );
212 YQTable::slotActivated( QTreeWidgetItem * listViewItem )
214 selectOrigItem( listViewItem );
217 YQUI::ui()->sendEvent( new YWidgetEvent( this, YEvent::Activated ) );
222 YQTable::setEnabled( bool enabled )
224 _qt_listView->setEnabled( enabled );
225 //FIXME _qt_listView->triggerUpdate();
226 YWidget::setEnabled( enabled );
232 YQTable::preferredWidth()
235 // Use a MinSize widget to set a size that is useful for the application.
242 YQTable::preferredHeight()
245 // Use a MinSize widget to set a size that is useful for the application.
252 YQTable::setSize( int newWidth, int newHeight )
254 resize( newWidth, newHeight );
259 YQTable::setKeyboardFocus()
261 _qt_listView->setFocus();
271 YQTableListViewItem::YQTableListViewItem( YQTable * table,
272 QY2ListView * parent,
273 YTableItem * origItem )
274 : QY2ListViewItem( parent )
276 , _origItem( origItem )
278 YUI_CHECK_PTR( _table );
279 YUI_CHECK_PTR( _origItem );
281 _origItem->setData( this );
283 for ( YTableCellIterator it = _origItem->cellsBegin();
284 it != _origItem->cellsEnd();
290 if ( _origItem->selected() )
291 QY2ListViewItem::setSelected( true );
296 YQTableListViewItem::updateCell( const YTableCell * cell )
301 int column = cell->column();
307 setText( column, fromUTF8( cell->label() ) );
311 // Set icon (if specified)
314 if ( cell->hasIconName() )
316 // _table is checked against 0 in the constructor
318 string iconName = _table->iconFullPath( cell->iconName() );
319 QPixmap icon = QPixmap( iconName.c_str() );
322 y2warning( "Can't load icon %s", iconName.c_str() );
324 setData( column, Qt::DecorationRole, icon );
326 else // No pixmap name
328 if ( ! data( column, Qt::DecorationRole ).isNull() ) // Was there a pixmap before?
330 setData( column, Qt::DecorationRole, QPixmap() ); // Set empty pixmap
336 #include "YQTable.moc"