diff --git a/YACReader/magnifying_glass.cpp b/YACReader/magnifying_glass.cpp index 9eb628fd..ce1359db 100644 --- a/YACReader/magnifying_glass.cpp +++ b/YACReader/magnifying_glass.cpp @@ -280,46 +280,3 @@ bool MagnifyingGlass::shrinkHeight(int &h) const h -= heightStep; return true; } - -void MagnifyingGlass::keyPressEvent(QKeyEvent *event) -{ - bool validKey = false; - - int _key = event->key(); - Qt::KeyboardModifiers modifiers = event->modifiers(); - - if (modifiers & Qt::ShiftModifier) - _key |= Qt::SHIFT; - if (modifiers & Qt::ControlModifier) - _key |= Qt::CTRL; - if (modifiers & Qt::MetaModifier) - _key |= Qt::META; - if (modifiers & Qt::AltModifier) - _key |= Qt::ALT; - - QKeySequence key(_key); - - if (key == ShortcutsManager::getShortcutsManager().getShortcut(SIZE_UP_MGLASS_ACTION_Y)) { - sizeUp(); - validKey = true; - } - - else if (key == ShortcutsManager::getShortcutsManager().getShortcut(SIZE_DOWN_MGLASS_ACTION_Y)) { - sizeDown(); - validKey = true; - } - - else if (key == ShortcutsManager::getShortcutsManager().getShortcut(ZOOM_IN_MGLASS_ACTION_Y)) { - zoomIn(); - validKey = true; - } - - else if (key == ShortcutsManager::getShortcutsManager().getShortcut(ZOOM_OUT_MGLASS_ACTION_Y)) { - zoomOut(); - validKey = true; - } - - if (validKey) { - event->setAccepted(true); - } -} diff --git a/YACReader/magnifying_glass.h b/YACReader/magnifying_glass.h index 69bf35f4..77d1462b 100644 --- a/YACReader/magnifying_glass.h +++ b/YACReader/magnifying_glass.h @@ -22,8 +22,6 @@ private: bool growHeight(int &h) const; bool shrinkHeight(int &h) const; - void keyPressEvent(QKeyEvent *event) override; - public: MagnifyingGlass(int width, int height, QWidget *parent); MagnifyingGlass(const QSize &size, QWidget *parent); diff --git a/YACReader/main_window_viewer.cpp b/YACReader/main_window_viewer.cpp index 3cb01319..7b7ca603 100644 --- a/YACReader/main_window_viewer.cpp +++ b/YACReader/main_window_viewer.cpp @@ -139,7 +139,12 @@ void MainWindowViewer::setupUI() // setUnifiedTitleAndToolBarOnMac(true); viewer = new Viewer(this); - connect(viewer, &Viewer::comicLoaded, this, [this] { setLoadedComicActionsEnabled(true); }); + connect(viewer, &Viewer::comicLoaded, this, [this] { + if (viewer->magnifyingGlassIsVisible()) + setMglassActionsEnabled(true); + setLoadedComicActionsEnabled(true); + }); + connect(viewer, &Viewer::magnifyingGlassVisibilityChanged, this, &MainWindowViewer::setMglassActionsEnabled); connect(viewer, &Viewer::reset, this, &MainWindowViewer::processReset); // detected end of comic connect(viewer, &Viewer::openNextComic, this, &MainWindowViewer::openNextComic); @@ -961,6 +966,7 @@ void MainWindowViewer::enableActions() void MainWindowViewer::disableActions() { setActionsEnabled(false); + setMglassActionsEnabled(false); setLoadedComicActionsEnabled(false); setBookmarkAction->setEnabled(false); } @@ -1187,30 +1193,34 @@ void MainWindowViewer::setUpShortcutsManagement() allActions << tmpList; - // keys without actions (MGlass) auto sizeUpMglassAction = new QAction(tr("Size up magnifying glass"), orphanActions); sizeUpMglassAction->setData(SIZE_UP_MGLASS_ACTION_Y); sizeUpMglassAction->setShortcut(ShortcutsManager::getShortcutsManager().getShortcut(SIZE_UP_MGLASS_ACTION_Y)); + connect(sizeUpMglassAction, &QAction::triggered, viewer, &Viewer::magnifyingGlassSizeUp); auto sizeDownMglassAction = new QAction(tr("Size down magnifying glass"), orphanActions); sizeDownMglassAction->setData(SIZE_DOWN_MGLASS_ACTION_Y); sizeDownMglassAction->setShortcut(ShortcutsManager::getShortcutsManager().getShortcut(SIZE_DOWN_MGLASS_ACTION_Y)); + connect(sizeDownMglassAction, &QAction::triggered, viewer, &Viewer::magnifyingGlassSizeDown); auto zoomInMglassAction = new QAction(tr("Zoom in magnifying glass"), orphanActions); zoomInMglassAction->setData(ZOOM_IN_MGLASS_ACTION_Y); zoomInMglassAction->setShortcut(ShortcutsManager::getShortcutsManager().getShortcut(ZOOM_IN_MGLASS_ACTION_Y)); + connect(zoomInMglassAction, &QAction::triggered, viewer, &Viewer::magnifyingGlassZoomIn); auto zoomOutMglassAction = new QAction(tr("Zoom out magnifying glass"), orphanActions); zoomOutMglassAction->setData(ZOOM_OUT_MGLASS_ACTION_Y); zoomOutMglassAction->setShortcut(ShortcutsManager::getShortcutsManager().getShortcut(ZOOM_OUT_MGLASS_ACTION_Y)); + connect(zoomOutMglassAction, &QAction::triggered, viewer, &Viewer::magnifyingGlassZoomOut); + + mglassActions = { sizeUpMglassAction, sizeDownMglassAction, + zoomInMglassAction, zoomOutMglassAction }; + addActions(mglassActions); editShortcutsDialog->addActionsGroup(tr("Magnifiying glass"), QIcon(":/images/shortcuts_group_mglass.png"), tmpList = QList() << showMagnifyingGlassAction - << sizeUpMglassAction - << sizeDownMglassAction - << zoomInMglassAction - << zoomOutMglassAction); + << mglassActions); allActions << tmpList; @@ -1542,6 +1552,12 @@ void MainWindowViewer::setActionsEnabled(bool enabled) a->setEnabled(enabled); } +void MainWindowViewer::setMglassActionsEnabled(bool enabled) +{ + for (auto *a : std::as_const(mglassActions)) + a->setEnabled(enabled); +} + void MainWindowViewer::setLoadedComicActionsEnabled(bool enabled) { for (auto *a : std::as_const(loadedComicActions)) diff --git a/YACReader/main_window_viewer.h b/YACReader/main_window_viewer.h index 54746725..2b25fb5f 100644 --- a/YACReader/main_window_viewer.h +++ b/YACReader/main_window_viewer.h @@ -148,6 +148,7 @@ private: QAction *showEditShortcutsAction; + QList mglassActions; QList loadedComicActions; YACReaderSlider *zoomSliderAction; @@ -163,6 +164,7 @@ private: void clearRecentFiles(); void getSiblingComics(QString path, QString currentComic); void setActionsEnabled(bool enabled); + void setMglassActionsEnabled(bool enabled); void setLoadedComicActionsEnabled(bool enabled); //! Manejadores de evento: diff --git a/YACReader/viewer.cpp b/YACReader/viewer.cpp index e7c23f90..4894f25b 100644 --- a/YACReader/viewer.cpp +++ b/YACReader/viewer.cpp @@ -20,6 +20,7 @@ #include "opengl_checker.h" #include +#include #include @@ -154,6 +155,11 @@ void Viewer::createConnections() // magnifyingGlass (update mg after a background change connect(this, &Viewer::backgroundChanges, mglass, QOverload<>::of(&MagnifyingGlass::updateImage)); + connect(this, &Viewer::magnifyingGlassSizeUp, mglass, &MagnifyingGlass::sizeUp); + connect(this, &Viewer::magnifyingGlassSizeDown, mglass, &MagnifyingGlass::sizeDown); + connect(this, &Viewer::magnifyingGlassZoomIn, mglass, &MagnifyingGlass::zoomIn); + connect(this, &Viewer::magnifyingGlassZoomOut, mglass, &MagnifyingGlass::zoomOut); + // goToDialog connect(goToDialog, &GoToDialog::goToPage, this, &Viewer::goTo); @@ -608,33 +614,6 @@ void Viewer::scrollTo(int x, int y) emit backgroundChanges(); } -void Viewer::keyPressEvent(QKeyEvent *event) -{ - if (render->hasLoadedComic()) { - int _key = event->key(); - Qt::KeyboardModifiers modifiers = event->modifiers(); - - if (modifiers & Qt::ShiftModifier) - _key |= Qt::SHIFT; - if (modifiers & Qt::ControlModifier) - _key |= Qt::CTRL; - if (modifiers & Qt::MetaModifier) - _key |= Qt::META; - if (modifiers & Qt::AltModifier) - _key |= Qt::ALT; - - QKeySequence key(_key); - - QAbstractScrollArea::keyPressEvent(event); - - if (mglass->isVisible() && (key == ShortcutsManager::getShortcutsManager().getShortcut(SIZE_UP_MGLASS_ACTION_Y) || key == ShortcutsManager::getShortcutsManager().getShortcut(SIZE_DOWN_MGLASS_ACTION_Y) || key == ShortcutsManager::getShortcutsManager().getShortcut(ZOOM_IN_MGLASS_ACTION_Y) || key == ShortcutsManager::getShortcutsManager().getShortcut(ZOOM_OUT_MGLASS_ACTION_Y))) { - QCoreApplication::sendEvent(mglass, event); - } - - } else - QAbstractScrollArea::keyPressEvent(event); -} - void Viewer::moveView(Qt::Key directionKey) { QKeyEvent event(QEvent::KeyPress, directionKey, Qt::NoModifier); @@ -770,14 +749,22 @@ void Viewer::showMagnifyingGlass() mglass->move(static_cast(p.x() - float(mglass->width()) / 2), static_cast(p.y() - float(mglass->height()) / 2)); mglass->show(); mglass->updateImage(mglass->x() + mglass->width() / 2, mglass->y() + mglass->height() / 2); - magnifyingGlassShown = true; + setMagnifyingGlassShown(true); } } void Viewer::hideMagnifyingGlass() { mglass->hide(); - magnifyingGlassShown = false; + setMagnifyingGlassShown(false); +} + +void Viewer::setMagnifyingGlassShown(bool shown) +{ + if (magnifyingGlassShown != shown) { + magnifyingGlassShown = shown; + emit magnifyingGlassVisibilityChanged(magnifyingGlassShown); + } } void Viewer::informationSwitch() diff --git a/YACReader/viewer.h b/YACReader/viewer.h index 380ae11e..42b46b85 100644 --- a/YACReader/viewer.h +++ b/YACReader/viewer.h @@ -8,7 +8,6 @@ #include #include #include -#include #include #include #include @@ -159,9 +158,9 @@ private: MagnifyingGlass *mglass; bool magnifyingGlassShown; bool restoreMagnifyingGlass; + void setMagnifyingGlassShown(bool shown); //! Manejadores de evento: - void keyPressEvent(QKeyEvent *event) override; void resizeEvent(QResizeEvent *event) override; void wheelEvent(QWheelEvent *event) override; void mouseMoveEvent(QMouseEvent *event) override; @@ -198,6 +197,13 @@ signals: void openNextComic(); void openPreviousComic(); void zoomUpdated(int); + void magnifyingGlassVisibilityChanged(bool visible); + + // The following signals are emitted by users of this class and propagated to mglass. + void magnifyingGlassSizeUp(); + void magnifyingGlassSizeDown(); + void magnifyingGlassZoomIn(); + void magnifyingGlassZoomOut(); }; #endif