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

Class Index

kdvi'MarkList (./kdegraphics/kdvi/marklist.h:33)

class MarkList: public QTableView
{
	Q_OBJECT

public:
	MarkList( QWidget * parent = 0, const char * name = 0 );
	~MarkList() { }
	QStrList *	markList();
	void	insertItem ( const char *text, int index=-1);
	int	count();
	void	setAutoUpdate ( bool enable );
	void	clear();

public slots:
	void	select(int);
	void	markSelected();
	void	unmarkSelected();

signals:
	void	selected( int index );
	void	selected( const QString & text );

protected:
	void	mousePressEvent ( QMouseEvent* );
	void	mouseReleaseEvent ( QMouseEvent* ) {}
	void	mouseMoveEvent ( QMouseEvent* );
	void	paintCell( QPainter *p, int row, int col );
	int	cellWidth( int );
	void	updateItem( int i );

protected slots:
	void	markAll();
	void	markEven();
	void	markOdd();
	void	toggleMarks();
	void	removeMarks();

private:
	void	changeMarks( int, int = 0 );
	QPoint	mouse;
	int	sel;
	QPopupMenu* pup;
	int	drag;
	QList<MarkListItem> items;
};

kdvi'MarkList::MarkList() (./kdegraphics/kdvi/marklist.cpp:26)

MarkList::MarkList( QWidget * parent , const char * name )
	: QTableView( parent, name ), sel(-1), drag(-1), items()
{
	setFrameStyle( Panel | Sunken );
        setTableFlags( Tbl_autoVScrollBar | Tbl_cutCellsV
                         | Tbl_snapToVGrid | Tbl_clipCellPainting);
        setLineWidth( 2 );
        setCellHeight( fontMetrics().lineSpacing() );
   	setNumCols( 2 );
	pup = new QPopupMenu;
	pup->setMouseTracking(TRUE);
	pup->insertItem( i18n("Mark current"), this, SLOT(markSelected()) );
	pup->insertItem( i18n("Unmark current"), this, SLOT(unmarkSelected()) );
	pup->insertItem( i18n("Mark all"), this, SLOT(markAll()) );
	pup->insertItem( i18n("Mark even"), this, SLOT(markEven()) );
	pup->insertItem( i18n("Mark odd"), this, SLOT(markOdd()) );
	pup->insertItem( i18n("Toggle marks"), this, SLOT(toggleMarks()) );
	pup->insertItem( i18n("Remove marks"), this, SLOT(removeMarks()) );
}


kdvi'MarkList::insertItem() (./kdegraphics/kdvi/marklist.cpp:46)

void	MarkList::insertItem ( const char *text, int index)
{
	MarkListItem *mli = new MarkListItem( text );
	items.insert( index, mli );
	setNumRows( items.count() );
}


kdvi'MarkList::count() (./kdegraphics/kdvi/marklist.cpp:53)

int MarkList::count()
{
	return items.count();
}


kdvi'MarkList::setAutoUpdate() (./kdegraphics/kdvi/marklist.cpp:58)

void	MarkList::setAutoUpdate ( bool enable)
{
	QTableView::setAutoUpdate( enable );
	if (enable) update();
}


kdvi'MarkList::clear() (./kdegraphics/kdvi/marklist.cpp:64)

void	MarkList::clear()
{
	items.clear();
	sel = -1;
	update();
}


kdvi'MarkList::cellWidth() (./kdegraphics/kdvi/marklist.cpp:71)

int	MarkList::cellWidth( int col )
{
	return col==0 ? 16 : width()-16-2*frameWidth();
}


kdvi'MarkList::paintCell() (./kdegraphics/kdvi/marklist.cpp:76)

void MarkList::paintCell( QPainter *p, int row, int col)
{
	if ( col == 0 && items.at( row )->mark() )
	{
		p->setBrush( red );
		p->drawEllipse( 5, 4, 6, 6 );
	}

	if ( col == 1 )
	{
		if ( items.at( row )->select() )
		{
			QColorGroup cg = QApplication::palette().normal();
                        QBrush tmpB(colorGroup().light());
			qDrawShadePanel( p, 0, 0, cellWidth( 1 ) - 1, cellHeight(),
				cg, FALSE, 1, &tmpB);
		}

		QFontMetrics fm = p->fontMetrics();
		int yPos;   // vertical text position
		if ( 10 < fm.height() )
			yPos = fm.ascent() + fm.leading()/2;
		else
			yPos = 5 - fm.height()/2 + fm.ascent();
		p->drawText( 4, yPos, items.at( row )->text() );
	}
}


