You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
koffice/lib/kofficeui/KoTabChooser.cpp

176 lines
5.3 KiB

/* This file is part of the KDE project
Copyright (C) 1998, 1999 Reginald Stadlbauer <reggie@kde.org>
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public License
along with this library; see the file COPYING.LIB. If not, write to
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301, USA.
*/
// Description: Tabulator chooser (header)
/******************************************************************/
#include <KoTabChooser.h>
#include <qpainter.h>
#include <qpopupmenu.h>
#include <qcursor.h>
#include <klocale.h>
class KoTabChooserPrivate {
public:
KoTabChooserPrivate() {
}
~KoTabChooserPrivate() {}
bool m_bReadWrite;
};
/******************************************************************/
/* Class: KoTabChooser */
/******************************************************************/
/*================================================================*/
KoTabChooser::KoTabChooser( QWidget *parent, int _flags )
: QFrame( parent, "" )
{
setFrameStyle( MenuBarPanel );
flags = _flags;
d=new KoTabChooserPrivate();
d->m_bReadWrite=true;
currType = 0;
if ( flags & TAB_DEC_PNT ) currType = TAB_DEC_PNT;
if ( flags & TAB_CENTER ) currType = TAB_CENTER;
if ( flags & TAB_RIGHT ) currType = TAB_RIGHT;
if ( flags & TAB_LEFT ) currType = TAB_LEFT;
setupMenu();
}
/*================================================================*/
void KoTabChooser::mousePressEvent( QMouseEvent *e )
{
if ( currType == 0 ) return;
if( !d->m_bReadWrite)
return;
switch ( e->button() ) {
case LeftButton: case MidButton: {
switch ( currType ) {
case TAB_LEFT: {
if ( flags & TAB_CENTER ) currType = TAB_CENTER;
else if ( flags & TAB_RIGHT ) currType = TAB_RIGHT;
else if ( flags & TAB_DEC_PNT ) currType = TAB_DEC_PNT;
} break;
case TAB_RIGHT: {
if ( flags & TAB_DEC_PNT ) currType = TAB_DEC_PNT;
else if ( flags & TAB_LEFT ) currType = TAB_LEFT;
else if ( flags & TAB_CENTER ) currType = TAB_CENTER;
} break;
case TAB_CENTER: {
if ( flags & TAB_RIGHT ) currType = TAB_RIGHT;
else if ( flags & TAB_DEC_PNT ) currType = TAB_DEC_PNT;
else if ( flags & TAB_LEFT ) currType = TAB_LEFT;
} break;
case TAB_DEC_PNT: {
if ( flags & TAB_LEFT ) currType = TAB_LEFT;
else if ( flags & TAB_CENTER ) currType = TAB_CENTER;
else if ( flags & TAB_RIGHT ) currType = TAB_RIGHT;
} break;
}
repaint( true );
} break;
case RightButton: {
QPoint pnt( QCursor::pos() );
rb_menu->setItemChecked( mLeft, false );
rb_menu->setItemChecked( mCenter, false );
rb_menu->setItemChecked( mRight, false );
rb_menu->setItemChecked( mDecPoint, false );
switch ( currType ) {
case TAB_LEFT: rb_menu->setItemChecked( mLeft, true );
break;
case TAB_CENTER: rb_menu->setItemChecked( mCenter, true );
break;
case TAB_RIGHT: rb_menu->setItemChecked( mRight, true );
break;
case TAB_DEC_PNT: rb_menu->setItemChecked( mDecPoint, true );
break;
}
rb_menu->popup( pnt );
} break;
default: break;
}
}
/*================================================================*/
void KoTabChooser::drawContents( QPainter *painter )
{
if ( currType == 0 ) return;
painter->setPen( QPen( black, 2, SolidLine ) );
switch ( currType ) {
case TAB_LEFT: {
painter->drawLine( 4, height() - 4, width() - 4, height() - 4 );
painter->drawLine( 5, 4, 5, height() - 4 );
} break;
case TAB_CENTER: {
painter->drawLine( 4, height() - 4, width() - 4, height() - 4 );
painter->drawLine( width() / 2, 4, width() / 2, height() - 4 );
} break;
case TAB_RIGHT: {
painter->drawLine( 4, height() - 4, width() - 4, height() - 4 );
painter->drawLine( width() - 5, 4, width() - 5, height() - 4 );
} break;
case TAB_DEC_PNT: {
painter->drawLine( 4, height() - 4, width() - 4, height() - 4 );
painter->drawLine( width() / 2, 4, width() / 2, height() - 4 );
painter->fillRect( width() / 2 + 2, height() - 9, 3, 3, black );
} break;
default: break;
}
}
/*================================================================*/
void KoTabChooser::setupMenu()
{
rb_menu = new QPopupMenu();
Q_CHECK_PTR( rb_menu );
mLeft = rb_menu->insertItem( i18n( "Tabulator &Left" ), this, SLOT( rbLeft() ) );
mCenter = rb_menu->insertItem( i18n( "Tabulator &Center" ), this, SLOT( rbCenter() ) );
mRight = rb_menu->insertItem( i18n( "Tabulator &Right" ), this, SLOT( rbRight() ) );
mDecPoint = rb_menu->insertItem( i18n( "Tabulator &Decimal Point" ), this, SLOT( rbDecPoint() ) );
rb_menu->setCheckable( false );
}
KoTabChooser::~KoTabChooser() {
delete rb_menu;
delete d;
}
void KoTabChooser::setReadWrite(bool _readWrite)
{
d->m_bReadWrite=_readWrite;
}
#include <KoTabChooser.moc>