24 #include <tdeglobalsettings.h>
26 #include "kwidgetlist.h"
28 class KWidgetList::Private
36 TQValueList<KWidgetListItem*> mItems;
37 KWidgetListItem *mSelectedItem;
41 KWidgetList::KWidgetList( TQWidget *parent,
const char *name )
42 : TQScrollView( parent, name ),
45 d->mBox =
new TQVBox( viewport() );
48 setResizePolicy( AutoOneFit );
49 setFocusPolicy( TQ_StrongFocus );
51 viewport()->setFocus();
54 KWidgetList::~KWidgetList()
62 uint KWidgetList::count()
const
64 return d->mItems.count();
67 void KWidgetList::appendItem( KWidgetListItem *item )
72 if ( !d->mItems.contains( item ) ) {
73 d->mItems.append( item );
74 item->reparent( d->mBox, 0, TQPoint( 0, 0 ),
true );
75 item->setSelected(
false );
76 item->installEventFilter(
this );
78 if ( d->mItems.count() == 1 ) {
79 d->mSelectedItem = item;
81 if ( !d->mSelectedItem )
84 d->mSelectedItem->setSelected(
true );
89 void KWidgetList::removeItem(
int index )
91 if ( index < 0 || index >= (
int)d->mItems.count() )
94 KWidgetListItem *item = d->mItems[ index ];
95 d->mItems.remove( item );
97 if ( d->mSelectedItem == item ) {
99 if ( !d->mItems.isEmpty() )
100 setSelected( d->mItems.first() );
102 d->mSelectedItem = 0;
107 if ( d->mItems.count() == 1 )
108 d->mItems.first()->setSelected(
false );
111 void KWidgetList::takeItem( KWidgetListItem *item )
113 d->mItems.remove( item );
114 item->reparent( 0, 0, TQPoint( 0, 0 ) );
115 item->removeEventFilter(
this );
118 if ( d->mSelectedItem == item ) {
120 if ( !d->mItems.isEmpty() )
121 setSelected( d->mItems.first() );
123 d->mSelectedItem = 0;
127 void KWidgetList::setSelected( KWidgetListItem *item )
132 if ( d->mItems.contains( item ) == 0 )
135 if ( d->mSelectedItem )
136 d->mSelectedItem->setSelected(
false );
138 item->setSelected(
true );
139 d->mSelectedItem = item;
142 void KWidgetList::setSelected(
int index )
144 setSelected( item( index ) );
147 bool KWidgetList::isSelected( KWidgetListItem *item )
const
149 return ( d->mSelectedItem == item );
152 bool KWidgetList::isSelected(
int index )
const
154 return isSelected( item( index ) );
157 KWidgetListItem *KWidgetList::selectedItem()
const
159 return d->mSelectedItem;
162 KWidgetListItem *KWidgetList::item(
int index )
const
164 if ( index < 0 || index >= (
int)d->mItems.count() )
167 return d->mItems[ index ];
170 int KWidgetList::index( KWidgetListItem *item )
const
172 return d->mItems.findIndex( item );
175 void KWidgetList::clear()
177 TQValueList<KWidgetListItem*>::Iterator it;
178 for ( it = d->mItems.begin(); it != d->mItems.end(); ++it )
183 d->mSelectedItem = 0;
186 void KWidgetList::setFocus()
188 viewport()->setFocus();
191 bool KWidgetList::eventFilter( TQObject *
object, TQEvent *event )
193 if ( event->type() == TQEvent::MouseButtonPress ) {
194 TQMouseEvent *mouseEvent = TQT_TQMOUSEEVENT( event );
195 if ( mouseEvent->button() & TQt::LeftButton ) {
196 TQValueList<KWidgetListItem*>::Iterator it;
197 for ( it = d->mItems.begin(); it != d->mItems.end(); ++it ) {
198 if ( TQT_BASE_OBJECT(*it) == TQT_BASE_OBJECT(
object) ) {
199 if ( d->mItems.count() != 1 ) {
201 emit selectionChanged( *it );
207 }
else if ( event->type() == TQEvent::MouseButtonDblClick ) {
208 TQValueList<KWidgetListItem*>::Iterator it;
209 for ( it = d->mItems.begin(); it != d->mItems.end(); ++it ) {
210 if ( TQT_BASE_OBJECT(*it) == TQT_BASE_OBJECT(
object) ) {
211 if ( d->mItems.count() != 1 ) {
213 emit doubleClicked( *it );
218 }
else if ( event->type() == TQEvent::KeyPress ) {
219 TQKeyEvent *keyEvent = TQT_TQKEYEVENT( event );
220 if ( keyEvent->key() == TQt::Key_Up ) {
221 if ( d->mSelectedItem == 0 ) {
222 if ( !d->mItems.isEmpty() ) {
223 setSelected( d->mItems.first() );
228 for (
int i = 0; i < (int)d->mItems.count(); ++i ) {
229 if ( d->mItems[ i ] == d->mSelectedItem ) {
230 if ( ( i - 1 ) >= 0 ) {
231 setSelected( d->mItems[ i - 1 ] );
237 }
else if ( keyEvent->key() == TQt::Key_Down ) {
238 if ( d->mSelectedItem == 0 ) {
239 if ( !d->mItems.isEmpty() ) {
240 setSelected( d->mItems.last() );
245 for (
int i = 0; i < (int)d->mItems.count(); ++i )
246 if ( d->mItems[ i ] == d->mSelectedItem ) {
247 if ( ( i + 1 ) < (int)d->mItems.count() ) {
248 setSelected( d->mItems[ i + 1 ] );
256 return TQScrollView::eventFilter(
object, event );
259 KWidgetListItem::KWidgetListItem( KWidgetList *parent,
const char *name )
260 : TQWidget( parent, name )
262 mForegroundColor = TDEGlobalSettings::textColor();
263 mBackgroundColor = TDEGlobalSettings::baseColor();
264 mSelectionForegroundColor = TDEGlobalSettings::highlightedTextColor();
265 mSelectionBackgroundColor = TDEGlobalSettings::highlightColor();
267 setFocusPolicy( TQ_StrongFocus );
270 KWidgetListItem::~KWidgetListItem()
274 void KWidgetListItem::setSelected(
bool select )
277 setPaletteForegroundColor( mSelectionForegroundColor );
278 setPaletteBackgroundColor( mSelectionBackgroundColor );
280 setPaletteForegroundColor( mForegroundColor );
281 setPaletteBackgroundColor( mBackgroundColor );
285 void KWidgetListItem::setForegroundColor(
const TQColor &color )
287 mForegroundColor = color;
290 void KWidgetListItem::setBackgroundColor(
const TQColor &color )
292 mBackgroundColor = color;
295 void KWidgetListItem::setSelectionForegroundColor(
const TQColor &color )
297 mSelectionForegroundColor = color;
300 void KWidgetListItem::setSelectionBackgroundColor(
const TQColor &color )
302 mSelectionBackgroundColor = color;
305 #include "kwidgetlist.moc"