SVN commit 568383 by trueg: Use K3bToolTip instead of QToolTip for the VideoDVD view. This allows a nice tooltip showing a bigger version of the title preview image. M +31 -5 k3btooltip.cpp M +8 -3 k3btooltip.h M +1 -1 k3bwidgetshoweffect.h M +12 -3 rip/k3bvideodvdrippingpreview.cpp M +3 -0 rip/k3bvideodvdrippingpreview.h M +17 -5 rip/k3bvideodvdrippingtitlelistview.cpp --- trunk/extragear/multimedia/k3b/src/k3btooltip.cpp #568382:568383 @@ -16,8 +16,12 @@ #include "k3btooltip.h" #include "k3bwidgetshoweffect.h" +#include +#include + #include #include +#include #include @@ -27,7 +31,7 @@ m_parentWidget( widget ), m_currentTip( 0 ), m_tipTimer( new QTimer( this ) ), - m_tipTimeout( 2000 ) + m_tipTimeout( 700 ) { m_parentWidget->installEventFilter( this ); connect( m_tipTimer, SIGNAL(timeout()), @@ -40,14 +44,33 @@ } -void K3bToolTip::tip( const QRect&, const QString& ) +void K3bToolTip::tip( const QRect& rect, const QString& text, int effect ) { - // FIXME: create a tip widget, show the tip + QLabel* label = new QLabel( text, parentWidget() ); + label->setMargin( 6 ); + if( K3bTheme* theme = k3bappcore->themeManager()->currentTheme() ) { + label->setPaletteBackgroundColor( theme->backgroundColor() ); + label->setPaletteForegroundColor( theme->foregroundColor() ); + } + tip( rect, label, (K3bWidgetShowEffect::Effect)effect ); } -void K3bToolTip::tip( const QRect& rect, QWidget* w ) +void K3bToolTip::tip( const QRect& rect, const QPixmap& pix, int effect ) { + QLabel* label = new QLabel( parentWidget() ); + label->setMargin( 6 ); + if( K3bTheme* theme = k3bappcore->themeManager()->currentTheme() ) { + label->setPaletteBackgroundColor( theme->backgroundColor() ); + label->setPaletteForegroundColor( theme->foregroundColor() ); + } + label->setPixmap( pix ); + tip( rect, label, (K3bWidgetShowEffect::Effect)effect ); +} + + +void K3bToolTip::tip( const QRect& rect, QWidget* w, int effect ) +{ // stop the timer m_tipTimer->stop(); @@ -92,7 +115,10 @@ m_currentTip = w; m_currentTipRect = rect; w->move( p ); - K3bWidgetShowEffect::showWidget( w, K3bWidgetShowEffect::Dissolve );//w->show(); + if( effect ) + K3bWidgetShowEffect::showWidget( w, (K3bWidgetShowEffect::Effect)effect ); + else + w->show(); w->raise(); } --- trunk/extragear/multimedia/k3b/src/k3btooltip.h #568382:568383 @@ -17,7 +17,10 @@ #define _K3B_TOOLTIP_H_ #include +#include +#include "k3bwidgetshoweffect.h" + class QTimer; /** @@ -35,7 +38,7 @@ public slots: /** - * default is 2 seconds. + * default is 700 mseconds (same as QToolTip) */ void setTipTimeout( int msec ) { m_tipTimeout = msec; } @@ -48,12 +51,14 @@ /** * Show a tooltip. */ - void tip( const QRect&, const QString& ); + void tip( const QRect&, const QString&, int effect = K3bWidgetShowEffect::Dissolve ); + void tip( const QRect& rect, const QPixmap& pix, int effect = K3bWidgetShowEffect::Dissolve ); /** * Use some arbitrary widget as the tooltip + * \param effect Use 0 for no effect */ - void tip( const QRect&, QWidget* w ); + void tip( const QRect&, QWidget* w, int effect = K3bWidgetShowEffect::Dissolve ); bool eventFilter( QObject* o, QEvent* e ); --- trunk/extragear/multimedia/k3b/src/k3bwidgetshoweffect.h #568382:568383 @@ -36,7 +36,7 @@ public: // FIXME: add an effect direction enum Effect { - Dissolve, + Dissolve = 1, Slide }; --- trunk/extragear/multimedia/k3b/src/rip/k3bvideodvdrippingpreview.cpp #568382:568383 @@ -57,14 +57,19 @@ } // auto-select a chapter + // choose the center chapter, but not the first or last if possible if( chapter == 0 ) - chapter = QMIN( QMAX( dvd[title-1].numChapters()/2, 2 ), dvd[title-1].numChapters() ); + chapter = QMIN( QMAX( dvd[title-1].numChapters()/2, 2 ), QMAX( dvd[title-1].numChapters() - 1, 1 ) ); // select a frame number unsigned int frame = 20; if( dvd[title-1][chapter-1].playbackTime().totalFrames() < frame ) frame = dvd[title-1][chapter-1].playbackTime().totalFrames() / 2; + m_dvd = dvd; + m_title = title; + m_chapter = chapter; + m_tempDir = new KTempDir(); m_tempDir->setAutoDelete( true ); @@ -76,7 +81,7 @@ *m_process << "--dvd_access_delay" << "0"; *m_process << "-y" << "ppm,null"; *m_process << "-c" << QString("%1-%2").arg( frame ).arg( frame+1 ); - *m_process << "-Z" << "100x"; + *m_process << "-Z" << "x200"; *m_process << "-o" << m_tempDir->name(); connect( m_process, SIGNAL(processExited(KProcess*)), @@ -110,7 +115,11 @@ delete m_process; m_process = 0; - emit previewDone( success ); + // retry the first chapter in case another failed + if( !success && m_chapter > 1 ) + generatePreview( m_dvd, m_title, 1 ); + else + emit previewDone( success ); } #include "k3bvideodvdrippingpreview.moc" --- trunk/extragear/multimedia/k3b/src/rip/k3bvideodvdrippingpreview.h #568382:568383 @@ -54,6 +54,9 @@ QImage m_preview; KTempDir* m_tempDir; KProcess* m_process; + int m_title; + int m_chapter; + K3bVideoDVD::VideoDVD m_dvd; }; #endif --- trunk/extragear/multimedia/k3b/src/rip/k3bvideodvdrippingtitlelistview.cpp #568382:568383 @@ -16,6 +16,8 @@ #include "k3bvideodvdrippingtitlelistview.h" #include "k3bvideodvdrippingpreview.h" +#include + #include #include #include @@ -136,6 +138,10 @@ repaint(); } + const QImage& preview() const { + return m_preview; + } + protected: void paintK3bCell( QPainter* p, const QColorGroup& cg, int col, int width, int align ) { if( col == 0 ) { @@ -269,11 +275,11 @@ }; -class K3bVideoDVDRippingTitleListView::TitleToolTip : public QToolTip +class K3bVideoDVDRippingTitleListView::TitleToolTip : public K3bToolTip { public: TitleToolTip( K3bVideoDVDRippingTitleListView* view ) - : QToolTip( view->viewport() ), + : K3bToolTip( view->viewport() ), m_view( view ) { } @@ -291,13 +297,19 @@ switch( col ) { case 2: - // FIXME: show the bigger preview as the tooltip (maybe use K3bToolTip) + if( !item->preview().isNull() ) { + QPixmap previewPix; + if( previewPix.convertFromImage( item->preview() ) ) + tip( r, previewPix, 0 ); + } break; case 4: - tip( r, "

" + i18n("Audio Streams") + "

" + audioStreamString( item->videoDVDTitle() ) ); + if( item->videoDVDTitle().numAudioStreams() > 0 ) + tip( r, "

" + i18n("Audio Streams") + "

" + audioStreamString( item->videoDVDTitle() ), 0 ); break; case 5: - tip( r, "

" + i18n("Subpicture Streams") + "

" + subpictureStreamString( item->videoDVDTitle() ) ); + if( item->videoDVDTitle().numSubPictureStreams() > 0 ) + tip( r, "

" + i18n("Subpicture Streams") + "

" + subpictureStreamString( item->videoDVDTitle() ), 0 ); break; } }