Source Code (Use browser search to find items of interest.)
Class Index
klipper'KEditableListView (./kdeutils/klipper/keditablelistview.h:42)
class KEditableListView : public QListView
{
Q_OBJECT
public:
/**
* The usual constructor, nothing special here.
*/
KEditableListView( QWidget *parent = 0L, const char *name = 0L );
/**
* The usual destructor, nothing special here.
*/
~KEditableListView();
/**
* Makes the item in column col editable / not editable
* By default, all items/all columns are editable (otherwise you wouldn't
* use this class, would you? :o)
*/
void setEditable( QListViewItem *item, int col, bool enable );
protected:
virtual void keyPressEvent( QKeyEvent * );
protected slots:
void slotItemClicked( int button, QListViewItem *, const QPoint&, int );
void slotDestroyEdit();
void slotReturnPressed();
private:
// a list of columns per item that are NOT editable
typedef QValueList<int> ColumnList;
QPtrDict<ColumnList> myUnEditableDict;
RectLineEdit *myEdit;
QListViewItem *myCurrentItem;
int myCurrentCol;
bool myCurrentItemIsOpen;
signals:
/**
* Emitted, when an item was edited and changed. Parameters are the
* modified item and the respective column.
*/
void itemChanged( QListViewItem *, int );
};
// a lineEdit that paints a rectangle instead of the standard frame
// used for in-place editing
klipper'KEditableListView::KEditableListView() (./kdeutils/klipper/keditablelistview.cpp:20)
KEditableListView::KEditableListView( QWidget *parent, const char *name )
: QListView( parent, name )
{
myEdit = 0L;
myCurrentItem = 0L;
myUnEditableDict.setAutoDelete( true );
connect( this, SIGNAL( selectionChanged() ), SLOT( slotDestroyEdit() ));
connect( this, SIGNAL( mouseButtonClicked( int, QListViewItem *,
const QPoint&, int ) ),
SLOT( slotItemClicked(int, QListViewItem *, const QPoint&, int)));
}
klipper'KEditableListView::~KEditableListView() (./kdeutils/klipper/keditablelistview.cpp:33)
KEditableListView::~KEditableListView()
{
delete myEdit;
myUnEditableDict.clear();
}
klipper'KEditableListView::setEditable() (./kdeutils/klipper/keditablelistview.cpp:40)
void KEditableListView::setEditable( QListViewItem *item, int col, bool enable)
{
ASSERT( item != 0L );
ColumnList *list = myUnEditableDict.find( item );
if ( list && enable )
list->remove( col );
else if ( list && !enable && list->find( col ) == list->end() )
list->append( col );
else if ( !list && !enable ) {
list = new ColumnList;
list->append( col );
myUnEditableDict.insert( item, list );
}
}
klipper'KEditableListView::slotItemClicked() (./kdeutils/klipper/keditablelistview.cpp:57)
void KEditableListView::slotItemClicked( int button, QListViewItem *item,
const QPoint&, int col )
{
QRect r = itemRect( item );
if ( !r.isValid() ) {
slotDestroyEdit();
return;
}
bool wasEditing = false;
if ( myEdit ) {
slotDestroyEdit();
wasEditing = true;
}
else { // clicked at the plus-sign? -> don't offer an edit-field
if ( myCurrentItemIsOpen != item->isOpen() ) {
myCurrentItemIsOpen = !myCurrentItemIsOpen;
return;
}
}
if ( myCurrentItem != item ) {
myCurrentItem = item;
myCurrentCol = col;
return;
}
if ( myCurrentCol != col && wasEditing ) {
myCurrentCol = col;
setSelected( item, true );
return;
}
myCurrentItem = item;
myCurrentCol = col;
// setSelected( item, false );
if ( button != LeftButton )
return;
// is the item editable?
ColumnList *eList = myUnEditableDict.find( item );
if ( eList && eList->find( col ) != eList->end() )
return;
myEdit = new RectLineEdit( viewport() );
connect( myEdit, SIGNAL( returnPressed() ), SLOT( slotReturnPressed() ));
myEdit->setText( item->text( col ) );
myEdit->adjustSize();
int tw = myEdit->fontMetrics().boundingRect( myEdit->text() ).width() + 15;
if ( item->pixmap( col ) ) // add width of pixmap
tw += item->pixmap( col )->width();
if ( myEdit->width() < tw )
myEdit->resize( tw, myEdit->height() );
int x = r.x() + itemMargin() -1;
for ( int i = 0; i < col; i++ ) {
x += columnWidth( i );
}
if ( col == 0 ) {
int d = item->depth() + (rootIsDecorated() ? 1 : 0);
x += (d * treeStepSize());
}
int y = r.y() -1;
if ( y < 0 )
y = 0;
myEdit->move( x, y );
myEdit->show();
myEdit->setFocus();
}
klipper'KEditableListView::slotReturnPressed() (./kdeutils/klipper/keditablelistview.cpp:135)
void KEditableListView::slotReturnPressed()
{
myCurrentItem->setText( myCurrentCol, myEdit->text() );
slotDestroyEdit();
emit itemChanged( myCurrentItem, myCurrentCol );
}
klipper'KEditableListView::slotDestroyEdit() (./kdeutils/klipper/keditablelistview.cpp:143)
void KEditableListView::slotDestroyEdit()
{
delete myEdit;
myEdit = 0L;
myCurrentItemIsOpen = currentItem()->isOpen();
}
klipper'KEditableListView::keyPressEvent() (./kdeutils/klipper/keditablelistview.cpp:152)
void KEditableListView::keyPressEvent( QKeyEvent *e )
{
if ( myEdit && myEdit->hasFocus() && e->key() == Key_Escape ) {
slotDestroyEdit();
e->accept();
}
}