00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
#include <koTabChooser.h>
00025
#include <qpainter.h>
00026
#include <qpopupmenu.h>
00027
#include <qcursor.h>
00028
00029
#include <klocale.h>
00030
00031
00032
class KoTabChooserPrivate {
00033
public:
00034 KoTabChooserPrivate() {
00035 }
00036 ~KoTabChooserPrivate() {}
00037
00038
bool m_bReadWrite;
00039 };
00040
00041
00042
00043
00044
00045
00046 KoTabChooser::KoTabChooser(
QWidget *parent,
int _flags )
00047 :
QFrame( parent, "" )
00048 {
00049 setFrameStyle( Box | Raised );
00050 flags = _flags;
00051 d=
new KoTabChooserPrivate();
00052
00053 d->m_bReadWrite=
true;
00054
00055 currType = 0;
00056
00057
if ( flags & TAB_DEC_PNT ) currType = TAB_DEC_PNT;
00058
if ( flags & TAB_CENTER ) currType = TAB_CENTER;
00059
if ( flags & TAB_RIGHT ) currType = TAB_RIGHT;
00060
if ( flags & TAB_LEFT ) currType = TAB_LEFT;
00061
00062 setupMenu();
00063 }
00064
00065
00066
void KoTabChooser::mousePressEvent(
QMouseEvent *e )
00067 {
00068
if ( currType == 0 )
return;
00069
00070
if( !d->m_bReadWrite)
00071
return;
00072
00073
switch ( e->button() ) {
00074
case LeftButton:
case MidButton: {
00075
switch ( currType ) {
00076
case TAB_LEFT: {
00077
if ( flags & TAB_CENTER ) currType = TAB_CENTER;
00078
else if ( flags & TAB_RIGHT ) currType = TAB_RIGHT;
00079
else if ( flags & TAB_DEC_PNT ) currType = TAB_DEC_PNT;
00080 }
break;
00081
case TAB_RIGHT: {
00082
if ( flags & TAB_DEC_PNT ) currType = TAB_DEC_PNT;
00083
else if ( flags & TAB_LEFT ) currType = TAB_LEFT;
00084
else if ( flags & TAB_CENTER ) currType = TAB_CENTER;
00085 }
break;
00086
case TAB_CENTER: {
00087
if ( flags & TAB_RIGHT ) currType = TAB_RIGHT;
00088
else if ( flags & TAB_DEC_PNT ) currType = TAB_DEC_PNT;
00089
else if ( flags & TAB_LEFT ) currType = TAB_LEFT;
00090 }
break;
00091
case TAB_DEC_PNT: {
00092
if ( flags & TAB_LEFT ) currType = TAB_LEFT;
00093
else if ( flags & TAB_CENTER ) currType = TAB_CENTER;
00094
else if ( flags & TAB_RIGHT ) currType = TAB_RIGHT;
00095 }
break;
00096 }
00097 repaint(
true );
00098 }
break;
00099
case RightButton: {
00100
QPoint pnt( QCursor::pos() );
00101
00102 rb_menu->setItemChecked( mLeft,
false );
00103 rb_menu->setItemChecked( mCenter,
false );
00104 rb_menu->setItemChecked( mRight,
false );
00105 rb_menu->setItemChecked( mDecPoint,
false );
00106
00107
switch ( currType ) {
00108
case TAB_LEFT: rb_menu->setItemChecked( mLeft,
true );
00109
break;
00110
case TAB_CENTER: rb_menu->setItemChecked( mCenter,
true );
00111
break;
00112
case TAB_RIGHT: rb_menu->setItemChecked( mRight,
true );
00113
break;
00114
case TAB_DEC_PNT: rb_menu->setItemChecked( mDecPoint,
true );
00115
break;
00116 }
00117
00118 rb_menu->popup( pnt );
00119 }
break;
00120
default:
break;
00121 }
00122 }
00123
00124
00125
void KoTabChooser::drawContents(
QPainter *painter )
00126 {
00127
if ( currType == 0 )
return;
00128
00129 painter->setPen(
QPen( black, 2, SolidLine ) );
00130
00131
switch ( currType ) {
00132
case TAB_LEFT: {
00133 painter->drawLine( 4, height() - 4, width() - 4, height() - 4 );
00134 painter->drawLine( 5, 4, 5, height() - 4 );
00135 }
break;
00136
case TAB_CENTER: {
00137 painter->drawLine( 4, height() - 4, width() - 4, height() - 4 );
00138 painter->drawLine( width() / 2, 4, width() / 2, height() - 4 );
00139 }
break;
00140
case TAB_RIGHT: {
00141 painter->drawLine( 4, height() - 4, width() - 4, height() - 4 );
00142 painter->drawLine( width() - 5, 4, width() - 5, height() - 4 );
00143 }
break;
00144
case TAB_DEC_PNT: {
00145 painter->drawLine( 4, height() - 4, width() - 4, height() - 4 );
00146 painter->drawLine( width() / 2, 4, width() / 2, height() - 4 );
00147 painter->fillRect( width() / 2 + 2, height() - 9, 3, 3, black );
00148 }
break;
00149
default:
break;
00150 }
00151 }
00152
00153
00154
void KoTabChooser::setupMenu()
00155 {
00156 rb_menu =
new QPopupMenu();
00157 Q_CHECK_PTR( rb_menu );
00158 mLeft = rb_menu->insertItem( i18n(
"Tabulator &Left" ),
this, SLOT( rbLeft() ) );
00159 mCenter = rb_menu->insertItem( i18n(
"Tabulator &Center" ),
this, SLOT( rbCenter() ) );
00160 mRight = rb_menu->insertItem( i18n(
"Tabulator &Right" ),
this, SLOT( rbRight() ) );
00161 mDecPoint = rb_menu->insertItem( i18n(
"Tabulator &Decimal Point" ),
this, SLOT( rbDecPoint() ) );
00162 rb_menu->setCheckable(
false );
00163 }
00164
00165 KoTabChooser::~KoTabChooser() {
00166
delete rb_menu;
00167
delete d;
00168 }
00169
00170
void KoTabChooser::setReadWrite(
bool _readWrite)
00171 {
00172 d->m_bReadWrite=_readWrite;
00173 }
00174
00175
#include <koTabChooser.moc>