koToolBox.cpp
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #include "koToolBox.h"
00021 #include "koDocumentChild.h"
00022
00023 #include <kwin.h>
00024
00025 #include <qlayout.h>
00026 #include <qspinbox.h>
00027 #include <qobjectlist.h>
00028
00029 KoToolBox::KoToolBox( QWidget* parent, const char* name )
00030 : QFrame( parent, name, WType_TopLevel | WStyle_Tool )
00031 {
00032 KWin::setType( winId(), NET::Tool );
00033
00034 setFrameShape( Panel );
00035 setFrameShadow( Raised );
00036
00037 m_layout = new QVBoxLayout( this, 2, 2 );
00038
00039 }
00040
00041 void KoToolBox::setEnabled( bool enable )
00042 {
00043 if ( enable )
00044 {
00045 if ( children() )
00046 {
00047 QObjectListIt it( *children() );
00048 QWidget *w;
00049 while( (w=(QWidget *)it.current()) != 0 )
00050 {
00051 ++it;
00052 if ( w->isWidgetType() )
00053 w->setEnabled( TRUE );
00054 }
00055 }
00056 }
00057 else
00058 {
00059 if ( focusWidget() == this )
00060 focusNextPrevChild( TRUE );
00061 if ( children() )
00062 {
00063 QObjectListIt it( *children() );
00064 QWidget *w;
00065 while( (w=(QWidget *)it.current()) != 0 )
00066 {
00067 ++it;
00068 if ( w->isWidgetType() )
00069 {
00070 w->setEnabled( FALSE );
00071
00072 }
00073 }
00074 }
00075 }
00076 }
00077
00078
00079
00080
00081
00082
00083
00084
00085
00086
00087
00088
00089
00090
00091
00092 void KoToolBox::childEvent( QChildEvent* ev )
00093 {
00094 if ( ev->inserted() && ev->child()->isWidgetType() )
00095 m_layout->addWidget( (QWidget*)ev->child() );
00096 resize( sizeHint() );
00097 }
00098
00099 void KoToolBox::mousePressEvent( QMouseEvent* ev )
00100 {
00101 m_startPos = geometry().topLeft();
00102 m_mousePos = ev->globalPos();
00103 }
00104
00105 void KoToolBox::mouseMoveEvent( QMouseEvent* ev )
00106 {
00107 setGeometry( m_startPos.x() - m_mousePos.x() + ev->globalPos().x(),
00108 m_startPos.y() - m_mousePos.y() + ev->globalPos().y(),
00109 width(), height() );
00110 }
00111
00112
00113
00114 KoTransformToolBox::KoTransformToolBox( KoDocumentChild* ch, QWidget* parent, const char* name )
00115 : KoToolBox( parent, name )
00116 {
00117 m_child = 0;
00118
00119 m_rotation = new QSpinBox( 0, 360, 5, this );
00120 m_rotation->setSuffix( " deg" );
00121 m_scale = new QSpinBox( 10, 400, 10, this );
00122 m_scale->setSuffix( "%" );
00123 m_shearX = new QSpinBox( -100, 100, 1, this );
00124 m_shearX->setSuffix( " px" );
00125 m_shearY = new QSpinBox( -100, 100, 1, this );
00126 m_shearY->setSuffix( " px" );
00127
00128 setDocumentChild( ch );
00129
00130 connect( m_rotation, SIGNAL( valueChanged( int ) ),
00131 this, SLOT( slotRotationChanged( int ) ) );
00132 connect( m_scale, SIGNAL( valueChanged( int ) ),
00133 this, SLOT( slotScalingChanged( int ) ) );
00134 connect( m_shearX, SIGNAL( valueChanged( int ) ),
00135 this, SLOT( slotXShearingChanged( int ) ) );
00136 connect( m_shearY, SIGNAL( valueChanged( int ) ),
00137 this, SLOT( slotYShearingChanged( int ) ) );
00138 }
00139
00140 void KoTransformToolBox::setDocumentChild( KoDocumentChild* ch )
00141 {
00142 if ( m_child == ch )
00143 return;
00144
00145 m_child = ch;
00146
00147 if ( m_child )
00148 {
00149 setRotation( m_child->rotation() );
00150 setScaling( m_child->xScaling() );
00151 setXShearing( m_child->xShearing() );
00152 setYShearing( m_child->yShearing() );
00153 }
00154 }
00155
00156 double KoTransformToolBox::rotation() const
00157 {
00158 return m_rotation->text().toDouble();
00159 }
00160
00161 double KoTransformToolBox::scaling() const
00162 {
00163 return m_scale->text().toDouble() / 100.0;
00164 }
00165
00166 double KoTransformToolBox::xShearing() const
00167 {
00168 return m_shearX->text().toDouble() / 10.0;
00169 }
00170
00171 double KoTransformToolBox::yShearing() const
00172 {
00173 return m_shearY->text().toDouble() / 10.0;
00174 }
00175
00176 void KoTransformToolBox::slotRotationChanged( int v )
00177 {
00178 if ( m_child )
00179 m_child->setRotation( double( v ) );
00180
00181 emit rotationChanged( double( v ) );
00182 }
00183
00184 void KoTransformToolBox::slotScalingChanged( int v )
00185 {
00186 if ( m_child )
00187 m_child->setScaling( double( v ) / 100.0, double( v ) / 100.0 );
00188
00189 emit scalingChanged( double( v ) / 100.0 );
00190 }
00191
00192 void KoTransformToolBox::slotXShearingChanged( int v )
00193 {
00194 if ( m_child )
00195 m_child->setShearing( double( v ) / 10.0, m_child->yShearing() );
00196
00197 emit xShearingChanged( double( v ) / 10.0 );
00198 }
00199
00200 void KoTransformToolBox::slotYShearingChanged( int v )
00201 {
00202 if ( m_child )
00203 m_child->setShearing( m_child->xShearing(), double( v ) / 10.0 );
00204
00205 emit yShearingChanged( double( v ) / 10.0 );
00206 }
00207
00208 void KoTransformToolBox::setRotation( double v )
00209 {
00210 m_rotation->setValue( int( v ) );
00211 }
00212
00213 void KoTransformToolBox::setScaling( double v )
00214 {
00215 m_scale->setValue( int( v * 100.0 ) );
00216 }
00217
00218 void KoTransformToolBox::setXShearing( double v )
00219 {
00220 m_shearX->setValue( int( v * 10.0 ) );
00221 }
00222
00223 void KoTransformToolBox::setYShearing( double v )
00224 {
00225 m_shearY->setValue( int( v * 10.0 ) );
00226 }
00227
00228 #include "koToolBox.moc"
This file is part of the documentation for lib Library Version 1.3.5.