#include #include #include #include #include #include #include #include #include #include #include #include #include "configurationwidget.h" ConfigurationWidget::ConfigurationWidget(QWidget *parent, Qt::WindowFlags f) : QDialog(parent, f) { //database setup QGridLayout *dbLayout = new QGridLayout; mDbHost = new QLineEdit; dbLayout->addWidget(new QLabel(tr("Hostname")), 0, 0); dbLayout->addWidget(mDbHost, 0, 1); mDbUser = new QLineEdit; dbLayout->addWidget(new QLabel(tr("Username")), 1, 0); dbLayout->addWidget(mDbUser, 1, 1); mDbPass = new QLineEdit; mDbPass->setEchoMode(QLineEdit::Password); dbLayout->addWidget(new QLabel(tr("Password")), 2, 0); dbLayout->addWidget(mDbPass, 2, 1); mDbName = new QLineEdit; dbLayout->addWidget(new QLabel(tr("DB Name")), 3, 0); dbLayout->addWidget(mDbName, 3, 1); dbLayout->setAlignment(Qt::AlignTop); QWidget *dbWidget = new QWidget; dbWidget->setLayout(dbLayout); //exernal programs QGridLayout *extL = new QGridLayout; mFfProbe = new QLineEdit; extL->addWidget(new QLabel(tr("ffprobe")), 0, 0); extL->addWidget(mFfProbe, 0, 1); QPushButton *browseFfProbeBtn = new QPushButton(tr("Browse...")); connect(browseFfProbeBtn, SIGNAL(clicked()), this, SLOT(browseFfProbe())); extL->addWidget(browseFfProbeBtn, 0, 2); mFfMpeg = new QLineEdit; extL->addWidget(new QLabel(tr("ffmpeg")), 1, 0); extL->addWidget(mFfMpeg, 1, 1); QPushButton *browseFfMpegBtn = new QPushButton(tr("Browse...")); connect(browseFfMpegBtn, SIGNAL(clicked()), this, SLOT(browseFfMpeg())); extL->addWidget(browseFfMpegBtn, 1, 2); mMkvInfo = new QLineEdit; extL->addWidget(new QLabel(tr("mkvinfo")), 2, 0); extL->addWidget(mMkvInfo, 2, 1); QPushButton *browsemkvBtn = new QPushButton(tr("Browse...")); connect(browsemkvBtn, SIGNAL(clicked()), this, SLOT(browseMkvInfo())); extL->addWidget(browsemkvBtn, 2, 2); extL->setAlignment(Qt::AlignTop); QWidget *extWidget = new QWidget; extWidget->setLayout(extL); //copy directories QHBoxLayout *newDirL = new QHBoxLayout; newDirL->addWidget(new QLabel(tr("Directory"))); mDir = new QLineEdit; newDirL->addWidget(mDir); QPushButton *browseCopyDirBtn = new QPushButton(tr("Browse...")); connect(browseCopyDirBtn, SIGNAL(clicked()), this, SLOT(browseCopyDir())); newDirL->addWidget(browseCopyDirBtn); QPushButton *addDir = new QPushButton(tr("Add")); connect(addDir, SIGNAL(clicked()), this, SLOT(addCopyDir())); QPushButton *removeDir = new QPushButton(tr("Remove")); connect(removeDir, SIGNAL(clicked()), this, SLOT(removeCopyDir())); QHBoxLayout *addRemL = new QHBoxLayout; addRemL->addStretch(); addRemL->addWidget(addDir); addRemL->addWidget(removeDir); mCopyDirM = new QStandardItemModel; mCopyDirV = new QListView; mCopyDirV->setModel(mCopyDirM); connect(mCopyDirV->selectionModel(), SIGNAL(currentChanged(QModelIndex,QModelIndex)), this, SLOT(selectCopyDir(QModelIndex,QModelIndex))); QVBoxLayout *newDirTabL = new QVBoxLayout; newDirTabL->addLayout(newDirL); newDirTabL->addLayout(addRemL); newDirTabL->addWidget(mCopyDirV); QWidget *dirWidget = new QWidget; dirWidget->setLayout(newDirTabL); //buttons mAccept = new QPushButton(tr("Save")); connect(mAccept, SIGNAL(clicked()), this, SLOT(accept())); mCancel = new QPushButton(tr("Cancel")); connect(mCancel, SIGNAL(clicked()), this, SLOT(reject())); QHBoxLayout *bLayout = new QHBoxLayout; bLayout->addStretch(); bLayout->addWidget(mAccept); bLayout->addWidget(mCancel); bLayout->addStretch(); //dialog layout QVBoxLayout *mainLayout = new QVBoxLayout; QTabWidget *tab = new QTabWidget; tab->addTab(dbWidget, tr("Database")); tab->addTab(extWidget, tr("Programs")); tab->addTab(dirWidget, tr("Copy dirs")); mainLayout->addWidget(tab); mainLayout->addLayout(bLayout); readSettings(); setLayout(mainLayout); setMinimumWidth(400); } void ConfigurationWidget::accept(){ QSettings s; s.setValue("dbhost", mDbHost->text()); s.setValue("dbuser", mDbUser->text()); s.setValue("dbpass", mDbPass->text()); s.setValue("dbname", mDbName->text()); s.setValue("ext/ffprobe", mFfProbe->text()); s.setValue("ext/ffmpeg", mFfMpeg->text()); s.setValue("ext/mkvinfo", mMkvInfo->text()); QStringList copyDirs; for(int i = 0; i < mCopyDirM->rowCount(); ++i){ auto item = mCopyDirM->item(i); copyDirs << item->text(); } s.setValue("copydirs", copyDirs); QDialog::accept(); } void ConfigurationWidget::browseFfProbe(){ QString ffprobe = QFileDialog::getOpenFileName(this, tr("Select ffprobe"), QDir::homePath()); mFfProbe->setText(QDir::toNativeSeparators(ffprobe)); } void ConfigurationWidget::browseFfMpeg(){ QString ffmpeg = QFileDialog::getOpenFileName(this, tr("Select ffmpeg"), QDir::homePath()); mFfMpeg->setText(QDir::toNativeSeparators(ffmpeg)); } void ConfigurationWidget::browseMkvInfo(){ QString mkvinfo = QFileDialog::getOpenFileName(this, tr("Select mkvinfo"), QDir::homePath()); mMkvInfo->setText(QDir::toNativeSeparators(mkvinfo)); } void ConfigurationWidget::browseCopyDir(){ QString copyDir = QFileDialog::getExistingDirectory(this, tr("Select Directory"), QDir::homePath()); mDir->setText(QDir::toNativeSeparators(copyDir)); } void ConfigurationWidget::addCopyDir(){ QString dir = mDir->text(); QFileInfo dinfo(dir); if(dinfo.exists() && dinfo.isDir()){ auto search = mCopyDirM->findItems(dir); if(search.isEmpty()){ QStandardItem *newDir = new QStandardItem(QIcon(":/folder.png"), dir); mCopyDirM->insertRow(mCopyDirM->rowCount(), newDir); } } } void ConfigurationWidget::removeCopyDir(){ QString dir = mDir->text(); auto search = mCopyDirM->findItems(dir); if(!search.isEmpty()){ mCopyDirM->removeRow(search.first()->row()); } } void ConfigurationWidget::selectCopyDir(const QModelIndex &cur, const QModelIndex &prev){ Q_UNUSED(prev); mDir->setText(cur.data().toString()); } void ConfigurationWidget::readSettings(){ QSettings s; mDbHost->setText(s.value("dbhost").toString()); mDbUser->setText(s.value("dbuser").toString()); mDbPass->setText(s.value("dbpass").toString()); mDbName->setText(s.value("dbname").toString()); mFfProbe->setText(s.value("ext/ffprobe").toString()); mFfMpeg->setText(s.value("ext/ffmpeg").toString()); mMkvInfo->setText(s.value("ext/mkvinfo").toString()); QStringList copyDirs = s.value("copydirs").toStringList(); foreach(auto d, copyDirs){ mDir->setText(d); addCopyDir(); } }