1 #include "OB_ListView.h"
4 #include "OB_ListItem.h"
6 #include <SUIT_DataObject.h>
8 #include <qdragobject.h>
10 OB_ListView::OB_ListView( QWidget* parent, const char* name, WFlags f )
11 : QtxListView( parent, name, f ),
16 OB_ListView::OB_ListView( const int state, QWidget* parent, const char* name, WFlags f )
17 : QtxListView( state, parent, name, f ),
22 OB_ListView::~OB_ListView()
27 OB_Filter* OB_ListView::filter() const
32 void OB_ListView::setFilter( OB_Filter* f )
41 bool OB_ListView::isOk( QListViewItem* item ) const
44 SUIT_DataObject* obj = dataObject( item );
45 if ( obj && filter() )
46 ok = filter()->isOk( obj );
50 QDragObject* OB_ListView::dragObject()
54 for ( QListViewItemIterator it( this ); it.current(); ++it )
55 if ( it.current()->isSelected() )
56 myItems.append( it.current() );
58 return new QTextDrag( "", this );
61 void OB_ListView::dragEnterEvent( QDragEnterEvent* e )
66 void OB_ListView::dragMoveEvent( QDragMoveEvent* e )
68 QListViewItem* item = dropItem( e );
70 if ( isDropAccepted( item ) )
72 setCurrentItem( item );
79 void OB_ListView::dropEvent( QDropEvent* e )
81 QListViewItem* item = dropItem( e );
82 if ( isDropAccepted( item ) )
85 emit dropped( myItems, item, e->action() );
90 void OB_ListView::keyPressEvent( QKeyEvent* ke )
92 if ( ( ke->key() == Qt::Key_Plus || ke->key() == Qt::Key_Minus ) && ke->state() & ControlButton )
94 bool isOpen = ke->key() == Qt::Key_Plus;
95 for ( QListViewItemIterator it( this ); it.current(); ++it )
96 if ( it.current()->childCount() )
97 it.current()->setOpen( isOpen );
100 QtxListView::keyPressEvent( ke );
103 QListViewItem* OB_ListView::dropItem( QDropEvent* e ) const
105 QListViewItem* item = 0;
107 item = itemAt( QPoint( e->pos().x() - viewport()->x(), e->pos().y() - viewport()->y() ) );
112 SUIT_DataObject* OB_ListView::dataObject( QListViewItem* item ) const
117 SUIT_DataObject* obj = 0;
119 if ( dynamic_cast<OB_ListItem*>( item ) )
120 obj = dynamic_cast<OB_ListItem*>( item )->dataObject();
121 else if ( dynamic_cast<OB_CheckListItem*>( item ) )
122 obj = dynamic_cast<OB_CheckListItem*>( item )->dataObject();
127 bool OB_ListView::isDropAccepted( QListViewItem* item ) const
131 for ( QPtrListIterator<QListViewItem> it( myItems ); it.current() && res; ++it )
132 res = res && isDropAccepted( it.current(), item );
137 bool OB_ListView::isDropAccepted( QListViewItem* drag, QListViewItem* drop ) const
139 SUIT_DataObject* dragObj = dataObject( drag );
140 SUIT_DataObject* dropObj = dataObject( drop );
142 if ( !dragObj || !dropObj )
145 return dropObj->isDropAccepted( dragObj );