1 /*  This file is part of the KDE project
2     Copyright (C) 2006 Matthias Kretz <kretz@kde.org>
3 
4     This library is free software; you can redistribute it and/or
5     modify it under the terms of the GNU Lesser General Public
6     License as published by the Free Software Foundation; either
7     version 2.1 of the License, or (at your option) version 3, or any
8     later version accepted by the membership of KDE e.V. (or its
9     successor approved by the membership of KDE e.V.), Nokia Corporation
10     (or its successors, if any) and the KDE Free Qt Foundation, which shall
11     act as a proxy defined in Section 6 of version 3 of the license.
12 
13     This library is distributed in the hope that it will be useful,
14     but WITHOUT ANY WARRANTY; without even the implied warranty of
15     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
16     Lesser General Public License for more details.
17 
18     You should have received a copy of the GNU Lesser General Public
19     License along with this library.  If not, see <http://www.gnu.org/licenses/>.
20 
21 */
22 
23 #ifndef SEEKSLIDER_P_H
24 #define SEEKSLIDER_P_H
25 
26 #include <QtCore/QPointer>
27 #include <QBoxLayout>
28 #include <QIcon>
29 #include <QLabel>
30 #include <QPixmap>
31 #include <QStyle>
32 
33 #include "factory_p.h"
34 #include "phonondefs_p.h"
35 #include "platform_p.h"
36 #include "seekslider.h"
37 #include "swiftslider_p.h"
38 
39 #ifndef QT_NO_PHONON_SEEKSLIDER
40 
41 namespace Phonon
42 {
43 class MediaObject;
44 class SeekSliderPrivate
45 {
P_DECLARE_PUBLIC(SeekSlider)46     P_DECLARE_PUBLIC(SeekSlider)
47     protected:
48         SeekSliderPrivate(SeekSlider *parent)
49             : layout(QBoxLayout::LeftToRight, parent),
50             slider(Qt::Horizontal, parent),
51             iconLabel(parent),
52             ticking(false)
53 #ifndef QT_NO_PHONON_PLATFORMPLUGIN
54             ,icon(Platform::icon(QLatin1String("player-time"), parent->style()))
55 #endif //QT_NO_PHONON_PLATFORMPLUGIN
56         {
57             const int e = parent->style()->pixelMetric(QStyle::PM_ButtonIconSize);
58             iconSize = QSize(e, e);
59 
60             slider.setPageStep(5000); // 5 sec
61             slider.setSingleStep(500); // 0.5 sec
62 
63             layout.setMargin(0);
64             layout.setSpacing(2);
65             layout.addWidget(&iconLabel, 0, Qt::AlignVCenter);
66             layout.addWidget(&slider, 0, Qt::AlignVCenter);
67 
68             setEnabled(false);
69 
70             if (icon.isNull()) {
71                 iconLabel.setVisible(false);
72             }
73         }
74 
75         SeekSlider *q_ptr;
76 
77     private:
78         void setEnabled(bool);
79         void _k_stateChanged(Phonon::State);
80         void _k_seek(int);
81         void _k_tick(qint64);
82         void _k_length(qint64);
83         void _k_seekableChanged(bool);
84         void _k_currentSourceChanged();
85 
86         QBoxLayout layout;
87         SwiftSlider slider;
88         QLabel iconLabel;
89         QPointer<MediaObject> media;
90         bool ticking;
91         QIcon icon;
92         QSize iconSize;
93 };
94 } // namespace Phonon
95 
96 #endif //QT_NO_PHONON_SEEKSLIDER
97 
98 #endif // SEEKSLIDER_P_H
99 // vim: sw=4 ts=4 tw=80
100