New quick navitation mode option for go to flow.

This commit is contained in:
Luis Ángel San Martín
2016-10-30 09:52:03 +01:00
20 changed files with 433 additions and 374 deletions

View File

@ -49,6 +49,8 @@ void Configuration::load(QSettings * settings)
settings->setValue(ALWAYS_ON_TOP,false);
if(!settings->contains(SHOW_TOOLBARS))
settings->setValue(SHOW_TOOLBARS, true);
if(!settings->contains(QUICK_NAVI_MODE))
settings->setValue(QUICK_NAVI_MODE, true);
//old fit stuff
/*if(!settings->contains(FIT))
settings->setValue(FIT,false);

View File

@ -108,6 +108,7 @@ using namespace YACReader;
void setLastVersionCheck(const QDate & date){ settings->setValue(LAST_VERSION_CHECK,date);}
int getNumDaysBetweenVersionChecks() {return settings->value(NUM_DAYS_BETWEEN_VERSION_CHECKS,1).toInt();}
void setNumDaysBetweenVersionChecks(int days) {return settings->setValue(NUM_DAYS_BETWEEN_VERSION_CHECKS,days);}
bool getQuickNaviMode(){return settings->value(QUICK_NAVI_MODE).toBool();}
};
#endif

View File

@ -214,16 +214,14 @@ void GoToFlow::setFlowType(FlowType flowType)
flow->setFlowType(flowType);
}
void GoToFlow::updateSize() //TODO : fix. it doesn't work.
{
imageSize = Configuration::getConfiguration().getGotoSlideSize();
flow->setSlideSize(imageSize);
resize(static_cast<int>(5*imageSize.width()),static_cast<int>(imageSize.height()*1.7));
}
void GoToFlow::updateConfig(QSettings * settings)
{
Q_UNUSED(settings)
GoToFlowWidget::updateConfig(settings);
imageSize = Configuration::getConfiguration().getGotoSlideSize();
flow->setFlowType(Configuration::getConfiguration().getFlowType());
resize(5*imageSize.width(), toolBar->height() + imageSize.height()*1.7);
updateSize();
}
void GoToFlow::setFlowRightToLeft(bool b)

View File

@ -61,7 +61,6 @@ private slots:
void setNumSlides(unsigned int slides);
void setImageReady(int index,const QByteArray & image);
void setFlowType(FlowType flowType);
void updateSize();
void updateConfig(QSettings * settings);
void setFlowRightToLeft(bool b);

View File

@ -77,15 +77,11 @@ void GoToFlowGL::setImageReady(int index,const QByteArray & imageData)
flow->imagesReady[index] = true;
}
void GoToFlowGL::updateSize()
{
}
void GoToFlowGL::updateConfig(QSettings * settings)
{
Performance performance = medium;
GoToFlowWidget::updateConfig(settings);
Performance performance = medium;
switch (settings->value(PERFORMANCE).toInt())
{
case 0:
@ -102,30 +98,30 @@ void GoToFlowGL::updateConfig(QSettings * settings)
break;
}
imageSize = Configuration::getConfiguration().getGotoSlideSize();
resize(5*imageSize.width(), toolBar->height() + imageSize.height()*1.7);
updateSize();
flow->setPerformance(performance);
switch (settings->value(FLOW_TYPE_GL).toInt())
{
case 0:
case FlowType::CoverFlowLike:
flow->setPreset(presetYACReaderFlowClassicConfig);
return;
case 1:
break;
case FlowType::Strip:
flow->setPreset(presetYACReaderFlowStripeConfig);
return;
case 2:
break;
case FlowType::StripOverlapped:
flow->setPreset(presetYACReaderFlowOverlappedStripeConfig);
return;
case 3:
break;
case FlowType::Modern:
flow->setPreset(defaultYACReaderFlowConfig);
return;
case 4:
break;
case FlowType::Roulette:
flow->setPreset(pressetYACReaderFlowDownConfig);
return;
}
//custom config
break;
case FlowType::Custom:
flow->setCF_RX(settings->value(X_ROTATION).toInt());
flow->setCF_Y(settings->value(Y_POSITION).toInt());
flow->setX_Distance(settings->value(COVER_DISTANCE).toInt());
@ -137,10 +133,10 @@ void GoToFlowGL::updateConfig(QSettings * settings)
flow->setFadeOutDist(settings->value(FADE_OUT_DIST).toInt());
flow->setLightStrenght(settings->value(LIGHT_STRENGTH).toInt());
flow->setMaxAngle(settings->value(MAX_ANGLE).toInt());
/* flow->setVisibility(settings->value("visibilityDistance").toInt());
flow->setLightStrenght(settings->value("lightStrength").toInt())*/;
break;
}
if (Configuration::getConfiguration().getQuickNaviMode())
flow->setFadeOutDist(20);
}
void GoToFlowGL::keyPressEvent(QKeyEvent* event)

