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.
176 lines
5.3 KiB
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>
|