Add readme
[groove] / groove.cpp
1 #include "groove.h"
2 #if defined(Q_WS_MAEMO_5) || defined(Q_WS_HILDON)
3 #include "qmaemo5rotator.h"
4 #include <QtDBus>
5 #endif
6
7
8 groove::groove(QWidget *parent) :
9     QWidget(parent)
10 {
11     //mpg = new mpgplayer();
12     //mpg->start();
13     mBar = new QMenuBar();
14     //mBar->addAction("test");
15     sMethod = new QPushButton("Song:");
16     lineEdit = new QLineEdit("");
17     player = new sPlayer();
18     QHBoxLayout *layout = new QHBoxLayout();
19     QVBoxLayout *vlayout = new QVBoxLayout();
20     //QHBoxLayout *bottomLayout = new QHBoxLayout();
21     button = new QPushButton("Search");
22     QPushButton *dButton = new QPushButton("Queue");
23     QPushButton *stopButton = new QPushButton("Pause");
24     QPushButton *moreButton = new QPushButton("...");
25     QPushButton *nextB = new QPushButton("->");
26     topBar *ok = new topBar(this);
27     resultView = new QTableView();
28     QMenu *pushMenu = new QMenu();
29     //showFullScreen();
30     lineEdit->insert("");
31     lineEdit->setDisabled(true);
32     pushMenu->addAction("Song:");
33     //pushMenu->addAction("Artist:");
34     //pushMenu->addAction("Album:");
35     QMenu *moreAction = new QMenu();
36     //moreAction->addAction("Playlist");
37     connect(moreAction->addAction("Play Now"),SIGNAL(triggered()),this,SLOT(play()));
38     //connect(moreAction->addAction("Show download Progress"),SIGNAL(triggered()),pd,SLOT(show()));
39     moreButton->setMenu(moreAction);
40
41     //sMethod->setSizePolicy(QSizePolicy::Fixed,QSizePolicy::Maximum);
42     sMethod->setMaximumWidth(sMethod->sizeHint().rwidth());
43     sMethod->setMenu(pushMenu);
44     model = new  QStandardItemModel();
45     model->setHorizontalHeaderLabels(
46         QStringList() << "Please wait for initialization"
47                       /*<< "Artist"*/);
48     resultView->setModel(model);
49     resultView->verticalHeader()->hide();
50     resultView->horizontalHeader()->setStretchLastSection(true);
51     resultView->setSelectionBehavior(QAbstractItemView::SelectRows);
52     resultView->setSelectionMode(QAbstractItemView::SingleSelection);
53     resultView->setEditTriggers(QAbstractItemView::NoEditTriggers);
54     resultView->setColumnHidden(2,true);
55     resultView->setColumnHidden(3,true);
56     resultView->setAutoScroll(false);
57     resultView->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
58     /*QPalette pal = resultView->palette();
59     pal.setBrush(QPalette::Highlight,QBrush(Qt::transparent,Qt::NoBrush));
60     resultView->setPalette(pal);*/
61     portrait = false;
62     layout->addWidget(sMethod);
63 #if defined(Q_WS_MAEMO_5) || defined(Q_WS_HILDON)
64     rot = new QMaemo5Rotator(QMaemo5Rotator::AutomaticBehavior,this);
65 #endif
66     //this->setAttribute(Qt::WA_Maemo5AutoOrientation);
67     layout->addWidget(lineEdit);
68     layout->addWidget(button);
69     vlayout->setContentsMargins(QMargins(0,0,0,0));
70     //vlayout->setMargin(0);
71     vlayout->setSpacing(0);
72     vlayout->addWidget(ok);
73     //vlayout->addLayout(layout);
74     stack = new QStackedWidget();
75     stack->addWidget(resultView);
76
77     vlayout->addWidget(stack);
78     //vlayout->addLayout(bottomLayout);
79     bBar = new bottomBar();
80     vlayout->addWidget(bBar);
81
82     /*bottomLayout->addWidget(dButton);
83     bottomLayout->addWidget(stopButton);
84     bottomLayout->addWidget(nextB);
85     bottomLayout->addWidget(moreButton);*/
86     vlayout->setMenuBar(mBar);
87     setLayout(vlayout);
88     setWindowTitle("Groove");
89     //Create New Grooveshark connection
90     gs = new gscom();
91     //Connections
92     connect(button, SIGNAL(clicked()), this, SLOT(search()));
93     connect(gs, SIGNAL(finishedSearch()), this, SLOT(finishedS()));
94     connect(lineEdit,SIGNAL(returnPressed()),this, SLOT(search()));
95     connect(pushMenu,SIGNAL(triggered(QAction*)),this,SLOT(changeS(QAction*)));
96     connect(dButton,SIGNAL(clicked()),this, SLOT(addSongPlaylist()));
97     connect(stopButton,SIGNAL(clicked()),this,SLOT(stop()));
98     connect(moreButton,SIGNAL(clicked()),this,SLOT(moreB()));
99     //connect(rotator,SIGNAL(orientationChanged(Orientation)),this,SLOT(orientationChanged()));
100     pl = new playlist(this);
101     pl->setGscom(gs);
102     player->setPlaylist(pl);
103     connect(pl,SIGNAL(downloadProgress(int,qint64,qint64)),this,SLOT(progressUpdate(int,qint64,qint64)));
104     //connect(pl,SIGNAL(bufferReady(int)),pd,SLOT(close()));
105     connect(pl,SIGNAL(freeze(bool)),resultView,SLOT(setDisabled(bool)));
106     connect(pl,SIGNAL(freeze(bool)),pushMenu,SLOT(setDisabled(bool)));
107     connect(pl,SIGNAL(freeze(bool)),dButton,SLOT(setDisabled(bool)));
108     connect(nextB,SIGNAL(clicked()),player,SLOT(playNext()));
109     connect(ok,SIGNAL(changeTask()),this,SLOT(showOthers()));
110     connect(ok,SIGNAL(searchRequest(QString)),this,SLOT(performSearch(QString)));
111     connect(ok,SIGNAL(closeApp()),this,SLOT(close()));
112     connect(bBar,SIGNAL(addB()),this,SLOT(addSongPlaylist()));
113     connect(bBar,SIGNAL(nextB()),player,SLOT(playNext()));
114     connect(bBar,SIGNAL(pause()),this,SLOT(stop()));
115
116     connect(bBar,SIGNAL(back()),player,SLOT(back()));
117     connect(bBar,SIGNAL(settings()),this,SLOT(showSettings()));
118     bBar->setPlaybackProgress(100,100);
119     pwindow = new pWin();
120     stack->addWidget(pwindow);
121     stack->setCurrentWidget(resultView);
122     connect(bBar,SIGNAL(list()),this,SLOT(togglePlaylist()));
123     pwindow->setModel(pl);
124
125 }
126 void groove::showSettings(){
127 #if defined(Q_WS_MAEMO_5) || defined(Q_WS_HILDON)
128     rot->test();
129 #endif
130 }
131
132 void groove::togglePlaylist()
133 {
134     if(stack->currentWidget()==pwindow)
135         stack->setCurrentWidget(resultView);
136     else
137         stack->setCurrentWidget(pwindow);
138 }
139
140 void groove::performSearch(QString s)
141 {
142     qDebug() << s;
143     resultView->setModel(gs->getSongModel(s));
144     this->stack->setCurrentWidget(this->resultView);
145 }
146
147 void groove::search()
148 {
149     if(!lineEdit->text().isEmpty())
150     {
151     if(lineEdit->isEnabled())
152     {
153
154         if(sMethod->text().compare("Song:")==0)
155             resultView->setModel(gs->getSongModel(lineEdit->text()));
156         else if(sMethod->text().compare("Artist:")==0)
157             resultView->setModel(gs->getArtistModel(lineEdit->text()));
158         else if(sMethod->text().compare("Album")==0)
159             resultView->setModel(gs->getAlbumModel(lineEdit->text()));
160         else
161             return;
162
163
164         button->setText("Stop");
165         lineEdit->setDisabled(true);
166     }
167     else
168     {
169         resultView->setModel(model);
170         button->setText("Search");
171         resultView->setColumnWidth(0,resultView->viewport()->width()/2);
172         resultView->setColumnWidth(1,resultView->viewport()->width()/2);
173         lineEdit->setDisabled(false);
174     }
175     }
176 }
177 void groove::finishedS()
178 {
179     model = gs->getModel();
180     resultView->setModel(model);
181     button->setText("Search");
182     resultView->setColumnWidth(0,resultView->maximumViewportSize().width()/2);
183     resultView->setColumnWidth(1,resultView->maximumViewportSize().width()/2);
184     lineEdit->setDisabled(false);
185     resultView->setColumnHidden(2,true);
186 }
187 void groove::changeS( QAction * action)
188 {
189     sMethod->setText(action->text());
190     sMethod->setMaximumWidth(sMethod->sizeHint().rwidth());
191 }
192
193 void groove::showOthers()
194 {
195 #if defined(Q_WS_MAEMO_5) || defined(Q_WS_HILDON)
196     QDBusConnection c = QDBusConnection::sessionBus();
197     QDBusMessage m = QDBusMessage::createSignal("/", "com.nokia.hildon_desktop", "exit_app_view");
198
199     c.send(m);
200 #endif
201 }
202
203 void groove::play()
204 {
205     QModelIndexList selected = resultView->selectionModel()->selectedRows(0);
206     if(!selected.isEmpty())
207     {
208         QStandardItem *item = model->item(selected.first().row(),2);
209         if(item == 0)
210             return;
211         //gs->getSong();
212         player->play(pl->addSong(item,model->item(selected.first().row(),0)->text()));
213     }
214     //selected.
215     //if
216 }
217 void groove::addSongPlaylist()
218 {
219     QModelIndexList selected = resultView->selectionModel()->selectedRows(0);
220     if(!selected.isEmpty())
221     {
222         QStandardItem *item = model->item(selected.first().row(),2);
223         if(item == 0)
224             return;
225         //gs->getSong();
226         if(pl->currentplaying() == -1)
227         {
228             player->play(pl->addSong(item,model->item(selected.first().row(),0)->text()));
229         }
230         else
231             pl->addSong(item,model->item(selected.first().row(),0)->text());
232         model->item(selected.first().row(),1)->setText("Added to Playlist");;
233         //pwindow->addSong(model->item(selected.first().row(),0)->text());
234     }
235
236 }
237
238 void groove::stop()
239 {
240     player->pause();
241     //mpg->pause();
242 }
243 void groove::moreB()
244 {
245     qDebug() << "He pressed the button";
246 }
247 void groove::progressUpdate(int p, qint64 d, qint64 t)
248 {
249     //if(!pd->isHidden())
250     //{
251     bBar->setPlaybackProgress(d,t);
252     //}
253 }
254 void groove::resizeEvent(QResizeEvent *)
255 {
256     if(resultView->isColumnHidden(2))
257     {
258     resultView->setColumnWidth(0,resultView->maximumViewportSize().width()/2);
259     resultView->setColumnWidth(1,resultView->maximumViewportSize().width()/2);
260     }
261     else
262         resultView->setColumnWidth(0,resultView->maximumViewportSize().width());
263 }
264
265 void groove::orientationChanged()
266 {
267 #ifdef Q_WS_MAEMO_5
268     QRect screenGeometry = QApplication::desktop()->screenGeometry();
269     if (screenGeometry.width() > screenGeometry.height())
270         portrait = false;
271     else
272         portrait = true;
273 #endif
274 }