Source Code (Use browser search to find items of interest.)
Class Index
kspread'KSpreadHBorder (./koffice/kspread/kspread_canvas.h:448)
class KSpreadHBorder : public QWidget
{
Q_OBJECT
public:
KSpreadHBorder( QWidget *_parent, KSpreadCanvas *_canvas, KSpreadView *_view );
int markerColumn() { return m_iSelectionAnchor; }
void resizeColumn( int resize, int nb = -1 );
void adjustColumn( int _col = -1 );
protected:
virtual void paintEvent ( QPaintEvent* _ev );
virtual void mousePressEvent( QMouseEvent* _ev );
virtual void mouseReleaseEvent( QMouseEvent* _ev );
virtual void mouseDoubleClickEvent( QMouseEvent* _ev );
virtual void mouseMoveEvent( QMouseEvent* _ev );
KSpreadCanvas *m_pCanvas;
KSpreadView *m_pView;
/**
* Flag that inidicates whether the user wants to mark columns.
* The user may mark columns by dragging the mouse around in th XBorder widget.
* If he is doing that right now, this flag is TRUE. Mention that the user may
* also resize columns by dragging the mouse. This case is not covered by this flag.
*/
bool m_bSelection;
/**
* The column over which the user pressed the mouse button.
* If the user marks columns in the XBorder widget, then this is the initial
* column on which he pressed the mouse button.
*/
int m_iSelectionAnchor;
/**
* Flag that indicates whether the user resizes a column
* The user may resize columns by dragging the mouse around in th XBorder widget.
* If he is doing that right now, this flag is TRUE. Mention that the user may
*/
bool m_bResize;
/**
* The column over which the user pressed the mouse button.
* The user may resize columns by dragging the mouse around un the XBorder widget.
* This is the column over which he pressed the mouse button. This column is going
* to be resized.
*/
int m_iResizeAnchor;
/**
* Last position of the mouse.
*/
int m_iResizePos;
};
/**
*/
kspread'KSpreadHBorder::KSpreadHBorder() (./koffice/kspread/kspread_canvas.cc:2080)
KSpreadHBorder::KSpreadHBorder( QWidget *_parent, KSpreadCanvas *_canvas,KSpreadView *_view )
: QWidget( _parent, "", WNorthWestGravity )
{
m_pView = _view;
m_pCanvas = _canvas;
setBackgroundMode( PaletteBackground );
setMouseTracking( TRUE );
m_bResize = FALSE;
m_bSelection = FALSE;
}
kspread'KSpreadHBorder::mousePressEvent() (./koffice/kspread/kspread_canvas.cc:2092)
void KSpreadHBorder::mousePressEvent( QMouseEvent * _ev )
{
KSpreadTable *table = m_pCanvas->activeTable();
assert( table );
if(!m_pView->koDocument()->isReadWrite())
return;
m_bResize = FALSE;
m_bSelection = FALSE;
int x = 0;
int col = table->leftColumn( 0, x, m_pCanvas );
while ( x < width() && !m_bResize )
{
int w = table->columnLayout( col )->width( m_pCanvas );
col++;
if ( _ev->pos().x() >= x + w - 1 && _ev->pos().x() <= x + w + 1 )
m_bResize = TRUE;
x += w;
}
if ( m_bResize )
{
QPainter painter;
painter.begin( m_pCanvas );
painter.setRasterOp( NotROP );
painter.drawLine( _ev->pos().x(), 0, _ev->pos().x(), m_pCanvas->height() );
painter.end();
int tmp;
m_iResizeAnchor = table->leftColumn( _ev->pos().x() - 3, tmp, m_pCanvas );
m_iResizePos = _ev->pos().x();
}
else
{
m_bSelection = TRUE;
table->unselect();
int tmp;
int hit_col = table->leftColumn( _ev->pos().x(), tmp, m_pCanvas );
m_iSelectionAnchor = hit_col;
QRect r;
r.setCoords( hit_col, 1, hit_col, 0x7FFF );
table->setSelection( r, m_pCanvas );
if ( _ev->button() == RightButton )
{
QPoint p = mapToGlobal( _ev->pos() );
m_pView->popupColumnMenu( p );
m_bSelection=FALSE;
}
}
}
kspread'KSpreadHBorder::mouseReleaseEvent() (./koffice/kspread/kspread_canvas.cc:2146)
void KSpreadHBorder::mouseReleaseEvent( QMouseEvent * _ev )
{
KSpreadTable *table = m_pCanvas->activeTable();
assert( table );
if(!m_pView->koDocument()->isReadWrite())
return;
if ( m_bResize )
{
QPainter painter;
painter.begin( m_pCanvas );
painter.setRasterOp( NotROP );
painter.drawLine( m_iResizePos, 0, m_iResizePos, m_pCanvas->height() );
painter.end();
ColumnLayout *cl = table->nonDefaultColumnLayout( m_iResizeAnchor );
int x = table->columnPos( m_iResizeAnchor, m_pCanvas );
if ( ( m_pCanvas->zoom() * (float)( _ev->pos().x() - x ) ) < 20.0 )
cl->setWidth( 20, m_pCanvas );
else
cl->setWidth( _ev->pos().x() - x, m_pCanvas );
}
m_bSelection = FALSE;
m_bResize = FALSE;
}
kspread'KSpreadHBorder::adjustColumn() (./koffice/kspread/kspread_canvas.cc:2173)
void KSpreadHBorder::adjustColumn(int _col)
{
int adjust;
int select;
if( _col==-1 )
{
adjust = m_pCanvas->activeTable()->adjustColumn(QPoint( m_pCanvas->markerColumn(), m_pCanvas->markerRow() ));
select=m_iSelectionAnchor;
}
else
{
adjust=m_pCanvas->activeTable()->adjustColumn(QPoint( m_pCanvas->markerColumn(), m_pCanvas->markerRow() ),_col);
select=_col;
}
if(adjust!=-1)
{
KSpreadTable *table = m_pCanvas->activeTable();
assert( table );
ColumnLayout *cl = table->nonDefaultColumnLayout( select );
adjust = QMAX( 20, adjust );
cl->setWidth( adjust, m_pCanvas );
}
}
kspread'KSpreadHBorder::resizeColumn() (./koffice/kspread/kspread_canvas.cc:2200)
void KSpreadHBorder::resizeColumn(int resize,int nb )
{
KSpreadTable *table = m_pCanvas->activeTable();
ASSERT( table );
if( nb == -1 )
{
ColumnLayout *cl = table->nonDefaultColumnLayout( m_iSelectionAnchor );
resize = QMAX( 20, resize );
cl->setWidth( resize, m_pCanvas );
}
else
{
QRect selection( table->selectionRect() );
if( selection.bottom() == 0 || selection.top() == 0 || selection.left() == 0 ||
selection.right() == 0 )
{
ColumnLayout *cl = table->nonDefaultColumnLayout( m_pCanvas->markerColumn() );
resize = QMAX( 20, resize );
cl->setWidth( resize, m_pCanvas );
}
else
{
ColumnLayout *cl;
for (int i=selection.left();i<=selection.right();i++)
{
cl= table->nonDefaultColumnLayout( i );
resize = QMAX( 20, resize );
cl->setWidth( resize, m_pCanvas );
}
}
}
}
kspread'KSpreadHBorder::mouseDoubleClickEvent() (./koffice/kspread/kspread_canvas.cc:2235)
void KSpreadHBorder::mouseDoubleClickEvent( QMouseEvent * _ev )
{
KSpreadTable *table = m_pCanvas->activeTable();
assert( table );
if(!m_pView->koDocument()->isReadWrite())
return;
int x = 1;
int col = table->leftColumn( 1, x, m_pCanvas );
while ( x < width() )
{
int w = table->columnLayout( col )->width( m_pCanvas );
col++;
if ( _ev->pos().x() >= x + w - 1 && _ev->pos().x() <= x + w + 1 )
{
m_bSelection = TRUE;
table->unselect();
m_iSelectionAnchor = --col;
QRect r;
r.setCoords( col, 1, col, 0x7FFF );
table->setSelection( r, m_pCanvas );
m_bSelection = FALSE;
adjustColumn();
return;
}
x += w;
}
}
kspread'KSpreadHBorder::mouseMoveEvent() (./koffice/kspread/kspread_canvas.cc:2265)
void KSpreadHBorder::mouseMoveEvent( QMouseEvent * _ev )
{
KSpreadTable *table = m_pCanvas->activeTable();
assert( table );
if(!m_pView->koDocument()->isReadWrite())
return;
if ( m_bResize )
{
QPainter painter;
painter.begin( m_pCanvas );
painter.setRasterOp( NotROP );
painter.drawLine( m_iResizePos, 0, m_iResizePos, m_pCanvas->height() );
m_iResizePos = _ev->pos().x();
int twenty = (int)( 20.0 * m_pCanvas->zoom() );
// Dont make the column have a width < 20 pixels.
int x = table->columnPos( m_iResizeAnchor, m_pCanvas );
if ( m_iResizePos < x + twenty )
m_iResizePos = x + twenty;
painter.drawLine( m_iResizePos, 0, m_iResizePos, m_pCanvas->height() );
painter.end();
}
else if ( m_bSelection )
{
int x = 0;
int col = table->leftColumn( _ev->pos().x(), x, m_pCanvas );
QRect r = table->selectionRect();
if ( col < m_iSelectionAnchor )
{
r.setLeft( col );
r.setRight( m_iSelectionAnchor );
}
else
{
r.setRight( col );
r.setLeft( m_iSelectionAnchor );
}
table->setSelection( r, m_pCanvas );
if ( _ev->pos().x() < 0 )
m_pCanvas->horzScrollBar()->setValue( m_pCanvas->xOffset() + x );
else if ( _ev->pos().x() > m_pCanvas->width() )
{
ColumnLayout *cl = table->columnLayout( col + 1 );
x = table->columnPos( col + 1, m_pCanvas );
m_pCanvas->horzScrollBar()->setValue( m_pCanvas->xOffset() +
( x + cl->width( m_pCanvas ) - m_pCanvas->width() ) );
}
}
// Perhaps we have to modify the cursor
else
{
int x = 0;
int col = table->leftColumn( 0, x, m_pCanvas );
while ( x < width() )
{
int w = table->columnLayout( col )->width( m_pCanvas );
col++;
if ( _ev->pos().x() >= x + w - 1 && _ev->pos().x() <= x + w + 1 )
{
setCursor( sizeAllCursor );
return;
}
x += w;
}
setCursor( arrowCursor );
}
}
kspread'KSpreadHBorder::paintEvent() (./koffice/kspread/kspread_canvas.cc:2337)
void KSpreadHBorder::paintEvent( QPaintEvent* _ev )
{
KSpreadTable *table = m_pCanvas->activeTable();
if (!table )
return;
QPainter painter;
painter.begin( this );
QPen pen;
pen.setWidth( 1 );
painter.setPen( pen );
painter.setBackgroundColor( white );
painter.eraseRect( _ev->rect() );
//QFontMetrics fm = painter.fontMetrics();
// Matthias Elter: This causes a SEGFAULT in ~QPainter!
// Only god and the trolls know why ;-)
// bah...took me quite some time to track this one down...
int xpos;
int left_col = table->leftColumn( _ev->rect().x(), xpos, m_pCanvas );
int right_col = table->rightColumn( _ev->rect().right(), m_pCanvas );
QRect selection( table->selectionRect() );
for ( int x = left_col; x <= right_col; x++ )
{
bool selected = ( selection.left() != 0 && selection.bottom() == 0x7FFF &&
x >= selection.left() && x <= selection.right() );
ColumnLayout *col_lay = table->columnLayout( x );
if ( selected )
{
// static QColorGroup g2( black, white, white, darkGray, lightGray, black, black );
static QBrush fill2( black );
qDrawShadePanel( &painter, xpos, 0, col_lay->width( m_pCanvas ),
XBORDER_HEIGHT, colorGroup(), FALSE, 1, &fill2 );
}
else
{
// static QColorGroup g( black, white, white, darkGray, lightGray, black, black );
static QBrush fill( colorGroup().brush( QColorGroup::Background ) );
qDrawShadePanel( &painter, xpos, 0, col_lay->width( m_pCanvas ),
XBORDER_HEIGHT, colorGroup(), FALSE, 1, &fill );
}
int len = painter.fontMetrics().width( table->columnLabel(x) );
if ( selected )
painter.setPen( white );
else
painter.setPen( colorGroup().text() );
painter.drawText( xpos + ( col_lay->width( m_pCanvas ) - len ) / 2,
( XBORDER_HEIGHT + painter.fontMetrics().ascent() -
painter.fontMetrics().descent() ) / 2,
table->columnLabel(x) );
xpos += col_lay->width( m_pCanvas );
}
painter.end();
}