Source Code (Use browser search to find items of interest.)

Class Index

karchie'KTabListBoxTable (./kdenetwork/karchie/ktablistbox.h:91)

class KTabListBoxTable: public QTableView
{
  Q_OBJECT
  friend KTabListBox;
public:
  KTabListBoxTable(KTabListBox *owner=0);
  virtual ~KTabListBoxTable();
  void enableKey();
  int findRealCol(int x);

protected:
  virtual void focusInEvent(QFocusEvent*);
  virtual void focusOutEvent(QFocusEvent*);
  virtual void mouseDoubleClickEvent (QMouseEvent*);
  virtual void mousePressEvent (QMouseEvent*);
  virtual void mouseReleaseEvent (QMouseEvent*);
  virtual void mouseMoveEvent (QMouseEvent*);
  virtual void doItemSelection (QMouseEvent*, int idx);

  virtual void paintCell (QPainter*, int row, int col);
  virtual int cellWidth (int col);

  void reconnectSBSignals ();

  QPoint dragStartPos;
  int dragCol;
  int dragRow;
  int selIdx;
};


//--------------------------------------------------
/** A multi column listbox
 * Features:
 *  - User resizeable columns.
 *  - The order of columns can be changed with drag&drop. (Alex)
 *  - 3 modes: Standard, SimpleOrder, ComplexOrder. (Alex)
 * ToDo: 
 *  - Configurable vertical column divisor lines. 
 *  - Save all setting to config file.
 *  - fix flickering into column headers.
 *  @deprecated
 */

karchie'KTabListBoxTable::KTabListBoxTable() (./kdenetwork/karchie/ktablistbox.cpp:1543)

KTabListBoxTable::KTabListBoxTable(KTabListBox *parent):
  KTabListBoxTableInherited(parent)
{
  QFontMetrics fm = fontMetrics();

  initMetaObject();

  dragCol = -1;
  dragRow = -1;
  selIdx  = -1;


  setTableFlags(Tbl_autoVScrollBar|Tbl_autoHScrollBar|Tbl_smoothVScrolling|
		 Tbl_clipCellPainting);

  switch(style())
  {
  case MotifStyle:
  case WindowsStyle:
    setBackgroundColor(colorGroup().base());
    setFrameStyle( QFrame::WinPanel | QFrame::Sunken );
    break;
  default:
    setLineWidth(1);
    setFrameStyle(QFrame::Panel|QFrame::Plain);
  }

  setCellWidth(0);
  setCellHeight(fm.lineSpacing() + 1);
  setNumRows(0);

  setCursor(arrowCursor);
  setMouseTracking(FALSE);

  setFocusPolicy(NoFocus);
  // You can enable it with enableKey();
  //setFocusPolicy(StrongFocus);
}


//-----------------------------------------------------------------------------

karchie'KTabListBoxTable::~KTabListBoxTable() (./kdenetwork/karchie/ktablistbox.cpp:1584)

KTabListBoxTable::~KTabListBoxTable()
{
}

//----------------------------------------------------------------------------

karchie'KTabListBoxTable::enableKey() (./kdenetwork/karchie/ktablistbox.cpp:1589)

void KTabListBoxTable::enableKey()
{
  setFocusPolicy(StrongFocus);
}

//-----------------------------------------------------------------------------

karchie'KTabListBoxTable::findRealCol() (./kdenetwork/karchie/ktablistbox.cpp:1595)

int KTabListBoxTable::findRealCol(int xPos)
{
 int column = -1;
 int xPos1;
 KTabListBox*owner =(KTabListBox*)parentWidget();
 int maxCol=owner->numColumns;

 if ( xPos >= minViewX() && xPos <= maxViewX() )
 {
   column = 0;
   xPos1=xPos+xOffset();
   int cumWidth= 2;
   while ( column < maxCol )
   {
     cumWidth += cellWidth( column );
     if ( xPos1 < cumWidth ) break;
     column++;
   }
 }
 if ( column >=maxCol  )  return -1;
 if(column==-1) return -1;
 return owner->colShowList[column];
}


//-----------------------------------------------------------------------------

karchie'KTabListBoxTable::paintCell() (./kdenetwork/karchie/ktablistbox.cpp:1621)

void KTabListBoxTable::paintCell(QPainter* p, int row, int col)
{
  KTabListBox*     owner =(KTabListBox*)parentWidget();
  KTabListBoxItem* item  = owner->getItem(owner->itemShowList[row]);

  if (!item) return;
  p->setPen(item->foreground());
  int t=owner->colShowList[col];
  owner->colList[t]->paintCell(p, row, item->text(t),(item->marked()==-1));
}


//-----------------------------------------------------------------------------

karchie'KTabListBoxTable::cellWidth() (./kdenetwork/karchie/ktablistbox.cpp:1634)

int KTabListBoxTable::cellWidth(int col)
{
  KTabListBox* owner =(KTabListBox*)parentWidget();

  return(owner->colList ? owner->colList[owner->colShowList[col]]->width() : 0);
}


//-----------------------------------------------------------------------------

karchie'KTabListBoxTable::mouseDoubleClickEvent() (./kdenetwork/karchie/ktablistbox.cpp:1643)

