e6e2c26e7a1dc33c16cc4efaea4563a46ed6492b
[vlc-remote] / src / favouritesmainwindow.cpp
1 /*   VLC-REMOTE for MAEMO 5
2 *   Copyright (C) 2010 Schutz Sacha <istdasklar@gmail.com>, Dru Moore <usr@dru-id.co.uk>, Yann Nave <yannux@onbebop.net>
3 *   This program is free software; you can redistribute it and/or modify
4 *   it under the terms of the GNU General Public License version 2,
5 *   or (at your option) any later version, as published by the Free
6 *   Software Foundation
7 *
8 *   This program is distributed in the hope that it will be useful,
9 *   but WITHOUT ANY WARRANTY; without even the implied warranty of
10 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11 *   GNU General Public License for more details
12 *
13 *   You should have received a copy of the GNU General Public
14 *   License along with this program; if not, write to the
15 *   Free Software Foundation, Inc.,
16 *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
17 */
18 #include "favouritesmainwindow.h"
19 #include "ui_favouritesmainwindow.h"
20 #include <QSettings>
21 #if defined(Q_WS_S60) || defined(Q_WS_MAEMO_5)
22 #include <QMaemo5InformationBox>
23 #endif
24 #include "appsettings.h"
25 //#include "browsemainwindow.h"
26
27 FavouritesMainWindow::FavouritesMainWindow(QWidget *parent) :
28         QMainWindow(parent),
29         ui(new Ui::FavouritesMainWindow)
30 {
31
32     ui->setupUi(this);
33
34     setWindowTitle("Vlc remote");
35     mCurrentItemIndex = -1;
36
37     ui->listWidget->setTextElideMode(Qt::ElideMiddle);
38     ui->listWidget->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
39
40     ui->deleteButton->setIcon(QIcon::fromTheme("general_delete"));
41     ui->editButton->setIcon(QIcon::fromTheme("general_sketch"));
42     ui->browseButton->setIcon(QIcon::fromTheme("filemanager_media_folder"));
43     ui->saveButton->setIcon(QIcon::fromTheme("notes_save"));
44     ui->browseButton->setDisabled(true);
45     ui->editButton->setDisabled(true);
46     ui->deleteButton->setDisabled(true);
47     ui->actionSetHome->setDisabled(true);
48     ui->label->setVisible(false);
49     ui->lineEdit->setVisible(false);
50     ui->saveButton->setVisible(false);
51     ui->saveButton->setDisabled(true);
52
53     connect(ui->listWidget,SIGNAL(doubleClicked(QModelIndex)),this,SLOT(onBrowse()));
54     connect(ui->browseButton,SIGNAL(clicked()),this,SLOT(onBrowse()));
55     connect(ui->deleteButton,SIGNAL(clicked()),this,SLOT(onDelete()));
56     connect(ui->editButton,SIGNAL(clicked()),this,SLOT(onEdit()));
57     connect(ui->listWidget, SIGNAL(itemSelectionChanged()), this, SLOT(onListSelectionChanged()));
58     connect(ui->actionSetHome, SIGNAL(triggered()), this, SLOT(setHomeFolder()));
59     connect(ui->saveButton, SIGNAL(clicked()), this, SLOT(onEditSave()));
60     connect(ui->lineEdit, SIGNAL(textChanged(QString)), this, SLOT(onLineEditTextChanged(QString)));
61
62     init();
63
64
65 }
66 void FavouritesMainWindow::init()  // THIS METHOD IS CALLED WHEN CONFIG CHANGED AND WINDOW SHOWN...
67 {
68     mFavourites = AppSettings::getFavourites();
69     updateList();
70 }
71
72 FavouritesMainWindow::~FavouritesMainWindow()
73 {
74     delete mFavourites;
75     delete ui;
76 }
77
78 void FavouritesMainWindow::changeEvent(QEvent *e)
79 {
80     QMainWindow::changeEvent(e);
81     switch (e->type()) {
82     case QEvent::LanguageChange:
83         ui->retranslateUi(this);
84         break;
85     default:
86         break;
87     }
88 }
89 void FavouritesMainWindow::updateList() {
90     ui->listWidget->clear();
91     if (NULL != mFavourites && 0 < mFavourites->count()) {
92         for (int idx = 0; idx < mFavourites->count(); ++idx) {
93             QListWidgetItem* item = new QListWidgetItem(QIcon::fromTheme("imageviewer_favourite"), mFavourites->at(idx).name, ui->listWidget, LIST_ITEM_TYPE_OFFSET + idx);
94             ui->listWidget->addItem(item);
95         }
96     }
97 }
98 void FavouritesMainWindow::setHomeFolder() {
99     if (-1 < mCurrentItemIndex) {
100         AppSettings::setHomeDirectory(mCurrentFavourite);
101     }
102 }
103 void FavouritesMainWindow::onListSelectionChanged() {
104     ui->label->setVisible(false);
105     ui->lineEdit->setVisible(false);
106     ui->saveButton->setVisible(false);
107     ui->saveButton->setDisabled(true);
108     QList<QListWidgetItem *> items = ui->listWidget->selectedItems();
109     if (0 < items.count()) {
110         mCurrentItemIndex = ui->listWidget->currentIndex().row();
111         mCurrentFavourite = mFavourites->at(items.at(0)->type() - LIST_ITEM_TYPE_OFFSET); // Qt reserves types up to 1000, we use an offset beyond that for index tracking. May prove to be too hacky!
112         ui->browseButton->setDisabled(false);
113         ui->editButton->setDisabled(false);
114         ui->deleteButton->setDisabled(false);
115         ui->actionSetHome->setDisabled(false);
116     }
117     else {
118         mCurrentItemIndex = -1;
119         ui->browseButton->setDisabled(true);
120         ui->editButton->setDisabled(true);
121         ui->deleteButton->setDisabled(true);
122         ui->actionSetHome->setDisabled(true);
123     }
124 }
125 void FavouritesMainWindow::onLineEditTextChanged(QString text) {
126     if (0 < text.length()) {
127         ui->saveButton->setDisabled(false);
128     }
129     else {
130         ui->saveButton->setDisabled(true);
131     }
132 }
133 void FavouritesMainWindow::onEditSave() {
134     if (-1 < mCurrentItemIndex && 0 < ui->lineEdit->text().length()) {
135         ui->label->setVisible(false);
136         ui->lineEdit->setVisible(false);
137         ui->saveButton->setVisible(false);
138         ui->saveButton->setDisabled(true);
139         AppSettings::deleteFavourite(mCurrentFavourite);
140         mCurrentFavourite.name = ui->lineEdit->text();
141         AppSettings::addFavourite(mCurrentFavourite);
142         ui->lineEdit->setText("");
143         ui->listWidget->itemAt(mCurrentItemIndex, 0)->setText(mCurrentFavourite.name);
144         init();
145     }
146 }
147 void FavouritesMainWindow::onEdit() {
148     if (-1 < mCurrentItemIndex) {
149         ui->label->setVisible(true);
150         ui->lineEdit->setVisible(true);
151         ui->saveButton->setVisible(true);
152         ui->saveButton->setDisabled(false);
153         ui->lineEdit->setText(mCurrentFavourite.name);
154         ui->browseButton->setDisabled(true);
155         ui->editButton->setDisabled(true);
156         ui->deleteButton->setDisabled(true);
157     }
158 }
159 void FavouritesMainWindow::onBrowse() {
160     if (-1 < mCurrentItemIndex) {
161         emit browseDirectory(mCurrentFavourite.path);
162         //this->close();
163         //((BrowseMainWindow *)this->parent())->browseDirectory(mCurrentFavourite.path);
164     }
165 }
166 void FavouritesMainWindow::onDelete() {
167     if (-1 < mCurrentItemIndex) {
168         AppSettings::deleteFavourite(mCurrentFavourite);
169         init();
170     }
171 }