kpresenter

KPrPenStyleWidget.cpp

00001 // -*- Mode: c++; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 4; -*-
00002 /* This file is part of the KDE project
00003    Copyright (C) 2004-2005 Thorsten Zachmann <zachmann@kde.org>
00004 
00005    This library is free software; you can redistribute it and/or
00006    modify it under the terms of the GNU Library General Public
00007    License as published by the Free Software Foundation; either
00008    version 2 of the License, or (at your option) any later version.
00009 
00010    This library is distributed in the hope that it will be useful,
00011    but WITHOUT ANY WARRANTY; without even the implied warranty of
00012    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00013    Library General Public License for more details.
00014 
00015    You should have received a copy of the GNU Library General Public License
00016    along with this library; see the file COPYING.LIB.  If not, write to
00017    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
00018  * Boston, MA 02110-1301, USA.
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     //m_ui->arrowGroup->setEnabled( configureLineEnds );
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; // not supported.
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"
KDE Home | KDE Accessibility Home | Description of Access Keys