20
20
***************************************************************************/
21
21
#include <QHeaderView>
22
22
#include <QVBoxLayout>
23
24
#include <QSpacerItem>
25
25
#include <ktoolbar.h>
26
26
#include <klocale.h>
27
27
#include <util/log.h>
28
#include <taglib/tag.h>
29
#include <taglib/fileref.h>
30
28
#include "mediaview.h"
31
29
#include "mediamodel.h"
32
30
#include "mediaplayer.h"
33
31
#include "mediaplayerpluginsettings.h"
35
34
using namespace bt;
40
MediaView::MediaView(MediaPlayer* player,MediaModel* model,QWidget* parent)
41
: QWidget(parent),player(player),model(model)
39
MediaView::MediaView(MediaModel* model,QWidget* parent)
40
: QWidget(parent),model(model)
43
42
QVBoxLayout* layout = new QVBoxLayout(this);
44
43
layout->setSpacing(0);
45
44
layout->setMargin(0);
47
tool_bar = new KToolBar(this);
48
tool_bar->setToolButtonStyle(Qt::ToolButtonIconOnly);
49
layout->addWidget(tool_bar);
51
play_slider = new Phonon::SeekSlider(this);
52
play_slider->setMediaObject(player->media0bject());
53
layout->addWidget(play_slider);
55
info_label = new QLabel(this);
56
info_label->setMargin(5);
57
info_label->setFrameShadow(QFrame::Sunken);
58
info_label->setFrameShape(QFrame::StyledPanel);
59
info_label->setBackgroundRole(QPalette::Base);
60
info_label->setAutoFillBackground(true);
61
info_label->setWordWrap(true);
62
layout->addWidget(info_label);
63
info_label->setText(i18n("Ready to play"));
46
layout->addWidget(new QLabel(i18n("Collection:")));
65
47
media_tree = new QTreeView(this);
66
48
media_tree->setModel(model);
67
49
media_tree->header()->hide();
50
media_tree->setDragEnabled(true);
68
51
layout->addWidget(media_tree);
70
QHBoxLayout* hlayout = new QHBoxLayout(0);
71
hlayout->addWidget(new QLabel(i18n("Mode:"),this));
73
queue_mode = new QComboBox(this);
74
queue_mode->addItem(i18n("Single File"));
75
queue_mode->addItem(i18n("All Files"));
76
queue_mode->addItem(i18n("Random Files"));
77
queue_mode->setCurrentIndex(MediaPlayerPluginSettings::playMode());
78
hlayout->addWidget(queue_mode);
80
QSpacerItem* s = new QSpacerItem(5, 5, QSizePolicy::Expanding, QSizePolicy::Minimum);
83
layout->addLayout(hlayout);
85
skip_incomplete = new QCheckBox(i18n("Skip incomplete files"),this);
86
skip_incomplete->setChecked(MediaPlayerPluginSettings::skipIncomplete());
87
layout->addWidget(skip_incomplete);
89
volume = new Phonon::VolumeSlider(this);
90
volume->setAudioOutput(player->output());
91
layout->addWidget(volume);
95
connect(media_tree->selectionModel(),SIGNAL(selectionChanged(const QItemSelection & , const QItemSelection & )),
96
this,SLOT(onSelectionChanged(const QItemSelection&, const QItemSelection&)));
97
53
connect(media_tree,SIGNAL(doubleClicked(const QModelIndex &)),this,SIGNAL(doubleClicked(const QModelIndex&)));
98
connect(player,SIGNAL(stopped()),this,SLOT(stopped()));
99
connect(skip_incomplete,SIGNAL(toggled(bool)),this,SLOT(skipIncompleteChecked(bool)));
100
connect(queue_mode,SIGNAL(activated(int)),this,SLOT(modeActivated(int)));
124
67
return QModelIndex();
127
void MediaView::playing(const QString & file)
136
info_label->setText(i18n("Playing: <b>%1</b>",current_file));
141
void MediaView::stopped()
143
info_label->setText(i18n("Ready to play"));
144
current_file = QString();
147
void MediaView::metaDataChanged()
150
QByteArray encoded = QFile::encodeName(current_file);
151
TagLib::FileRef ref(encoded.data(),true,TagLib::AudioProperties::Fast);
155
TagLib::Tag* tag = ref.tag();
159
QString artist = tag->artist().toCString(true);
160
QString title = tag->title().toCString(true);
161
QString album = tag->album().toCString(true);
163
bool has_artist = !artist.isEmpty();
164
bool has_title = !title.isEmpty();
165
bool has_album = !album.isEmpty();
167
if (has_artist && has_title && has_album)
169
extra_data = i18n("Title: <b>%1</b><br/>Artist: <b>%2</b><br/>Album: <b>%3</b>",title,artist,album);
170
info_label->setText(i18n("Playing: <b>%1</b><br/>\n%2",current_file,extra_data));
172
else if (has_title && has_artist)
174
extra_data = i18n("Title: <b>%1</b><br/>Artist: <b>%2</b>",title,artist);
175
info_label->setText(i18n("Playing: <b>%1</b><br/>\n%2",current_file,extra_data));
179
extra_data = i18n("Title: <b>%1</b>",title);
180
info_label->setText(i18n("Playing: <b>%1</b><br/>\n%2",current_file,extra_data));
184
info_label->setText(i18n("Playing: <b>%1</b>",current_file));
188
void MediaView::skipIncompleteChecked(bool on)
190
MediaPlayerPluginSettings::setSkipIncomplete(on);
191
MediaPlayerPluginSettings::self()->writeConfig();
194
void MediaView::modeActivated(int idx)
196
MediaPlayerPluginSettings::setPlayMode(idx);
197
MediaPlayerPluginSettings::self()->writeConfig();
199
randomModeActivated();