[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    extragear/multimedia/kmid/src
From:       Pedro Lopez-Cabanillas <pedro.lopez.cabanillas () gmail ! com>
Date:       2010-07-22 9:16:00
Message-ID: 20100722091600.C18D4AC7AB () svn ! kde ! org
[Download RAW message or body]

SVN commit 1152984 by pedrol:

kmid_part: UI for the additional properties and methods

 M  +4 -0      kmid_part.cpp  
 M  +145 -41   kmid_partview.cpp  
 M  +24 -9     kmid_partview.h  


--- trunk/extragear/multimedia/kmid/src/kmid_part.cpp #1152983:1152984
@@ -157,6 +157,9 @@
         connect(d->m_view, SIGNAL(pause()), SLOT(pause()));
         connect(d->m_view, SIGNAL(stop()), SLOT(stop()));
         connect(d->m_view, SIGNAL(seek(int)), SLOT(slotSeek(int)));
+        connect(d->m_view, SIGNAL(volume(double)), SLOT(setVolumeFactor(double)));
+        connect(d->m_view, SIGNAL(transpose(int)), SLOT(setTranspose(int)));
+        connect(d->m_view, SIGNAL(speed(double)), SLOT(setTempoFactor(double)));
     }
 }
 
@@ -518,6 +521,7 @@
 
 void KMidPart::setTranspose(int t)
 {
+    kDebug() << t;
     if (d->m_midiout != 0)
         d->m_midiout->setPitchShift(t);
 }
--- trunk/extragear/multimedia/kmid/src/kmid_partview.cpp #1152983:1152984
@@ -25,39 +25,113 @@
 
 #include <QtGui/QSlider>
 #include <QtGui/QToolButton>
+#include <QtGui/QDial>
+#include <QtGui/QVBoxLayout>
 #include <QtGui/QHBoxLayout>
 
+class KMidPartView::ViewPrivate {
+public:
+    ViewPrivate():
+        m_seeking(false),
+        m_playing(false) {}
+    virtual ~ViewPrivate() {}
+
+    bool m_seeking;
+    bool m_playing;
+    QToolButton *m_playstop;
+    QToolButton *m_pause;
+    QSlider *m_seeker;
+    QDial *m_volume;
+    QDial *m_pitch;
+    QToolButton *m_resetTempo;
+    QSlider *m_tempo;
+};
+
 KMidPartView::KMidPartView(QWidget *parent) :
     KMediaPlayer::View(parent),
