Source Code (Use browser search to find items of interest.)
Class Index
kdelibs'KListView (./kdelibs/kdeui/klistview.h:37)
class KListView : public QListView
{
Q_OBJECT
public:
KListView( QWidget *parent = 0, const char *name = 0 );
/**
* This function determines whether the given coordinates are within the
* execute area. The execute area is the part of an QListViewItem where mouse
* clicks or double clicks respectively generate a executed() signal.
* Depending on @ref QListView::allColumnsShowFocus() this is either the
* whole item or only the first column.
* @return true if point is inside execute area of an item, false in all
* other cases including the case that it is over the viewport.
*/
virtual bool isExecuteArea( const QPoint& point );
signals:
/**
* This signal is emitted whenever the user executes an listview item.
* That means depending on the KDE wide Single Click/Double Click
* setting the user clicked or double clicked on that item.
* @param item is the pointer to the executed listview item.
*
* Note that you may not delete any @ref QListViewItem objects in slots
* connected to this signal.
*/
void executed( QListViewItem *item );
/**
* This signal is emitted whenever the user executes an listview item.
* That means depending on the KDE wide Single Click/Double Click
* setting the user clicked or double clicked on that item.
* @param item is the pointer to the executed listview item.
* @param pos is the position where the user has clicked
* @param c is the column into which the user clicked.
*
* Note that you may not delete any @ref QListViewItem objects in slots
* connected to this signal.
*/
void executed( QListViewItem *item, const QPoint &pos, int c );
/**
* This signal gets emitted whenever the user double clicks into the
* listview.
* @param item is the pointer to the clicked listview item.
* @param pos is the position where the user has clicked, and
* @param c the column into which the user clicked.
*
* Note that you may not delete any @ref QListViewItem objects in slots
* connected to this signal.
*
* This signal is more or less here for the sake of completeness.
* You should normally not need to use this. In most cases itīs better
* to use @ref #executed instead.
*/
void doubleClicked( QListViewItem *item, const QPoint &pos, int c );
protected slots:
void slotOnItem( QListViewItem *item );
void slotOnViewport();
void slotSettingsChanged(int);
/**
* Auto selection happend.
*/
void slotAutoSelect();
protected:
void emitExecute( QListViewItem *item, const QPoint &pos, int c );
virtual void focusOutEvent( QFocusEvent *fe );
virtual void leaveEvent( QEvent *e );
virtual void contentsMousePressEvent( QMouseEvent *e );
virtual void contentsMouseMoveEvent( QMouseEvent *e );
virtual void contentsMouseDoubleClickEvent ( QMouseEvent *e );
QCursor oldCursor;
bool m_bUseSingle;
bool m_bChangeCursorOverItem;
QListViewItem* m_pCurrentItem;
bool m_cursorInExecuteArea;
QTimer* m_pAutoSelect;
int m_autoSelectDelay;
private slots:
void slotMouseButtonClicked( int btn, QListViewItem *item, const QPoint &pos, int c );
private:
class KListViewPrivate;
KListViewPrivate *d;
};
kdelibs'KListView::KListView() (./kdelibs/kdeui/klistview.cpp:32)
KListView::KListView( QWidget *parent, const char *name )
: QListView( parent, name )
{
oldCursor = viewport()->cursor();
connect( this, SIGNAL( onViewport() ),
this, SLOT( slotOnViewport() ) );
connect( this, SIGNAL( onItem( QListViewItem * ) ),
this, SLOT( slotOnItem( QListViewItem * ) ) );
slotSettingsChanged(KApplication::SETTINGS_MOUSE);
connect( kapp, SIGNAL( settingsChanged(int) ), SLOT( slotSettingsChanged(int) ) );
kapp->addKipcEventMask( KIPC::SettingsChanged );
m_pCurrentItem = 0L;
m_pAutoSelect = new QTimer( this );
connect( m_pAutoSelect, SIGNAL( timeout() ),
this, SLOT( slotAutoSelect() ) );
}
kdelibs'KListView::isExecuteArea() (./kdelibs/kdeui/klistview.cpp:52)
bool KListView::isExecuteArea( const QPoint& point )
{
if ( itemAt( point ) )
{
if( allColumnsShowFocus() )
return true;
else {
int x = point.x();
int pos = header()->mapToActual( 0 );
int offset = 0;
int width = columnWidth( pos );
for ( int index = 0; index < pos; index++ )
offset += columnWidth( index );
return ( x > offset && x < ( offset + width ) );
}
}
return false;
}
kdelibs'KListView::slotOnItem() (./kdelibs/kdeui/klistview.cpp:74)
void KListView::slotOnItem( QListViewItem *item )
{
if ( item && (m_autoSelectDelay > -1) && m_bUseSingle ) {
m_pAutoSelect->start( m_autoSelectDelay, true );
m_pCurrentItem = item;
}
}
kdelibs'KListView::slotOnViewport() (./kdelibs/kdeui/klistview.cpp:82)
void KListView::slotOnViewport()
{
if ( m_bChangeCursorOverItem )
viewport()->setCursor( oldCursor );
m_pAutoSelect->stop();
m_pCurrentItem = 0L;
}
kdelibs'KListView::slotSettingsChanged() (./kdelibs/kdeui/klistview.cpp:91)
void KListView::slotSettingsChanged(int category)
{
if (category != KApplication::SETTINGS_MOUSE)
return;
m_bUseSingle = KGlobalSettings::singleClick();
disconnect( this, SIGNAL( mouseButtonClicked( int, QListViewItem *,
const QPoint &, int ) ),
this, SLOT( slotMouseButtonClicked( int, QListViewItem *,
const QPoint &, int ) ) );
// disconnect( this, SIGNAL( doubleClicked( QListViewItem *,
// const QPoint &, int ) ),
// this, SLOT( slotExecute( QListViewItem *,
// const QPoint &, int ) ) );
if( m_bUseSingle )
{
connect( this, SIGNAL( mouseButtonClicked( int, QListViewItem *,
const QPoint &, int ) ),
this, SLOT( slotMouseButtonClicked( int, QListViewItem *,
const QPoint &, int ) ) );
}
else
{
// connect( this, SIGNAL( doubleClicked( QListViewItem *,
// const QPoint &, int ) ),
// this, SLOT( slotExecute( QListViewItem *,
// const QPoint &, int ) ) );
}
m_bChangeCursorOverItem = KGlobalSettings::changeCursorOverIcon();
m_autoSelectDelay = KGlobalSettings::autoSelectDelay();
if( !m_bUseSingle || !m_bChangeCursorOverItem )
viewport()->setCursor( oldCursor );
}
kdelibs'KListView::slotAutoSelect() (./kdelibs/kdeui/klistview.cpp:128)
void KListView::slotAutoSelect()
{
//Give this widget the keyboard focus.
if( !hasFocus() )
setFocus();
Window root;
Window child;
int root_x, root_y, win_x, win_y;
uint keybstate;
XQueryPointer( qt_xdisplay(), qt_xrootwin(), &root, &child,
&root_x, &root_y, &win_x, &win_y, &keybstate );
QListViewItem* previousItem = currentItem();
setCurrentItem( m_pCurrentItem );
if( m_pCurrentItem ) {
//Shift pressed?
if( (keybstate & ShiftMask) ) {
bool block = signalsBlocked();
blockSignals( true );
//No Ctrl? Then clear before!
if( !(keybstate & ControlMask) )
clearSelection();
bool select = !m_pCurrentItem->isSelected();
bool update = viewport()->isUpdatesEnabled();
viewport()->setUpdatesEnabled( false );
bool down = previousItem->itemPos() < m_pCurrentItem->itemPos();
QListViewItemIterator lit( down ? previousItem : m_pCurrentItem );
for ( ; lit.current(); ++lit ) {
if ( down && lit.current() == m_pCurrentItem ) {
m_pCurrentItem->setSelected( select );
break;
}
if ( !down && lit.current() == previousItem ) {
previousItem->setSelected( select );
break;
}
lit.current()->setSelected( select );
}
blockSignals( block );
viewport()->setUpdatesEnabled( update );
triggerUpdate();
emit selectionChanged();
if( selectionMode() == QListView::Single )
emit selectionChanged( m_pCurrentItem );
}
else if( (keybstate & ControlMask) )
setSelected( m_pCurrentItem, !m_pCurrentItem->isSelected() );
else {
bool block = signalsBlocked();
blockSignals( true );
if( !m_pCurrentItem->isSelected() )
clearSelection();
blockSignals( block );
setSelected( m_pCurrentItem, true );
}
}
else
kdDebug() << "Thatīs not supposed to happen!!!!" << endl;
}
kdelibs'KListView::emitExecute() (./kdelibs/kdeui/klistview.cpp:199)
void KListView::emitExecute( QListViewItem *item, const QPoint &pos, int c )
{
if( isExecuteArea( viewport()->mapFromGlobal(pos) ) ) {
Window root;
Window child;
int root_x, root_y, win_x, win_y;
uint keybstate;
XQueryPointer( qt_xdisplay(), qt_xrootwin(), &root, &child,
&root_x, &root_y, &win_x, &win_y, &keybstate );
m_pAutoSelect->stop();
//Donīt emit executed if in SC mode and Shift or Ctrl are pressed
if( !( m_bUseSingle && ((keybstate & ShiftMask) || (keybstate & ControlMask)) ) ) {
emit executed( item );
emit executed( item, pos, c );
}
}
}
kdelibs'KListView::focusOutEvent() (./kdelibs/kdeui/klistview.cpp:220)
void KListView::focusOutEvent( QFocusEvent *fe )
{
m_pAutoSelect->stop();
QListView::focusOutEvent( fe );
}
kdelibs'KListView::leaveEvent() (./kdelibs/kdeui/klistview.cpp:227)
void KListView::leaveEvent( QEvent *e )
{
m_pAutoSelect->stop();
QListView::leaveEvent( e );
}
kdelibs'KListView::contentsMousePressEvent() (./kdelibs/kdeui/klistview.cpp:234)
void KListView::contentsMousePressEvent( QMouseEvent *e )
{
if( (selectionMode() == Extended) && (e->state() & ShiftButton) && !(e->state() & ControlButton) ) {
bool block = signalsBlocked();
blockSignals( true );
clearSelection();
blockSignals( block );
}
QListView::contentsMousePressEvent( e );
}
kdelibs'KListView::contentsMouseMoveEvent() (./kdelibs/kdeui/klistview.cpp:248)
void KListView::contentsMouseMoveEvent( QMouseEvent *e )
{
QPoint vp = contentsToViewport(e->pos());
QListViewItem *item = itemAt( vp );
//do we process cursor changes at all?
if ( item && m_bChangeCursorOverItem && m_bUseSingle ) {
//Cursor moved on a new item or in/out the execute area
if( (item != m_pCurrentItem) ||
(isExecuteArea(vp) != m_cursorInExecuteArea) ) {
m_cursorInExecuteArea = isExecuteArea(vp);
if( m_cursorInExecuteArea ) //cursor moved in execute area
viewport()->setCursor( KCursor().handCursor() );
else //cursor moved out of execute area
viewport()->setCursor( oldCursor );
}
}
QListView::contentsMouseMoveEvent( e );
}
kdelibs'KListView::contentsMouseDoubleClickEvent() (./kdelibs/kdeui/klistview.cpp:271)
void KListView::contentsMouseDoubleClickEvent ( QMouseEvent *e )
{
QListView::contentsMouseDoubleClickEvent( e );
QPoint vp = contentsToViewport(e->pos());
QListViewItem *item = itemAt( vp );
int col = item ? header()->mapToLogical( header()->cellAt( vp.x() ) ) : -1;
if( item ) {
emit doubleClicked( item, e->globalPos(), col );
if( (e->button() == LeftButton) && !m_bUseSingle )
emitExecute( item, e->globalPos(), col );
}
}
kdelibs'KListView::slotMouseButtonClicked() (./kdelibs/kdeui/klistview.cpp:287)
void KListView::slotMouseButtonClicked( int btn, QListViewItem *item, const QPoint &pos, int c )
{
if( (btn == LeftButton) && item )
emitExecute( item, pos, c );
}