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

Class Index

klpq'KHeader (./kdeutils/klpq/kheader.h:9)

class KHeader : public QFrame {
  Q_OBJECT
public:
  enum { Buttons = 1,
	 Vertical = 2,
	 Resizable = 4
  };
  
  KHeader( QWidget *parent = 0, const char *name = 0,
	   int numHeaders = 0, int flags = 0 );
  ~KHeader();
  
  void setNumHeaders( int numHeaders );
  int numHeaders();
  void setHeaderSize( int header, int width );
  int  getHeaderSize( int header );
  void setHeaderLabel( int header, const char *text, int align = AlignCenter );
  void setHeaderFlags( int header, int flags );
  void setGeometry( int x, int y, int w, int h );
  void resize( int w, int h );
  
protected:
  virtual void paintEvent( QPaintEvent *pev );
  virtual void mousePressEvent( QMouseEvent *mev );
  virtual void mouseReleaseEvent( QMouseEvent *mev );
  virtual void enterEvent( QEvent *ev );
  virtual void leaveEvent( QEvent *ev );
  virtual void fontChange( const QFont &oldFont );
  
signals:
  void sizeChanged( int header, int size );
  void sizeChanging( int header, int size );
  void selected( int header );
public slots:
  void setOrigin( int pos );

private:
  bool eventFilter( QObject *, QEvent * );
  void adjustHeaderSize( int start, int delta );

  QArray<KHeaderItem*> labels;
  int divider;
  int divstart;
  int m_offset;
  int m_selected;
  int m_temp_sel;
  int m_flags;
  int m_resizing;
  QCursor m_defCursor;
};


klpq'KHeader::KHeader() (./kdeutils/klpq/kheader.cpp:103)

KHeader::KHeader( QWidget *parent, const char *name, int numHeaders, int flags )
	: QFrame( parent, name )
{
	labels.resize( 0 );
	m_offset = 0;
	m_selected = -1;
	m_temp_sel = -1;
	m_flags = flags;
	divider = -1;
	m_resizing = FALSE;
	if( numHeaders != 0 )
        setNumHeaders( numHeaders );
	if( flags & Resizable )
	{
		installEventFilter(this);
		setMouseTracking(TRUE);
		m_defCursor=cursor();
	}
}



klpq'KHeader::~KHeader() (./kdeutils/klpq/kheader.cpp:124)

KHeader::~KHeader()
{
	int i;
	for( i=0 ; i < (int) labels.size() ; i++ )
		delete labels[ i ];
}



klpq'KHeader::setGeometry() (./kdeutils/klpq/kheader.cpp:132)

void KHeader::setGeometry( int x, int y, int w, int h )
{
	if( m_flags & Vertical )
		QFrame::setGeometry( x, y, w, h );
	else
		QFrame::setGeometry( x, y, w, fontMetrics().height() + 4 );
}



klpq'KHeader::resize() (./kdeutils/klpq/kheader.cpp:141)

void KHeader::resize( int w, int h )
{
	if( m_flags & Vertical )
		QFrame::resize( w, h );
	else
		QFrame::resize( w, fontMetrics().height() + 4 );
}



klpq'KHeader::fontChange() (./kdeutils/klpq/kheader.cpp:150)

void KHeader::fontChange( const QFont & ) // oldfont )
{
	if( !(m_flags & Vertical) )
		resize( width(), fontMetrics().height() + 4 );
}


klpq'KHeader::eventFilter() (./kdeutils/klpq/kheader.cpp:156)

bool KHeader::eventFilter( QObject *, QEvent *ev )
{
	if( ev->type()==QEvent::MouseButtonPress && divider!=-1 ) {
		m_resizing=TRUE;
		return TRUE;
	}

	if( ev->type()==QEvent::MouseMove ) {
		QMouseEvent *mev = (QMouseEvent*)ev;
		if(m_resizing) {
			if( m_flags & Vertical ) {
				adjustHeaderSize( divider, mev->pos().y()-divstart );
				divstart = mev->pos().y();
			}
			else {
				adjustHeaderSize( divider, mev->pos().x()-divstart );
				divstart = mev->pos().x();
			}
			return TRUE;
		}
		else if( mev->button()==NoButton ) {
			// search labels to see if we are in range of a divider
			int pos = m_offset;
			int curs = m_flags&Vertical ? mev->y()+3 : mev->x()+3;
			divider = -1;
			for( int i=0 ; i < (int) labels.size() ; i++ ) {
				pos += labels[i]->size();
				if( curs>=pos && curs<pos+6 ) {
					setCursor(m_flags&Vertical ? sizeVerCursor : sizeHorCursor);
					divider = i;
					divstart = pos;
				}
			}
			if(divider==-1) setCursor(m_defCursor);
			return TRUE;
		}
	}

	if( ev->type()==QEvent::MouseButtonRelease && m_resizing ) {
		emit sizeChanged( divider, labels[divider]->size() );
		m_resizing = FALSE;
		return TRUE;
	}
	return FALSE;
}