-    m_seeking(false),
-    m_playing(false)
+    d(new ViewPrivate())
 {
-    QHBoxLayout* layout = new QHBoxLayout(this);
-    setLayout(layout);
+    QVBoxLayout* vlayout = new QVBoxLayout(this);
+    QHBoxLayout* toprow = new QHBoxLayout;
+    vlayout->addLayout(toprow);
 
-    m_playstop = new QToolButton(this);
-    m_playstop->setIcon(KIcon("media-playback-start"));
-    m_playstop->setVisible(true);
-    layout->addWidget(m_playstop);
-    connect(m_playstop, SIGNAL(clicked()), SLOT(slotPlayStop()));
+    d->m_playstop = new QToolButton(this);
+    d->m_playstop->setIcon(KIcon("media-playback-start"));
+    d->m_playstop->setWhatsThis(i18nc("@info:whatsthis","Player play/stop control"));
+    d->m_playstop->setToolTip(i18nc("@info:tooltip player button","Play/Stop"));
+    d->m_playstop->setVisible(true);
+    toprow->addWidget(d->m_playstop);
+    connect(d->m_playstop, SIGNAL(clicked()), SLOT(slotPlayStop()));
 
-    m_pause = new QToolButton(this);
-    m_pause->setIcon(KIcon("media-playback-pause"));
-    m_pause->setVisible(false);
-    m_pause->setEnabled(false);
-    layout->addWidget(m_pause);
-    connect(m_pause, SIGNAL(clicked()), SIGNAL(pause()));
+    d->m_pause = new QToolButton(this);
+    d->m_pause->setIcon(KIcon("media-playback-pause"));
+    d->m_pause->setWhatsThis(i18nc("@info:whatsthis","Player pause control"));
+    d->m_pause->setToolTip(i18nc("@info:tooltip player button","Pause"));
+    d->m_pause->setVisible(false);
+    d->m_pause->setEnabled(false);
+    toprow->addWidget(d->m_pause);
+    connect(d->m_pause, SIGNAL(clicked()), SIGNAL(pause()));
 
-    m_seeker = new QSlider(this);
-    m_seeker->setRange(0, 10000);
-    m_seeker->setOrientation(Qt::Horizontal);
-    m_seeker->setWhatsThis(i18nc("@info:whatsthis","Time position control"));
-    m_seeker->setTracking(false);
-    layout->addWidget(m_seeker);
-    connect(m_seeker, SIGNAL(sliderPressed()), SLOT(slotTimeSliderPressed()));
-    connect(m_seeker, SIGNAL(valueChanged(int)), SLOT(slotTimeSlider(int)));
+    d->m_seeker = new QSlider(this);
+    d->m_seeker->setRange(0, 10000);
+    d->m_seeker->setOrientation(Qt::Horizontal);
+    d->m_seeker->setWhatsThis(i18nc("@info:whatsthis","Time position control"));
+    d->m_seeker->setToolTip(i18nc("@info:tooltip player button","Time position"));
+    d->m_seeker->setTracking(false);
+    toprow->addWidget(d->m_seeker);
+    connect(d->m_seeker, SIGNAL(sliderPressed()), SLOT(slotTimeSliderPressed()));
+    connect(d->m_seeker, SIGNAL(valueChanged(int)), SLOT(slotTimeSlider(int)));
+
+    QHBoxLayout* botrow = new QHBoxLayout;
+    vlayout->addLayout(botrow);
+
+    d->m_volume = new QDial(this);
+    d->m_volume->setVisible(false);
+    d->m_volume->setFixedSize(32,32);
+    d->m_volume->setWhatsThis(i18nc("@info:whatsthis","Volume factor control"));
+    d->m_volume->setToolTip(i18nc("@info:tooltip player control","Volume factor"));
+    d->m_volume->setMinimum(0);
+    d->m_volume->setMaximum(200);
+    d->m_volume->setValue(100);
+    d->m_volume->setTracking(false);
+    botrow->addWidget(d->m_volume);
+    connect(d->m_volume, SIGNAL(valueChanged(int)), SLOT(slotVolumeSlider(int)));
+
+    d->m_pitch = new QDial(this);
+    d->m_pitch->setVisible(false);
+    d->m_pitch->setFixedSize(32,32);
+    d->m_pitch->setWhatsThis(i18nc("@info:whatsthis","Pitch transpose control"));
+    d->m_pitch->setToolTip(i18nc("@info:tooltip player control","Pitch transpose"));
+    d->m_pitch->setMinimum(-12);
+    d->m_pitch->setMaximum(12);
+    d->m_pitch->setValue(0);
+    d->m_pitch->setSingleStep(1);
+    d->m_pitch->setPageStep(1);
+    d->m_pitch->setTracking(false);
+    botrow->addWidget(d->m_pitch);
+    connect(d->m_pitch, SIGNAL(valueChanged(int)), SLOT(slotPitchSlider(int)));
+
+    d->m_resetTempo = new QToolButton(this);
+    d->m_resetTempo->setVisible(false);
+    d->m_resetTempo->setIcon(KIcon("player-time"));
+    d->m_resetTempo->setWhatsThis(i18nc("@info:whatsthis","Speed factor reset"));
+    d->m_resetTempo->setToolTip(i18nc("@info:tooltip player button","Speed reset"));
+    botrow->addWidget(d->m_resetTempo);
+    connect(d->m_resetTempo, SIGNAL(clicked()), SLOT(slotTempoReset()));
+
+    d->m_tempo = new QSlider(this);
+    d->m_tempo->setVisible(false);
+    d->m_tempo->setOrientation(Qt::Horizontal);
+    d->m_tempo->setWhatsThis(i18nc("@info:whatsthis","Speed factor control"));
+    d->m_tempo->setToolTip(i18nc("@info:tooltip player control","Speed factor"));
+    d->m_tempo->setMinimum(0);
+    d->m_tempo->setMaximum(200);
+    d->m_tempo->setValue(100);
+    d->m_tempo->setTracking(false);
+    botrow->addWidget(d->m_tempo);
+    connect(d->m_tempo, SIGNAL(valueChanged(int)), SLOT(slotTempoSlider(int)));
+
     setButtons(Play | Stop | Seeker);
-
     connect(this, SIGNAL(buttonsChanged(int)), SLOT(slotButtonsChanged(int)));
 }
 