void KTabListBoxTable::mouseDoubleClickEvent(QMouseEvent* e)
{
  KTabListBox* owner =(KTabListBox*)parentWidget();
  int idx, colnr;

  if(findRow(e->pos().y())<0) return;
  idx = owner->currentItem();
  colnr = findRealCol(e->pos().x());
  if (idx >= 0) emit owner->selected(idx,colnr);
}


//-----------------------------------------------------------------------------

karchie'KTabListBoxTable::doItemSelection() (./kdenetwork/karchie/ktablistbox.cpp:1656)

void KTabListBoxTable::doItemSelection(QMouseEvent* e, int idx)
{
  KTabListBox* owner =(KTabListBox*)parentWidget();
  int i, di, colnr;

  owner->unmarkAll();
  if ((e->state()&ShiftButton)!=0 && owner->currentItem()>=0)
  {
    i  = owner->itemPosList(owner->currentItem());
    idx= owner->itemPosList(idx);
    di =(i>idx ? -1 : 1);
    while(1)
    {
      owner->markItem(owner->itemShowList[i]);
      if (i == idx) break;
      i += di;
    }
  }
  else
  {
    colnr = findRealCol(e->pos().x());
    owner->setCurrentItem(idx,colnr);
  }
}


//-----------------------------------------------------------------------------

karchie'KTabListBoxTable::mousePressEvent() (./kdenetwork/karchie/ktablistbox.cpp:1683)

void KTabListBoxTable::mousePressEvent(QMouseEvent* e)
{
  KTabListBox* owner =(KTabListBox*)parentWidget();
  int row, col;
  row=findRow(e->pos().y());
  if(row<0) return;
  row = owner->itemShowList[row];
  col = findRealCol(e->pos().x());

  if (e->button() == RightButton)
  {
    // handle popup menu
    if (row >= 0 && col >= 0)
      emit owner->popupMenu(row, col);
    return;
  }
  else if (e->button() == MidButton)
  {
    // handle middle click
    if (row >= 0 && col >= 0)
      emit owner->midClick(row, col);
    return;
  }

  // arm for possible dragging
  dragStartPos = e->pos();
  dragCol = col;
  dragRow = row;

  // handle item highlighting
  if (row >= 0 && owner->getItem(row)->marked() < -1)
  {
    doItemSelection(e, row);
    selIdx = row;
  }
  else selIdx = -1;
}


//-----------------------------------------------------------------------------

karchie'KTabListBoxTable::mouseReleaseEvent() (./kdenetwork/karchie/ktablistbox.cpp:1723)

void KTabListBoxTable::mouseReleaseEvent(QMouseEvent* e)
{
  KTabListBox* owner =(KTabListBox*)parentWidget();
  int idx;

  if (e->button() != LeftButton) return;

  idx = findRow(e->pos().y());
  if(idx<0) return;
  idx = owner->itemShowList[idx];
  if (idx >= 0 && selIdx < 0)
    doItemSelection(e, idx);
}


//-----------------------------------------------------------------------------

karchie'KTabListBoxTable::mouseMoveEvent() (./kdenetwork/karchie/ktablistbox.cpp:1739)

void KTabListBoxTable::mouseMoveEvent(QMouseEvent* e)
{
  KTabListBox* owner =(KTabListBox*)parentWidget();

  if ((e->state() &(RightButton|LeftButton|MidButton)) != 0)
  {
    if (dragRow >= 0 && dragCol >= 0 &&
	(abs(e->pos().x()-dragStartPos.x()) >= 5 ||
	 abs(e->pos().y()-dragStartPos.y()) >= 5))
    {
      // we have a liftoff !
      owner->startDrag(dragRow, dragCol);
      dragRow = dragCol = -1;
      return;
    }
  }
}


//-----------------------------------------------------------------------------

karchie'KTabListBoxTable::reconnectSBSignals() (./kdenetwork/karchie/ktablistbox.cpp:1759)

void KTabListBoxTable::reconnectSBSignals()
{
  QScrollBar* hsb = (QScrollBar*)horizontalScrollBar();
  KTabListBox* owner =(KTabListBox*)parentWidget();

  if (!hsb) return;

  hsb->setTracking(TRUE);
  connect(hsb, SIGNAL(valueChanged(int)), owner, SLOT(horSbValue(int)));
  connect(hsb, SIGNAL(sliderReleased()), owner, SLOT(horSbSlidingDone()));
}


//-----------------------------------------------------------------------------

karchie'KTabListBoxTable::focusInEvent() (./kdenetwork/karchie/ktablistbox.cpp:1773)

void KTabListBoxTable::focusInEvent(QFocusEvent*)
{
  // Just do nothing here to avoid the annoying flicker whick happens due
  // to a redraw() call per default.
}


//-----------------------------------------------------------------------------

karchie'KTabListBoxTable::focusOutEvent() (./kdenetwork/karchie/ktablistbox.cpp:1781)

void KTabListBoxTable::focusOutEvent(QFocusEvent*)
{
  // Just do nothing here to avoid the annoying flicker whick happens due
  // to a redraw() call per default.
}