lib

KoFontDia.cpp
1/* This file is part of the KDE project
2 Copyright (C) 2001, 2002 Montel Laurent <lmontel@mandrakesoft.com>
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 "KoFontDia.h"
21
22#include <tqvbox.h>
23#include <tqhbox.h>
24
25#include "KoRichText.h"
26
27#include <kcolordialog.h>
28#include <tdelocale.h>
29#include <kdebug.h>
30
31#include <tqgroupbox.h>
32#include <tqpushbutton.h>
33#include <tqtabwidget.h>
34#include <tqlabel.h>
35#include <tqcombobox.h>
36#include <tqradiobutton.h>
37#include <tqcheckbox.h>
38#include <knuminput.h>
39#include <KoGlobal.h>
40#include <tqvgroupbox.h>
41#include <tqvbox.h>
42#include <tqhgroupbox.h>
43#include <tqhbuttongroup.h>
44#include <kcolorbutton.h>
45#include <kiconloader.h>
46
47KoFontDia::KoFontDia( const KoTextFormat& initialFormat,
48 KSpell2::Broker::Ptr broker, TQWidget* parent, const char* name )
49 : KDialogBase( parent, name, true,
50 i18n("Select Font"), Ok|Cancel|User1|Apply, Ok ),
51 m_initialFormat(initialFormat),
52 m_changedFlags(KoTextFormat::NoFlags)
53{
54 setButtonText( KDialogBase::User1, i18n("&Reset") );
55
56 TQVBox *mainWidget = new TQVBox( this );
57 TQHBox *mainHBox = new TQHBox( mainWidget );
58
59 TQTabWidget *fontTabWidget = new TQTabWidget( mainHBox );
60
61 // Font tab
62 fontTab = new KoFontTab( TDEFontChooser::SmoothScalableFonts, this );
63 fontTabWidget->addTab( fontTab, i18n( "Font" ) );
64
65 connect( fontTab, TQ_SIGNAL( familyChanged() ), this, TQ_SLOT( slotFontFamilyChanged() ) );
66 connect( fontTab, TQ_SIGNAL( boldChanged() ), this, TQ_SLOT( slotFontBoldChanged() ) );
67 connect( fontTab, TQ_SIGNAL( italicChanged() ), this, TQ_SLOT( slotFontItalicChanged() ) );
68 connect( fontTab, TQ_SIGNAL( sizeChanged() ), this, TQ_SLOT( slotFontSizeChanged() ) );
69
70 //Highlighting tab
71 highlightingTab = new KoHighlightingTab( this );
72 fontTabWidget->addTab( highlightingTab, i18n( "Highlighting" ) );
73
74 connect( highlightingTab, TQ_SIGNAL( underlineChanged( int ) ), this, TQ_SLOT( slotUnderlineChanged( int ) ) );
75 connect( highlightingTab, TQ_SIGNAL( underlineStyleChanged( int ) ), this, TQ_SLOT( slotUnderlineStyleChanged( int ) ) );
76 connect( highlightingTab, TQ_SIGNAL( underlineColorChanged( const TQColor & ) ), this, TQ_SLOT( slotUnderlineColorChanged( const TQColor & ) ) );
77 connect( highlightingTab, TQ_SIGNAL( strikethroughChanged( int ) ), this, TQ_SLOT( slotStrikethroughChanged( int ) ) );
78 connect( highlightingTab, TQ_SIGNAL( strikethroughStyleChanged( int ) ), this, TQ_SLOT( slotStrikethroughStyleChanged( int ) ) );
79 connect( highlightingTab, TQ_SIGNAL( wordByWordChanged( bool ) ), this, TQ_SLOT( slotWordByWordChanged( bool ) ) );
80 connect( highlightingTab, TQ_SIGNAL( capitalisationChanged( int ) ), this, TQ_SLOT( slotCapitalisationChanged( int ) ) );
81
82 //Decoratio tab
83 decorationTab = new KoDecorationTab( this );
84 fontTabWidget->addTab( decorationTab, i18n( "Decoration" ) );
85
86 connect( decorationTab, TQ_SIGNAL( fontColorChanged( const TQColor& ) ), this, TQ_SLOT( slotFontColorChanged( const TQColor& ) ) );
87 connect( decorationTab, TQ_SIGNAL( backgroundColorChanged( const TQColor& ) ), this, TQ_SLOT( slotBackgroundColorChanged( const TQColor& ) ) );
88 connect( decorationTab, TQ_SIGNAL( shadowColorChanged( const TQColor& ) ), this, TQ_SLOT( slotShadowColorChanged( const TQColor& ) ) );
89 connect( decorationTab, TQ_SIGNAL( shadowDistanceChanged( double ) ), this, TQ_SLOT( slotShadowDistanceChanged( double ) ) );
90 connect( decorationTab, TQ_SIGNAL( shadowDirectionChanged( int ) ), this, TQ_SLOT( slotShadowDirectionChanged( int ) ) );
91
92 //Layout tab
93 layoutTab = new KoLayoutTab( true, this );
94 fontTabWidget->addTab( layoutTab, i18n( "Layout" ) );
95 connect( layoutTab, TQ_SIGNAL( subSuperScriptChanged() ), this, TQ_SLOT( slotSubSuperChanged() ) );;
96 connect( layoutTab, TQ_SIGNAL( offsetChanged( int ) ), this, TQ_SLOT( slotOffsetChanged( int ) ) );
97 connect( layoutTab, TQ_SIGNAL( relativeSizeChanged( double ) ), this, TQ_SLOT( slotRelativeSizeChanged( double ) ) );
98 connect( layoutTab, TQ_SIGNAL( hyphenationChanged( bool ) ), this, TQ_SLOT( slotHyphenationChanged( bool ) ) );
99
100 //Language tab
101 languageTab = new KoLanguageTab( broker, this );
102 fontTabWidget->addTab( languageTab, i18n( "Language" ) );
103 connect( languageTab, TQ_SIGNAL( languageChanged() ), this, TQ_SLOT( slotLanguageChanged() ) );
104
105 //Related properties List View
106 //relatedPropertiesListView = new TDEListView( mainHBox );
107
108 //Preview
109 fontDiaPreview = new KoFontDiaPreview( mainWidget );
110
111 setMainWidget( mainWidget );
112
113 init();
114}
115
116void KoFontDia::init()
117{
118 connect( this, TQ_SIGNAL( user1Clicked() ), this, TQ_SLOT(slotReset()) );
119
120 slotReset();
121}
122
123KoTextFormat KoFontDia::newFormat() const
124{
125 return KoTextFormat( fontTab->getSelection(),
126 layoutTab->getSubSuperScript(),
127 decorationTab->getTextColor(),
128 decorationTab->getBackgroundColor(),
129 highlightingTab->getUnderlineColor(),
130 highlightingTab->getUnderline(),
131 highlightingTab->getUnderlineStyle(),
132 highlightingTab->getStrikethrough(),
133 highlightingTab->getStrikethroughStyle(),
134 highlightingTab->getCapitalisation(),
135 languageTab->getLanguage(),
136 layoutTab->getRelativeTextSize(),
137 layoutTab->getOffsetFromBaseline(),
138 highlightingTab->getWordByWord(),
139 layoutTab->getAutoHyphenation(),
140 decorationTab->getShadowDistanceX(),
141 decorationTab->getShadowDistanceY(),
142 decorationTab->getShadowColor()
143 );
144}
145
146void KoFontDia::slotApply()
147{
148 emit applyFont();
149}
150
151void KoFontDia::slotOk()
152{
153 slotApply();
155}
156
157void KoFontDia::slotReset()
158{
159 fontTab->setSelection( m_initialFormat.font() );
160 highlightingTab->setUnderline( m_initialFormat.underlineType() );
161 highlightingTab->setUnderlineStyle( m_initialFormat.underlineStyle() );
162 highlightingTab->setUnderlineColor( m_initialFormat.textUnderlineColor() );
163 highlightingTab->setStrikethrough( m_initialFormat.strikeOutType() );
164 highlightingTab->setStrikethroughStyle( m_initialFormat.strikeOutStyle() );
165 highlightingTab->setWordByWord( m_initialFormat.wordByWord() );
166 highlightingTab->setCapitalisation( m_initialFormat.attributeFont() );
167 decorationTab->setTextColor( m_initialFormat.color() );
168 decorationTab->setBackgroundColor( m_initialFormat.textBackgroundColor() );
169 decorationTab->setShadow( m_initialFormat.shadowDistanceX(), m_initialFormat.shadowDistanceY(), m_initialFormat.shadowColor() );
170 layoutTab->setSubSuperScript( m_initialFormat.vAlign(), m_initialFormat.offsetFromBaseLine(), m_initialFormat.relativeTextSize() );
171 layoutTab->setAutoHyphenation( m_initialFormat.hyphenation() );
172 languageTab->setLanguage( m_initialFormat.language() );
173}
174
175void KoFontDia::slotFontFamilyChanged()
176{
177 m_changedFlags |= KoTextFormat::Family;
178 fontDiaPreview->setFont( fontTab->getSelection() );
179}
180
181void KoFontDia::slotFontBoldChanged()
182{
183 m_changedFlags |= KoTextFormat::Bold;
184 fontDiaPreview->setFont( fontTab->getSelection() );
185}
186
187void KoFontDia::slotFontItalicChanged()
188{
189 m_changedFlags |= KoTextFormat::Italic;
190 fontDiaPreview->setFont( fontTab->getSelection() );
191}
192
193void KoFontDia::slotFontSizeChanged()
194{
195 m_changedFlags |= KoTextFormat::Size;
196 fontDiaPreview->setFont( fontTab->getSelection() );
197}
198
199void KoFontDia::slotFontColorChanged( const TQColor& color )
200{
201 m_changedFlags |= KoTextFormat::Color;
202 fontDiaPreview->setFontColor( color );
203}
204
205void KoFontDia::slotBackgroundColorChanged( const TQColor& color )
206{
207 m_changedFlags |= KoTextFormat::TextBackgroundColor;
208 fontDiaPreview->setBackgroundColor( color );
209}
210
211void KoFontDia::slotCapitalisationChanged( int item )
212{
213 m_changedFlags |= KoTextFormat::Attribute;
214 fontDiaPreview->setCapitalisation( item );
215}
216
217void KoFontDia::slotUnderlineChanged( int item )
218{
219 m_changedFlags |= KoTextFormat::ExtendUnderLine;
220 if ( !item ) fontDiaPreview->setUnderlining( item, 0, TQt::black, false );
221 else fontDiaPreview->setUnderlining( item, highlightingTab->getUnderlineStyle(), highlightingTab->getUnderlineColor(), highlightingTab->getWordByWord() );
222}
223
224void KoFontDia::slotUnderlineStyleChanged( int item )
225{
226 m_changedFlags |= KoTextFormat::ExtendUnderLine;
227 if ( !highlightingTab->getUnderline() ) fontDiaPreview->setUnderlining( 0, 0, TQt::black, false );
228 else fontDiaPreview->setUnderlining( highlightingTab->getUnderline(), item, highlightingTab->getUnderlineColor(), highlightingTab->getWordByWord() );
229}
230
231void KoFontDia::slotUnderlineColorChanged( const TQColor &color )
232{
233 m_changedFlags |= KoTextFormat::ExtendUnderLine;
234 if ( !highlightingTab->getUnderline() ) fontDiaPreview->setUnderlining( 0, 0, TQt::black, false );
235 else fontDiaPreview->setUnderlining( highlightingTab->getUnderline(), highlightingTab->getUnderlineStyle(), color, highlightingTab->getWordByWord() );
236}
237
238void KoFontDia::slotWordByWordChanged( bool state )
239{
240 m_changedFlags |= KoTextFormat::WordByWord;
241 fontDiaPreview->setWordByWord( state );
242}
243
244void KoFontDia::slotStrikethroughChanged( int item )
245{
246 m_changedFlags |= KoTextFormat::StrikeOut;
247 if ( !item ) fontDiaPreview->setStrikethrough( item, 0, false );
248 else fontDiaPreview->setStrikethrough( item, highlightingTab->getStrikethroughStyle(), highlightingTab->getWordByWord() );
249}
250
251void KoFontDia::slotStrikethroughStyleChanged( int item )
252{
253 m_changedFlags |= KoTextFormat::StrikeOut;
254 if ( !highlightingTab->getStrikethrough() ) fontDiaPreview->setStrikethrough( 0, 0, false );
255 else fontDiaPreview->setStrikethrough( highlightingTab->getStrikethrough(), item, highlightingTab->getWordByWord() );
256}
257
258void KoFontDia::slotShadowDistanceChanged( double )
259{
260 m_changedFlags |= KoTextFormat::ShadowText;
261 fontDiaPreview->setShadow( decorationTab->getShadowDistanceX(), decorationTab->getShadowDistanceY(), decorationTab->getShadowColor() );
262}
263
264void KoFontDia::slotShadowDirectionChanged( int )
265{
266 m_changedFlags |= KoTextFormat::ShadowText;
267 fontDiaPreview->setShadow( decorationTab->getShadowDistanceX(), decorationTab->getShadowDistanceY(), decorationTab->getShadowColor() );
268}
269
270void KoFontDia::slotShadowColorChanged( const TQColor & )
271{
272 m_changedFlags |= KoTextFormat::ShadowText;
273 fontDiaPreview->setShadow( decorationTab->getShadowDistanceX(), decorationTab->getShadowDistanceY(), decorationTab->getShadowColor() );
274}
275
276void KoFontDia::slotSubSuperChanged()
277{
278 m_changedFlags |= KoTextFormat::VAlign;
279 fontDiaPreview->setSubSuperscript( layoutTab->getSubSuperScript(), layoutTab->getOffsetFromBaseline(), layoutTab->getRelativeTextSize() );
280}
281
282void KoFontDia::slotOffsetChanged( int offset )
283{
284 m_changedFlags |= KoTextFormat::OffsetFromBaseLine;
285 fontDiaPreview->setSubSuperscript( layoutTab->getSubSuperScript(), offset, layoutTab->getRelativeTextSize() );
286}
287
288void KoFontDia::slotRelativeSizeChanged( double relativeSize )
289{
290 m_changedFlags |= KoTextFormat::VAlign;
291 fontDiaPreview->setSubSuperscript( layoutTab->getSubSuperScript(), layoutTab->getOffsetFromBaseline(), relativeSize );
292}
293
294void KoFontDia::slotHyphenationChanged( bool )
295{
296 m_changedFlags |= KoTextFormat::Hyphenation;
297}
298
299void KoFontDia::slotLanguageChanged()
300{
301 m_changedFlags |= KoTextFormat::Language;
302}
303
304#include "KoFontDia.moc"
305
virtual void slotOk()
The font dialog Preview.
Each character (KoTextStringChar) points to a KoTextFormat that defines the formatting of that charac...
const char * name(StdAction id)