@@ -66,38 +140,42 @@
 
 void KMidPartView::slotButtonsChanged(int buttons)
 {
-    m_playstop->setVisible((buttons & (Play | Stop)) != 0 );
-    m_pause->setVisible((buttons & Pause) != 0);
-    m_seeker->setVisible((buttons & Seeker) != 0);
+    d->m_playstop->setVisible( (buttons & (Play | Stop)) != 0 );
+    d->m_pause->setVisible( (buttons & Pause) != 0 );
+    d->m_seeker->setVisible( (buttons & Seeker) != 0 );
+    d->m_volume->setVisible( (buttons & Volume) != 0 );
+    d->m_pitch->setVisible( (buttons & Transpose) != 0 );
+    d->m_resetTempo->setVisible( (buttons & Tempo) != 0 );
+    d->m_tempo->setVisible( (buttons & Tempo) != 0 );
 }
 
 void KMidPartView::resetTimePosition(qint64 totalTime)
 {
-    m_seeker->setRange(0, totalTime);
-    m_seeker->setSliderPosition(0);
-    m_seeking = false;
+    d->m_seeker->setRange(0, totalTime);
+    d->m_seeker->setSliderPosition(0);
+    d->m_seeking = false;
 }
 
 void KMidPartView::setPosition(qint64 tick)
 {
-    if (!m_seeking)
-        m_seeker->setSliderPosition(tick);
+    if (!d->m_seeking)
+        d->m_seeker->setSliderPosition(tick);
 }
 
 void KMidPartView::slotTimeSlider(int value)
 {
-    m_seeking = false;
+    d->m_seeking = false;
     emit seek(value);
 }
 
 void KMidPartView::slotTimeSliderPressed()
 {
-    m_seeking = true;
+    d->m_seeking = true;
 }
 
 void KMidPartView::slotPlayStop()
 {
-    if (m_playing)
+    if (d->m_playing)
         emit stop();
     else
         emit play();
@@ -105,14 +183,40 @@
 
 void KMidPartView::setPlayingState(bool isPlaying)
 {
-    if (m_playing != isPlaying) {
-        m_playing = isPlaying;
+    if (d->m_playing != isPlaying) {
+        d->m_playing = isPlaying;
         if (isPlaying) {
-            m_playstop->setIcon(KIcon("media-playback-stop"));
-            m_pause->setEnabled(true);
+            d->m_playstop->setIcon(KIcon("media-playback-stop"));
+            d->m_pause->setEnabled(true);
         } else {
-            m_playstop->setIcon(KIcon("media-playback-start"));
-            m_pause->setEnabled(false);
+            d->m_playstop->setIcon(KIcon("media-playback-start"));
+            d->m_pause->setEnabled(false);
         }
     }
 }
+
+void KMidPartView::slotVolumeSlider(int value)
+{
+    emit volume( value*0.01 );
+}
+
+void KMidPartView::slotPitchSlider(int value)
+{
+    emit transpose( value );
+}
+
+inline double tempoFactor(int sliderValue)
+{
+    return (sliderValue*sliderValue + 100.0*sliderValue + 20000.0) / 400.0;
+}
+
+void KMidPartView::slotTempoSlider(int value)
+{
+    emit speed( tempoFactor(value)/100.0 );
+}
+
+void KMidPartView::slotTempoReset()
+{
+    emit speed(1.0);
+    d->m_tempo->setValue(100);
+}
--- trunk/extragear/multimedia/kmid/src/kmid_partview.h #1152983:1152984
@@ -22,37 +22,52 @@
 
 #include <KMediaPlayer/View>
 
-class QSlider;
-class QToolButton;
-
 class KMidPartView : public KMediaPlayer::View {
     Q_OBJECT
 public:
     KMidPartView(QWidget *parent);
     virtual ~KMidPartView();
 
+    /** Controls that can appear in the UI
+     * (initially hidden) in addition to Button ones
+     * see @Button
+     */
+    enum ExtraControl
+    {
+        /** Volume factor knob */
+        Volume = 16,
+        /** Transpose knob */
+        Transpose = 32,
+        /** Tempo factor */
+        Tempo = 64
+    };
+
     void resetTimePosition(qint64 totalTime);
     void setPosition(qint64 tick);
     void setPlayingState(bool);
 
 private slots:
     void slotButtonsChanged(int);
+    void slotPlayStop();
     void slotTimeSliderPressed();
     void slotTimeSlider(int);
-    void slotPlayStop();
+    void slotVolumeSlider(int value);
+    void slotPitchSlider(int value);
+    void slotTempoSlider(int value);
+    void slotTempoReset();
 
 signals:
     void play();
     void pause();
     void stop();
     void seek(int);
+    void volume(double);
+    void transpose(int);
+    void speed(double);
 
 private:
-    bool m_seeking;
-    bool m_playing;
-    QToolButton *m_playstop;
-    QToolButton *m_pause;
-    QSlider *m_seeker;
+    class ViewPrivate;
+    ViewPrivate* d;
 };
 
 #endif /* KMID_PARTVIEW_H */
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic