20#include "KPrTransEffectDia.h"
23#include "KPrBackground.h"
25#include "KPrTextObject.h"
27#include "KPrDocument.h"
30#include "KPrPageEffects.h"
31#include "KPrSoundPlayer.h"
33#include <tqsplitter.h>
39#include <tqpushbutton.h>
40#include <tqcheckbox.h>
43#include <tqwhatsthis.h>
46#include <tqcombobox.h>
49#include <kurlrequester.h>
52#include <kiconloader.h>
54#include <kstandarddirs.h>
55#include <tdefiledialog.h>
58KPrEffectPreview::KPrEffectPreview( TQWidget *parent, KPrDocument *_doc, KPrView *_view )
59 : TQLabel( parent ), doc( _doc ), view( _view ), m_pageEffect( 0 )
61 setFrameStyle( StyledPanel | Sunken );
64void KPrEffectPreview::setPixmap(
const TQPixmap& pixmap )
67 TQRect rect = pixmap.rect();
69 int h = rect.height();
83 setMinimumSize( w, h );
86 const TQImage img( pixmap.convertToImage().smoothScale( w, h, TQImage::ScaleFree ) );
87 m_pixmap.convertFromImage( img );
89 TQLabel::setPixmap( m_pixmap );
92void KPrEffectPreview::run( PageEffect effect, EffectSpeed speed )
94 TQRect rect = m_pixmap.rect();
95 m_target.resize( rect.size() );
96 m_target.fill( TQt::black );
101 m_pageEffectTimer.stop();
102 TQObject::disconnect( &m_pageEffectTimer, TQ_SIGNAL( timeout() ),
this, TQ_SLOT( slotDoPageEffect() ) );
104 m_pageEffect->finish();
111 m_pageEffect =
new KPrPageEffects(
this, m_target, effect, speed );
112 if ( m_pageEffect->doEffect() )
120 connect( &m_pageEffectTimer, TQ_SIGNAL( timeout() ), TQ_SLOT( slotDoPageEffect() ) );
121 m_pageEffectTimer.start( 50,
true );
128void KPrEffectPreview::slotDoPageEffect()
130 if ( m_pageEffect->doEffect() )
132 m_pageEffectTimer.stop();
133 TQObject::disconnect( &m_pageEffectTimer, TQ_SIGNAL( timeout() ),
this, TQ_SLOT( slotDoPageEffect() ) );
140 m_pageEffectTimer.start( 50,
true );
145KPrTransEffectDia::KPrTransEffectDia( TQWidget *parent,
const char *name,
146 KPrDocument *_doc, KPrView *_view )
147 : KDialogBase( parent, name, true,
"", KDialogBase::User1|Ok|Cancel ),
148 doc( _doc ), view( _view ), soundPlayer( 0 )
150 enableButtonSeparator(
true );
152 TQWidget *page =
new TQWidget(
this );
155 TQBoxLayout *topLayout =
new TQHBoxLayout( page, KDialog::marginHint(), KDialog::spacingHint() );
156 TQWidget* leftpart =
new TQWidget( page );
157 topLayout->addWidget( leftpart );
158 TQWidget* rightpart =
new TQWidget( page );
159 topLayout->addWidget( rightpart );
163 TQVBoxLayout *rightlayout =
new TQVBoxLayout( rightpart, KDialog::marginHint(), KDialog::spacingHint() );
164 rightlayout->setAutoAdd(
true );
166 effectPreview =
new KPrEffectPreview( rightpart, doc, view );
168 int pgnum = view->getCurrPgNum() - 1;
169 KPrPage* pg = doc->pageList().at( pgnum );
172 TQRect rect= pg->getZoomPageRect();
173 TQPixmap pix( rect.size() );
174 pix.fill( TQt::white );
175 view->getCanvas()->drawPageInPix( pix, pgnum, 100 );
176 effectPreview->setPixmap( pix );
178 pageEffect = pg->getPageEffect();
179 speed = pg->getPageEffectSpeed();
181 TQVBoxLayout *leftlayout =
new TQVBoxLayout( leftpart, KDialog::marginHint(), KDialog::spacingHint() );
182 leftlayout->setAutoAdd(
true );
184 new TQLabel( i18n(
"Effect:"), leftpart );
186 effectList =
new TQListBox( leftpart );
187 effectList->insertItem( i18n(
"No Effect" ) );
188 effectList->insertItem( i18n(
"Close Horizontal" ) );
189 effectList->insertItem( i18n(
"Close Vertical" ) );
190 effectList->insertItem( i18n(
"Close From All Directions" ) );
191 effectList->insertItem( i18n(
"Open Horizontal" ) );
192 effectList->insertItem( i18n(
"Open Vertical" ) );
193 effectList->insertItem( i18n(
"Open From All Directions" ) );
194 effectList->insertItem( i18n(
"Interlocking Horizontal 1" ) );
195 effectList->insertItem( i18n(
"Interlocking Horizontal 2" ) );
196 effectList->insertItem( i18n(
"Interlocking Vertical 1" ) );
197 effectList->insertItem( i18n(
"Interlocking Vertical 2" ) );
198 effectList->insertItem( i18n(
"Surround 1" ) );
199 effectList->insertItem( i18n(
"Fly Away 1" ) );
200 effectList->insertItem( i18n(
"Blinds Horizontal" ) );
201 effectList->insertItem( i18n(
"Blinds Vertical" ) );
202 effectList->insertItem( i18n(
"Box In" ) );
203 effectList->insertItem( i18n(
"Box Out" ) );
204 effectList->insertItem( i18n(
"Checkerboard Across" ) );
205 effectList->insertItem( i18n(
"Checkerboard Down" ) );
206 effectList->insertItem( i18n(
"Cover Down" ) );
207 effectList->insertItem( i18n(
"Uncover Down" ) );
208 effectList->insertItem( i18n(
"Cover Up" ) );
209 effectList->insertItem( i18n(
"Uncover Up" ) );
210 effectList->insertItem( i18n(
"Cover Left" ) );
211 effectList->insertItem( i18n(
"Uncover Left" ) );
212 effectList->insertItem( i18n(
"Cover Right" ) );
213 effectList->insertItem( i18n(
"Uncover Right" ) );
214 effectList->insertItem( i18n(
"Cover Left-Up" ) );
215 effectList->insertItem( i18n(
"Uncover Left-Up" ) );
216 effectList->insertItem( i18n(
"Cover Left-Down" ) );
217 effectList->insertItem( i18n(
"Uncover Left-Down" ) );
218 effectList->insertItem( i18n(
"Cover Right-Up" ) );
219 effectList->insertItem( i18n(
"Uncover Right-Up" ) );
220 effectList->insertItem( i18n(
"Cover Right-Bottom" ) );
221 effectList->insertItem( i18n(
"Uncover Right-Bottom" ) );
222 effectList->insertItem( i18n(
"Dissolve" ) );
223 effectList->insertItem( i18n(
"Strips Left-Up" ) );
224 effectList->insertItem( i18n(
"Strips Left-Down" ) );
225 effectList->insertItem( i18n(
"Strips Right-Up" ) );
226 effectList->insertItem( i18n(
"Strips Right-Down" ) );
227 effectList->insertItem( i18n(
"Melting" ) );
228 effectList->insertItem( i18n(
"Random Transition" ) );
229 effectList->setCurrentItem(
static_cast<int>( pageEffect ) );
232 if( pageEffect == PEF_RANDOM )
233 effectList->setCurrentItem( effectList->count()-1 );
235 connect( effectList, TQ_SIGNAL(highlighted(
int)),
this, TQ_SLOT(effectChanged(
int)) );
236 connect( effectList, TQ_SIGNAL( doubleClicked ( TQListBoxItem *) ),
this, TQ_SLOT( effectChanged()) );
238 new TQLabel( i18n(
"Speed:"), leftpart );
240 TQWidget* sp =
new TQWidget( leftpart );
241 TQBoxLayout* speedLayout =
new TQHBoxLayout( sp, KDialog::marginHint(), KDialog::spacingHint() );
242 speedLayout->setAutoAdd(
true );
244 speedCombo =
new TQComboBox( sp );
245 speedCombo->insertItem(i18n(
"Slow") );
246 speedCombo->insertItem(i18n(
"Medium") );
247 speedCombo->insertItem(i18n(
"Fast") );
250 speedCombo->setCurrentItem( speed );
252 connect( speedCombo, TQ_SIGNAL(activated(
int)),
this, TQ_SLOT(speedChanged(
int)) );
255 TQWidget* previewgrp =
new TQWidget( leftpart );
256 TQBoxLayout* previewLayout =
new TQHBoxLayout( previewgrp, KDialog::marginHint(), KDialog::spacingHint() );
257 previewLayout->setAutoAdd(
true );
259 automaticPreview =
new TQCheckBox( i18n(
"Automatic preview" ), previewgrp );
260 automaticPreview->setChecked(
true );
262 TQWidget* previewspacer =
new TQWidget( previewgrp );
263 previewspacer->setSizePolicy( TQSizePolicy( TQSizePolicy::Expanding,
264 TQSizePolicy::Expanding ) );
266 previewButton =
new TQPushButton( previewgrp );
267 previewButton->setText( i18n(
"Preview") );
268 connect( previewButton, TQ_SIGNAL(clicked()),
this, TQ_SLOT(preview()) );
270 TQFrame* line =
new TQFrame( leftpart );
271 line->setFrameStyle( TQFrame::HLine | TQFrame::Sunken );
273 soundFileName = pg->getPageSoundFileName();
274 soundEffect = pg->getPageSoundEffect();
276 checkSoundEffect =
new TQCheckBox( i18n(
"Sound effect" ), leftpart );
277 checkSoundEffect->setChecked( soundEffect );
278 connect( checkSoundEffect, TQ_SIGNAL( clicked() ),
this, TQ_SLOT( soundEffectChanged() ) );
280 TQWidget* soundgrp =
new TQWidget( leftpart );
281 TQBoxLayout* soundLayout =
new TQHBoxLayout( soundgrp, KDialog::marginHint(), KDialog::spacingHint() );
282 soundLayout->setAutoAdd(
true );
284 lSoundEffect =
new TQLabel( i18n(
"File name:" ), soundgrp );
285 requester =
new KURLRequester( soundgrp );
286 requester->setURL( soundFileName );
287 connect( requester, TQ_SIGNAL( openFileDialog( KURLRequester * ) ),
288 this, TQ_SLOT( slotRequesterClicked( KURLRequester * ) ) );
289 connect( requester, TQ_SIGNAL( textChanged(
const TQString& ) ),
290 this, TQ_SLOT( slotSoundFileChanged(
const TQString& ) ) );
292 buttonTestPlaySoundEffect =
new TQPushButton( soundgrp );
293 buttonTestPlaySoundEffect->setPixmap( BarIcon(
"1rightarrow", TDEIcon::SizeSmall) );
294 TQToolTip::add( buttonTestPlaySoundEffect, i18n(
"Play") );
296 connect( buttonTestPlaySoundEffect, TQ_SIGNAL( clicked() ),
this, TQ_SLOT( playSound() ) );
298 buttonTestStopSoundEffect =
new TQPushButton( soundgrp );
299 buttonTestStopSoundEffect->setPixmap( BarIcon(
"media-playback-stop", TDEIcon::SizeSmall) );
300 TQToolTip::add( buttonTestStopSoundEffect, i18n(
"Stop") );
302 connect( buttonTestStopSoundEffect, TQ_SIGNAL( clicked() ),
this, TQ_SLOT( stopSound() ) );
304 soundEffect = pg->getPageSoundEffect();
305 setButtonText(KDialogBase::User1,i18n(
"Apply &Global" ));
307 slideTime = pg->getPageTimer();
309 new TQLabel( i18n(
"Automatically advance to the next slide after:"), rightpart );
311 timeSlider =
new KIntNumInput( slideTime, rightpart );
312 timeSlider->setRange( 1, 600, 1 );
313 timeSlider->setSuffix( i18n(
" seconds" ) );
314 connect( timeSlider, TQ_SIGNAL(valueChanged(
int)),
this, TQ_SLOT(timeChanged(
int)) );
316 TQWidget* rspacer =
new TQWidget( rightpart );
317 rspacer->setSizePolicy( TQSizePolicy( TQSizePolicy::Minimum, TQSizePolicy::Expanding ) );
319 TQWidget* lspacer =
new TQWidget( leftpart );
320 lspacer->setMinimumSize( 10, spacingHint() );
322 soundEffectChanged();
325void KPrTransEffectDia::preview()
327 if( pageEffect==PEF_NONE)
329 effectPreview->run( pageEffect, speed );
332void KPrTransEffectDia::effectChanged()
334 effectChanged( effectList->currentItem() );
337void KPrTransEffectDia::effectChanged(
int index )
339 if( effectList->currentText() == i18n(
"Random Transition" ) )
340 pageEffect = PEF_RANDOM;
342 pageEffect =
static_cast<PageEffect
>( index );
344 if( automaticPreview->isChecked() ) preview();
347void KPrTransEffectDia::speedChanged(
int value )
349 speed =
static_cast<EffectSpeed
>(value);
352void KPrTransEffectDia::timeChanged(
int value )
354 if( value <= 0 ) value = 1;
358void KPrTransEffectDia::soundEffectChanged()
360 soundEffect = checkSoundEffect->isChecked();
362 lSoundEffect->setEnabled( checkSoundEffect->isChecked() );
363 requester->setEnabled( checkSoundEffect->isChecked() );
365 if ( !requester->url().isEmpty() ) {
366 buttonTestPlaySoundEffect->setEnabled( checkSoundEffect->isChecked() );
367 buttonTestStopSoundEffect->setEnabled( checkSoundEffect->isChecked() );
370 buttonTestPlaySoundEffect->setEnabled(
false );
371 buttonTestStopSoundEffect->setEnabled(
false );
375static TQString getSoundFileFilter()
377 TQStringList fileList;
378 fileList <<
"wav" <<
"au" <<
"mp3" <<
"mp1" <<
"mp2" <<
"mpg" <<
"dat"
379 <<
"mpeg" <<
"ogg" <<
"cdda" <<
"cda " <<
"vcd" <<
"null";
384 TQStringList::ConstIterator end( fileList.end() );
385 for ( TQStringList::ConstIterator it = fileList.begin(); it != end; ++it ) {
389 str += TQString( i18n(
"*.%1|%2 Files" ) ).arg( *it ).arg( (*it).upper() );
391 full += TQString(
"*.") + (*it) +
' ';
394 str = full +
'|' + i18n(
"All Supported Files" ) +
'\n' + str;
395 str +=
"\n*|" + i18n(
"All Files" );
400void KPrTransEffectDia::slotRequesterClicked( KURLRequester * )
402 TQString filter = getSoundFileFilter();
403 requester->fileDialog()->setFilter( filter );
406 TQStringList soundDirs = TDEGlobal::dirs()->resourceDirs(
"sound" );
407 if ( !soundDirs.isEmpty() ) {
410 dir.setFilter( TQDir::Files | TQDir::Readable );
411 TQStringList::ConstIterator it = soundDirs.begin();
412 while ( it != soundDirs.end() ) {
414 if ( dir.isReadable() && dir.count() > 2 ) {
415 soundURL.setPath( *it );
416 requester->fileDialog()->setURL( soundURL );
424void KPrTransEffectDia::slotSoundFileChanged(
const TQString& text )
426 soundFileName = text;
428 buttonTestPlaySoundEffect->setEnabled( !text.isEmpty() );
429 buttonTestStopSoundEffect->setEnabled( !text.isEmpty() );
432void KPrTransEffectDia::playSound()
435 soundPlayer =
new KPrSoundPlayer( requester->url() );
438 buttonTestPlaySoundEffect->setEnabled(
false );
439 buttonTestStopSoundEffect->setEnabled(
true );
442void KPrTransEffectDia::stopSound()
449 buttonTestPlaySoundEffect->setEnabled(
true );
450 buttonTestStopSoundEffect->setEnabled(
false );
454void KPrTransEffectDia::slotOk()
460void KPrTransEffectDia::slotUser1()
466#include "KPrTransEffectDia.moc"