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 _qt_listView->addColumn( fromUTF8( header( i ) ) );
59 int qt_alignment = Qt::Left;
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 _qt_listView->setColumnAlignment( i, qt_alignment );
71 // _qt_listView->adjustColumn( column );
76 // Connect signals and slots
79 connect( _qt_listView, SIGNAL( doubleClicked ( Q3ListViewItem * ) ),
80 this, SLOT ( slotActivated ( Q3ListViewItem * ) ) );
82 connect( _qt_listView, SIGNAL( spacePressed ( Q3ListViewItem * ) ),
83 this, SLOT ( slotActivated ( Q3ListViewItem * ) ) );
85 connect( _qt_listView, SIGNAL( selectionChanged ( Q3ListViewItem * ) ),
86 this, SLOT ( slotSelected ( Q3ListViewItem * ) ) );
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 _qt_listView->setSelected( clone, 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 if ( ! selected && clone == _qt_listView->selectedItem() )
140 _qt_listView->setSelected( clone, true );
141 YTable::selectItem( item, selected );
147 YQTable::deselectAllItems()
149 YQSignalBlocker sigBlocker( _qt_listView );
151 YTable::deselectAllItems();
152 _qt_listView->clearSelection();
157 YQTable::deleteAllItems()
159 _qt_listView->clear();
160 YTable::deleteAllItems();
165 YQTable::cellChanged( const YTableCell * cell )
167 YTableItem * item = cell->parent();
168 YUI_CHECK_PTR( item );
170 YQTableListViewItem * clone = (YQTableListViewItem *) item->data();
171 YUI_CHECK_PTR( clone );
173 clone->updateCell( cell );
178 YQTable::selectOrigItem( Q3ListViewItem * listViewItem )
182 YQTableListViewItem * tableListViewItem = dynamic_cast<YQTableListViewItem *> (listViewItem);
183 YUI_CHECK_PTR( tableListViewItem );
185 YTable::selectItem( tableListViewItem->origItem(), true );
191 YQTable::slotSelected( Q3ListViewItem * listViewItem )
193 selectOrigItem( listViewItem );
195 if ( immediateMode() )
197 if ( ! YQUI::ui()->eventPendingFor( this ) )
199 // Avoid overwriting a (more important) Activated event with a SelectionChanged event
201 YQUI::ui()->sendEvent( new YWidgetEvent( this, YEvent::SelectionChanged ) );
208 YQTable::slotActivated( Q3ListViewItem * listViewItem )
210 selectOrigItem( listViewItem );
213 YQUI::ui()->sendEvent( new YWidgetEvent( this, YEvent::Activated ) );
218 YQTable::setEnabled( bool enabled )
220 _qt_listView->setEnabled( enabled );
221 _qt_listView->triggerUpdate();
222 YWidget::setEnabled( enabled );
228 YQTable::preferredWidth()
231 // Use a MinSize widget to set a size that is useful for the application.
238 YQTable::preferredHeight()
241 // Use a MinSize widget to set a size that is useful for the application.
248 YQTable::setSize( int newWidth, int newHeight )
250 resize( newWidth, newHeight );
255 YQTable::setKeyboardFocus()
257 _qt_listView->setFocus();
267 YQTableListViewItem::YQTableListViewItem( YQTable * table,
268 QY2ListView * parent,
269 YTableItem * origItem )
270 : QY2ListViewItem( parent )
272 , _origItem( origItem )
274 YUI_CHECK_PTR( _table );
275 YUI_CHECK_PTR( _origItem );
277 _origItem->setData( this );
279 for ( YTableCellIterator it = _origItem->cellsBegin();
280 it != _origItem->cellsEnd();
286 if ( _origItem->selected() )
287 QY2ListViewItem::setSelected( true );
292 YQTableListViewItem::updateCell( const YTableCell * cell )
297 int column = cell->column();
303 setText( column, fromUTF8( cell->label() ) );
307 // Set icon (if specified)
310 if ( cell->hasIconName() )
312 // _table is checked against 0 in the constructor
314 string iconName = _table->iconFullPath( cell->iconName() );
315 QPixmap icon = QPixmap( iconName.c_str() );
318 y2warning( "Can't load icon %s", iconName.c_str() );
320 setPixmap( column, icon );
322 else // No pixmap name
324 if ( pixmap( column ) ) // Was there a pixmap before?
326 setPixmap( column, QPixmap() ); // Set empty pixmap
332 #include "YQTable.moc"