1 /*---------------------------------------------------------------------\
3 | __ __ ____ _____ ____ |
4 | \ \ / /_ _/ ___|_ _|___ \ |
5 | \ V / _` \___ \ | | __) | |
6 | | | (_| |___) || | / __/ |
7 | |_|\__,_|____/ |_| |_____| |
11 \----------------------------------------------------------------------/
15 Author: Stefan Hundhammer <sh@suse.de>
20 #include <QVBoxLayout>
21 #define y2log_component "qt-ui"
22 #include <ycp/y2log.h>
27 #include "YQSignalBlocker.h"
28 #include "YUIException.h"
30 #include "QY2ListView.h"
34 YQTable::YQTable( YWidget * parent, YTableHeader * tableHeader )
35 : QFrame( (QWidget *) parent->widgetRep() )
36 , YTable( parent, tableHeader )
39 QVBoxLayout* layout = new QVBoxLayout( this );
40 layout->setSpacing( 0 );
43 layout->setMargin( YQWidgetMargin );
45 _qt_listView = new QY2ListView( this );
46 YUI_CHECK_NEW( _qt_listView );
47 layout->addWidget( _qt_listView );
48 _qt_listView->setAllColumnsShowFocus( true );
55 for ( int i=0; i < columns(); i++ )
57 //FIXME _qt_listView->addColumn( fromUTF8( header( i ) ) );
59 int qt_alignment = Qt::AlignLeft;
61 switch ( alignment( i ) )
63 case YAlignBegin: qt_alignment = Qt::AlignLeft; break;
64 case YAlignCenter: qt_alignment = Qt::AlignCenter; break;
65 case YAlignEnd: qt_alignment = Qt::AlignRight; break;
67 case YAlignUnchanged: break;
70 //FIXME _qt_listView->setColumnAlignment( i, qt_alignment );
71 // _qt_listView->adjustColumn( column );
76 // Connect signals and slots
79 connect( _qt_listView, SIGNAL( doubleClicked ( QTreeWidgetItem * ) ),
80 this, SLOT ( slotActivated ( QTreeWidgetItem * ) ) );
82 connect( _qt_listView, SIGNAL( spacePressed ( QTreeWidgetItem * ) ),
83 this, SLOT ( slotActivated ( QTreeWidgetItem * ) ) );
85 connect( _qt_listView, SIGNAL( selectionChanged ( QTreeWidgetItem * ) ),
86 this, SLOT ( slotSelected ( QTreeWidgetItem * ) ) );
97 YQTable::setKeepSorting( bool keepSorting )
99 YTable::setKeepSorting( keepSorting );
100 _qt_listView->setSortByInsertionSequence( keepSorting );
105 YQTable::addItem( YItem * yitem )
107 YTableItem * item = dynamic_cast<YTableItem *> (yitem);
108 YUI_CHECK_PTR( item );
110 YTable::addItem( item );
112 YQTableListViewItem * clone = new YQTableListViewItem( this, _qt_listView, item );
113 YUI_CHECK_NEW( clone );
115 if ( item->selected() )
117 YQSignalBlocker sigBlocker( _qt_listView );
118 clone->setSelected(true);
124 YQTable::selectItem( YItem * yitem, bool selected )
126 YQSignalBlocker sigBlocker( _qt_listView );
128 YTableItem * item = dynamic_cast<YTableItem *> (yitem);
129 YUI_CHECK_PTR( item );
131 YQTableListViewItem * clone = (YQTableListViewItem *) item->data();
132 YUI_CHECK_PTR( clone );
134 //FIXME selected first
135 if ( ! selected && clone == _qt_listView->currentItem() )
141 clone->setSelected( true );
142 YTable::selectItem( item, selected );
148 YQTable::deselectAllItems()
150 YQSignalBlocker sigBlocker( _qt_listView );
152 YTable::deselectAllItems();
153 _qt_listView->clearSelection();
158 YQTable::deleteAllItems()
160 _qt_listView->clear();
161 YTable::deleteAllItems();
166 YQTable::cellChanged( const YTableCell * cell )
168 YTableItem * item = cell->parent();
169 YUI_CHECK_PTR( item );
171 YQTableListViewItem * clone = (YQTableListViewItem *) item->data();
172 YUI_CHECK_PTR( clone );
174 clone->updateCell( cell );
179 YQTable::selectOrigItem( QTreeWidgetItem * listViewItem )
183 YQTableListViewItem * tableListViewItem = dynamic_cast<YQTableListViewItem *> (listViewItem);
184 YUI_CHECK_PTR( tableListViewItem );
186 YTable::selectItem( tableListViewItem->origItem(), true );
192 YQTable::slotSelected( QTreeWidgetItem * listViewItem )
194 selectOrigItem( listViewItem );
196 if ( immediateMode() )
198 if ( ! YQUI::ui()->eventPendingFor( this ) )
200 // Avoid overwriting a (more important) Activated event with a SelectionChanged event
202 YQUI::ui()->sendEvent( new YWidgetEvent( this, YEvent::SelectionChanged ) );
209 YQTable::slotActivated( QTreeWidgetItem * listViewItem )
211 selectOrigItem( listViewItem );
214 YQUI::ui()->sendEvent( new YWidgetEvent( this, YEvent::Activated ) );
219 YQTable::setEnabled( bool enabled )
221 _qt_listView->setEnabled( enabled );
222 //FIXME _qt_listView->triggerUpdate();
223 YWidget::setEnabled( enabled );
229 YQTable::preferredWidth()
232 // Use a MinSize widget to set a size that is useful for the application.
239 YQTable::preferredHeight()
242 // Use a MinSize widget to set a size that is useful for the application.
249 YQTable::setSize( int newWidth, int newHeight )
251 resize( newWidth, newHeight );
256 YQTable::setKeyboardFocus()
258 _qt_listView->setFocus();
268 YQTableListViewItem::YQTableListViewItem( YQTable * table,
269 QY2ListView * parent,
270 YTableItem * origItem )
271 : QY2ListViewItem( parent )
273 , _origItem( origItem )
275 YUI_CHECK_PTR( _table );
276 YUI_CHECK_PTR( _origItem );
278 _origItem->setData( this );
280 for ( YTableCellIterator it = _origItem->cellsBegin();
281 it != _origItem->cellsEnd();
287 if ( _origItem->selected() )
288 QY2ListViewItem::setSelected( true );
293 YQTableListViewItem::updateCell( const YTableCell * cell )
298 int column = cell->column();
304 setText( column, fromUTF8( cell->label() ) );
308 // Set icon (if specified)
311 if ( cell->hasIconName() )
313 // _table is checked against 0 in the constructor
315 string iconName = _table->iconFullPath( cell->iconName() );
316 QPixmap icon = QPixmap( iconName.c_str() );
319 y2warning( "Can't load icon %s", iconName.c_str() );
321 setData( column, Qt::DecorationRole, icon );
323 else // No pixmap name
325 if ( ! data( column, Qt::DecorationRole ).isNull() ) // Was there a pixmap before?
327 setData( column, Qt::DecorationRole, QPixmap() ); // Set empty pixmap
333 #include "YQTable.moc"