summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--archiveeditdialog.h4
-rw-r--r--covereditor.cpp32
-rw-r--r--covereditor.h10
-rw-r--r--coveritem.cpp40
-rw-r--r--coveritem.h10
-rw-r--r--editarchiveitemdialog.cpp235
-rw-r--r--editarchiveitemdialog.h61
-rw-r--r--movieitem.cpp26
-rw-r--r--movieitem.h10
-rw-r--r--moviemodel.cpp19
-rw-r--r--moviemodel.h2
-rw-r--r--shemov.pro6
12 files changed, 444 insertions, 11 deletions
diff --git a/archiveeditdialog.h b/archiveeditdialog.h
index 23f8614..6e9355d 100644
--- a/archiveeditdialog.h
+++ b/archiveeditdialog.h
@@ -5,8 +5,8 @@
2 of the License, or (at your option) any later version.
*/
-#ifndef ARCHIVEEDITWIDGET_H
-#define ARCHIVEEDITWIDGET_H
+#ifndef ARCHIVEEDITDIALOG_H
+#define ARCHIVEEDITDIALOG_H
#include <QDialog>
#include <QDirModel>
diff --git a/covereditor.cpp b/covereditor.cpp
index 618c0a9..5472f23 100644
--- a/covereditor.cpp
+++ b/covereditor.cpp
@@ -9,10 +9,13 @@
#include <QStringList>
#include <QLabel>
#include <QGridLayout>
+#include <QFileDialog>
+#include <QPushButton>
+#include <QSettings>
#include "covereditor.h"
-CoverEditor::CoverEditor(QWidget *parent, Qt::WindowFlags f) : QWidget(parent, f){
+CoverEditor::CoverEditor(Mode mode, QWidget *parent, Qt::WindowFlags f) : QWidget(parent, f), mMode(mode){
QGridLayout *mainLayout = new QGridLayout;
QLabel *l1 = new QLabel(tr("Front cover"));
mFrontCover = new QComboBox;
@@ -30,6 +33,15 @@ CoverEditor::CoverEditor(QWidget *parent, Qt::WindowFlags f) : QWidget(parent, f
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);
}
@@ -115,6 +127,24 @@ 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 c702ef8..1c0fb93 100644
--- a/covereditor.h
+++ b/covereditor.h
@@ -12,11 +12,14 @@
class QComboBox;
class QStringList;
+class QPushButton;
class CoverEditor : public QWidget {
Q_OBJECT
+ Q_ENUMS(Mode);
public:
- CoverEditor(QWidget *parent = 0, Qt::WindowFlags f = 0);
+ enum Mode { Archive, Update };
+ CoverEditor(Mode mode = Archive, QWidget *parent = 0, Qt::WindowFlags f = 0);
~CoverEditor() {};
void setCovers(const QStringList &covers);
const QString frontCover() const;
@@ -24,12 +27,17 @@ 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 f29e81c..f42afc5 100644
--- a/coveritem.cpp
+++ b/coveritem.cpp
@@ -6,7 +6,45 @@
*/
#include <QString>
+#include <QSettings>
#include "coveritem.h"
-CoverItem::CoverItem(const QString &filename, const QString &type, const QString &md5) : mFilename(filename), mType(type), mMd5(md5) {};
+CoverItem::CoverItem(const QString &filename, const QString &type, const QString &md5) : mFilename(filename), mType(type), mMd5(md5){
+ setPath();
+}
+
+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);
+ }
+}
+
+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);
+}
+
diff --git a/coveritem.h b/coveritem.h
index a435f90..0abccfa 100644
--- a/coveritem.h
+++ b/coveritem.h
@@ -12,17 +12,27 @@ class QString;
class CoverItem {
public:
+ CoverItem();
CoverItem(const QString &filename, 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();
QString mFilename;
QString mType;
QString mMd5;
+ QString mFullPath;
};
+Q_DECLARE_METATYPE(CoverItem)
+
#endif
diff --git a/editarchiveitemdialog.cpp b/editarchiveitemdialog.cpp
new file mode 100644
index 0000000..333c410
--- /dev/null
+++ b/editarchiveitemdialog.cpp
@@ -0,0 +1,235 @@
+/*
+ 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 <QLineEdit>
+#include <QLabel>
+#include <QSplitter>
+#include <QHBoxLayout>
+#include <QVBoxLayout>
+#include <QSpinBox>
+#include <QTextEdit>
+#include <QPushButton>
+#include <QFont>
+#include <QComboBox>
+#include <QSplitter>
+#include <QApplication>
+#include <QModelIndex>
+#include <QLocale>
+
+#include "editarchiveitemdialog.h"
+#include "listmodel.h"
+#include "moviemodel.h"
+#include "listeditor.h"
+#include "covereditor.h"
+#include "coveritem.h"
+
+EditArchiveItemDialog::EditArchiveItemDialog(ListModel *genre, ListModel *actors, MovieModel *movies, QWidget *parent, Qt::WindowFlags f) : QDialog(parent, f), mGenreModel(genre), mActorsModel(actors), mMovieModel(movies){
+ QWidget *w1 = new QWidget;
+ QVBoxLayout *w1Layout = new QVBoxLayout;
+
+ //movie information
+ QLabel *l1 = new QLabel(tr("Movie information"));
+ w1Layout->addWidget(l1);
+ mMovieInfo = new QTextEdit;
+ mMovieInfo->setReadOnly(true);
+ mMovieInfo->setFont(QFont("Courier new"));
+ w1Layout->addWidget(mMovieInfo);
+
+ //actors
+ QLabel *l2 = new QLabel(tr("Select actors"));
+ mActors = new QComboBox;
+ mActors->setModel(mActorsModel);
+ QHBoxLayout *actorsLayout = new QHBoxLayout;
+ actorsLayout->addWidget(l2);
+ actorsLayout->addWidget(mActors);
+ w1Layout->addLayout(actorsLayout);
+ mActorsDisplay = new QTextEdit;
+ mActorsDisplay->setReadOnly(true);
+ mActorsDisplay->setFont(QFont("Courier new"));
+ w1Layout->addWidget(mActorsDisplay);
+ QHBoxLayout *actorButtons = new QHBoxLayout;
+ mAddActor = new QPushButton(tr("&Add Actor"));
+ connect(mAddActor, SIGNAL(clicked()), this, SLOT(addActor()));
+ mRemoveActor = new QPushButton(tr("&Remove Actor"));
+ connect(mRemoveActor, SIGNAL(clicked()), this, SLOT(removeActor()));
+ actorButtons->addStretch();
+ actorButtons->addWidget(mAddActor);
+ actorButtons->addWidget(mRemoveActor);
+ w1Layout->addLayout(actorButtons);
+
+ //genre
+ QLabel *l3 = new QLabel(tr("Select genre"));
+ mGenre = new QComboBox;
+ mGenre->setModel(mGenreModel);
+ QHBoxLayout *genreLayout = new QHBoxLayout;
+ genreLayout->addWidget(l3);
+ genreLayout->addWidget(mGenre);
+ w1Layout->addLayout(genreLayout);
+
+ //quality + dvd
+ QLabel *l4 = new QLabel(tr("Select quality"));
+ mQuality = new QSpinBox;
+ mQuality->setMinimum(0);
+ mQuality->setMaximum(10);
+ QHBoxLayout *qualityDvdLayout = new QHBoxLayout;
+ qualityDvdLayout->addWidget(l4);
+ qualityDvdLayout->addWidget(mQuality);
+ qualityDvdLayout->addStretch();
+ QLabel*l5 = new QLabel(tr("Select DVD No."));
+ mDvd = new QSpinBox;
+ mDvd->setMinimum(-1);
+ mDvd->setMaximum(1000);
+ qualityDvdLayout->addWidget(l5);
+ qualityDvdLayout->addWidget(mDvd);
+ w1Layout->addLayout(qualityDvdLayout);
+
+ //movie title
+ QLabel *l6 = new QLabel(tr("Set movie title"));
+ mTitle = new QLineEdit;
+ QHBoxLayout *titleLayout = new QHBoxLayout;
+ titleLayout->addWidget(l6);
+ titleLayout->addWidget(mTitle);
+ w1Layout->addLayout(titleLayout);
+
+ //list editors
+ QWidget *w2 = new QWidget;
+ QVBoxLayout *w2Layout = new QVBoxLayout;
+ ListEditor *genreEditor = new ListEditor(mGenreModel);
+ w2Layout->addWidget(genreEditor);
+ ListEditor *actorsEditor = new ListEditor(mActorsModel);
+ w2Layout->addWidget(actorsEditor);
+ mCoverEditor = new CoverEditor(CoverEditor::Update);
+ w2Layout->addWidget(mCoverEditor);
+
+ //splitter
+ QSplitter *splitter = new QSplitter;
+ splitter->addWidget(w1);
+ splitter->addWidget(w2);
+
+ //dialog buttons
+ QHBoxLayout *buttonLayout = new QHBoxLayout;
+ buttonLayout->addStretch();
+ mUpdate = new QPushButton(tr("Update"));
+ connect(mUpdate, SIGNAL(clicked()), this, SLOT(updateMovie()));
+ mClose = new QPushButton(tr("Close"));
+ connect(mClose, SIGNAL(triggered()), this, SLOT(reject()));
+ buttonLayout->addWidget(mUpdate);
+ buttonLayout->addWidget(mClose);
+
+ //now put it all together
+ QVBoxLayout *mainLayout = new QVBoxLayout;
+ mainLayout->addWidget(splitter);
+ mainLayout->addLayout(buttonLayout);
+
+ setLayout(mainLayout);
+ QString title = QString(tr("%1 - Edit archive")).arg(qApp->applicationName());
+ setWindowTitle(title);
+}
+
+void EditArchiveItemDialog::setMovie(const QModelIndex &movie){
+ if(!movie.isValid()){
+ return;
+ }
+ mMovieId = movie.data(MovieModel::IdRole).toInt();
+ mActorMap = movie.data(MovieModel::ActorsMap).value<QHash<QString, QVariant> >();
+ mCovers = movie.data(MovieModel::CoverRole).toList();
+ setActors();
+ setMovieInfo(movie);
+ setCovers(movie);
+}
+
+void EditArchiveItemDialog::setActors(){
+ QString html("<html><body style=\"color:#CD0003\"><ul>");
+ QHash<QString, QVariant>::const_iterator it = mActorMap.constBegin();
+ while(it != mActorMap.constEnd()){
+ html.append(QString("<li>%1</li>").arg(it.key()));
+ ++it;
+ }
+ html.append("</ul></body></html>");
+ mActorsDisplay->setHtml(html);
+}
+
+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());
+ mTitle->setText(idx.data().toString());
+ idx = mMovieModel->index(movie.row(), MovieItem::Filename, QModelIndex());
+ html.append(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());
+ idx = mMovieModel->index(movie.row(), MovieItem::Size, QModelIndex());
+ QLocale l;
+ html.append(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());
+ 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()));
+ 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));
+ }else{
+ html.append(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);
+}
+
+void EditArchiveItemDialog::addActor(){
+ QString currentText = mActors->currentText();
+ QModelIndex idx = mActorsModel->index(currentText);
+ if(idx.isValid()){
+ int id = idx.data(ListModel::IdRole).toInt();
+ mActorMap.insert(currentText, id);
+ setActors();
+ }
+}
+
+void EditArchiveItemDialog::removeActor(){
+ QString currentText = mActors->currentText();
+ if(mActorMap.contains(currentText)){
+ mActorMap.remove(currentText);
+ setActors();
+ }
+}
+
+void EditArchiveItemDialog::updateMovie(){
+ QHash<QString, QVariant>::const_iterator it = mActorMap.constBegin();
+ QList<QVariant> actors;
+ while(it != mActorMap.constEnd()){
+ actors << it.value();
+ ++it;
+ }
+ mMovieModel->setActors(mMovieId, actors);
+
+}
+
+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
new file mode 100644
index 0000000..529b446
--- /dev/null
+++ b/editarchiveitemdialog.h
@@ -0,0 +1,61 @@
+/*
+ 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 EDITARCHIVEITEMDIALOG_H
+#define EDITARCHIVEITEMDIALOG_H
+
+#include <QDialog>
+#include <QHash>
+#include <QVariant>
+
+class ListModel;
+class MovieModel;
+class QLineEdit;
+class QComboBox;
+class QSpinBox;
+class QTextEdit;
+class QPushButton;
+class QModelIndex;
+class CoverEditor;
+
+class EditArchiveItemDialog : public QDialog {
+ Q_OBJECT
+ public:
+ EditArchiveItemDialog(ListModel *genre, ListModel *actors, MovieModel *movies, QWidget *parent = 0, Qt::WindowFlags f = 0);
+ ~EditArchiveItemDialog() {};
+ void setMovie(const QModelIndex &movie);
+
+ private:
+ void setActors();
+ void setMovieInfo(const QModelIndex &movie);
+ void setCovers(const QModelIndex &movie);
+ void addActor();
+ void removeActor();
+ void updateMovie();
+ void updateCovers();
+ ListModel *mGenreModel;
+ ListModel *mActorsModel;
+ MovieModel *mMovieModel;
+ QComboBox *mGenre;
+ QComboBox *mActors;
+ QTextEdit *mMovieInfo;
+ QTextEdit *mActorsDisplay;
+ QSpinBox *mQuality;
+ QSpinBox *mDvd;
+ QPushButton *mUpdate;
+ QPushButton *mClose;
+ QPushButton *mAddActor;
+ QPushButton *mRemoveActor;
+ QLineEdit *mTitle;
+ QHash<QString, QVariant> mActorMap;
+ QList<QVariant> mCovers;
+ CoverEditor *mCoverEditor;
+ int mMovieId;
+};
+
+#endif
+
diff --git a/movieitem.cpp b/movieitem.cpp
index de2382c..7e8d379 100644
--- a/movieitem.cpp
+++ b/movieitem.cpp
@@ -8,6 +8,7 @@
#include <QSqlQuery>
#include "movieitem.h"
+#include "coveritem.h"
MovieItem::MovieItem(int id, QObject *parent) : QObject(parent), mNumRows(7), mId(id), mGenreId(-1) {
for(int i = 0; i < mNumRows; ++i){
@@ -18,6 +19,7 @@ MovieItem::MovieItem(int id, QObject *parent) : QObject(parent), mNumRows(7), m
setGenreName();
setActors();
setSize();
+ setCovers();
}
}
@@ -27,6 +29,7 @@ void MovieItem::setId(int id){
setGenreName();
setActors();
setSize();
+ setCovers();
}
bool MovieItem::setData(const QList<QVariant> &data){
@@ -76,12 +79,31 @@ void MovieItem::setGenreName(){
}
void MovieItem::setActors(){
+ mActors.clear();
+ mActorIdMap.clear();
QSqlQuery actorQuery;
- actorQuery.prepare("SELECT actor.tactorname FROM actor, movieactormap WHERE movieactormap.iactorid = actor.iactorid AND movieactormap.imovid = :id");
+ actorQuery.prepare("SELECT actor.iactorid, actor.tactorname FROM actor, movieactormap WHERE movieactormap.iactorid = actor.iactorid AND movieactormap.imovid = :id");
actorQuery.bindValue(":id", mId);
actorQuery.exec();
while(actorQuery.next()){
- mActors << actorQuery.value(0);
+ QVariant actorId = actorQuery.value(0);
+ QString actorName = actorQuery.value(1).toString();
+ mActors << actorName;
+ mActorIdMap.insert(actorName, actorId);
+ }
+}
+
+void MovieItem::setCovers(){
+ mCovers.clear();
+ QSqlQuery coverQuery;
+ coverQuery.prepare("SELECT tfilename, tcovertype, cmd5sum FROM covers WHERE imovid = :id");
+ coverQuery.bindValue(":id", mId);
+ coverQuery.exec();
+ while(coverQuery.next()){
+ CoverItem item(coverQuery.value(0).toString(), coverQuery.value(1).toString(), coverQuery.value(2).toString());
+ QVariant i;
+ i.setValue(item);
+ mCovers << i;
}
}
diff --git a/movieitem.h b/movieitem.h
index edd46b4..70bfc88 100644
--- a/movieitem.h
+++ b/movieitem.h
@@ -11,6 +11,9 @@
#include <QObject>
#include <QList>
#include <QVariant>
+#include <QHash>
+
+#include "coveritem.h"
class QSqlQuery;
@@ -30,17 +33,22 @@ class MovieItem : public QObject {
const QList<QVariant> data() const;
const QVariant dataAt(int column) const;
const QList<QVariant> actors() const { return mActors; };
+ const QHash<QString, QVariant> actorMap() const { return mActorIdMap; };
+ const QList<QVariant> covers() const { return mCovers; };
void populate();
+ void setActors();
+ void setCovers();
private:
void setGenreName();
- void setActors();
void setSize();
const int mNumRows;
int mId;
int mGenreId;
QList<QVariant> mRows;
QList<QVariant> mActors;
+ QHash<QString, QVariant> mActorIdMap;
+ QList<QVariant> mCovers;
};
#endif
diff --git a/moviemodel.cpp b/moviemodel.cpp
index 389f456..d34113a 100644
--- a/moviemodel.cpp
+++ b/moviemodel.cpp
@@ -86,6 +86,15 @@ QVariant MovieModel::data(const QModelIndex &index, int role) const{
if(role == ActorsRole){
return item->actors();
}
+ if(role == ActorsMap){
+ return QVariant(item->actorMap());
+ }
+ if(role == CoverRole){
+ return item->covers();
+ }
+ if(role == IdRole){
+ return item->id();
+ }
if((role == Qt::DecorationRole) && (index.column() == 0)){
return QIcon(":/dildo.png");
}
@@ -196,6 +205,11 @@ void MovieModel::setActors(int id, const QList<QVariant> &actors){
mInsertActorsForMovie->bindValue(":actorid", a);
mInsertActorsForMovie->exec();
}
+ foreach(MovieItem *m, mItems){
+ if(m->id() == id){
+ m->setActors();
+ }
+ }
}
void MovieModel::setCovers(int id, const QList<CoverItem> &covers){
@@ -208,6 +222,11 @@ void MovieModel::setCovers(int id, const QList<CoverItem> &covers){
mInsertCovers->bindValue(":md5", c.md5());
mInsertCovers->exec();
}
+ foreach(MovieItem *m, mItems){
+ if(m->id() == id){
+ m->setCovers();
+ }
+ }
}
void MovieModel::addMovie(const QList<QVariant> &data, const QList<QVariant> &actors, const QList<CoverItem> &covers){
diff --git a/moviemodel.h b/moviemodel.h
index cf2e1f2..d2cbe50 100644
--- a/moviemodel.h
+++ b/moviemodel.h
@@ -20,7 +20,7 @@ class MovieModel : public QAbstractItemModel {
Q_OBJECT
Q_ENUMS(CustomRoles)
public:
- enum CustomRoles { Md5Role = Qt::UserRole + 1, ActorsRole = Qt::UserRole +2 };
+ enum CustomRoles { Md5Role = Qt::UserRole + 1, ActorsRole = Qt::UserRole + 2, ActorsMap = Qt::UserRole + 3, CoverRole = Qt::UserRole + 4, IdRole = Qt::UserRole + 5 };
MovieModel(QObject *parent = 0);
~MovieModel();
QModelIndex index(int row, int column, const QModelIndex &parent) const;
diff --git a/shemov.pro b/shemov.pro
index 781d22f..f66ab82 100644
--- a/shemov.pro
+++ b/shemov.pro
@@ -23,7 +23,8 @@ covereditor.cpp \
archivefilewidget.cpp \
archiveviewwidget.cpp \
archivefileview.cpp \
-archiveproxy.cpp
+archiveproxy.cpp \
+editarchiveitemdialog.cpp
HEADERS = listitem.h \
listmodel.h \
movieitem.h \
@@ -45,7 +46,8 @@ covereditor.h \
archivefilewidget.h \
archiveviewwidget.h \
archivefileview.h \
-archiveproxy.h
+archiveproxy.h \
+editarchiveitemdialog.h
LIBS += -lmagic
LIBS += -lcryptopp
INCLUDEPATH += /usr/include/cryptopp