#include "options_dialog.h" #include "configuration.h" #include #include #include #include #include #include #include #include #include #include #include #include #include "yacreader_spin_slider_widget.h" #include "yacreader_flow_config_widget.h" #ifndef NO_OPENGL #include "yacreader_gl_flow_config_widget.h" #endif OptionsDialog::OptionsDialog(QWidget * parent) :YACReaderOptionsDialog(parent) { QTabWidget * tabWidget = new QTabWidget(); QVBoxLayout * layout = new QVBoxLayout(this); QWidget * pageGeneral = new QWidget(); QWidget * pageFlow = new QWidget(); QWidget * pageImage = new QWidget(); QVBoxLayout * layoutGeneral = new QVBoxLayout(); QVBoxLayout * layoutFlow = new QVBoxLayout(); QVBoxLayout * layoutImageV = new QVBoxLayout(); QGridLayout * layoutImage = new QGridLayout(); QGroupBox *slideSizeBox = new QGroupBox(tr("\"Go to flow\" size")); //slideSizeLabel = new QLabel(,this); slideSize = new QSlider(this); slideSize->setMinimum(125); slideSize->setMaximum(350); slideSize->setPageStep(5); slideSize->setOrientation(Qt::Horizontal); QHBoxLayout * slideLayout = new QHBoxLayout(); slideLayout->addWidget(slideSize); slideSizeBox->setLayout(slideLayout); QGroupBox *pathBox = new QGroupBox(tr("My comics path")); QHBoxLayout * path = new QHBoxLayout(); path->addWidget(pathEdit = new QLineEdit()); path->addWidget(pathFindButton = new QPushButton(QIcon(":/images/find_folder.png"),"")); pathBox->setLayout(path); connect(pathFindButton,SIGNAL(clicked()),this,SLOT(findFolder())); //fitToWidthRatioLabel = new QLabel(tr("Page width stretch"),this); /*QGroupBox *fitBox = new QGroupBox(tr("Page width stretch")); fitToWidthRatioS = new QSlider(this); fitToWidthRatioS->setMinimum(50); fitToWidthRatioS->setMaximum(100); fitToWidthRatioS->setPageStep(5); fitToWidthRatioS->setOrientation(Qt::Horizontal); //connect(fitToWidthRatioS,SIGNAL(valueChanged(int)),this,SLOT(fitToWidthRatio(int))); QHBoxLayout * fitLayout = new QHBoxLayout; fitLayout->addWidget(fitToWidthRatioS); fitBox->setLayout(fitLayout);*/ QHBoxLayout * colorSelection = new QHBoxLayout; backgroundColor = new QLabel(); QPalette pal = backgroundColor->palette(); pal.setColor(backgroundColor->backgroundRole(), Qt::black); backgroundColor->setPalette(pal); backgroundColor->setAutoFillBackground(true); colorDialog = new QColorDialog(Qt::red,this); connect(colorDialog,SIGNAL(colorSelected(QColor)),this,SLOT(updateColor(QColor))); QGroupBox *colorBox = new QGroupBox(tr("Background color")); //backgroundColor->setMinimumWidth(100); colorSelection->addWidget(backgroundColor); colorSelection->addWidget(selectBackgroundColorButton = new QPushButton(tr("Choose"))); colorSelection->setStretchFactor(backgroundColor,1); colorSelection->setStretchFactor(selectBackgroundColorButton,0); //colorSelection->addStretch(); connect(selectBackgroundColorButton, SIGNAL(clicked()), colorDialog, SLOT(show())); colorBox->setLayout(colorSelection); brightnessS = new YACReaderSpinSliderWidget(this,true); brightnessS->setRange(0,100); //brightnessS->setText(tr("Brightness")); brightnessS->setTracking(false); connect(brightnessS,SIGNAL(valueChanged(int)),this,SLOT(brightnessChanged(int))); contrastS = new YACReaderSpinSliderWidget(this,true); contrastS->setRange(0,250); //contrastS->setText(tr("Contrast")); contrastS->setTracking(false); connect(contrastS,SIGNAL(valueChanged(int)),this,SLOT(contrastChanged(int))); gammaS = new YACReaderSpinSliderWidget(this,true); gammaS->setRange(0,250); //gammaS->setText(tr("Gamma")); gammaS->setTracking(false); connect(gammaS,SIGNAL(valueChanged(int)),this,SLOT(gammaChanged(int))); //connect(brightnessS,SIGNAL(valueChanged(int)),this,SIGNAL(changedOptions())); quickNavi = new QCheckBox(tr("Quick Navigation Mode")); disableShowOnMouseOver = new QCheckBox(tr("Disable mouse over activation")); QHBoxLayout * buttons = new QHBoxLayout(); buttons->addStretch(); buttons->addWidget(new QLabel(tr("Restart is needed"))); buttons->addWidget(accept); buttons->addWidget(cancel); layoutGeneral->addWidget(pathBox); layoutGeneral->addWidget(slideSizeBox); //layoutGeneral->addWidget(fitBox); layoutGeneral->addWidget(colorBox); layoutGeneral->addWidget(shortcutsBox); layoutGeneral->addStretch(); layoutFlow->addWidget(sw); #ifndef NO_OPENGL layoutFlow->addWidget(gl); layoutFlow->addWidget(useGL); #endif layoutFlow->addWidget(quickNavi); layoutFlow->addWidget(disableShowOnMouseOver); layoutFlow->addStretch(); layoutImage->addWidget(new QLabel(tr("Brightness")),0,0); layoutImage->addWidget(new QLabel(tr("Contrast")),1,0); layoutImage->addWidget(new QLabel(tr("Gamma")),2,0); layoutImage->addWidget(brightnessS,0,1); layoutImage->addWidget(contrastS,1,1); layoutImage->addWidget(gammaS,2,1); QPushButton * pushButton = new QPushButton(tr("Reset")); connect(pushButton,SIGNAL(pressed()),this,SLOT(resetImageConfig())); layoutImage->addWidget(pushButton,3,0); layoutImage->setColumnStretch(1,1); QGroupBox *imageBox = new QGroupBox(tr("Image options")); imageBox->setLayout(layoutImage); layoutImageV->addWidget(imageBox); layoutImageV->addStretch(); pageGeneral->setLayout(layoutGeneral); pageFlow->setLayout(layoutFlow); pageImage->setLayout(layoutImageV); tabWidget->addTab(pageGeneral,tr("General")); tabWidget->addTab(pageFlow,tr("Page Flow")); tabWidget->addTab(pageImage,tr("Image adjustment")); layout->addWidget(tabWidget); layout->addLayout(buttons); setLayout(layout); //disable vSyncCheck #ifndef NO_OPENGL gl->vSyncCheck->hide(); #endif //restoreOptions(); //load options //resize(400,0); setModal (true); setWindowTitle(tr("Options")); this->layout()->setSizeConstraint(QLayout::SetFixedSize); } void OptionsDialog::findFolder() { QString s = QFileDialog::getExistingDirectory(0,tr("Comics directory"),"."); if(!s.isEmpty()) { pathEdit->setText(s); } } void OptionsDialog::saveOptions() { settings->setValue(GO_TO_FLOW_SIZE,QSize(static_cast(slideSize->sliderPosition()/SLIDE_ASPECT_RATIO),slideSize->sliderPosition())); if(sw->radio1->isChecked()) settings->setValue(FLOW_TYPE_SW,0); if(sw->radio2->isChecked()) settings->setValue(FLOW_TYPE_SW,1); if(sw->radio3->isChecked()) settings->setValue(FLOW_TYPE_SW,2); settings->setValue(PATH,pathEdit->text()); settings->setValue(BACKGROUND_COLOR,colorDialog->currentColor()); //settings->setValue(FIT_TO_WIDTH_RATIO,fitToWidthRatioS->sliderPosition()/100.0); settings->setValue(QUICK_NAVI_MODE,quickNavi->isChecked()); settings->setValue(DISABLE_MOUSE_OVER_GOTO_FLOW,disableShowOnMouseOver->isChecked()); YACReaderOptionsDialog::saveOptions(); } void OptionsDialog::restoreOptions(QSettings * settings) { YACReaderOptionsDialog::restoreOptions(settings); slideSize->setSliderPosition(settings->value(GO_TO_FLOW_SIZE).toSize().height()); switch(settings->value(FLOW_TYPE_SW).toInt()) { case 0: sw->radio1->setChecked(true); break; case 1: sw->radio2->setChecked(true); break; case 2: sw->radio3->setChecked(true); break; default: sw->radio1->setChecked(true); break; } pathEdit->setText(settings->value(PATH).toString()); updateColor(settings->value(BACKGROUND_COLOR).value()); //fitToWidthRatioS->setSliderPosition(settings->value(FIT_TO_WIDTH_RATIO).toFloat()*100); quickNavi->setChecked(settings->value(QUICK_NAVI_MODE).toBool()); disableShowOnMouseOver->setChecked(settings->value(DISABLE_MOUSE_OVER_GOTO_FLOW).toBool()); brightnessS->setValue(settings->value(BRIGHTNESS,0).toInt()); contrastS->setValue(settings->value(CONTRAST,100).toInt()); gammaS->setValue(settings->value(GAMMA,100).toInt()); } void OptionsDialog::updateColor(const QColor & color) { QPalette pal = backgroundColor->palette(); pal.setColor(backgroundColor->backgroundRole(), color); backgroundColor->setPalette(pal); backgroundColor->setAutoFillBackground(true); colorDialog->setCurrentColor(color); settings->setValue(BACKGROUND_COLOR,color); emit(changedOptions()); } /*void OptionsDialog::fitToWidthRatio(int value) { Configuration::getConfiguration().setFitToWidthRatio(value/100.0); emit(fitToWidthRatioChanged(value/100.0)); }*/ void OptionsDialog::brightnessChanged(int value) { QSettings settings(YACReader::getSettingsPath()+"/YACReader.ini",QSettings::IniFormat); settings.setValue(BRIGHTNESS,value); emit changedFilters(brightnessS->getValue(), contrastS->getValue(), gammaS->getValue()); //emit(changedImageOptions()); } void OptionsDialog::contrastChanged(int value) { QSettings settings(YACReader::getSettingsPath()+"/YACReader.ini",QSettings::IniFormat); settings.setValue(CONTRAST,value); emit changedFilters(brightnessS->getValue(), contrastS->getValue(), gammaS->getValue()); ///emit(changedImageOptions()); } void OptionsDialog::gammaChanged(int value) { QSettings settings(YACReader::getSettingsPath()+"/YACReader.ini",QSettings::IniFormat); settings.setValue(GAMMA,value); emit changedFilters(brightnessS->getValue(), contrastS->getValue(), gammaS->getValue()); //emit(changedImageOptions()); } void OptionsDialog::resetImageConfig() { brightnessS->setValue(0); contrastS->setValue(100); gammaS->setValue(100); QSettings settings(YACReader::getSettingsPath()+"/YACReader.ini",QSettings::IniFormat); settings.setValue(BRIGHTNESS,0); settings.setValue(CONTRAST,100); settings.setValue(GAMMA,100); emit changedFilters(brightnessS->getValue(), contrastS->getValue(), gammaS->getValue()); //emit(changedImageOptions()); } void OptionsDialog::show() { //TODO solucionar el tema de las settings, esto sólo debería aparecer en una única línea de código QSettings *s = new QSettings(YACReader::getSettingsPath()+"/YACReader.ini",QSettings::IniFormat); //fitToWidthRatioS->disconnect(); //fitToWidthRatioS->setSliderPosition(settings->value(FIT_TO_WIDTH_RATIO).toFloat()*100); //connect(fitToWidthRatioS,SIGNAL(valueChanged(int)),this,SLOT(fitToWidthRatio(int))); QDialog::show(); delete s; } void OptionsDialog::setFilters(int brightness, int contrast, int gamma) { if(brightness != -1) brightnessS->setValue(brightness); else brightnessS->setValue(0); if(contrast != -1) contrastS->setValue(contrast); else contrastS->setValue(100); if(gamma != -1) gammaS->setValue(gamma); else gammaS->setValue(100); }