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();
}