kpresenter

KPrPenStyleWidget.cpp
1/* This file is part of the KDE project
2 Copyright (C) 2004-2005 Thorsten Zachmann <zachmann@kde.org>
3
4 This library is free software; you can redistribute it and/or
5 modify it under the terms of the GNU Library General Public
6 License as published by the Free Software Foundation; either
7 version 2 of the License, or (at your option) any later version.
8
9 This library is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 Library General Public License for more details.
13
14 You should have received a copy of the GNU Library General Public License
15 along with this library; see the file COPYING.LIB. If not, write to
16 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
17 * Boston, MA 02110-1301, USA.
18*/
19
20#include "KPrPenStyleWidget.h"
21
22#include "penstyle.h"
23#include "KPrPBPreview.h"
24
25#include <tqlayout.h>
26#include <tqlabel.h>
27#include <tqvbox.h>
28
29#include <kcolorbutton.h>
30#include <kcombobox.h>
31#include <tdelocale.h>
32#include <knuminput.h>
33
34
35KPrPenStyleWidget::KPrPenStyleWidget( TQWidget *parent, const char *name, const KoPenCmd::Pen &pen, bool configureLineEnds )
36: TQWidget( parent, name )
37, m_pen( pen )
38{
39 TQVBoxLayout *layout = new TQVBoxLayout( this );
40 layout->addWidget( m_ui = new PenStyleUI( this ) );
41
42 TQSpacerItem* spacer = new TQSpacerItem( 20, 20, TQSizePolicy::Minimum, TQSizePolicy::Expanding );
43 layout->addItem( spacer );
44
45 connect( m_ui->colorChooser, TQ_SIGNAL( changed( const TQColor& ) ),
46 this, TQ_SLOT( slotPenChanged() ) );
47
48 m_ui->styleCombo->insertItem( i18n( "No Outline" ) );
49 m_ui->styleCombo->insertItem( "__________" );
50 m_ui->styleCombo->insertItem( "__ __ __ __" );
51 m_ui->styleCombo->insertItem( "_ _ _ _ _ _" );
52 m_ui->styleCombo->insertItem( "__ _ __ _ __" );
53 m_ui->styleCombo->insertItem( "__ _ _ __ _" );
54
55 m_ui->widthInput->setRange( 1, 10, 1, false);
56
57 connect( m_ui->styleCombo, TQ_SIGNAL( activated( int ) ),
58 this, TQ_SLOT( slotPenChanged() ) );
59
60 connect( m_ui->widthInput, TQ_SIGNAL( valueChanged( double ) ),
61 this, TQ_SLOT( slotPenChanged() ) );
62
63 m_ui->lineBeginCombo->insertItem( i18n("Normal") );
64 m_ui->lineBeginCombo->insertItem( i18n("Arrow") );
65 m_ui->lineBeginCombo->insertItem( i18n("Square") );
66 m_ui->lineBeginCombo->insertItem( i18n("Circle") );
67 m_ui->lineBeginCombo->insertItem( i18n("Line Arrow") );
68 m_ui->lineBeginCombo->insertItem( i18n("Dimension Line") );
69 m_ui->lineBeginCombo->insertItem( i18n("Double Arrow") );
70 m_ui->lineBeginCombo->insertItem( i18n("Double Line Arrow") );
71
72 connect( m_ui->lineBeginCombo, TQ_SIGNAL( activated( int ) ),
73 this, TQ_SLOT( slotLineBeginChanged() ) );
74
75 m_ui->lineEndCombo->insertItem( i18n("Normal") );
76 m_ui->lineEndCombo->insertItem( i18n("Arrow") );
77 m_ui->lineEndCombo->insertItem( i18n("Square") );
78 m_ui->lineEndCombo->insertItem( i18n("Circle") );
79 m_ui->lineEndCombo->insertItem( i18n("Line Arrow") );
80 m_ui->lineEndCombo->insertItem( i18n("Dimension Line") );
81 m_ui->lineEndCombo->insertItem( i18n("Double Arrow") );
82 m_ui->lineEndCombo->insertItem( i18n("Double Line Arrow") );
83
84 connect( m_ui->lineEndCombo, TQ_SIGNAL( activated( int ) ),
85 this, TQ_SLOT( slotLineEndChanged() ) );
86
87 if ( !configureLineEnds )
88 m_ui->arrowGroup->hide();
89 //m_ui->arrowGroup->setEnabled( configureLineEnds );
90
91 slotReset();
92}
93
94
95KPrPenStyleWidget::~KPrPenStyleWidget()
96{
97 delete m_ui;
98}
99
100
101void KPrPenStyleWidget::setPen( const KoPen &pen )
102{
103 m_ui->colorChooser->setColor( pen.color() );
104
105 switch ( pen.style() )
106 {
107 case NoPen:
108 m_ui->styleCombo->setCurrentItem( 0 );
109 break;
110 case SolidLine:
111 m_ui->styleCombo->setCurrentItem( 1 );
112 break;
113 case DashLine:
114 m_ui->styleCombo->setCurrentItem( 2 );
115 break;
116 case DotLine:
117 m_ui->styleCombo->setCurrentItem( 3 );
118 break;
119 case DashDotLine:
120 m_ui->styleCombo->setCurrentItem( 4 );
121 break;
122 case DashDotDotLine:
123 m_ui->styleCombo->setCurrentItem( 5 );
124 break;
125 case MPenStyle:
126 break; // not supported.
127 }
128
129 m_ui->widthInput->setValue( pen.pointWidth() );
130 m_ui->pbPreview->setPen( pen );
131}
132
133
134void KPrPenStyleWidget::setLineBegin( LineEnd lb )
135{
136 m_ui->lineBeginCombo->setCurrentItem( (int)lb );
137 m_ui->pbPreview->setLineBegin( lb );
138}
139
140
141void KPrPenStyleWidget::setLineEnd( LineEnd le )
142{
143 m_ui->lineEndCombo->setCurrentItem( (int)le );
144 m_ui->pbPreview->setLineEnd( le );
145}
146
147
148KoPen KPrPenStyleWidget::getKPPen() const
149{
150 KoPen pen;
151
152 switch ( m_ui->styleCombo->currentItem() )
153 {
154 case 0:
155 pen.setStyle( TQt::NoPen );
156 break;
157 case 1:
158 pen.setStyle( TQt::SolidLine );
159 break;
160 case 2:
161 pen.setStyle( TQt::DashLine );
162 break;
163 case 3:
164 pen.setStyle( TQt::DotLine );
165 break;
166 case 4:
167 pen.setStyle( TQt::DashDotLine );
168 break;
169 case 5:
170 pen.setStyle( TQt::DashDotDotLine );
171 break;
172 }
173
174 pen.setColor( m_ui->colorChooser->color() );
175 pen.setPointWidth( m_ui->widthInput->value() );
176
177 return pen;
178}
179
180
181LineEnd KPrPenStyleWidget::getLineBegin() const
182{
183 return (LineEnd) m_ui->lineBeginCombo->currentItem();
184}
185
186
187LineEnd KPrPenStyleWidget::getLineEnd() const
188{
189 return (LineEnd) m_ui->lineEndCombo->currentItem();
190}
191
192
193int KPrPenStyleWidget::getPenConfigChange() const
194{
195 int flags = 0;
196
197 if ( getLineEnd() != m_pen.lineEnd )
198 flags = flags | KoPenCmd::EndLine;
199 if ( getLineBegin() != m_pen.lineBegin )
200 flags = flags | KoPenCmd::BeginLine;
201 if ( getKPPen().color() != m_pen.pen.color() )
202 flags = flags | KoPenCmd::Color;
203 if ( getKPPen().style() != m_pen.pen.style() )
204 flags = flags | KoPenCmd::Style;
205 if ( getKPPen().pointWidth() != m_pen.pen.pointWidth() )
206 flags = flags | KoPenCmd::Width;
207
208 return flags;
209}
210
211
212KoPenCmd::Pen KPrPenStyleWidget::getPen() const
213{
214 KoPenCmd::Pen pen( getKPPen(), getLineBegin(), getLineEnd() );
215 return pen;
216}
217
218
219void KPrPenStyleWidget::setPen( const KoPenCmd::Pen &pen )
220{
221 m_pen = pen;
222 slotReset();
223}
224
225
226void KPrPenStyleWidget::apply()
227{
228 int flags = getPenConfigChange();
229
230 if ( flags & KoPenCmd::EndLine )
231 m_pen.lineEnd = getLineEnd();
232
233 if ( flags & KoPenCmd::BeginLine )
234 m_pen.lineBegin = getLineBegin();
235
236 if ( flags & KoPenCmd::Color )
237 m_pen.pen.setColor( getKPPen().color() );
238
239 if ( flags & KoPenCmd::Style )
240 m_pen.pen.setStyle( getKPPen().style() );
241
242 if ( flags & KoPenCmd::Width )
243 m_pen.pen.setPointWidth( getKPPen().pointWidth() );
244}
245
246
247void KPrPenStyleWidget::slotReset()
248{
249 setPen( m_pen.pen );
250 m_ui->widthLabel->setEnabled( m_pen.pen.style() != NoPen );
251 m_ui->widthInput->setEnabled( m_pen.pen.style() != NoPen );
252
253 setLineBegin( m_pen.lineBegin );
254 setLineEnd( m_pen.lineEnd );
255}
256
257
258void KPrPenStyleWidget::slotPenChanged()
259{
260 KoPen pen = getKPPen();
261 m_ui->widthLabel->setEnabled( pen.style() != NoPen );
262 m_ui->widthInput->setEnabled( pen.style() != NoPen );
263 m_ui->pbPreview->setPen( pen );
264}
265
266
267void KPrPenStyleWidget::slotLineBeginChanged()
268{
269 m_ui->pbPreview->setLineBegin( getLineBegin() );
270}
271
272
273void KPrPenStyleWidget::slotLineEndChanged()
274{
275 m_ui->pbPreview->setLineEnd( getLineEnd() );
276}
277
278#include "KPrPenStyleWidget.moc"