klpq'KHeader::numHeaders() (./kdeutils/klpq/kheader.cpp:202)

int KHeader::numHeaders()
{
	return labels.size();
}



klpq'KHeader::setNumHeaders() (./kdeutils/klpq/kheader.cpp:208)

void KHeader::setNumHeaders( int numHeaders )
{
	ASSERT( numHeaders >= 0 );
	if( numHeaders < (int) labels.size() )
	{
		for( int i=numHeaders ; i < (int) labels.size() ; i++ )
		{
			delete labels[i];
		}
		labels.resize( numHeaders );
	}
	else if( numHeaders > (int) labels.size() )
	{
		int oldCount = labels.size();
		labels.resize( numHeaders );
		
		for( int i=oldCount ; i < numHeaders ; i++ )
		{
			labels[i] = new KHeaderItem( this, m_flags );
		}
	}
}



klpq'KHeader::setHeaderFlags() (./kdeutils/klpq/kheader.cpp:232)

void KHeader::setHeaderFlags( int header, int flags )
{
	ASSERT( header >= 0 );
	ASSERT( header < (int) labels.size() );

	labels[header]->setFlags( flags );
}



klpq'KHeader::setHeaderSize() (./kdeutils/klpq/kheader.cpp:241)

void KHeader::setHeaderSize( int header, int size )
{
	ASSERT( header >= 0 );
	ASSERT( header < (int) labels.size() );

	labels[header]->setSize( size );
	repaint();
	emit sizeChanged( header, size );
}


klpq'KHeader::getHeaderSize() (./kdeutils/klpq/kheader.cpp:251)

int KHeader::getHeaderSize( int header )
{
  ASSERT( header >= 0 );
  ASSERT( header < (int) labels.size() );
  return labels[header]->size();
}


klpq'KHeader::adjustHeaderSize() (./kdeutils/klpq/kheader.cpp:258)

void KHeader::adjustHeaderSize( int start, int delta )
{
	int pos = labels[start]->size()+delta;
	if( pos < 0 ) pos = 0;
	labels[start]->setSize( pos );
// There must be a better way!
// calculate the rectangle?
	repaint();
	emit sizeChanging( start, pos );
}



klpq'KHeader::setOrigin() (./kdeutils/klpq/kheader.cpp:270)

void KHeader::setOrigin( int pos )
{
	m_offset = -pos;
	repaint();
}



klpq'KHeader::setHeaderLabel() (./kdeutils/klpq/kheader.cpp:277)

void KHeader::setHeaderLabel( int header, const char *text, int align )
{
	labels[header]->setText( text, align );
}



klpq'KHeader::paintEvent() (./kdeutils/klpq/kheader.cpp:283)

void KHeader::paintEvent( QPaintEvent * ) // pev )
{
	QColorGroup g = colorGroup();

	QPainter paint;
	paint.begin( this );

	int pos = m_offset;
	for( int i=0 ; i < (int) labels.size(); i++ )
	{
		labels[i]->paint( &paint, &g, style(), pos, width(), height(), i==m_selected);
		pos += labels[i]->size();
	}

	paint.end();
}


klpq'KHeader::mousePressEvent() (./kdeutils/klpq/kheader.cpp:300)

void KHeader::mousePressEvent( QMouseEvent *mev )
{
	int curs;
	if( m_flags & Vertical )
		curs = mev->y();
	else
		curs = mev->x();
	int pos = m_offset;
	for( int i=0 ; i < (int) labels.size() ; i++ )
	{
		pos += labels[i]->size();
		if( pos >= curs )
		{
			if( !(labels[i]->flags() & Buttons) )
				return;
			m_selected = i;
			break;
		}
	}
	repaint();
}


klpq'KHeader::mouseReleaseEvent() (./kdeutils/klpq/kheader.cpp:322)

void KHeader::mouseReleaseEvent( QMouseEvent * ) // mev )
{
	if( m_selected == -1 )
	{
		m_temp_sel = -1;
		return;
	}
	emit selected(m_selected);
	m_selected = -1;
	m_temp_sel = -1;
	repaint();
}


klpq'KHeader::enterEvent() (./kdeutils/klpq/kheader.cpp:335)

void KHeader::enterEvent( QEvent * ) // ev )
{
	m_selected = m_temp_sel;
	if( m_selected != -1 )
		repaint();
}


klpq'KHeader::leaveEvent() (./kdeutils/klpq/kheader.cpp:342)

void KHeader::leaveEvent( QEvent * ) // ev )
{
	m_temp_sel = m_selected;
	m_selected = -1;
	if( m_temp_sel != -1 )
		repaint();
}