kdvi'MarkList::mousePressEvent() (./kdegraphics/kdvi/marklist.cpp:104)

void MarkList::mousePressEvent ( QMouseEvent *e )
{
	int i = findRow( e->pos().y() );
	if ( i == -1 )
		return;
	MarkListItem *it = items.at( i );

	if ( e->button() == LeftButton )
		select( i );
	else if ( e->button() == RightButton )
		pup->popup( mapToGlobal( e->pos() ) );
	else if ( e->button() == MidButton )
	{
		it->setMark( !it->mark() );
		updateCell( i, 0 );
		drag = i;
	}
}


kdvi'MarkList::mouseMoveEvent() (./kdegraphics/kdvi/marklist.cpp:123)

void MarkList::mouseMoveEvent ( QMouseEvent *e )
{
	if (e->state() != MidButton)
		return;

	int i = findRow( e->pos().y() );
	if ( i == drag || i == -1 )
		return;
	do {
		drag += i > drag ? 1 : -1;
		items.at( drag )->setMark( !items.at( drag )->mark() );
		updateCell( drag, 0 );
	} while ( i != drag );
}


kdvi'MarkList::select() (./kdegraphics/kdvi/marklist.cpp:138)

void MarkList::select( int i )
{
	if ( i < 0 || i >= int(items.count()) || i == sel )
		return;
	MarkListItem *it = items.at( i );
	if ( sel != -1 )
	{
		items.at( sel )->setSelect( FALSE );
		updateCell( sel, 1 );
	}
	it->setSelect( TRUE );
	sel = i;
	updateCell( i, 1 );
	emit selected( i );
	emit selected( it->text() );
	if ( ( i<=0 || rowIsVisible( i-1 ) ) &&
	     ( i>=int(items.count())-1 || rowIsVisible( i+1 ) ) )
		return;
	setTopCell( QMAX( 0, i - viewHeight()/cellHeight()/2 ) );
}


kdvi'MarkList::markSelected() (./kdegraphics/kdvi/marklist.cpp:159)

void MarkList::markSelected()
{
	if ( sel == -1 )
		return;
	MarkListItem *it = items.at( sel );
	it->setMark( TRUE );
	updateCell( sel, 0 );
}


kdvi'MarkList::unmarkSelected() (./kdegraphics/kdvi/marklist.cpp:168)

void MarkList::unmarkSelected()
{
	if ( sel == -1 )
		return;
	MarkListItem *it = items.at( sel );
	it->setMark( FALSE );
	updateCell( sel, 0 );
}


kdvi'MarkList::markAll() (./kdegraphics/kdvi/marklist.cpp:177)

void MarkList::markAll()
{
	changeMarks( 1 );
}


kdvi'MarkList::markEven() (./kdegraphics/kdvi/marklist.cpp:182)

void MarkList::markEven()
{
	changeMarks( 1, 2 );	
}


kdvi'MarkList::markOdd() (./kdegraphics/kdvi/marklist.cpp:187)

void MarkList::markOdd()
{
	changeMarks( 1, 1 );
}



kdvi'MarkList::removeMarks() (./kdegraphics/kdvi/marklist.cpp:193)

void MarkList::removeMarks()
{
	changeMarks( 0 );
}


kdvi'MarkList::toggleMarks() (./kdegraphics/kdvi/marklist.cpp:198)

void MarkList::toggleMarks()
{
	changeMarks( 2 );
}


kdvi'MarkList::changeMarks() (./kdegraphics/kdvi/marklist.cpp:203)

void MarkList::changeMarks( int how, int which  )
{
	MarkListItem *it;
	QString t;

	setUpdatesEnabled( FALSE );
	for ( int i=items.count(); i-->0 ; )
	{
		if ( which )
		{
			t = items.at( i )->text();
			if ( t.toInt() % 2 == which - 1 )
				continue;
		}
		it = items.at( i );
		if ( how == 2 )
			it->setMark( ! it->mark() );
		else	it->setMark( how );
		updateCell( i, 0 );
	}
	setUpdatesEnabled( TRUE );
        repaint();
}


kdvi'MarkList::markList() (./kdegraphics/kdvi/marklist.cpp:227)

QStrList *MarkList::markList()
{
	QStrList *l = new QStrList;

	for ( unsigned i=0 ; i < items.count(); i++ )
		if ( ( items.at( i ) )->mark() )
			l->append( items.at( i )->text() );
	return l;
}