From e5fe87142f2a513385c7a52e6171ac1ac00f98c6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luis=20=C3=81ngel=20San=20Mart=C3=ADn?= Date: Mon, 10 Nov 2014 17:59:57 +0100 Subject: [PATCH] brough back to MacOSX the fit to width slider //ugly solution --- YACReader/main_window_viewer.cpp | 33 +++++- YACReader/main_window_viewer.h | 14 ++- YACReader/width_slider.cpp | 128 ++++++++++++--------- YACReader/width_slider.h | 23 +++- custom_widgets/yacreader_macosx_toolbar.h | 4 + custom_widgets/yacreader_macosx_toolbar.mm | 14 +++ 6 files changed, 150 insertions(+), 66 deletions(-) diff --git a/YACReader/main_window_viewer.cpp b/YACReader/main_window_viewer.cpp index 73f5638b..616721de 100644 --- a/YACReader/main_window_viewer.cpp +++ b/YACReader/main_window_viewer.cpp @@ -488,13 +488,23 @@ void MainWindowViewer::createToolBars() //comicToolBar->addAction(adjustWidth); + #ifdef Q_OS_MAC + sliderAction = new YACReaderSlider(this); + sliderAction->hide(); + comicToolBar->addAction(adjustWidthAction); + QAction * action = comicToolBar->addFitToWidthSlider(adjustWidthAction); + + connect(action,SIGNAL(triggered()),this,SLOT(toggleFitToWidthSlider())); + #else QMenu * menu = new QMenu(); - sliderAction = new YACReaderSliderAction(this); + + sliderAction = new YACReaderSliderAction(this); + menu->setAutoFillBackground(false); menu->setStyleSheet(" QMenu {background:transparent; border: 0px;padding: 0px; }" ); @@ -503,16 +513,15 @@ void MainWindowViewer::createToolBars() tb2->addAction(adjustWidthAction); tb2->setMenu(menu); - connect(sliderAction,SIGNAL(fitToWidthRatioChanged(float)),viewer,SLOT(updateFitToWidthRatio(float))); - connect(optionsDialog,SIGNAL(fitToWidthRatioChanged(float)),sliderAction,SLOT(updateFitToWidthRatio(float))); - - //tb2->addAction(); tb2->setPopupMode(QToolButton::MenuButtonPopup); tb2->setDefaultAction(adjustWidthAction); comicToolBar->addWidget(tb2); #endif + connect(sliderAction,SIGNAL(fitToWidthRatioChanged(float)),viewer,SLOT(updateFitToWidthRatio(float))); + connect(optionsDialog,SIGNAL(fitToWidthRatioChanged(float)),sliderAction,SLOT(updateFitToWidthRatio(float))); + comicToolBar->addAction(adjustHeightAction); comicToolBar->addAction(adjustToFullSizeAction); comicToolBar->addAction(leftRotationAction); @@ -1129,6 +1138,20 @@ void MainWindowViewer::setUpShortcutsManagement() ShortcutsManager::getShortcutsManager().registerActions(allActions); +} +#include "QsLog.h" +void MainWindowViewer::toggleFitToWidthSlider() +{ + if(sliderAction->isVisible()) + { + sliderAction->hide(); + } + else + { + sliderAction->move(250,0); + sliderAction->show(); + } + } void MainWindowViewer::changeFit() diff --git a/YACReader/main_window_viewer.h b/YACReader/main_window_viewer.h index f8b94b05..a2923c3b 100644 --- a/YACReader/main_window_viewer.h +++ b/YACReader/main_window_viewer.h @@ -22,6 +22,7 @@ class HelpAboutDialog; class HttpVersionChecker; class ShortcutsDialog; class YACReaderSliderAction; +class YACReaderSlider; class EditShortcutsDialog; class MainWindowViewer : public QMainWindow @@ -58,6 +59,10 @@ class EditShortcutsDialog; void checkNewVersion(); void processReset(); void setUpShortcutsManagement(); + +#ifdef Q_OS_MAC + void toggleFitToWidthSlider(); +#endif /*void viewComic(); void prev(); void next(); @@ -73,7 +78,7 @@ class EditShortcutsDialog; QString currentDirectory; QString currentDirectoryImgDest; //!Widgets - Viewer * viewer; + Viewer * viewer; //GoToDialog * goToDialog; OptionsDialog * optionsDialog; HelpAboutDialog * had; @@ -116,8 +121,11 @@ class EditShortcutsDialog; QAction *showFlowAction; QAction *showEditShortcutsAction; - - YACReaderSliderAction * sliderAction; +#ifdef Q_OS_MAC + YACReaderSlider * sliderAction; +#else + YACReaderSliderAction * sliderAction; +#endif HttpVersionChecker * versionChecker; QString previousComicPath; diff --git a/YACReader/width_slider.cpp b/YACReader/width_slider.cpp index 0ffbf101..845823c6 100644 --- a/YACReader/width_slider.cpp +++ b/YACReader/width_slider.cpp @@ -9,70 +9,86 @@ YACReaderSliderAction::YACReaderSliderAction (QWidget * parent) :QWidgetAction (parent) { - QWidget* pWidget = new QWidget (NULL); - QHBoxLayout* pLayout = new QHBoxLayout(); + widget = new YACReaderSlider(); + setDefaultWidget(widget); - pLayout->addStretch(); - - percentageLabel = new QLabel ("100%"); - percentageLabel->setStyleSheet("QLabel { color : white; }"); - percentageLabel->setAlignment(Qt::AlignHCenter|Qt::AlignVCenter); - pLayout->addWidget (percentageLabel); - slider = new QSlider(NULL); - slider->setOrientation(Qt::Horizontal); - pLayout->addWidget (slider); - - QString sliderCSS = - - "QSlider::sub-page:horizontal {background-image: url(:/images/sliderSubPage.png); border: 0px; margin-left: 18px;}" - "QSlider::add-page:horizontal {background-image: url(:/images/sliderAddPage.png); border: 0px; margin-right: 25px;}" - "QSlider::handle:horizontal {image: url(:/images/sliderHandle.png); width: 31px;height:45px; }" - "QSlider::groove:horizontal {border-image:url(:/images/sliderGround.png); border-left:-2px; border-right:0;}" - ; - slider->setStyleSheet(sliderCSS); - slider->setFixedSize(218,45); - - QLabel* imgLabel = new QLabel(pWidget); - QPixmap p(":/images/sliderBackground.png"); - imgLabel->resize(p.size()); - imgLabel->setPixmap(p); - - pLayout->setMargin(0); - pLayout->setSpacing(0); - - pLayout->setStretchFactor(percentageLabel,1); - pLayout->setStretchFactor(slider,0); - - - pWidget->setLayout (pLayout); - pWidget->setAutoFillBackground(false); - - pWidget->setMinimumSize(276,45); - - setDefaultWidget(pWidget); - - slider->setMinimum(50); - slider->setMaximum(100); - slider->setPageStep(5); - - int value = Configuration::getConfiguration().getFitToWidthRatio()*100; - slider->setValue(value); - percentageLabel->setText(QString("%1 %").arg(value)); - connect(slider,SIGNAL(valueChanged(int)),this,SLOT(updateText(int))); + connect(widget,SIGNAL(fitToWidthRatioChanged(float)),this,SIGNAL(fitToWidthRatioChanged(float))); } void YACReaderSliderAction::updateText(int value) { - percentageLabel->setText(QString("%1 %").arg(value)); - Configuration::getConfiguration().setFitToWidthRatio(value/100.0); - emit(fitToWidthRatioChanged(value / 100.0f)); + widget->updateText(value); } void YACReaderSliderAction::updateFitToWidthRatio(float v) { - int value = v*100; - slider->setValue(value); - percentageLabel->setText(QString("%1 %").arg(value)); -} \ No newline at end of file + widget->updateFitToWidthRatio(v); +} + +YACReaderSlider::YACReaderSlider(QWidget *parent) + :QWidget(parent) +{ + QHBoxLayout* pLayout = new QHBoxLayout(); + + pLayout->addStretch(); + + percentageLabel = new QLabel ("100%"); + percentageLabel->setStyleSheet("QLabel { color : white; }"); + percentageLabel->setAlignment(Qt::AlignHCenter|Qt::AlignVCenter); + pLayout->addWidget (percentageLabel); + slider = new QSlider(NULL); + slider->setOrientation(Qt::Horizontal); + pLayout->addWidget (slider); + + QString sliderCSS = + + "QSlider::sub-page:horizontal {background-image: url(:/images/sliderSubPage.png); border: 0px; margin-left: 18px;}" + "QSlider::add-page:horizontal {background-image: url(:/images/sliderAddPage.png); border: 0px; margin-right: 25px;}" + "QSlider::handle:horizontal {image: url(:/images/sliderHandle.png); width: 31px;height:45px; }" + "QSlider::groove:horizontal {border-image:url(:/images/sliderGround.png); border-left:-2px; border-right:0;}" + ; + slider->setStyleSheet(sliderCSS); + slider->setFixedSize(218,45); + + QLabel* imgLabel = new QLabel(this); + QPixmap p(":/images/sliderBackground.png"); + imgLabel->resize(p.size()); + imgLabel->setPixmap(p); + + pLayout->setMargin(0); + pLayout->setSpacing(0); + + pLayout->setStretchFactor(percentageLabel,1); + pLayout->setStretchFactor(slider,0); + + + setLayout (pLayout); + setAutoFillBackground(false); + + setMinimumSize(276,45); + + slider->setMinimum(50); + slider->setMaximum(100); + slider->setPageStep(5); + + int value = Configuration::getConfiguration().getFitToWidthRatio()*100; + slider->setValue(value); + percentageLabel->setText(QString("%1 %").arg(value)); + connect(slider,SIGNAL(valueChanged(int)),this,SLOT(updateText(int))); +} + +void YACReaderSlider::updateText(int value) +{ + percentageLabel->setText(QString("%1 %").arg(value)); + Configuration::getConfiguration().setFitToWidthRatio(value/100.0); + emit(fitToWidthRatioChanged(value / 100.0f)); +} + +void YACReaderSlider::updateFitToWidthRatio(float v) +{ + int value = v*100; + slider->setValue(value); + percentageLabel->setText(QString("%1 %").arg(value)); +} diff --git a/YACReader/width_slider.h b/YACReader/width_slider.h index ea37fe3e..aecedb95 100644 --- a/YACReader/width_slider.h +++ b/YACReader/width_slider.h @@ -6,12 +6,31 @@ class QLabel; class QSlider; +class YACReaderSlider : public QWidget +{ + Q_OBJECT +private: + QLabel * percentageLabel; + QSlider * slider; + +public: + + YACReaderSlider (QWidget * parent = 0); + +public slots: + void updateText(int value); + void updateFitToWidthRatio(float v); + + +signals: + void fitToWidthRatioChanged(float value); +}; + class YACReaderSliderAction : public QWidgetAction { Q_OBJECT private: - QLabel * percentageLabel; - QSlider * slider; + YACReaderSlider * widget; public: diff --git a/custom_widgets/yacreader_macosx_toolbar.h b/custom_widgets/yacreader_macosx_toolbar.h index 4bdcb7eb..40cae2fd 100644 --- a/custom_widgets/yacreader_macosx_toolbar.h +++ b/custom_widgets/yacreader_macosx_toolbar.h @@ -64,6 +64,10 @@ public: //hacks everywhere //convenience method for YACReaderLibrary search edit YACReaderMacOSXSearchLineEdit *addSearchEdit(); + //convenience method for showing the fit to width slider in MacOSX + QAction * addFitToWidthSlider(QAction * attachToAction); + + //convenience method for switching the icon of the view selector void updateViewSelectorIcon(const QIcon & icon); diff --git a/custom_widgets/yacreader_macosx_toolbar.mm b/custom_widgets/yacreader_macosx_toolbar.mm index 9ce69037..d6016b46 100644 --- a/custom_widgets/yacreader_macosx_toolbar.mm +++ b/custom_widgets/yacreader_macosx_toolbar.mm @@ -280,6 +280,20 @@ YACReaderMacOSXSearchLineEdit * YACReaderMacOSXToolbar::addSearchEdit() return searchEdit; } +QAction *YACReaderMacOSXToolbar::addFitToWidthSlider(QAction *attachToAction) +{ + QMacToolBarItem *toolBarItem = addItem(attachToAction->icon(),"fit to width slider"); + + NSToolbarItem * nativeItem = toolBarItem->nativeToolBarItem(); + actions.insert(QString::fromNSString(nativeItem.itemIdentifier),attachToAction); + + QAction * action = new QAction("",attachToAction->parent()); + + connect(toolBarItem,SIGNAL(activated()), action, SIGNAL(triggered())); + + return action; +} + void YACReaderMacOSXToolbar::updateViewSelectorIcon(const QIcon &icon) { if(viewSelector)