22 #include <tqdragobject.h>
26 #include <tqtooltip.h>
28 #include <tqpainter.h>
30 #include <kglobalsettings.h>
33 #include <kapplication.h>
37 #include "klistview.h"
38 #include "klistviewlineedit.h"
40 class KListView::Tooltip :
public TQToolTip
43 Tooltip (
KListView* parent, TQToolTipGroup* group = 0L);
44 virtual ~Tooltip () {}
50 virtual void maybeTip (
const TQPoint&);
56 KListView::Tooltip::Tooltip (
KListView* parent, TQToolTipGroup* group)
57 : TQToolTip (parent, group),
62 void KListView::Tooltip::maybeTip (
const TQPoint&)
67 class KListView::KListViewPrivate
76 cursorInExecuteArea(false),
78 selectedBySimpleMove(false),
79 selectedUsingMouse(false),
88 pressedOnSelected (false),
89 wasShiftEvent (false),
94 selectionDirection(0),
96 selectionMode (Single),
99 mDropVisualizerWidth (4),
106 renameable.append(0);
107 connect(editor, TQT_SIGNAL(done(TQListViewItem*,
int)), listview, TQT_SLOT(doneEditing(TQListViewItem*,
int)));
115 TQListViewItem* pCurrentItem;
121 TQListViewItem* dragOverItem;
122 TQPoint dragOverPoint;
124 TQPoint startDragPos;
128 TQValueList<int> renameable;
130 bool cursorInExecuteArea:1;
132 bool bChangeCursorOverItem:1;
134 bool selectedBySimpleMove : 1;
135 bool selectedUsingMouse:1;
144 bool pressedOnSelected:1;
145 bool wasShiftEvent:1;
147 bool sortAscending:1;
153 int selectionDirection;
158 bool showContextMenusOnPress;
160 TQRect mOldDropVisualizer;
161 int mDropVisualizerWidth;
162 TQRect mOldDropHighlighter;
163 TQListViewItem *afterItemDrop;
164 TQListViewItem *parentItemDrop;
166 TQListViewItem *paintAbove;
167 TQListViewItem *paintCurrent;
168 TQListViewItem *paintBelow;
176 KListViewLineEdit::KListViewLineEdit(
KListView *parent)
177 :
KLineEdit(parent->viewport()), item(0), col(0), p(parent)
181 connect( parent, TQT_SIGNAL( selectionChanged() ), TQT_SLOT( slotSelectionChanged() ));
182 connect( parent, TQT_SIGNAL( itemRemoved( TQListViewItem * ) ),
183 TQT_SLOT( slotItemRemoved( TQListViewItem * ) ));
186 KListViewLineEdit::~KListViewLineEdit()
190 TQListViewItem *KListViewLineEdit::currentItem()
const
195 void KListViewLineEdit::load(TQListViewItem *i,
int c)
200 TQRect rect(p->itemRect(i));
204 int fieldX = rect.x() - 1;
205 int fieldW = p->columnWidth(col) + 2;
207 TQHeader*
const pHeader = p->header();
209 const int pos = pHeader->mapToIndex(col);
210 for (
int index = 0; index < pos; ++index )
211 fieldX += p->columnWidth( pHeader->mapToSection( index ));
214 int d = i->depth() + (p->rootIsDecorated() ? 1 : 0);
215 d *= p->treeStepSize();
220 if ( i->pixmap( col ) ) {
221 int d = i->pixmap( col )->width();
226 setGeometry(fieldX, rect.y() - 1, fieldW, rect.height() + 2);
235 static int nextCol (
KListView *pl, TQListViewItem *pi,
int start,
int dir)
240 for (; ((dir == +1) ? (start < pl->columns()) : (start >= 0)); start += dir)
248 static TQListViewItem *prevItem (TQListViewItem *pi)
250 TQListViewItem *pa = pi->itemAbove();
255 if (pa && pa->parent() == pi->parent())
261 static TQListViewItem *lastQChild (TQListViewItem *pi)
269 for (TQListViewItem *pt = pi->nextSibling(); pt; pt = pt->nextSibling())
278 const int ncols = p->columns();
279 const int dir = forward ? +1 : -1;
280 const int restart = forward ? 0 : (ncols - 1);
281 TQListViewItem *top = (pitem && pitem->parent())
282 ? pitem->parent()->firstChild()
284 TQListViewItem *pi = pitem;
296 if ((column = nextCol(p, pi, column + dir, dir)) != -1 ||
297 (column = nextCol(p, (pi = (forward ? pi->nextSibling() : prevItem(pi))), restart, dir)) != -1 ||
298 (column = nextCol(p, (pi = (forward ? top : lastQChild(pitem))), restart, dir)) != -1)
302 p->setCurrentItem(pi);
324 bool KListViewLineEdit::event (TQEvent *pe)
326 if (pe->type() == TQEvent::KeyPress)
328 TQKeyEvent *k = (TQKeyEvent *) pe;
330 if ((k->key() == Qt::Key_Backtab || k->key() == Qt::Key_Tab) &&
332 !(k->state() & ControlButton || k->state() & AltButton))
335 (k->key() == Key_Tab && !(k->state() & ShiftButton)));
340 return KLineEdit::event(pe);
345 if(e->key() == Qt::Key_Return || e->key() == Qt::Key_Enter )
347 else if(e->key() == Qt::Key_Escape)
349 else if (e->key() == Qt::Key_Down || e->key() == Qt::Key_Up)
358 void KListViewLineEdit::terminate()
363 void KListViewLineEdit::terminate(
bool commit)
369 item->setText(col, text());
371 TQListViewItem *i=item;
383 TQFocusEvent * focusEv =
static_cast<TQFocusEvent*
>(ev);
385 if (focusEv->reason() != TQFocusEvent::Popup && focusEv->reason() != TQFocusEvent::ActiveWindow)
391 void KListViewLineEdit::paintEvent( TQPaintEvent *e )
393 KLineEdit::paintEvent( e );
397 p.setClipRegion( e->region() );
398 p.drawRect( rect() );
405 void KListViewLineEdit::slotSelectionChanged()
416 if (currentItem() != i)
426 : TQListView( parent, name ),
427 d (new KListViewPrivate (this))
429 setDragAutoScroll(
true);
431 connect(
this, TQT_SIGNAL( onViewport() ),
433 connect(
this, TQT_SIGNAL( onItem( TQListViewItem * ) ),
434 this, TQT_SLOT(
slotOnItem( TQListViewItem * ) ) );
436 connect (
this, TQT_SIGNAL(contentsMoving(
int,
int)),
438 connect (
this, TQT_SIGNAL(contentsMoving(
int,
int)),
448 connect(&d->autoSelect, TQT_SIGNAL( timeout() ),
450 connect(&d->dragExpand, TQT_SIGNAL( timeout() ),
451 this, TQT_SLOT( slotDragExpand() ) );
454 if (d->showContextMenusOnPress)
456 connect (
this, TQT_SIGNAL (rightButtonPressed (TQListViewItem*,
const TQPoint&,
int)),
457 this, TQT_SLOT (
emitContextMenu (TQListViewItem*,
const TQPoint&,
int)));
461 connect (
this, TQT_SIGNAL (rightButtonClicked (TQListViewItem*,
const TQPoint&,
int)),
462 this, TQT_SLOT (
emitContextMenu (TQListViewItem*,
const TQPoint&,
int)));
477 TQListViewItem* item = itemAt( point );
492 if( allColumnsShowFocus() )
498 int width = columnWidth( 0 );
500 TQHeader*
const thisHeader = header();
501 const int pos = thisHeader->mapToIndex( 0 );
503 for (
int index = 0; index < pos; ++index )
504 offset += columnWidth( thisHeader->mapToSection( index ) );
510 width = treeStepSize()*( item->depth() + ( rootIsDecorated() ? 1 : 0 ) );
511 width += itemMargin();
512 int ca = AlignHorizontal_Mask & columnAlignment( 0 );
513 if ( ca == AlignLeft || ca == AlignAuto ) {
514 width += item->width( fontMetrics(),
this, 0 );
515 if ( width > columnWidth( 0 ) )
516 width = columnWidth( 0 );
520 return ( x > offset && x < ( offset + width ) );
526 TQPoint vp = viewport()->mapFromGlobal( TQCursor::pos() );
527 if ( item &&
isExecuteArea( vp.x() ) && (d->autoSelectDelay > -1) && d->bUseSingle ) {
528 d->autoSelect.start( d->autoSelectDelay,
true );
529 d->pCurrentItem = item;
535 if ( d->bChangeCursorOverItem )
536 viewport()->unsetCursor();
538 d->autoSelect.stop();
539 d->pCurrentItem = 0L;
550 disconnect(
this, TQT_SIGNAL (mouseButtonClicked (
int, TQListViewItem*,
const TQPoint &,
int)),
551 this, TQT_SLOT (slotMouseButtonClicked (
int, TQListViewItem*,
const TQPoint &,
int)));
554 connect (
this, TQT_SIGNAL (mouseButtonClicked (
int, TQListViewItem*,
const TQPoint &,
int)),
555 this, TQT_SLOT (slotMouseButtonClicked(
int, TQListViewItem*,
const TQPoint &,
int)));
558 if ( !d->disableAutoSelection )
561 if( !d->bUseSingle || !d->bChangeCursorOverItem )
562 viewport()->unsetCursor();
570 if (d->showContextMenusOnPress)
572 disconnect (0L, 0L,
this, TQT_SLOT (
emitContextMenu (TQListViewItem*,
const TQPoint&,
int)));
574 connect(
this, TQT_SIGNAL (rightButtonPressed (TQListViewItem*,
const TQPoint&,
int)),
575 this, TQT_SLOT (
emitContextMenu (TQListViewItem*,
const TQPoint&,
int)));
579 disconnect (0L, 0L,
this, TQT_SLOT (
emitContextMenu (TQListViewItem*,
const TQPoint&,
int)));
581 connect(
this, TQT_SIGNAL (rightButtonClicked (TQListViewItem*,
const TQPoint&,
int)),
582 this, TQT_SLOT (
emitContextMenu (TQListViewItem*,
const TQPoint&,
int)));
597 if (!isActiveWindow())
599 d->autoSelect.stop();
609 TQListViewItem* previousItem = currentItem();
610 setCurrentItem( d->pCurrentItem );
612 if( d->pCurrentItem ) {
614 if( (keybstate & TQt::ShiftButton) ) {
615 bool block = signalsBlocked();
616 blockSignals(
true );
619 if( !(keybstate & TQt::ControlButton) )
622 bool select = !d->pCurrentItem->isSelected();
623 bool update = viewport()->isUpdatesEnabled();
624 viewport()->setUpdatesEnabled(
false );
626 bool down = previousItem->itemPos() < d->pCurrentItem->itemPos();
627 TQListViewItemIterator lit( down ? previousItem : d->pCurrentItem );
628 for ( ; lit.current(); ++lit ) {
629 if ( down && lit.current() == d->pCurrentItem ) {
630 d->pCurrentItem->setSelected( select );
633 if ( !down && lit.current() == previousItem ) {
634 previousItem->setSelected( select );
637 lit.current()->setSelected( select );
640 blockSignals( block );
641 viewport()->setUpdatesEnabled( update );
644 emit selectionChanged();
646 if( selectionMode() == TQListView::Single )
647 emit selectionChanged( d->pCurrentItem );
649 else if( (keybstate & KApplication::ControlModifier) )
650 setSelected( d->pCurrentItem, !d->pCurrentItem->isSelected() );
652 bool block = signalsBlocked();
653 blockSignals(
true );
655 if( !d->pCurrentItem->isSelected() )
658 blockSignals( block );
660 setSelected( d->pCurrentItem,
true );
664 kdDebug() <<
"KListView::slotAutoSelect: That�s not supposed to happen!!!!" <<
endl;
670 const int colCount = columns();
671 if (d->fullWidth && colCount)
674 const int lastColumn = colCount - 1;
675 for (
int i = 0; i < lastColumn; ++i) w += columnWidth(i);
676 setColumnWidth( lastColumn, viewport()->width() - w - 1 );
686 if ( !d->bUseSingle )
688 viewport()->unsetCursor();
696 d->autoSelect.stop();
699 if( !( ((keybstate & TQt::ShiftButton) || (keybstate & TQt::ControlButton)) ) ) {
700 viewport()->unsetCursor();
711 TQListView::focusInEvent( fe );
712 if ((d->selectedBySimpleMove)
713 && (d->selectionMode == FileManager)
714 && (fe->reason()!=TQFocusEvent::Popup)
715 && (fe->reason()!=TQFocusEvent::ActiveWindow)
718 currentItem()->setSelected(
true);
719 currentItem()->repaint();
720 emit selectionChanged();
729 d->autoSelect.stop();
731 if ((d->selectedBySimpleMove)
732 && (d->selectionMode == FileManager)
733 && (fe->reason()!=TQFocusEvent::Popup)
734 && (fe->reason()!=TQFocusEvent::ActiveWindow)
736 && (!d->editor->isVisible()))
738 currentItem()->setSelected(
false);
739 currentItem()->repaint();
740 emit selectionChanged();
743 TQListView::focusOutEvent( fe );
748 d->autoSelect.stop();
750 TQListView::leaveEvent( e );
755 if (e->type() == TQEvent::ApplicationPaletteChange)
758 return TQListView::event(e);
763 if( (
selectionModeExt() == Extended) && (e->state() & ShiftButton) && !(e->state() & ControlButton) )
765 bool block = signalsBlocked();
766 blockSignals(
true );
770 blockSignals( block );
774 d->selectedBySimpleMove=
false;
775 d->selectedUsingMouse=
true;
778 currentItem()->setSelected(
false);
779 currentItem()->repaint();
784 TQPoint p( contentsToViewport( e->pos() ) );
785 TQListViewItem *at = itemAt (p);
788 bool rootDecoClicked = at
789 && ( p.x() <= header()->cellPos( header()->mapToActual( 0 ) ) +
790 treeStepSize() * ( at->depth() + ( rootIsDecorated() ? 1 : 0) ) + itemMargin() )
791 && ( p.x() >= header()->cellPos( header()->mapToActual( 0 ) ) );
793 if (e->button() == Qt::LeftButton && !rootDecoClicked)
796 d->startDragPos = e->pos();
801 d->pressedOnSelected = at->isSelected();
805 TQListView::contentsMousePressEvent( e );
810 if (!
dragEnabled() || d->startDragPos.isNull() || !d->validDrag)
811 TQListView::contentsMouseMoveEvent (e);
813 TQPoint vp = contentsToViewport(e->pos());
814 TQListViewItem *item = itemAt( vp );
817 if ( item && d->bChangeCursorOverItem && d->bUseSingle )
820 if( (item != d->pCurrentItem) ||
825 if( d->cursorInExecuteArea )
828 viewport()->unsetCursor();
833 TQPoint newPos = e->pos();
834 if (dragOn && d->validDrag &&
835 (newPos.x() > d->startDragPos.x()+d->dragDelay ||
836 newPos.x() < d->startDragPos.x()-d->dragDelay ||
837 newPos.y() > d->startDragPos.y()+d->dragDelay ||
838 newPos.y() < d->startDragPos.y()-d->dragDelay))
841 TQListView::contentsMouseReleaseEvent( 0 );
843 d->startDragPos = TQPoint();
844 d->validDrag =
false;
850 if (e->button() == Qt::LeftButton)
855 TQPoint p( contentsToViewport( e->pos() ) );
856 TQListViewItem *at = itemAt (p);
860 bool rootDecoClicked =
861 ( p.x() <= header()->cellPos( header()->mapToActual( 0 ) ) +
862 treeStepSize() * ( at->depth() + ( rootIsDecorated() ? 1 : 0) ) + itemMargin() )
863 && ( p.x() >= header()->cellPos( header()->mapToActual( 0 ) ) );
865 if (!rootDecoClicked)
867 int col = header()->mapToLogical( header()->cellAt( p.x() ) );
868 if ( d->renameable.contains(col) )
874 d->pressedOnSelected =
false;
875 d->validDrag =
false;
876 d->startDragPos = TQPoint();
878 TQListView::contentsMouseReleaseEvent( e );
886 if ( !e || e->button() != Qt::LeftButton )
889 TQPoint vp = contentsToViewport(e->pos());
890 TQListViewItem *item = itemAt( vp );
891 emit TQListView::doubleClicked( item );
893 int col = item ? header()->mapToLogical( header()->cellAt( vp.x() ) ) : -1;
898 if( (e->button() == Qt::LeftButton) && !d->bUseSingle )
903 void KListView::slotMouseButtonClicked(
int btn, TQListViewItem *item,
const TQPoint &pos,
int c )
905 if( (btn == Qt::LeftButton) && item )
913 d->dragExpand.stop();
918 TQListViewItem *afterme;
919 TQListViewItem *parent;
921 findDrop(e->pos(), parent, afterme);
928 emit
dropped(
this, e, afterme);
929 emit
dropped(e, parent, afterme);
930 emit
dropped(
this, e, parent, afterme);
937 TQPtrList<TQListViewItem> items, afterFirsts, afterNows;
938 TQListViewItem *current=currentItem();
940 for (TQListViewItem *i = firstChild(), *iNext=0; i; i = iNext)
942 iNext=i->itemBelow();
943 if (!i->isSelected())
951 i->setSelected(
false);
953 TQListViewItem *afterFirst = i->itemAbove();
965 emit
moved(i, afterFirst, afterme);
968 afterFirsts.append (afterFirst);
969 afterNows.append (afterme);
974 for (TQListViewItem *i=items.first(); i; i=items.next() )
975 i->setSelected(
true);
977 setCurrentItem(current);
979 emit
moved(items,afterFirsts,afterNows);
989 event->acceptAction();
992 findDrop(event->pos(), d->parentItemDrop, d->afterItemDrop);
993 TQPoint vp = contentsToViewport( event->pos() );
994 TQListViewItem *item =
isExecuteArea( vp ) ? itemAt( vp ) : 0L;
996 if ( item != d->dragOverItem )
998 d->dragExpand.stop();
999 d->dragOverItem = item;
1000 d->dragOverPoint = vp;
1001 if ( d->dragOverItem && d->dragOverItem->isExpandable() && !d->dragOverItem->isOpen() )
1002 d->dragExpand.start( TQApplication::startDragTime(),
true );
1007 if (tmpRect != d->mOldDropVisualizer)
1010 d->mOldDropVisualizer=tmpRect;
1011 viewport()->repaint(tmpRect);
1017 if (tmpRect != d->mOldDropHighlighter)
1020 d->mOldDropHighlighter=tmpRect;
1021 viewport()->repaint(tmpRect);
1029 void KListView::slotDragExpand()
1031 if ( itemAt( d->dragOverPoint ) == d->dragOverItem )
1032 d->dragOverItem->setOpen(
true );
1037 d->dragExpand.stop();
1044 if (d->mOldDropVisualizer.isValid())
1046 TQRect rect=d->mOldDropVisualizer;
1047 d->mOldDropVisualizer = TQRect();
1048 viewport()->repaint(rect,
true);
1054 return treeStepSize() * ( depth + (rootIsDecorated() ? 1 : 0) ) + itemMargin();
1059 TQPoint p (contentsToViewport(pos));
1062 TQListViewItem *atpos = itemAt(p);
1064 TQListViewItem *above;
1070 if (p.y() - itemRect(atpos).topLeft().y() < (atpos->height()/2))
1071 above = atpos->itemAbove();
1080 if (above->firstChild() && above->isOpen())
1089 if (above->isExpandable())
1093 (above->isOpen() && above->childCount() > 0) )
1103 TQListViewItem * betterAbove = above->parent();
1104 TQListViewItem * last = above;
1105 while ( betterAbove )
1109 if ( !last->nextSibling() )
1112 above = betterAbove;
1116 betterAbove = betterAbove->parent();
1123 parent = after ? after->parent() : 0L ;
1128 TQListViewItem* lastchild = firstChild();
1131 for (; lastchild->nextSibling(); lastchild = lastchild->nextSibling());
1140 for (TQListViewItemIterator it (last); it.current(); ++it)
1141 last = it.current();
1158 if (drag->drag() && drag->target() != viewport())
1168 return new TQStoredDrag(
"application/x-qlistviewitem", viewport());
1178 return d->itemsMovable;
1183 d->itemsRenameable=b;
1188 return d->itemsRenameable;
1199 return d->dragEnabled;
1214 return d->dropVisualizer;
1219 d->dropVisualizer=b;
1229 TQPtrList<TQListViewItem> list;
1235 switch(selectionMode())
1240 if(selectedItem() && (includeHiddenItems || selectedItem()->isVisible()))
1241 list.append(selectedItem());
1245 int flags = TQListViewItemIterator::Selected;
1246 if (!includeHiddenItems)
1248 flags |= TQListViewItemIterator::Visible;
1251 TQListViewItemIterator it(const_cast<KListView *>(
this), flags);
1253 for(; it.current(); ++it)
1254 list.append(it.current());
1267 TQListViewItem *i = parent;
1277 item->moveItem(after);
1284 item->parent()->takeItem(item);
1289 parent->insertItem(item);
1302 d->mDropVisualizerWidth = w > 0 ? w : 1;
1306 TQListViewItem *after)
1308 TQRect insertmarker;
1310 if (!after && !parent)
1311 insertmarker = TQRect (0, 0, viewport()->width(), d->mDropVisualizerWidth/2);
1317 TQListViewItem* it = 0L;
1318 if (after->isOpen())
1321 it = after->firstChild();
1323 while (it->nextSibling() || it->firstChild())
1324 if ( it->nextSibling() )
1325 it = it->nextSibling();
1327 it = it->firstChild();
1330 insertmarker = itemRect (it ? it : after);
1331 level = after->depth();
1335 insertmarker = itemRect (parent);
1336 level = parent->depth() + 1;
1338 insertmarker.setLeft( treeStepSize() * ( level + (rootIsDecorated() ? 1 : 0) ) + itemMargin() );
1339 insertmarker.setRight (viewport()->width());
1340 insertmarker.setTop (insertmarker.bottom() - d->mDropVisualizerWidth/2 + 1);
1341 insertmarker.setBottom (insertmarker.bottom() + d->mDropVisualizerWidth/2);
1347 p->fillRect(insertmarker, Dense4Pattern);
1349 return insertmarker;
1359 r.setLeft(r.left()+(item->depth()+(rootIsDecorated() ? 1 : 0))*treeStepSize());
1361 style().tqdrawPrimitive(TQStyle::PE_FocusRect, painter, r, colorGroup(),
1362 TQStyle::Style_FocusAtBorder, colorGroup().highlight());
1370 if (d->mOldDropHighlighter.isValid())
1372 TQRect rect=d->mOldDropHighlighter;
1373 d->mOldDropHighlighter = TQRect();
1374 viewport()->repaint(rect,
true);
1380 if (d->renameable.contains(c))
1382 ensureItemVisible(item);
1383 d->editor->load(item,c);
1389 return d->renameable.contains(col);
1394 if (col>=header()->count())
return;
1396 d->renameable.remove(col);
1401 void KListView::doneEditing(TQListViewItem *item,
int row)
1409 return acceptDrops() &&
itemsMovable() && (e->source()==viewport());
1414 d->createChildren=b;
1419 return d->createChildren;
1425 return d->tooltipColumn;
1430 d->tooltipColumn=column;
1435 d->dropHighlighter=b;
1440 return d->dropHighlighter;
1450 return item->text(column);
1460 return d->tabRename;
1466 if (e->key() == d->contextMenuKey)
1472 if (d->selectionMode != FileManager)
1473 TQListView::keyPressEvent (e);
1480 d->selectedBySimpleMove=
true;
1481 d->selectedUsingMouse=
false;
1484 currentItem()->setSelected(
true);
1485 currentItem()->repaint();
1486 emit selectionChanged();
1492 d->selectedBySimpleMove=
false;
1497 return d->selectedBySimpleMove;
1503 int e_state=(e->state() & ~Keypad);
1505 int oldSelectionDirection(d->selectionDirection);
1507 if ((e->key()!=Key_Shift) && (e->key()!=Key_Control)
1508 && (e->key()!=Key_Meta) && (e->key()!=Key_Alt))
1510 if ((e_state==ShiftButton) && (!d->wasShiftEvent) && (!d->selectedBySimpleMove))
1512 d->selectionDirection=0;
1513 d->wasShiftEvent = (e_state == ShiftButton);
1519 TQListViewItem* item = currentItem();
1522 TQListViewItem* repaintItem1 = item;
1523 TQListViewItem* repaintItem2 = 0L;
1524 TQListViewItem* visItem = 0L;
1526 TQListViewItem* nextItem = 0L;
1529 bool shiftOrCtrl((e_state==ControlButton) || (e_state==ShiftButton));
1531 for (TQListViewItem *tmpItem=firstChild(); tmpItem; tmpItem=tmpItem->nextSibling())
1532 if (tmpItem->isSelected()) selectedItems++;
1534 if (((!selectedItems) || ((selectedItems==1) && (d->selectedUsingMouse)))
1535 && (e_state==Qt::NoButton)
1536 && ((e->key()==Key_Down)
1537 || (e->key()==Key_Up)
1538 || (e->key()==Key_Next)
1539 || (e->key()==Key_Prior)
1540 || (e->key()==Key_Home)
1541 || (e->key()==Key_End)))
1543 d->selectedBySimpleMove=
true;
1544 d->selectedUsingMouse=
false;
1546 else if (selectedItems>1)
1547 d->selectedBySimpleMove=
false;
1549 bool emitSelectionChanged(
false);
1555 emitSelectionChanged=
true;
1560 if (d->selectedBySimpleMove)
1561 d->selectedBySimpleMove=
false;
1562 item->setSelected(!item->isSelected());
1563 emitSelectionChanged=
true;
1568 if (d->selectedBySimpleMove)
1570 d->selectedBySimpleMove=
false;
1571 if (!item->isSelected()) item->setSelected(
true);
1575 item->setSelected(!item->isSelected());
1578 nextItem=item->itemBelow();
1582 repaintItem2=nextItem;
1584 setCurrentItem(nextItem);
1586 d->selectionDirection=1;
1587 emitSelectionChanged=
true;
1591 nextItem=item->itemBelow();
1595 d->selectionDirection=1;
1596 if (d->selectedBySimpleMove)
1597 d->selectedBySimpleMove=
false;
1600 if (oldSelectionDirection!=-1)
1602 item->setSelected(!item->isSelected());
1603 emitSelectionChanged=
true;
1607 else if ((d->selectedBySimpleMove) && (nextItem))
1609 item->setSelected(
false);
1610 emitSelectionChanged=
true;
1615 if (d->selectedBySimpleMove)
1616 nextItem->setSelected(
true);
1617 repaintItem2=nextItem;
1619 setCurrentItem(nextItem);
1624 nextItem=item->itemAbove();
1625 d->selectionDirection=-1;
1631 if (d->selectedBySimpleMove)
1632 d->selectedBySimpleMove=
false;
1635 if (oldSelectionDirection!=1)
1637 item->setSelected(!item->isSelected());
1638 emitSelectionChanged=
true;
1642 else if ((d->selectedBySimpleMove) && (nextItem))
1644 item->setSelected(
false);
1645 emitSelectionChanged=
true;
1650 if (d->selectedBySimpleMove)
1651 nextItem->setSelected(
true);
1652 repaintItem2=nextItem;
1654 setCurrentItem(nextItem);
1661 if (d->selectedBySimpleMove)
1662 item->setSelected(
false);
1664 d->selectedBySimpleMove=
false;
1669 nextItem->setSelected(!nextItem->isSelected());
1670 if (!nextItem->itemBelow())
1672 if (d->selectedBySimpleMove)
1673 nextItem->setSelected(
true);
1674 repaintItem2=nextItem;
1676 setCurrentItem(nextItem);
1678 nextItem=nextItem->itemBelow();
1680 emitSelectionChanged=
true;
1685 nextItem = firstChild();
1687 repaintItem2 = visItem;
1688 if (d->selectedBySimpleMove)
1689 item->setSelected(
false);
1692 d->selectedBySimpleMove=
false;
1694 while ( nextItem != item )
1696 nextItem->setSelected( !nextItem->isSelected() );
1697 nextItem = nextItem->itemBelow();
1699 item->setSelected( !item->isSelected() );
1701 setCurrentItem( firstChild() );
1702 emitSelectionChanged=
true;
1706 items=visibleHeight()/item->height();
1708 if (d->selectedBySimpleMove)
1709 item->setSelected(
false);
1712 d->selectedBySimpleMove=
false;
1713 d->selectionDirection=1;
1716 for (
int i=0; i<items; i++)
1719 nextItem->setSelected(!nextItem->isSelected());
1721 if ((i==items-1) || (!nextItem->itemBelow()))
1725 nextItem->setSelected(!nextItem->isSelected());
1726 if (d->selectedBySimpleMove)
1727 nextItem->setSelected(
true);
1728 ensureItemVisible(nextItem);
1729 setCurrentItem(nextItem);
1731 if ((shiftOrCtrl) || (d->selectedBySimpleMove))
1733 emit selectionChanged();
1737 nextItem=nextItem->itemBelow();
1742 items=visibleHeight()/item->height();
1744 if (d->selectedBySimpleMove)
1745 item->setSelected(
false);
1748 d->selectionDirection=-1;
1749 d->selectedBySimpleMove=
false;
1752 for (
int i=0; i<items; i++)
1754 if ((nextItem!=item) &&(shiftOrCtrl))
1755 nextItem->setSelected(!nextItem->isSelected());
1757 if ((i==items-1) || (!nextItem->itemAbove()))
1760 if (d->selectedBySimpleMove)
1761 nextItem->setSelected(
true);
1762 ensureItemVisible(nextItem);
1763 setCurrentItem(nextItem);
1765 if ((shiftOrCtrl) || (d->selectedBySimpleMove))
1767 emit selectionChanged();
1771 nextItem=nextItem->itemAbove();
1776 if ( item->isOpen() )
1777 setOpen( item,
false );
1780 if ( !item->isOpen() && (item->isExpandable() || item->childCount()) )
1781 setOpen( item,
true );
1784 bool realKey = ((e->key()!=Key_Shift) && (e->key()!=Key_Control)
1785 && (e->key()!=Key_Meta) && (e->key()!=Key_Alt));
1787 bool selectCurrentItem = (d->selectedBySimpleMove) && (item->isSelected());
1788 if (realKey && selectCurrentItem)
1789 item->setSelected(
false);
1791 TQListView::SelectionMode oldSelectionMode = selectionMode();
1792 setSelectionMode (TQListView::Multi);
1793 TQListView::keyPressEvent (e);
1794 setSelectionMode (oldSelectionMode);
1795 if (realKey && selectCurrentItem)
1797 currentItem()->setSelected(
true);
1798 emitSelectionChanged=
true;
1800 repaintItem2=currentItem();
1802 visItem=currentItem();
1807 ensureItemVisible(visItem);
1811 ir = ir.unite( itemRect(repaintItem1) );
1813 ir = ir.unite( itemRect(repaintItem2) );
1815 if ( !ir.isEmpty() )
1818 ir.moveBy( -ir.x(), 0 );
1819 viewport()->repaint( ir,
false );
1826 if (emitSelectionChanged)
1827 emit selectionChanged();
1832 d->selectionMode = mode;
1840 setSelectionMode (static_cast<TQListView::SelectionMode>(static_cast<int>(mode)));
1844 setSelectionMode (TQListView::Extended);
1848 kdWarning () <<
"Warning: illegal selection mode " << int(mode) <<
" set!" <<
endl;
1855 return d->selectionMode;
1863 if ( item == firstChild() )
1866 TQListViewItemIterator it(firstChild());
1868 for (; it.current() && it.current() != item; ++it, ++j );
1883 for (TQListViewItemIterator it=firstChild(); it.current(); ++it)
1886 return it.current();
1898 p = viewport()->mapToGlobal(itemRect(i).center());
1900 p = mapToGlobal(rect().center());
1912 TQListView::setAcceptDrops (val);
1913 viewport()->setAcceptDrops (val);
1918 return d->mDropVisualizerWidth;
1925 d->paintCurrent = 0;
1929 TQListView::viewportPaintEvent(e);
1931 if (d->mOldDropVisualizer.isValid() && e->rect().intersects(d->mOldDropVisualizer))
1933 TQPainter painter(viewport());
1936 painter.fillRect(d->mOldDropVisualizer, Dense4Pattern);
1938 if (d->mOldDropHighlighter.isValid() && e->rect().intersects(d->mOldDropHighlighter))
1940 TQPainter painter(viewport());
1943 style().tqdrawPrimitive(TQStyle::PE_FocusRect, &painter, d->mOldDropHighlighter, colorGroup(),
1944 TQStyle::Style_FocusAtBorder);
1946 d->painting =
false;
1957 header()->setStretchEnabled(fullWidth, columns()-1);
1962 return d->fullWidth;
1967 int result = TQListView::addColumn(label, width);
1969 header()->setStretchEnabled(
false, columns()-2);
1970 header()->setStretchEnabled(
true, columns()-1);
1977 int result = TQListView::addColumn(iconset, label, width);
1979 header()->setStretchEnabled(
false, columns()-2);
1980 header()->setStretchEnabled(
true, columns()-1);
1987 TQListView::removeColumn(index);
1988 if (d->fullWidth && index == columns()) header()->setStretchEnabled(
true, columns()-1);
1993 TQListView::viewportResizeEvent(e);
1998 return d->alternateBackground;
2003 d->alternateBackground = c;
2015 return d->shadeSortColumn;
2021 TQStringList widths, order;
2023 const int colCount = columns();
2024 TQHeader*
const thisHeader = header();
2025 for (
int i = 0; i < colCount; ++i)
2027 widths << TQString::number(columnWidth(i));
2028 order << TQString::number(thisHeader->mapToIndex(i));
2032 config->
writeEntry(
"SortColumn", d->sortColumn);
2033 config->
writeEntry(
"SortAscending", d->sortAscending);
2042 TQStringList::ConstIterator it = cols.constBegin();
2043 const TQStringList::ConstIterator itEnd = cols.constEnd();
2044 for (; it != itEnd; ++it)
2045 setColumnWidth(i++, (*it).toInt());
2052 const int colCount = columns();
2053 for (i = 0; i < colCount; ++i)
2055 TQStringList::ConstIterator it = cols.constBegin();
2056 const TQStringList::ConstIterator itEnd = cols.constEnd();
2059 for (; (it != itEnd) && ((*it).toInt() != i); ++it, ++section) ;
2061 if ( it != itEnd ) {
2063 header()->moveSection(section, i);
2067 if (config->
hasKey(
"SortColumn"))
2073 TQListViewItem *selected = 0;
2075 if (selectionMode() == TQListView::Single) {
2076 selected = selectedItem();
2077 if (selected && !selected->isVisible())
2080 else if (selectionMode() != TQListView::NoSelection) {
2081 TQListViewItem *item = firstChild();
2082 while (item && !selected) {
2083 if (item->isSelected() && item->isVisible())
2085 item = item->itemBelow();
2089 d->sortColumn = column;
2090 d->sortAscending = ascending;
2091 TQListView::setSorting(column, ascending);
2094 ensureItemVisible(selected);
2096 TQListViewItem* item = firstChild();
2099 if (kItem) kItem->m_known =
false;
2100 item = item->itemBelow();
2106 return d->sortColumn;
2111 return d->sortAscending;
2116 if(item && item == d->editor->currentItem())
2117 d->editor->terminate();
2119 TQListView::takeItem(item);
2124 if ( d->disableAutoSelection )
2127 d->disableAutoSelection =
true;
2128 d->autoSelect.stop();
2129 d->autoSelectDelay = -1;
2134 if ( !d->disableAutoSelection )
2137 d->disableAutoSelection =
false;
2143 emit TQListView::doubleClicked( item, pos, c );
2147 : TQListViewItem(parent)
2153 : TQListViewItem(parent)
2159 : TQListViewItem(parent, after)
2165 : TQListViewItem(parent, after)
2171 TQString label1, TQString label2, TQString label3, TQString label4,
2172 TQString label5, TQString label6, TQString label7, TQString label8)
2173 : TQListViewItem(parent, label1, label2, label3, label4, label5, label6, label7, label8)
2179 TQString label1, TQString label2, TQString label3, TQString label4,
2180 TQString label5, TQString label6, TQString label7, TQString label8)
2181 : TQListViewItem(parent, label1, label2, label3, label4, label5, label6, label7, label8)
2187 TQString label1, TQString label2, TQString label3, TQString label4,
2188 TQString label5, TQString label6, TQString label7, TQString label8)
2189 : TQListViewItem(parent, after, label1, label2, label3, label4, label5, label6, label7, label8)
2195 TQString label1, TQString label2, TQString label3, TQString label4,
2196 TQString label5, TQString label6, TQString label7, TQString label8)
2197 : TQListViewItem(parent, after, label1, label2, label3, label4, label5, label6, label7, label8)
2202 KListViewItem::~KListViewItem()
2205 emit
static_cast<KListView *
>(listView())->itemRemoved(
this);
2208 void KListViewItem::init()
2210 m_odd = m_known =
false;
2212 setDragEnabled( dragEnabled() || lv->dragEnabled() );
2213 emit lv->itemAdded(
this);
2216 void KListViewItem::insertItem(TQListViewItem *item)
2218 TQListViewItem::insertItem(item);
2220 emit
static_cast<KListView *
>(listView())->itemAdded(item);
2223 void KListViewItem::takeItem(TQListViewItem *item)
2225 TQListViewItem::takeItem(item);
2227 emit
static_cast<KListView *
>(listView())->itemRemoved(item);
2233 return static_cast< KListView*
>(listView())->alternateBackground();
2234 return listView()->viewport()->colorGroup().base();
2241 view->alternateBackground() :
2242 view->viewport()->colorGroup().base();
2245 if ( (view->columns() > 1) && view->shadeSortColumn() && (column == view->
columnSorted()) )
2247 if ( color == Qt::black )
2248 color = TQColor(55, 55, 55);
2252 color.hsv(&h, &s, &v);
2254 color = color.dark(104);
2256 color = color.light(120);
2266 if (lv && lv->alternateBackground().isValid())
2270 KListView::KListViewPrivate*
const lvD = lv->d;
2289 if (lvD->painting) {
2290 if (lvD->paintCurrent !=
this)
2292 lvD->paintAbove = lvD->paintBelow ==
this ? lvD->paintCurrent : itemAbove();
2293 lvD->paintCurrent =
this;
2294 lvD->paintBelow = itemBelow();
2304 m_known = above ? above->m_known :
true;
2307 m_odd = above ? !above->m_odd :
false;
2312 bool previous =
true;
2317 previous = item->m_odd;
2318 item =
dynamic_cast<KListViewItem *
>(parent()->firstChild());
2327 previous = !previous;
2328 item->m_odd = previous;
2329 item->m_known =
true;
2338 void KListViewItem::paintCell(TQPainter *p,
const TQColorGroup &cg,
int column,
int width,
int alignment)
2340 TQColorGroup _cg = cg;
2341 TQListView* lv = listView();
2342 const TQPixmap *pm = lv->viewport()->backgroundPixmap();
2344 if (pm && !pm->isNull())
2346 _cg.setBrush(TQColorGroup::Base, TQBrush(
backgroundColor(column), *pm));
2347 TQPoint o = p->brushOrigin();
2348 p->setBrushOrigin( o.x()-lv->contentsX(), o.y()-lv->contentsY() );
2352 _cg.setColor((lv->viewport()->backgroundMode() == TQt::FixedColor) ?
2353 TQColorGroup::Background : TQColorGroup::Base,
2356 TQListViewItem::paintCell(p, _cg, column, width, alignment);
2368 if ( selectionMode() == Multi || selectionMode() == Extended ) {
2369 bool b = signalsBlocked();
2370 blockSignals( TRUE );
2371 bool anything = FALSE;
2372 TQListViewItemIterator it(
this );
2373 while ( it.current() ) {
2374 TQListViewItem *i = it.current();
2375 if ( select == TRUE ) {
2376 if ( (
bool)i->isVisible() == TRUE ) {
2377 i->setSelected( TRUE );
2380 if ( (
bool)i->isVisible() == FALSE ) {
2381 i->setSelected( FALSE );
2386 if ( (
bool)i->isSelected() != select ) {
2387 i->setSelected( select );
2395 emit selectionChanged();
2399 }
else if ( currentItem() ) {
2400 TQListViewItem * i = currentItem();
2401 setSelected( i, select );
2405 void KListView::virtual_hook(
int,
void* )
2408 #include "klistview.moc"
2409 #include "klistviewlineedit.moc"