#include #include #include #include #include #include #include #include #include #include #include #include "configurationwidget.h" #include "itemselectionwidget.h" ConfigurationWidget::ConfigurationWidget(QWidget *parent) : QDialog(parent), mColors(2) { //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, &QPushButton::clicked, this, [=] { browsePathforLE(mFfProbe); }); 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, &QPushButton::clicked, this, [=] { browsePathforLE(mFfMpeg); }); 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, &QPushButton::clicked, this, [=] { browsePathforLE(mMkvInfo); }); extL->addWidget(browsemkvBtn, 2, 2); extL->setAlignment(Qt::AlignTop); QWidget *extWidget = new QWidget; extWidget->setLayout(extL); //copy directories mCopyDirW = new ItemSelectionWidget(ItemSelectionWidget::Directories, tr("Directory")); //favorite directories mFavDirW = new ItemSelectionWidget(ItemSelectionWidget::Directories, tr("Directory")); //mime type filters mMimeTypeW = new ItemSelectionWidget(ItemSelectionWidget::Item, tr("Mime Type Regex")); //colors QLabel *baseColorT = new QLabel(tr("Base color")); mBaseColorL = new QLabel; mBaseColorL->setFrameStyle(QFrame::Sunken | QFrame::Panel); mBaseColorL->setScaledContents(true); QPushButton *baseColorB = new QPushButton(tr("Choose...")); baseColorB->setDisabled(true); connect(baseColorB, &QPushButton::clicked, this, [=] { chooseColor(mBaseColorL, 0); }); QLabel *altColorT = new QLabel(tr("Alternate color")); mAltColorL = new QLabel; mAltColorL->setFrameStyle(QFrame::Sunken | QFrame::Panel); mAltColorL->setScaledContents(true); QPushButton *altColorB = new QPushButton(tr("Choose...")); altColorB->setDisabled(true); connect(altColorB, &QPushButton::clicked, this, [=] { chooseColor(mAltColorL, 1); }); mUseAltColors = new QCheckBox(tr("Use alternating colors")); connect(mUseAltColors, &QCheckBox::stateChanged, this, [=]{ baseColorB->setEnabled(mUseAltColors->isChecked()); altColorB->setEnabled(mUseAltColors->isChecked()); }); QGridLayout *colorGrid = new QGridLayout; colorGrid->setAlignment(Qt::AlignTop); colorGrid->addWidget(baseColorT, 0, 0); colorGrid->addWidget(mBaseColorL, 0, 1); colorGrid->addWidget(baseColorB, 0, 2); colorGrid->addWidget(altColorT, 1, 0); colorGrid->addWidget(mAltColorL, 1, 1); colorGrid->addWidget(altColorB, 1, 2); colorGrid->addWidget(mUseAltColors, 2, 0, 1, 3, Qt::AlignHCenter); QWidget *colorW = new QWidget; colorW->setLayout(colorGrid); //buttons QPushButton *acceptB = new QPushButton(tr("Save")); connect(acceptB, &QPushButton::clicked, this, &ConfigurationWidget::accept); QPushButton *cancelB = new QPushButton(tr("Cancel")); connect(cancelB, &QPushButton::clicked, this, &ConfigurationWidget::reject); QHBoxLayout *bLayout = new QHBoxLayout; bLayout->addStretch(); bLayout->addWidget(acceptB); bLayout->addWidget(cancelB); bLayout->addStretch(); //dialog layout QVBoxLayout *mainLayout = new QVBoxLayout; QTabWidget *tab = new QTabWidget; tab->addTab(dbWidget, tr("Database")); tab->addTab(extWidget, tr("Programs")); tab->addTab(mCopyDirW, tr("Copy dirs")); tab->addTab(mFavDirW, tr("Fav. dirs")); tab->addTab(mMimeTypeW, tr("MIME filter")); tab->addTab(colorW, tr("Colors")); 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 = mCopyDirW->items(); std::sort(copyDirs.begin(), copyDirs.end()); s.setValue("copydirs", copyDirs); QStringList favDirs = mFavDirW->items(); s.setValue("favdirs", favDirs); QStringList mimeFilters = mMimeTypeW->items(); s.setValue("mimefilters", mimeFilters); s.setValue("alternatecolors", mUseAltColors->isChecked()); s.setValue("basecolor", mColors.at(0)); s.setValue("altcolor", mColors.at(1)); QDialog::accept(); } void ConfigurationWidget::browsePathforLE(QLineEdit *edit){ QString res = QFileDialog::getOpenFileName(this, tr("Select ffprobe"), QDir::homePath()); edit->setText(res); } 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(); std::sort(copyDirs.begin(), copyDirs.end()); mCopyDirW->setItems(copyDirs); QStringList favDirs = s.value("favdirs").toStringList(); mFavDirW->setItems(favDirs); QStringList mimeFilters = s.value("mimefilters").toStringList(); mMimeTypeW->setItems(mimeFilters); mUseAltColors->setChecked(s.value("alternatecolors").toBool()); QVariant c1 = s.value("basecolor"); mColors[0] = c1.value(); QPixmap pm1(mBaseColorL->sizeHint()); pm1.fill(mColors.at(0)); mBaseColorL->setPixmap(pm1); QVariant c2 = s.value("altcolor"); mColors[1] = c2.value(); QPixmap pm2(mAltColorL->sizeHint()); pm2.fill(mColors.at(1)); mAltColorL->setPixmap(pm2); } void ConfigurationWidget::chooseColor(QLabel *l, int colorIndex){ QColor c = QColorDialog::getColor(mColors.at(colorIndex), this); if(c.isValid()){ mColors[colorIndex] = c; QPixmap pm(l->sizeHint()); pm.fill(c); l->setPixmap(pm); } }