View File

@ -23,7 +23,6 @@ public:
void setFlowType(FlowType flowType);
void setNumSlides(unsigned int slides);
void setImageReady(int index,const QByteArray & image);
void updateSize();
void updateConfig(QSettings * settings);
void setFlowRightToLeft(bool b);

View File

@ -2,18 +2,42 @@
#include <QtWidgets>
#include "configuration.h"
GoToFlowToolBar::GoToFlowToolBar(QWidget * parent)
:QWidget(parent)
:QStackedWidget(parent)
{
//elementos interactivos
QVBoxLayout * mainLayout = new QVBoxLayout;
bar = new QWidget(this);
QHBoxLayout * bottom = new QHBoxLayout(bar);
bottom->addStretch();
bottom->addWidget(new QLabel("<b>" + tr("Page : ") + "</b>",bar));
bottom->addWidget(edit = new QLineEdit(bar));
v = new QIntValidator(bar);
QWidget * normal = new QWidget(this); // container widget
QWidget * quickNavi = new QWidget(this); // container widget
addWidget(normal);
addWidget(quickNavi);
QHBoxLayout * normalLayout = new QHBoxLayout(normal);
QHBoxLayout * naviLayout = new QHBoxLayout(quickNavi);
normal->setLayout(normalLayout);
quickNavi->setLayout(naviLayout);
slider = new QSlider(Qt::Horizontal,this);
slider->setStyleSheet(
"QSlider::groove:horizontal {"
" border: 1px solid white;"
" border-radius: 6px;"
" background: rgba(255, 255, 255, 50);"
" margin: 2px 0;"
"}"
"QSlider::handle:horizontal {"
" background: rgba(0, 0, 0, 200);"
" border: 1px solid white;"
" width: 24px;"
" border-radius: 6px;"
"}"
);
connect(slider, &QSlider::valueChanged, this, [&](int v) { emit(setCenter(v)); });
pageHint = new QLabel("<b>" + tr("Page : ") + "</b>",this);
v = new QIntValidator(this);
v->setBottom(1);
edit = new QLineEdit(this);
edit->setValidator(v);
edit->setAlignment(Qt::AlignRight|Qt::AlignVCenter);
edit->setStyleSheet("QLineEdit {border: 1px solid #77000000; background: #55000000; color: white; padding: 3px 5px 5px 5px; margin: 13px 5px 12px 5px; font-weight:bold}");
@ -29,41 +53,51 @@ GoToFlowToolBar::GoToFlowToolBar(QWidget * parent)
QString centerButtonCSS = "QPushButton {background-image: url(:/images/imgCenterSlide.png); width: 100%; height:100%; background-repeat: none; border: none;} "
"QPushButton:focus { border: none; outline: none;}"
"QPushButton:pressed {background-image: url(:/images/imgCenterSlidePressed.png); width: 100%; height:100%; background-repeat: none; border: none;} ";
centerButton = new QPushButton(bar);
centerButton = new QPushButton(this);
//centerButton->setIcon(QIcon(":/images/center.png"));
centerButton->setStyleSheet(centerButtonCSS);
centerButton->setFixedSize(26,50);
centerButton->setAttribute(Qt::WA_LayoutUsesWidgetRect,true);
connect(centerButton,SIGNAL(clicked()),this,SLOT(centerSlide()));
bottom->addWidget(centerButton);
QString goToButtonCSS = "QPushButton {background-image: url(:/images/imgGoToSlide.png); width: 100%; height:100%; background-repeat: none; border: none;} "
"QPushButton:focus { border: none; outline: none;}"
"QPushButton:pressed {background-image: url(:/images/imgGoToSlidePressed.png); width: 100%; height:100%; background-repeat: none; border: none;} ";
goToButton = new QPushButton(bar);
goToButton = new QPushButton(this);
//goToButton->setIcon(QIcon(":/images/goto.png"));
goToButton->setStyleSheet(goToButtonCSS);
goToButton->setFixedSize(32,50);
goToButton->setAttribute(Qt::WA_LayoutUsesWidgetRect,true);
connect(goToButton,SIGNAL(clicked()),this,SLOT(goTo()));
bottom->addWidget(goToButton);
bottom->addStretch();
bottom->setMargin(0);
bottom->setSpacing(0);
normalLayout->setMargin(0);
normalLayout->setSpacing(0);
normalLayout->addStretch();
normalLayout->addWidget(pageHint);
normalLayout->addWidget(edit);
normalLayout->addWidget(centerButton);
normalLayout->addWidget(goToButton);
normalLayout->addStretch();
bar->setLayout(bottom);
naviLayout->setContentsMargins(5, 0, 0, 0);
naviLayout->setSpacing(2);
naviLayout->addWidget(slider);
naviLayout->addWidget(goToButton);
mainLayout->setMargin(0);
mainLayout->setSpacing(0);
mainLayout->addWidget(bar);
setLayout(mainLayout);
switchLayout();
setFixedHeight(50);
}
void GoToFlowToolBar::switchLayout()
{
if (Configuration::getConfiguration().getQuickNaviMode())
setCurrentIndex(1);
else
setCurrentIndex(0);
}
void GoToFlowToolBar::paintEvent(QPaintEvent *)
{
QPainter painter(this);
@ -78,11 +112,13 @@ void GoToFlowToolBar::paintEvent(QPaintEvent *)
void GoToFlowToolBar::setPage(int pageNumber)
{
edit->setText(QString::number(pageNumber+1));
slider->setValue(pageNumber);
}
void GoToFlowToolBar::setTop(int numPages)
{
v->setTop(numPages);
slider->setMaximum(numPages-1); // min is 0
}
void GoToFlowToolBar::goTo()

View File

@ -2,24 +2,30 @@
#define GOTO_FLOW_TOOLBAR_H
#include <QWidget>
#include <QStackedWidget.h>
class QLineEdit;
class QIntValidator;
class QPushButton;
class QSlider;
class QLabel;
class GoToFlowToolBar : public QWidget
class GoToFlowToolBar : public QStackedWidget
{
Q_OBJECT
private:
QLineEdit * edit;
QSlider * slider;
QIntValidator * v;
QPushButton * centerButton;
QPushButton * goToButton;
QLabel * pageHint;
QWidget * bar;
void paintEvent(QPaintEvent *);
public:
GoToFlowToolBar(QWidget * parent = 0);
void switchLayout();
public slots:
void setPage(int pageNumber);
void setTop(int numPages);

View File

@ -6,20 +6,17 @@
#include <QCoreApplication>
#include "goto_flow_toolbar.h"
#include "configuration.h"
GoToFlowWidget::GoToFlowWidget(QWidget * parent)
:QWidget(parent)
{
mainLayout = new QVBoxLayout;
mainLayout->setMargin(0);
mainLayout->setSpacing(0);
toolBar = new GoToFlowToolBar(this);
mainLayout->setMargin(0);
mainLayout->setSpacing(0);
setLayout(mainLayout);
//toolBar->installEventFilter(this);
@ -54,6 +51,21 @@ void GoToFlowWidget::keyPressEvent(QKeyEvent* event)
event->accept();
}
void GoToFlowWidget::updateConfig(QSettings * settings)
{
Q_UNUSED(settings)
toolBar->switchLayout();
}
void GoToFlowWidget::updateSize()
{
// called by parent in resizeEvent
// no need to update width when QuickNaviMode disabled
// height is set in updateConfig
if (Configuration::getConfiguration().getQuickNaviMode() && parentWidget() != nullptr)
resize(parentWidget()->width(),height());
}
/*bool GoToFlowWidget::eventFilter(QObject * target, QEvent * event)
{
if(event->type() == QEvent::KeyPress)

View File

@ -27,8 +27,8 @@ public slots:
virtual void setFlowType(FlowType flowType) = 0;
virtual void setNumSlides(unsigned int slides) = 0;
virtual void setImageReady(int index,const QByteArray & image) = 0;
virtual void updateSize() = 0;
virtual void updateConfig(QSettings * settings) = 0;
virtual void updateSize();
virtual void updateConfig(QSettings * settings);
virtual void setFlowRightToLeft(bool b) = 0;
protected:

View File

@ -938,7 +938,7 @@ void MainWindowViewer::openFolderFromPath(QString pathDir, QString atFileName)
if(i < list.count())
index = i;
viewer->open(pathDir,i);
viewer->open(pathDir,index);
}
void MainWindowViewer::saveImage()

View File

@ -105,6 +105,8 @@ OptionsDialog::OptionsDialog(QWidget * parent)
connect(gammaS,SIGNAL(valueChanged(int)),this,SLOT(gammaChanged(int)));
//connect(brightnessS,SIGNAL(valueChanged(int)),this,SIGNAL(changedOptions()));
quickNavi = new QCheckBox(tr("Quick Navigation Mode"));
QHBoxLayout * buttons = new QHBoxLayout();
buttons->addStretch();
buttons->addWidget(new QLabel(tr("Restart is needed")));
@ -122,6 +124,7 @@ OptionsDialog::OptionsDialog(QWidget * parent)
layoutFlow->addWidget(gl);
layoutFlow->addWidget(useGL);
#endif
layoutFlow->addWidget(quickNavi);
layoutFlow->addStretch();
layoutImage->addWidget(new QLabel(tr("Brightness")),0,0);
layoutImage->addWidget(new QLabel(tr("Contrast")),1,0);
@ -191,6 +194,7 @@ void OptionsDialog::saveOptions()
settings->setValue(BACKGROUND_COLOR,colorDialog->currentColor());
//settings->setValue(FIT_TO_WIDTH_RATIO,fitToWidthRatioS->sliderPosition()/100.0);
settings->setValue(QUICK_NAVI_MODE,quickNavi->isChecked());
YACReaderOptionsDialog::saveOptions();
}
@ -221,6 +225,8 @@ void OptionsDialog::restoreOptions(QSettings * settings)
updateColor(settings->value(BACKGROUND_COLOR).value<QColor>());
//fitToWidthRatioS->setSliderPosition(settings->value(FIT_TO_WIDTH_RATIO).toFloat()*100);
quickNavi->setChecked(settings->value(QUICK_NAVI_MODE).toBool());
brightnessS->setValue(settings->value(BRIGHTNESS,0).toInt());
contrastS->setValue(settings->value(CONTRAST,100).toInt());
gammaS->setValue(settings->value(GAMMA,100).toInt());

View File

@ -23,6 +23,7 @@ Q_OBJECT
//QLabel * pathLabel;
QLineEdit * pathEdit;
QPushButton * pathFindButton;
QCheckBox * quickNavi;
QLabel * magGlassSizeLabel;

View File

@ -21,6 +21,7 @@ class Render;
class ImageFilter {
public:
ImageFilter(){};
virtual ~ImageFilter() {};
virtual QImage setFilter(const QImage & image) = 0;
inline int getLevel() {return level;};
inline void setLevel(int l) {level = l;};

View File

@ -28,7 +28,6 @@ currentPage(0),
magnifyingGlassShowed(false),
fullscreen(false),
information(false),
adjustToWidthRatio(1),
doublePage(false),
doubleMangaPage(false),
wheelStop(false),
@ -751,7 +750,8 @@ void Viewer::wheelEvent(QWheelEvent * event)
void Viewer::resizeEvent(QResizeEvent * event)
{
updateContentSize();
goToFlow->move(QPoint((width()-goToFlow->width())/2,height()-goToFlow->height()));
goToFlow->updateSize();
goToFlow->move((width()-goToFlow->width())/2,height()-goToFlow->height());
informationLabel->updatePosition();
QScrollArea::resizeEvent(event);
}
@ -1030,7 +1030,6 @@ void Viewer::updateOptions()
goToFlow->setFlowType(Configuration::getConfiguration().getFlowType());
updateBackgroundColor(Configuration::getConfiguration().getBackgroundColor());
updateContentSize();
//goToFlow->updateSize();
}
void Viewer::updateBackgroundColor(const QColor & color)

View File

@ -121,7 +121,6 @@ virtual void mouseReleaseEvent ( QMouseEvent * event );
QPropertyAnimation * showGoToFlowAnimation;
GoToDialog * goToDialog;
//!Image properties
float adjustToWidthRatio;
//! Comic
//Comic * comic;
int index;

View File

@ -17,6 +17,7 @@ public:
QVariant data(int column) const;
virtual qulonglong getId() const;
QList<QVariant> itemData;
virtual ~ListItem() {}
};
//------------------------------------------------------

View File

@ -1460,7 +1460,8 @@ QImage ImageLoaderGL::loadImage(const QString& fileName)
case high:
image = image.scaledToWidth(320,Qt::SmoothTransformation);
break;
case ultraHigh:
break; //no scaling in ultraHigh
}
if(!result)

View File

@ -1406,7 +1406,8 @@ QImage ImageLoaderGL::loadImage(const QString& fileName)
case high:
image = image.scaledToWidth(320,Qt::SmoothTransformation);
break;
case ultraHigh:
break; //no scaling in ultraHigh
}
if(!result)

View File

@ -27,6 +27,7 @@
#define CONTRAST "CONTRAST"
#define GAMMA "GAMMA"
#define SHOW_INFO "SHOW_INFO"
#define QUICK_NAVI_MODE "QUICK_NAVI_MODE"
#define FLOW_TYPE_GL "FLOW_TYPE_GL"
#define Y_POSITION "Y_POSITION"