diff options
Diffstat (limited to 'lib/kofficeui/KoTabChooser.cpp')
-rw-r--r-- | lib/kofficeui/KoTabChooser.cpp | 175 |
1 files changed, 175 insertions, 0 deletions
diff --git a/lib/kofficeui/KoTabChooser.cpp b/lib/kofficeui/KoTabChooser.cpp new file mode 100644 index 00000000..414db6bb --- /dev/null +++ b/lib/kofficeui/KoTabChooser.cpp @@ -0,0 +1,175 @@ +/* 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> |