kpresenter
KPrPenStyleWidget.cpp00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #include "KPrPenStyleWidget.h"
00022
00023 #include "penstyle.h"
00024 #include "KPrPBPreview.h"
00025
00026 #include <qlayout.h>
00027 #include <qlabel.h>
00028 #include <qvbox.h>
00029
00030 #include <kcolorbutton.h>
00031 #include <kcombobox.h>
00032 #include <klocale.h>
00033 #include <knuminput.h>
00034
00035
00036 KPrPenStyleWidget::KPrPenStyleWidget( QWidget *parent, const char *name, const KoPenCmd::Pen &pen, bool configureLineEnds )
00037 : QWidget( parent, name )
00038 , m_pen( pen )
00039 {
00040 QVBoxLayout *layout = new QVBoxLayout( this );
00041 layout->addWidget( m_ui = new PenStyleUI( this ) );
00042
00043 QSpacerItem* spacer = new QSpacerItem( 20, 20, QSizePolicy::Minimum, QSizePolicy::Expanding );
00044 layout->addItem( spacer );
00045
00046 connect( m_ui->colorChooser, SIGNAL( changed( const QColor& ) ),
00047 this, SLOT( slotPenChanged() ) );
00048
00049 m_ui->styleCombo->insertItem( i18n( "No Outline" ) );
00050 m_ui->styleCombo->insertItem( "__________" );
00051 m_ui->styleCombo->insertItem( "__ __ __ __" );
00052 m_ui->styleCombo->insertItem( "_ _ _ _ _ _" );
00053 m_ui->styleCombo->insertItem( "__ _ __ _ __" );
00054 m_ui->styleCombo->insertItem( "__ _ _ __ _" );
00055
00056 m_ui->widthInput->setRange( 1, 10, 1, false);
00057
00058 connect( m_ui->styleCombo, SIGNAL( activated( int ) ),
00059 this, SLOT( slotPenChanged() ) );
00060
00061 connect( m_ui->widthInput, SIGNAL( valueChanged( double ) ),
00062 this, SLOT( slotPenChanged() ) );
00063
00064 m_ui->lineBeginCombo->insertItem( i18n("Normal") );
00065 m_ui->lineBeginCombo->insertItem( i18n("Arrow") );
00066 m_ui->lineBeginCombo->insertItem( i18n("Square") );
00067 m_ui->lineBeginCombo->insertItem( i18n("Circle") );
00068 m_ui->lineBeginCombo->insertItem( i18n("Line Arrow") );
00069 m_ui->lineBeginCombo->insertItem( i18n("Dimension Line") );
00070 m_ui->lineBeginCombo->insertItem( i18n("Double Arrow") );
00071 m_ui->lineBeginCombo->insertItem( i18n("Double Line Arrow") );
00072
00073 connect( m_ui->lineBeginCombo, SIGNAL( activated( int ) ),
00074 this, SLOT( slotLineBeginChanged() ) );
00075
00076 m_ui->lineEndCombo->insertItem( i18n("Normal") );
00077 m_ui->lineEndCombo->insertItem( i18n("Arrow") );
00078 m_ui->lineEndCombo->insertItem( i18n("Square") );
00079 m_ui->lineEndCombo->insertItem( i18n("Circle") );
00080 m_ui->lineEndCombo->insertItem( i18n("Line Arrow") );
00081 m_ui->lineEndCombo->insertItem( i18n("Dimension Line") );
00082 m_ui->lineEndCombo->insertItem( i18n("Double Arrow") );
00083 m_ui->lineEndCombo->insertItem( i18n("Double Line Arrow") );
00084
00085 connect( m_ui->lineEndCombo, SIGNAL( activated( int ) ),
00086 this, SLOT( slotLineEndChanged() ) );
00087
00088 if ( !configureLineEnds )
00089 m_ui->arrowGroup->hide();
00090
00091
00092 slotReset();
00093 }
00094
00095
00096 KPrPenStyleWidget::~KPrPenStyleWidget()
00097 {
00098 delete m_ui;
00099 }
00100
00101
00102 void KPrPenStyleWidget::setPen( const KoPen &pen )
00103 {
00104 m_ui->colorChooser->setColor( pen.color() );
00105
00106 switch ( pen.style() )
00107 {
00108 case NoPen:
00109 m_ui->styleCombo->setCurrentItem( 0 );
00110 break;
00111 case SolidLine:
00112 m_ui->styleCombo->setCurrentItem( 1 );
00113 break;
00114 case DashLine:
00115 m_ui->styleCombo->setCurrentItem( 2 );
00116 break;
00117 case DotLine:
00118 m_ui->styleCombo->setCurrentItem( 3 );
00119 break;
00120 case DashDotLine:
00121 m_ui->styleCombo->setCurrentItem( 4 );
00122 break;
00123 case DashDotDotLine:
00124 m_ui->styleCombo->setCurrentItem( 5 );
00125 break;
00126 case MPenStyle:
00127 break;
00128 }
00129
00130 m_ui->widthInput->setValue( pen.pointWidth() );
00131 m_ui->pbPreview->setPen( pen );
00132 }
00133
00134
00135 void KPrPenStyleWidget::setLineBegin( LineEnd lb )
00136 {
00137 m_ui->lineBeginCombo->setCurrentItem( (int)lb );
00138 m_ui->pbPreview->setLineBegin( lb );
00139 }
00140
00141
00142 void KPrPenStyleWidget::setLineEnd( LineEnd le )
00143 {
00144 m_ui->lineEndCombo->setCurrentItem( (int)le );
00145 m_ui->pbPreview->setLineEnd( le );
00146 }
00147
00148
00149 KoPen KPrPenStyleWidget::getKPPen() const
00150 {
00151 KoPen pen;
00152
00153 switch ( m_ui->styleCombo->currentItem() )
00154 {
00155 case 0:
00156 pen.setStyle( NoPen );
00157 break;
00158 case 1:
00159 pen.setStyle( SolidLine );
00160 break;
00161 case 2:
00162 pen.setStyle( DashLine );
00163 break;
00164 case 3:
00165 pen.setStyle( DotLine );
00166 break;
00167 case 4:
00168 pen.setStyle( DashDotLine );
00169 break;
00170 case 5:
00171 pen.setStyle( DashDotDotLine );
00172 break;
00173 }
00174
00175 pen.setColor( m_ui->colorChooser->color() );
00176 pen.setPointWidth( m_ui->widthInput->value() );
00177
00178 return pen;
00179 }
00180
00181
00182 LineEnd KPrPenStyleWidget::getLineBegin() const
00183 {
00184 return (LineEnd) m_ui->lineBeginCombo->currentItem();
00185 }
00186
00187
00188 LineEnd KPrPenStyleWidget::getLineEnd() const
00189 {
00190 return (LineEnd) m_ui->lineEndCombo->currentItem();
00191 }
00192
00193
00194 int KPrPenStyleWidget::getPenConfigChange() const
00195 {
00196 int flags = 0;
00197
00198 if ( getLineEnd() != m_pen.lineEnd )
00199 flags = flags | KoPenCmd::LineEnd;
00200 if ( getLineBegin() != m_pen.lineBegin )
00201 flags = flags | KoPenCmd::LineBegin;
00202 if ( getKPPen().color() != m_pen.pen.color() )
00203 flags = flags | KoPenCmd::Color;
00204 if ( getKPPen().style() != m_pen.pen.style() )
00205 flags = flags | KoPenCmd::Style;
00206 if ( getKPPen().pointWidth() != m_pen.pen.pointWidth() )
00207 flags = flags | KoPenCmd::Width;
00208
00209 return flags;
00210 }
00211
00212
00213 KoPenCmd::Pen KPrPenStyleWidget::getPen() const
00214 {
00215 KoPenCmd::Pen pen( getKPPen(), getLineBegin(), getLineEnd() );
00216 return pen;
00217 }
00218
00219
00220 void KPrPenStyleWidget::setPen( const KoPenCmd::Pen &pen )
00221 {
00222 m_pen = pen;
00223 slotReset();
00224 }
00225
00226
00227 void KPrPenStyleWidget::apply()
00228 {
00229 int flags = getPenConfigChange();
00230
00231 if ( flags & KoPenCmd::LineEnd )
00232 m_pen.lineEnd = getLineEnd();
00233
00234 if ( flags & KoPenCmd::LineBegin )
00235 m_pen.lineBegin = getLineBegin();
00236
00237 if ( flags & KoPenCmd::Color )
00238 m_pen.pen.setColor( getKPPen().color() );
00239
00240 if ( flags & KoPenCmd::Style )
00241 m_pen.pen.setStyle( getKPPen().style() );
00242
00243 if ( flags & KoPenCmd::Width )
00244 m_pen.pen.setPointWidth( getKPPen().pointWidth() );
00245 }
00246
00247
00248 void KPrPenStyleWidget::slotReset()
00249 {
00250 setPen( m_pen.pen );
00251 m_ui->widthLabel->setEnabled( m_pen.pen.style() != NoPen );
00252 m_ui->widthInput->setEnabled( m_pen.pen.style() != NoPen );
00253
00254 setLineBegin( m_pen.lineBegin );
00255 setLineEnd( m_pen.lineEnd );
00256 }
00257
00258
00259 void KPrPenStyleWidget::slotPenChanged()
00260 {
00261 KoPen pen = getKPPen();
00262 m_ui->widthLabel->setEnabled( pen.style() != NoPen );
00263 m_ui->widthInput->setEnabled( pen.style() != NoPen );
00264 m_ui->pbPreview->setPen( pen );
00265 }
00266
00267
00268 void KPrPenStyleWidget::slotLineBeginChanged()
00269 {
00270 m_ui->pbPreview->setLineBegin( getLineBegin() );
00271 }
00272
00273
00274 void KPrPenStyleWidget::slotLineEndChanged()
00275 {
00276 m_ui->pbPreview->setLineEnd( getLineEnd() );
00277 }
00278
00279 #include "KPrPenStyleWidget.moc"
|