summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--archiveddelegate.cpp38
-rw-r--r--archiveddelegate.h23
-rw-r--r--archiveviewwidget.cpp17
-rw-r--r--archiveviewwidget.h8
-rw-r--r--covereditor.cpp29
-rw-r--r--covereditor.h10
-rw-r--r--coveritem.cpp34
-rw-r--r--coveritem.h9
-rw-r--r--editarchiveitemdialog.cpp63
-rw-r--r--editarchiveitemdialog.h12
-rw-r--r--filesystemwidget.cpp2
-rw-r--r--helper.cpp38
-rw-r--r--helper.h3
-rw-r--r--movieitem.cpp14
-rw-r--r--moviemodel.cpp17
-rw-r--r--moviemodel.h1
-rw-r--r--shemov.cpp65
-rw-r--r--shemov.h8
-rw-r--r--shemov.pro8
-rw-r--r--sizedelegate.cpp41
-rw-r--r--sizedelegate.h23
21 files changed, 323 insertions, 140 deletions
diff --git a/archiveddelegate.cpp b/archiveddelegate.cpp
new file mode 100644
index 0000000..6f9a49d
--- /dev/null
+++ b/archiveddelegate.cpp
@@ -0,0 +1,38 @@
+/*
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License
+ as published by the Free Software Foundation; either version
+ 2 of the License, or (at your option) any later version.
+*/
+
+#include <QFontMetrics>
+#include <QPainter>
+#include <QApplication>
+
+#include "archiveddelegate.h"
+
+ArchivedDelegate::ArchivedDelegate(QObject *parent) : QAbstractItemDelegate(parent) {};
+
+void ArchivedDelegate::paint(QPainter *p, const QStyleOptionViewItem &option, const QModelIndex &index) const{
+ p->save();
+ qApp->style()->drawControl(QStyle::CE_ItemViewItem, &option, p);
+ QColor c(QColor(Qt::darkGreen));
+ QString text(tr("No"));
+ if(index.data().toInt() > -1){
+ c = QColor(Qt::red);
+ text = QString(tr("On DVD # %1")).arg(QString::number(index.data().toInt()));
+ }
+ p->setPen(QPen(c));
+ p->drawText(option.rect, Qt::AlignLeft | Qt::AlignVCenter, text);
+ p->restore();
+}
+
+QSize ArchivedDelegate::sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const {
+ QString text(tr("No"));
+ if(index.data().toInt() > -1){
+ text = QString(tr("On DVD # %1")).arg(QString::number(index.data().toInt()));
+ }
+ QFontMetrics metrics(option.font);
+ return metrics.size(Qt::TextSingleLine, text);
+}
+
diff --git a/archiveddelegate.h b/archiveddelegate.h
new file mode 100644
index 0000000..a7a4c09
--- /dev/null
+++ b/archiveddelegate.h
@@ -0,0 +1,23 @@
+/*
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License
+ as published by the Free Software Foundation; either version
+ 2 of the License, or (at your option) any later version.
+*/
+
+#ifndef ARCHIVEDDELEGATE_H
+#define ARCHIVEDDELEGATE_H
+
+#include <QAbstractItemDelegate>
+
+class ArchivedDelegate : public QAbstractItemDelegate {
+ Q_OBJECT
+ public:
+ ArchivedDelegate(QObject *parent = 0);
+ ~ArchivedDelegate() {};
+ void paint(QPainter *p, const QStyleOptionViewItem &option, const QModelIndex &index) const;
+ QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const;
+};
+
+#endif
+
diff --git a/archiveviewwidget.cpp b/archiveviewwidget.cpp
index 9a0e76e..51a9c91 100644
--- a/archiveviewwidget.cpp
+++ b/archiveviewwidget.cpp
@@ -19,6 +19,9 @@
#include "moviemodel.h"
#include "listmodel.h"
#include "archiveproxy.h"
+#include "editarchiveitemdialog.h"
+#include "sizedelegate.h"
+#include "archiveddelegate.h"
ArchiveViewWidget::ArchiveViewWidget(MovieModel *model, ListModel *genre, ListModel *actors, QWidget *parent) : QWidget(parent), mMovieModel(model), mGenreModel(genre), mActorsModel(actors){
//filter bar
@@ -50,6 +53,8 @@ ArchiveViewWidget::ArchiveViewWidget(MovieModel *model, ListModel *genre, ListMo
//treeview
mFileView = new ArchiveFileView;
+ mFileView->setItemDelegateForColumn(MovieItem::Size, new SizeDelegate(this));
+ mFileView->setItemDelegateForColumn(MovieItem::Dvd, new ArchivedDelegate(this));
mProxy = new ArchiveProxy(this);
mProxy->setSourceModel(mMovieModel);
mFileView->setModel(mProxy);
@@ -68,6 +73,18 @@ ArchiveViewWidget::ArchiveViewWidget(MovieModel *model, ListModel *genre, ListMo
setLayout(mainLayout);
}
+void ArchiveViewWidget::editFile(){
+ QModelIndexList selected = mFileView->selectionModel()->selectedRows();
+ if(!selected.isEmpty()){
+ QModelIndex idx = selected.at(0);
+ QModelIndex real = mProxy->mapToSource(idx);
+ mEditDialog->setMovie(real);
+ mEditDialog->show();
+ mEditDialog->raise();
+ mEditDialog->activateWindow();
+ }
+}
+
void ArchiveViewWidget::setFilter(){
QString filter = mName->text().toLower();
if(filter.isEmpty()){
diff --git a/archiveviewwidget.h b/archiveviewwidget.h
index ea90a6f..45bb21f 100644
--- a/archiveviewwidget.h
+++ b/archiveviewwidget.h
@@ -10,6 +10,8 @@
#include <QWidget>
+#include "archivefileview.h"
+
class MovieModel;
class ListModel;
class QComboBox;
@@ -18,6 +20,7 @@ class QPushButton;
class QModelIndex;
class ArchiveFileView;
class ArchiveProxy;
+class EditArchiveItemDialog;
class ArchiveViewWidget : public QWidget {
Q_OBJECT
@@ -25,6 +28,10 @@ class ArchiveViewWidget : public QWidget {
ArchiveViewWidget(MovieModel *model, ListModel *genre, ListModel *actors, QWidget *parent = 0);
~ArchiveViewWidget() {};
ArchiveFileView* fileView() { return mFileView; };
+ void setEditDialog(EditArchiveItemDialog *dlg) { mEditDialog = dlg; };
+
+ public slots:
+ void editFile();
signals:
void statusbarMessage(const QString &message);
@@ -49,6 +56,7 @@ class ArchiveViewWidget : public QWidget {
ListModel *mActorsModel;
ArchiveFileView *mFileView;
ArchiveProxy *mProxy;
+ EditArchiveItemDialog *mEditDialog;
};
#endif
diff --git a/covereditor.cpp b/covereditor.cpp
index 5472f23..1c872a0 100644
--- a/covereditor.cpp
+++ b/covereditor.cpp
@@ -15,7 +15,7 @@
#include "covereditor.h"
-CoverEditor::CoverEditor(Mode mode, QWidget *parent, Qt::WindowFlags f) : QWidget(parent, f), mMode(mode){
+CoverEditor::CoverEditor(QWidget *parent, Qt::WindowFlags f) : QWidget(parent, f){
QGridLayout *mainLayout = new QGridLayout;
QLabel *l1 = new QLabel(tr("Front cover"));
mFrontCover = new QComboBox;
@@ -33,15 +33,6 @@ CoverEditor::CoverEditor(Mode mode, QWidget *parent, Qt::WindowFlags f) : QWidge
mMovie = new QComboBox;
mainLayout->addWidget(l4, 3, 0);
mainLayout->addWidget(mMovie, 3, 1);
- mAddFile = new QPushButton(tr("Add cover"));
- if(mode == Archive){
- mAddFile->setVisible(false);
- }else{
- l4->setVisible(false);
- mMovie->setVisible(false);
- }
- connect(mAddFile, SIGNAL(clicked()), this, SLOT(addFile()));
- mainLayout->addWidget(mAddFile, 4, 1);
setLayout(mainLayout);
}
@@ -127,24 +118,6 @@ const QString CoverEditor::movie() const{
}
-void CoverEditor::addFile(){
- QSettings s;
- QString startDir = s.value("ui/selectstartup").toString();
- QStringList files = QFileDialog::getOpenFileNames(this, "Select covers to add to list", startDir);
- foreach(QString f, files){
- if(!mCoverPaths.contains(f)){
- files << f;
- int idx(-1);
- if((idx = f.lastIndexOf('/')) != -1){
- f.remove(0, idx + 1);
- mFrontCover->addItem(f);
- mBackCover->addItem(f);
- mCovers->addItem(f);
- }
- }
- }
-}
-
const QString CoverEditor::findPath(const QString &name) const{
QString retval;
foreach(QString s, mCoverPaths){
diff --git a/covereditor.h b/covereditor.h
index 1c0fb93..c702ef8 100644
--- a/covereditor.h
+++ b/covereditor.h
@@ -12,14 +12,11 @@
class QComboBox;
class QStringList;
-class QPushButton;
class CoverEditor : public QWidget {
Q_OBJECT
- Q_ENUMS(Mode);
public:
- enum Mode { Archive, Update };
- CoverEditor(Mode mode = Archive, QWidget *parent = 0, Qt::WindowFlags f = 0);
+ CoverEditor(QWidget *parent = 0, Qt::WindowFlags f = 0);
~CoverEditor() {};
void setCovers(const QStringList &covers);
const QString frontCover() const;
@@ -27,17 +24,12 @@ class CoverEditor : public QWidget {
const QString covers() const;
const QString movie() const;
- private slots:
- void addFile();
-
private:
const QString findPath(const QString &name) const;
QComboBox *mFrontCover;
QComboBox *mBackCover;
QComboBox *mCovers;
QComboBox *mMovie;
- QPushButton *mAddFile;
- Mode mMode;
QStringList mCoverPaths;
};
diff --git a/coveritem.cpp b/coveritem.cpp
index f42afc5..4955349 100644
--- a/coveritem.cpp
+++ b/coveritem.cpp
@@ -6,45 +6,27 @@
*/
#include <QString>
-#include <QSettings>
+#include <QFileInfo>
#include "coveritem.h"
-CoverItem::CoverItem(const QString &filename, const QString &type, const QString &md5) : mFilename(filename), mType(type), mMd5(md5){
- setPath();
+CoverItem::CoverItem(const QString &fullPath, const QString &type, const QString &md5) : mFullPath(fullPath), mType(type), mMd5(md5){
+ setFileName();
}
CoverItem::CoverItem() {};
-void CoverItem::setFileName(const QString &filename){
- mFilename = filename;
- setPath();
-}
-
void CoverItem::setMd5(const QString &md5){
mMd5 = md5;
- setPath();
}
void CoverItem::setFullPath(const QString &fullPath){
- if(fullPath.contains('/')){
- mFullPath = fullPath;
- QString wc = fullPath;
- int idx = fullPath.lastIndexOf('/') + 1;
- mFilename = wc.remove(0, idx);
- }
+ mFullPath = fullPath;
+ setFileName();
}
-void CoverItem::setPath(){
- if(mFilename.isEmpty() || mMd5.isEmpty()){
- return;
- }
- // assume it's the full path
- if(mFilename.contains('/')){
- return;
- }
- QSettings s;
- QString archive = s.value("paths/archivedir").toString();
- mFullPath = QString("%1/%2/%3/%4").arg(archive).arg(mMd5[0]).arg(mMd5[1]).arg(mFilename);
+void CoverItem::setFileName(){
+ QFileInfo info(mFullPath);
+ mFilename = info.fileName();
}
diff --git a/coveritem.h b/coveritem.h
index 0abccfa..a70de74 100644
--- a/coveritem.h
+++ b/coveritem.h
@@ -8,28 +8,29 @@
#ifndef COVERITEM_H
#define COVERITEM_H
+#include <QMetaType>
+
class QString;
class CoverItem {
public:
CoverItem();
- CoverItem(const QString &filename, const QString &type, const QString &md5);
+ CoverItem(const QString &fullPath, const QString &type, const QString &md5);
~CoverItem() {};
const QString fileName() const { return mFilename; };
const QString fullPath() const { return mFullPath; };
const QString type() const { return mType; };
const QString md5() const { return mMd5; };
- void setFileName(const QString &filename);
void setType(const QString &type) { mType = type; };
void setMd5(const QString &md5);
void setFullPath(const QString &fullPath);
private:
- void setPath();
+ void setFileName();
+ QString mFullPath;
QString mFilename;
QString mType;
QString mMd5;
- QString mFullPath;
};
Q_DECLARE_METATYPE(CoverItem)
diff --git a/editarchiveitemdialog.cpp b/editarchiveitemdialog.cpp
index 333c410..6a77300 100644
--- a/editarchiveitemdialog.cpp
+++ b/editarchiveitemdialog.cpp
@@ -94,6 +94,8 @@ EditArchiveItemDialog::EditArchiveItemDialog(ListModel *genre, ListModel *actors
titleLayout->addWidget(l6);
titleLayout->addWidget(mTitle);
w1Layout->addLayout(titleLayout);
+ w1->setLayout(w1Layout);
+ w1->setMinimumWidth(500);
//list editors
QWidget *w2 = new QWidget;
@@ -102,8 +104,8 @@ EditArchiveItemDialog::EditArchiveItemDialog(ListModel *genre, ListModel *actors
w2Layout->addWidget(genreEditor);
ListEditor *actorsEditor = new ListEditor(mActorsModel);
w2Layout->addWidget(actorsEditor);
- mCoverEditor = new CoverEditor(CoverEditor::Update);
- w2Layout->addWidget(mCoverEditor);
+ w2Layout->addStretch();
+ w2->setLayout(w2Layout);
//splitter
QSplitter *splitter = new QSplitter;
@@ -116,7 +118,7 @@ EditArchiveItemDialog::EditArchiveItemDialog(ListModel *genre, ListModel *actors
mUpdate = new QPushButton(tr("Update"));
connect(mUpdate, SIGNAL(clicked()), this, SLOT(updateMovie()));
mClose = new QPushButton(tr("Close"));
- connect(mClose, SIGNAL(triggered()), this, SLOT(reject()));
+ connect(mClose, SIGNAL(clicked()), this, SLOT(reject()));
buttonLayout->addWidget(mUpdate);
buttonLayout->addWidget(mClose);
@@ -139,7 +141,6 @@ void EditArchiveItemDialog::setMovie(const QModelIndex &movie){
mCovers = movie.data(MovieModel::CoverRole).toList();
setActors();
setMovieInfo(movie);
- setCovers(movie);
}
void EditArchiveItemDialog::setActors(){
@@ -156,44 +157,34 @@ void EditArchiveItemDialog::setActors(){
void EditArchiveItemDialog::setMovieInfo(const QModelIndex &movie){
QString html("<html><body style=\"color:#CD0003\"><ul>");
QModelIndex idx = mMovieModel->index(movie.row(), MovieItem::Title, QModelIndex());
- html.append(tr("<li>Title: %1</li>")).arg(idx.data().toString());
+ html.append(QString(tr("<li>Title: %1</li>")).arg(idx.data().toString()));
mTitle->setText(idx.data().toString());
idx = mMovieModel->index(movie.row(), MovieItem::Filename, QModelIndex());
- html.append(tr("<li>Filename: %1</li>")).arg(idx.data().toString());
+ html.append(QString(tr("<li>Filename: %1</li>")).arg(idx.data().toString()));
idx = mMovieModel->index(movie.row(), MovieItem::Md5Sum, QModelIndex());
- html.append(tr("<li>Md5-Sum: %1</li>")).arg(idx.data().toString());
+ html.append(QString(tr("<li>Md5-Sum: %1</li>")).arg(idx.data().toString()));
idx = mMovieModel->index(movie.row(), MovieItem::Size, QModelIndex());
QLocale l;
- html.append(tr("<li>Size: %1</li>")).arg(l.toString(idx.data().toLongLong()));
+ html.append(QString(tr("<li>Size: %1</li>")).arg(l.toString(idx.data().toLongLong())));
idx = mMovieModel->index(movie.row(), MovieItem::Genre, QModelIndex());
- html.append(tr("<li>Genre: %1</li>")).arg(idx.data().toString());
+ html.append(QString(tr("<li>Genre: %1</li>")).arg(idx.data().toString()));
int genreIndex = mGenre->findText(idx.data().toString());
if(genreIndex != -1){
mGenre->setCurrentIndex(genreIndex);
}
idx = mMovieModel->index(movie.row(), MovieItem::Quality, QModelIndex());
- html.append(tr("<li>Quality: %1</li>")).arg(l.toString(idx.data().toInt()));
+ html.append(QString(tr("<li>Quality: %1</li>")).arg(l.toString(idx.data().toInt())));
mQuality->setValue(idx.data().toInt());
idx = mMovieModel->index(movie.row(), MovieItem::Dvd, QModelIndex());
int dvd = idx.data().toInt();
if(dvd != -1){
- html.append(tr("<li>On DVD %1</li>")).arg(l.toString(dvd));
+ html.append(QString(tr("<li>On DVD %1</li>")).arg(l.toString(dvd)));
}else{
- html.append(tr("<li>Not on DVD</li>)"));
+ html.append(QString(tr("<li>Not on DVD</li>")));
}
mDvd->setValue(dvd);
-}
-
-void EditArchiveItemDialog::setCovers(const QModelIndex &movie){
- mCovers.clear();
- QList<QVariant> covers = movie.data(MovieModel::CoverRole).toList();
- QStringList coverNames;
- foreach(QVariant v, covers){
- CoverItem i = v.value<CoverItem>();
- coverNames << i.fileName();
- //mModelCovers << i.fileName();
- }
- mCoverEditor->setCovers(coverNames);
+ html.append("</ul></body></html>");
+ mMovieInfo->setHtml(html);
}
void EditArchiveItemDialog::addActor(){
@@ -222,14 +213,20 @@ void EditArchiveItemDialog::updateMovie(){
++it;
}
mMovieModel->setActors(mMovieId, actors);
-
+ QString genreName = mGenre->currentText();
+ QModelIndex genreIdx = mGenreModel->index(genreName);
+ QModelIndex genreMovieIndex = mMovieModel->index(mMovieId, MovieItem::Genre);
+ QVariant genreId = genreIdx.data(ListModel::IdRole);
+ mMovieModel->setDataAt(genreMovieIndex, genreId);
+ QModelIndex dvdIdx = mMovieModel->index(mMovieId, MovieItem::Dvd);
+ mMovieModel->setDataAt(dvdIdx, mDvd->value());
+ QModelIndex qualityIdx = mMovieModel->index(mMovieId, MovieItem::Quality);
+ mMovieModel->setDataAt(qualityIdx, mQuality->value());
+ QString title = mTitle->text().trimmed().toLower();
+ QModelIndex titleIdx = mMovieModel->index(mMovieId, MovieItem::Title);
+ if(!title.isEmpty()){
+ mMovieModel->setDataAt(titleIdx, title);
+ }
+ setMovieInfo(titleIdx);
}
-void EditArchiveItemDialog::updateCovers(){
- QString front = mCoverEditor->frontCover();
- QString back = mCoverEditor->backCover();
- QString covers = mCoverEditor->covers();
- QList<CoverItem> coverList;
- ///if(front
-
-}
diff --git a/editarchiveitemdialog.h b/editarchiveitemdialog.h
index 529b446..92ea8f6 100644
--- a/editarchiveitemdialog.h
+++ b/editarchiveitemdialog.h
@@ -20,7 +20,6 @@ class QSpinBox;
class QTextEdit;
class QPushButton;
class QModelIndex;
-class CoverEditor;
class EditArchiveItemDialog : public QDialog {
Q_OBJECT
@@ -29,14 +28,14 @@ class EditArchiveItemDialog : public QDialog {
~EditArchiveItemDialog() {};
void setMovie(const QModelIndex &movie);
- private:
- void setActors();
- void setMovieInfo(const QModelIndex &movie);
- void setCovers(const QModelIndex &movie);
+ private slots:
void addActor();
void removeActor();
void updateMovie();
- void updateCovers();
+
+ private:
+ void setActors();
+ void setMovieInfo(const QModelIndex &movie);
ListModel *mGenreModel;
ListModel *mActorsModel;
MovieModel *mMovieModel;
@@ -53,7 +52,6 @@ class EditArchiveItemDialog : public QDialog {
QLineEdit *mTitle;
QHash<QString, QVariant> mActorMap;
QList<QVariant> mCovers;
- CoverEditor *mCoverEditor;
int mMovieId;
};
diff --git a/filesystemwidget.cpp b/filesystemwidget.cpp
index d72d175..d15feeb 100644
--- a/filesystemwidget.cpp
+++ b/filesystemwidget.cpp
@@ -32,7 +32,7 @@
#include "helper.h"
#include "messagedialog.h"
#include "extractordialog.h"
-#include "archiveeditwidget.h"
+#include "archiveeditdialog.h"
FilesystemWidget::FilesystemWidget(QWidget *parent) : QWidget(parent) {
mModel = new QDirModel;
diff --git a/helper.cpp b/helper.cpp
index baaacbb..508e482 100644
--- a/helper.cpp
+++ b/helper.cpp
@@ -9,6 +9,7 @@
#include <QByteArray>
#include <QFileInfo>
#include <QFile>
+#include <QSettings>
#define CRYPTOPP_ENABLE_NAMESPACE_WEAK 1
#include <md5.h>
@@ -75,5 +76,42 @@ namespace Helper {
}
return retval;
}
+
+ bool moveToArchive(const QString &path, const QString &md5){
+ QFileInfo info(path);
+ if(!info.exists()){
+ return false;
+ }
+ QFileInfo destFile = QFileInfo(createArchivePath(path, md5));
+ if(destFile.exists()){
+ destFile = QFileInfo(createArchivePath(path, md5, true));
+ if(destFile.exists()){
+ return false;
+ }
+ }
+ return QFile::rename(path, destFile.absoluteFilePath());
+ }
+
+ bool removeFromArchive(const QString &fileName, const QString &md5){
+ QString file = createArchivePath(fileName, md5);
+ QFileInfo info(file);
+ if(!info.exists()){
+ return false;
+ }
+ return QFile::remove(file);
+ }
+
+ const QString createArchivePath(const QString &path, const QString &md5, bool withMd5){
+ QSettings s;
+ QString archiveDir = s.value("paths/archivedir").toString();
+ QFileInfo info(path);
+ QString retval;
+ if(withMd5){
+ retval = QString("%1/%2/%3/%4_%5.%6").arg(archiveDir).arg(md5[0]).arg(md5[1]).arg(info.completeBaseName()).arg(md5).arg(info.suffix());
+ }else{
+ retval = QString("%1/%2/%3/%4").arg(archiveDir).arg(md5[0]).arg(md5[1]).arg(info.fileName());
+ }
+ return retval;
+ }
}
diff --git a/helper.h b/helper.h
index 642d566..639c633 100644
--- a/helper.h
+++ b/helper.h
@@ -15,6 +15,9 @@ class QString;
namespace Helper {
const QString mimeType(const QString &path);
const QString md5Sum(const QString &path);
+ bool moveToArchive(const QString &path, const QString &md5);
+ bool removeFromArchive(const QString &filename, const QString &md5);
+ const QString createArchivePath(const QString &path, const QString &md5, bool withMd5 = false);
}
#endif
diff --git a/movieitem.cpp b/movieitem.cpp
index 7e8d379..4b05900 100644
--- a/movieitem.cpp
+++ b/movieitem.cpp
@@ -9,6 +9,7 @@
#include "movieitem.h"
#include "coveritem.h"
+#include "helper.h"
MovieItem::MovieItem(int id, QObject *parent) : QObject(parent), mNumRows(7), mId(id), mGenreId(-1) {
for(int i = 0; i < mNumRows; ++i){
@@ -18,7 +19,7 @@ MovieItem::MovieItem(int id, QObject *parent) : QObject(parent), mNumRows(7), m
populate();
setGenreName();
setActors();
- setSize();
+ //setSize();
setCovers();
}
}
@@ -28,7 +29,7 @@ void MovieItem::setId(int id){
populate();
setGenreName();
setActors();
- setSize();
+ //setSize();
setCovers();
}
@@ -42,6 +43,9 @@ bool MovieItem::setData(const QList<QVariant> &data){
void MovieItem::setDataAt(int column, const QVariant &data){
mRows[column] = data;
+ if(column == Genre){
+ setGenreName();
+ }
}
const QList<QVariant> MovieItem::data() const {
@@ -100,7 +104,11 @@ void MovieItem::setCovers(){
coverQuery.bindValue(":id", mId);
coverQuery.exec();
while(coverQuery.next()){
- CoverItem item(coverQuery.value(0).toString(), coverQuery.value(1).toString(), coverQuery.value(2).toString());
+ QString filename = coverQuery.value(0).toString();
+ QString md5 = coverQuery.value(2).toString();
+ QString coverType = coverQuery.value(1).toString();
+ QString fullPath = Helper::createArchivePath(filename, md5);
+ CoverItem item(fullPath, coverType, md5);
QVariant i;
i.setValue(item);
mCovers << i;
diff --git a/moviemodel.cpp b/moviemodel.cpp
index d34113a..8bfa846 100644
--- a/moviemodel.cpp
+++ b/moviemodel.cpp
@@ -69,6 +69,18 @@ QModelIndex MovieModel::index(int row, int column, const QModelIndex &parent) co
return createIndex(row, column, internal);
}
+QModelIndex MovieModel::index(int movieId, int column) const{
+ QModelIndex retval = QModelIndex();
+ for(int i = 0; i < rowCount(QModelIndex()); ++i){
+ MovieItem *item = mItems.at(i);
+ if(item->id() == movieId){
+ retval = createIndex(i, column, item);
+ break;
+ }
+ }
+ return retval;
+}
+
QVariant MovieModel::data(const QModelIndex &index, int role) const{
if(!index.isValid()){
return QVariant();
@@ -76,11 +88,6 @@ QVariant MovieModel::data(const QModelIndex &index, int role) const{
MovieItem *item = static_cast<MovieItem*>(index.internalPointer());
Q_ASSERT(item != 0);
if(role == Qt::DisplayRole){
- switch (index.column()){
- case MovieItem::Dvd:
- return QVariant(QString(tr("DVD %1")).arg(QString::number(item->dataAt(MovieItem::Dvd).toInt())));
- break;
- }
return item->dataAt(index.column());
}
if(role == ActorsRole){
diff --git a/moviemodel.h b/moviemodel.h
index d2cbe50..6367583 100644
--- a/moviemodel.h
+++ b/moviemodel.h
@@ -24,6 +24,7 @@ class MovieModel : public QAbstractItemModel {
MovieModel(QObject *parent = 0);
~MovieModel();
QModelIndex index(int row, int column, const QModelIndex &parent) const;
+ QModelIndex index(int movieId, int column = 0) const;
QModelIndex parent(const QModelIndex &) const { return QModelIndex(); };
int columnCount(const QModelIndex &) const { return MovieItem::NumRows; };
int rowCount(const QModelIndex &) const { return mItems.size(); };
diff --git a/shemov.cpp b/shemov.cpp
index 4b54d78..6525dd5 100644
--- a/shemov.cpp
+++ b/shemov.cpp
@@ -29,6 +29,7 @@
#include "moviemodel.h"
#include "listmodel.h"
#include "archiveviewwidget.h"
+#include "editarchiveitemdialog.h"
SheMov::SheMov(QWidget *parent, Qt::WindowFlags flags) : QMainWindow(parent, flags) {
qApp->setWindowIcon(QIcon(":/shemov.png"));
@@ -64,6 +65,9 @@ SheMov::SheMov(QWidget *parent, Qt::WindowFlags flags) : QMainWindow(parent, fla
mAEdit->setMovieModel(mMovieModel);
mFSWidget->setArchiveDialog(mAEdit);
+ mAItemEdit = new EditArchiveItemDialog(mGenreModel, mActorModel, mMovieModel, this);
+ mAVWidget->setEditDialog(mAItemEdit);
+
QVBoxLayout *mainLayout = new QVBoxLayout;
mainLayout->addWidget(mTab);
@@ -78,6 +82,7 @@ SheMov::SheMov(QWidget *parent, Qt::WindowFlags flags) : QMainWindow(parent, fla
connect(mFSWidget->fileView(), SIGNAL(statusbarMessage(const QString &)), this, SLOT(statusbarMessage(const QString &)));
connect(mFSWidget, SIGNAL(statusbarMessage(const QString &)), this, SLOT(statusbarMessage(const QString &)));
connect(mFSWidget, SIGNAL(newTemplate(const QString &)), this, SLOT(setTemplate(const QString &)));
+ connect(mTab, SIGNAL(currentChanged(int)), this, SLOT(tabChanged(int)));
QWidget *centralWidget = new QWidget;
centralWidget->setLayout(mainLayout);
@@ -108,6 +113,11 @@ void SheMov::configure(){
createExtractMenu();
}
+void SheMov::tabChanged(int newTab){
+ mEditFSMenuA->setVisible(newTab == 0);
+ mEditArchiveMenuA->setVisible(newTab == 1);
+}
+
void SheMov::createStatusbar(){
QLabel *selCountL = new QLabel(tr("Sel. Items"));
mSelectedItems = new QLabel("0");
@@ -126,7 +136,7 @@ void SheMov::createActions(){
mQuitA = new QAction(tr("Quit"), this);
mQuitA->setShortcut(tr("CTRL+q"));
- //Edit menu
+ //Edit menu (FS)
mCdupA = new QAction(tr("Go up"), this);
connect(mCdupA, SIGNAL(triggered()), mFSWidget, SLOT(parentDir()));
mFSWidget->fileView()->addAction(mCdupA);
@@ -204,39 +214,50 @@ void SheMov::createActions(){
connect(mExtractMapper, SIGNAL(mapped(const QString &)), mFSWidget, SLOT(extract(const QString &)));
mExtractMenu = new QMenu(tr("E&xtract to..."), this);
createExtractMenu();
+
+ //Edit menu (archive)
+ mEditArchiveFileA = new QAction(tr("Edit file..."), this);
+ mEditArchiveFileA->setShortcut(tr("CTRL+e"));
+ mAVWidget->fileView()->addAction(mEditArchiveFileA);
+ connect(mEditArchiveFileA, SIGNAL(triggered()), mAVWidget, SLOT(editFile()));
}
void SheMov::createMenus(){
QMenu *fileMenu = new QMenu(tr("&File"), this);
fileMenu->addAction(mQuitA);
- QMenu *editMenu = new QMenu(tr("&Edit"), this);
- editMenu->addAction(mCdupA);
- editMenu->addSeparator();
- editMenu->addAction(mMarkFilesA);
- editMenu->addAction(mUnmarkFilesA);
- editMenu->addSeparator();
- editMenu->addAction(mCreateFolderA);
- editMenu->addAction(mDeleteFilesA);
- editMenu->addSeparator();
- editMenu->addAction(mCopyA);
- editMenu->addAction(mMoveA);
- editMenu->addAction(mRenameA);
- editMenu->addAction(mArchiveA);
+ mEditFSMenu = new QMenu(tr("&Edit"), this);
+ mEditFSMenu->addAction(mCdupA);
+ mEditFSMenu->addSeparator();
+ mEditFSMenu->addAction(mMarkFilesA);
+ mEditFSMenu->addAction(mUnmarkFilesA);
+ mEditFSMenu->addSeparator();
+ mEditFSMenu->addAction(mCreateFolderA);
+ mEditFSMenu->addAction(mDeleteFilesA);
+ mEditFSMenu->addSeparator();
+ mEditFSMenu->addAction(mCopyA);
+ mEditFSMenu->addAction(mMoveA);
+ mEditFSMenu->addAction(mRenameA);
+ mEditFSMenu->addAction(mArchiveA);
QMenu *renameMenu = new QMenu(tr("&Rename..."), this);
renameMenu->addAction(mTemplateA);
renameMenu->addAction(mRenameCoverFA);
renameMenu->addAction(mRenameCoverBA);
renameMenu->addAction(mRenameCoverCA);
- editMenu->addMenu(renameMenu);
- editMenu->addSeparator();
- editMenu->addMenu(mExtractMenu);
- editMenu->addSeparator();
- editMenu->addAction(mRefreshA);
- editMenu->addSeparator();
- editMenu->addAction(mConfigA);
+ mEditFSMenu->addMenu(renameMenu);
+ mEditFSMenu->addSeparator();
+ mEditFSMenu->addMenu(mExtractMenu);
+ mEditFSMenu->addSeparator();
+ mEditFSMenu->addAction(mRefreshA);
+ mEditFSMenu->addSeparator();
+ mEditFSMenu->addAction(mConfigA);
+
+ mEditArchiveMenu = new QMenu(tr("&Edit archive"), this);
+ mEditArchiveMenu->addAction(mEditArchiveFileA);
menuBar()->addMenu(fileMenu);
- menuBar()->addMenu(editMenu);
+ mEditFSMenuA = menuBar()->addMenu(mEditFSMenu);
+ mEditArchiveMenuA = menuBar()->addMenu(mEditArchiveMenu);
+ mEditArchiveMenuA->setVisible(false);
}
void SheMov::createExtractMenu(){
diff --git a/shemov.h b/shemov.h
index 0e985ec..cce3da9 100644
--- a/shemov.h
+++ b/shemov.h
@@ -23,6 +23,7 @@ class ArchiveEditDialog;
class MovieModel;
class ListModel;
class ArchiveViewWidget;
+class EditArchiveItemDialog;
class SheMov : public QMainWindow {
Q_OBJECT
@@ -36,6 +37,7 @@ class SheMov : public QMainWindow {
void statusbarMessage(const QString &message);
void setTemplate(const QString &newTemplate);
void configure();
+ void tabChanged(int newTab);
private:
void createStatusbar();
@@ -64,6 +66,7 @@ class SheMov : public QMainWindow {
QAction *mTemplateA;
QAction *mConfigA;
QAction *mArchiveA;
+ QAction *mEditArchiveFileA;
QList<QAction*> mExtractToA;
//EndActions
@@ -71,11 +74,16 @@ class SheMov : public QMainWindow {
QSignalMapper *mExtractMapper;
QMenu *mExtractMenu;
+ QMenu *mEditFSMenu;
+ QMenu *mEditArchiveMenu;
+ QAction *mEditFSMenuA;
+ QAction *mEditArchiveMenuA;
QTabWidget *mTab;
FilesystemWidget *mFSWidget;
ArchiveViewWidget *mAVWidget;
ArchiveEditDialog *mAEdit;
+ EditArchiveItemDialog *mAItemEdit;
MovieModel *mMovieModel;
ListModel *mGenreModel;
ListModel *mActorModel;
diff --git a/shemov.pro b/shemov.pro
index f66ab82..ee1b0a1 100644
--- a/shemov.pro
+++ b/shemov.pro
@@ -24,7 +24,9 @@ archivefilewidget.cpp \
archiveviewwidget.cpp \
archivefileview.cpp \
archiveproxy.cpp \
-editarchiveitemdialog.cpp
+editarchiveitemdialog.cpp \
+sizedelegate.cpp \
+archiveddelegate.cpp
HEADERS = listitem.h \
listmodel.h \
movieitem.h \
@@ -47,7 +49,9 @@ archivefilewidget.h \
archiveviewwidget.h \
archivefileview.h \
archiveproxy.h \
-editarchiveitemdialog.h
+editarchiveitemdialog.h \
+sizedelegate.h \
+archiveddelegate.h
LIBS += -lmagic
LIBS += -lcryptopp
INCLUDEPATH += /usr/include/cryptopp
diff --git a/sizedelegate.cpp b/sizedelegate.cpp
new file mode 100644
index 0000000..c6b3ae0
--- /dev/null
+++ b/sizedelegate.cpp
@@ -0,0 +1,41 @@
+/*
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License
+ as published by the Free Software Foundation; either version
+ 2 of the License, or (at your option) any later version.
+*/
+
+#include <QFontMetrics>
+#include <QLocale>
+#include <QPainter>
+#include <QApplication>
+
+#include "sizedelegate.h"
+
+SizeDelegate::SizeDelegate(QObject *parent) : QAbstractItemDelegate(parent) {};
+
+void SizeDelegate::paint(QPainter *p, const QStyleOptionViewItem &option, const QModelIndex &index) const{
+ p->save();
+ qint64 size = index.data().toInt();
+ qint64 maxSize = Q_INT64_C(2147483648);
+ QColor c(QColor(Qt::darkGreen));
+ if(size > maxSize){
+ c = QColor(Qt::red);
+ }
+ qApp->style()->drawControl(QStyle::CE_ItemViewItem, &option, p);
+ p->setPen(QPen(c));
+ p->setFont(option.font);
+ QLocale l;
+ QString text = l.toString(size);
+ p->drawText(option.rect, Qt::AlignRight | Qt::AlignCenter | Qt::AlignVCenter, text);
+ p->restore();
+}
+
+QSize SizeDelegate::sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const {
+ QFont font = option.font;
+ QFontMetrics metrics(font);
+ QLocale l;
+ QString size = l.toString(index.data().toInt());
+ return metrics.size(Qt::TextSingleLine, size);
+}
+
diff --git a/sizedelegate.h b/sizedelegate.h
new file mode 100644
index 0000000..a1c1d47
--- /dev/null
+++ b/sizedelegate.h
@@ -0,0 +1,23 @@
+/*
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License
+ as published by the Free Software Foundation; either version
+ 2 of the License, or (at your option) any later version.
+*/
+
+#ifndef SIZEDELEGATE_H
+#define SIZEDELEGATE_H
+
+#include <QAbstractItemDelegate>
+
+class SizeDelegate : public QAbstractItemDelegate {
+ Q_OBJECT
+ public:
+ SizeDelegate(QObject *parent = 0);
+ ~SizeDelegate() {};
+ void paint(QPainter *p, const QStyleOptionViewItem &option, const QModelIndex &index) const;
+ QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const;
+};
+
+#endif
+