diff --git a/YACReaderLibrary/classic_comics_view.cpp b/YACReaderLibrary/classic_comics_view.cpp index 56d35fc1..113a6381 100644 --- a/YACReaderLibrary/classic_comics_view.cpp +++ b/YACReaderLibrary/classic_comics_view.cpp @@ -258,6 +258,15 @@ void ClassicComicsView::updateCurrentComicView() { } +void ClassicComicsView::focusComicsNavigation(Qt::FocusReason reason) +{ + const bool comicFlowVisible = stack->currentWidget() == comicFlow && sVertical->sizes().constFirst() != 0; + if (comicFlowVisible) + comicFlow->setFocus(reason); + else // Let the user navigate the table. + tableView->setFocus(reason); +} + void ClassicComicsView::selectAll() { tableView->selectAll(); diff --git a/YACReaderLibrary/classic_comics_view.h b/YACReaderLibrary/classic_comics_view.h index a5d51f14..87122dc7 100644 --- a/YACReaderLibrary/classic_comics_view.h +++ b/YACReaderLibrary/classic_comics_view.h @@ -19,7 +19,7 @@ class ClassicComicsView : public ComicsView { Q_OBJECT public: - ClassicComicsView(QWidget *parent = 0); + explicit ClassicComicsView(QWidget *parent = nullptr); void setToolBar(QToolBar *toolBar) override; void setModel(ComicModel *model) override; @@ -32,6 +32,7 @@ public: void enableFilterMode(bool enabled) override; void selectIndex(int index) override; void updateCurrentComicView() override; + void focusComicsNavigation(Qt::FocusReason reason) override; public slots: void setCurrentIndex(const QModelIndex &index) override; diff --git a/YACReaderLibrary/comics_view.h b/YACReaderLibrary/comics_view.h index 54e49ee6..9b98eee7 100644 --- a/YACReaderLibrary/comics_view.h +++ b/YACReaderLibrary/comics_view.h @@ -29,6 +29,7 @@ public: virtual void enableFilterMode(bool enabled) = 0; virtual void selectIndex(int index) = 0; virtual void updateCurrentComicView() = 0; + virtual void focusComicsNavigation(Qt::FocusReason reason) = 0; public slots: virtual void updateInfoForIndex(int index); diff --git a/YACReaderLibrary/comics_view_transition.cpp b/YACReaderLibrary/comics_view_transition.cpp index c22bbc8a..447e86cc 100644 --- a/YACReaderLibrary/comics_view_transition.cpp +++ b/YACReaderLibrary/comics_view_transition.cpp @@ -20,11 +20,6 @@ ComicsViewTransition::ComicsViewTransition(QWidget *parent) #endif } -QSize ComicsViewTransition::sizeHint() -{ - return QSize(450, 350); -} - void ComicsViewTransition::paintEvent(QPaintEvent *) { QPainter painter(this); diff --git a/YACReaderLibrary/comics_view_transition.h b/YACReaderLibrary/comics_view_transition.h index 7f2cc7b0..78a08c3e 100644 --- a/YACReaderLibrary/comics_view_transition.h +++ b/YACReaderLibrary/comics_view_transition.h @@ -8,7 +8,6 @@ class ComicsViewTransition : public QWidget Q_OBJECT public: explicit ComicsViewTransition(QWidget *parent = nullptr); - QSize sizeHint(); protected: void paintEvent(QPaintEvent *) override; diff --git a/YACReaderLibrary/grid_comics_view.cpp b/YACReaderLibrary/grid_comics_view.cpp index cfeadb85..f442bece 100644 --- a/YACReaderLibrary/grid_comics_view.cpp +++ b/YACReaderLibrary/grid_comics_view.cpp @@ -469,11 +469,6 @@ void GridComicsView::resetScroll() QMetaObject::invokeMethod(scrollView, "scrollToOrigin"); } -QSize GridComicsView::sizeHint() -{ - return QSize(1280, 768); -} - QByteArray GridComicsView::getMimeDataFromSelection() { QByteArray data; @@ -491,6 +486,11 @@ void GridComicsView::updateCurrentComicView() setCurrentComicIfNeeded(); } +void GridComicsView::focusComicsNavigation(Qt::FocusReason reason) +{ + view->setFocus(reason); +} + void GridComicsView::startDrag() { auto drag = new QDrag(this); diff --git a/YACReaderLibrary/grid_comics_view.h b/YACReaderLibrary/grid_comics_view.h index 73e0e2b6..7ff0e702 100644 --- a/YACReaderLibrary/grid_comics_view.h +++ b/YACReaderLibrary/grid_comics_view.h @@ -19,8 +19,8 @@ class GridComicsView : public ComicsView { Q_OBJECT public: - explicit GridComicsView(QWidget *parent = 0); - virtual ~GridComicsView(); + explicit GridComicsView(QWidget *parent = nullptr); + ~GridComicsView() override; void setToolBar(QToolBar *toolBar) override; void setModel(ComicModel *model) override; void setCurrentIndex(const QModelIndex &index) override; @@ -31,9 +31,9 @@ public: void toNormal() override; void updateConfig(QSettings *settings) override; void enableFilterMode(bool enabled) override; - QSize sizeHint(); QByteArray getMimeDataFromSelection(); void updateCurrentComicView() override; + void focusComicsNavigation(Qt::FocusReason reason) override; public slots: //ComicsView diff --git a/YACReaderLibrary/info_comics_view.cpp b/YACReaderLibrary/info_comics_view.cpp index f4d0c87e..5aa5191c 100644 --- a/YACReaderLibrary/info_comics_view.cpp +++ b/YACReaderLibrary/info_comics_view.cpp @@ -208,6 +208,11 @@ void InfoComicsView::updateCurrentComicView() { } +void InfoComicsView::focusComicsNavigation(Qt::FocusReason reason) +{ + view->setFocus(reason); +} + void InfoComicsView::setShowMarks(bool show) { QQmlContext *ctxt = view->rootContext(); diff --git a/YACReaderLibrary/info_comics_view.h b/YACReaderLibrary/info_comics_view.h index a3f8c288..3cc925c8 100644 --- a/YACReaderLibrary/info_comics_view.h +++ b/YACReaderLibrary/info_comics_view.h @@ -26,9 +26,10 @@ public: void enableFilterMode(bool enabled) override; void selectIndex(int index) override; void updateCurrentComicView() override; + void focusComicsNavigation(Qt::FocusReason reason) override; public slots: - void setShowMarks(bool show); + void setShowMarks(bool show) override; void selectAll() override; protected slots: diff --git a/YACReaderLibrary/library_window.cpp b/YACReaderLibrary/library_window.cpp index 5d703bbd..1f68a6d6 100644 --- a/YACReaderLibrary/library_window.cpp +++ b/YACReaderLibrary/library_window.cpp @@ -377,6 +377,8 @@ void LibraryWindow::setUpShortcutsManagement() tmpList = QList() << backAction << forwardAction + << focusSearchLineAction + << focusComicsViewAction << helpAboutAction << optionsAction << serverConfigAction @@ -719,6 +721,17 @@ void LibraryWindow::createActions() getInfoAction->setIcon(QIcon(":/images/comics_view_toolbar/getInfo.png")); //------------------------------------------------------------------------- + focusSearchLineAction = new QAction(tr("Focus search line"), this); + focusSearchLineAction->setData(FOCUS_SEARCH_LINE_ACTION_YL); + focusSearchLineAction->setShortcut(ShortcutsManager::getShortcutsManager().getShortcut(FOCUS_SEARCH_LINE_ACTION_YL)); + focusSearchLineAction->setIcon(QIcon(":/images/iconSearch.png")); + addAction(focusSearchLineAction); + + focusComicsViewAction = new QAction(tr("Focus comics view"), this); + focusComicsViewAction->setData(FOCUS_COMICS_VIEW_ACTION_YL); + focusComicsViewAction->setShortcut(ShortcutsManager::getShortcutsManager().getShortcut(FOCUS_COMICS_VIEW_ACTION_YL)); + addAction(focusComicsViewAction); + showEditShortcutsAction = new QAction(tr("Edit shortcuts"), this); showEditShortcutsAction->setData(SHOW_EDIT_SHORTCUTS_ACTION_YL); showEditShortcutsAction->setShortcut(ShortcutsManager::getShortcutsManager().getShortcut(SHOW_EDIT_SHORTCUTS_ACTION_YL)); @@ -1147,6 +1160,9 @@ void LibraryWindow::createConnections() //connect(comicsModel,SIGNAL(searchNumResults(int)),this,SLOT(checkSearchNumResults(int))); //connect(emptyFolderWidget,SIGNAL(subfolderSelected(QModelIndex,int)),this,SLOT(selectSubfolder(QModelIndex,int))); + connect(focusSearchLineAction, &QAction::triggered, searchEdit, [this] { searchEdit->setFocus(Qt::ShortcutFocusReason); }); + connect(focusComicsViewAction, &QAction::triggered, comicsViewsManager, &YACReaderComicsViewsManager::focusComicsViewViaShortcut); + connect(showEditShortcutsAction, SIGNAL(triggered()), editShortcutsDialog, SLOT(show())); //update folders (partial updates) diff --git a/YACReaderLibrary/library_window.h b/YACReaderLibrary/library_window.h index d2691990..97f51782 100644 --- a/YACReaderLibrary/library_window.h +++ b/YACReaderLibrary/library_window.h @@ -213,6 +213,9 @@ public: QAction *forceCoverExtractedAction; QAction *deleteComicsAction; + QAction *focusSearchLineAction; + QAction *focusComicsViewAction; + QAction *showEditShortcutsAction; QAction *updateFolderAction; diff --git a/YACReaderLibrary/properties_dialog.h b/YACReaderLibrary/properties_dialog.h index ad32320f..56505dcf 100644 --- a/YACReaderLibrary/properties_dialog.h +++ b/YACReaderLibrary/properties_dialog.h @@ -122,6 +122,9 @@ public: PropertiesDialog(QWidget *parent = nullptr); QString databasePath; QString basePath; + // TODO: this non-const member function hides rather than overrides + // QWidget::sizeHint(). But the function cannot be simply removed as it is used + // in our constructor. Will have to investigate and decide how to fix this. QSize sizeHint(); void paintEvent(QPaintEvent *event) override; diff --git a/YACReaderLibrary/yacreader_comics_views_manager.cpp b/YACReaderLibrary/yacreader_comics_views_manager.cpp index 63ff90db..45301831 100644 --- a/YACReaderLibrary/yacreader_comics_views_manager.cpp +++ b/YACReaderLibrary/yacreader_comics_views_manager.cpp @@ -121,6 +121,11 @@ void YACReaderComicsViewsManager::toggleComicsView() } } +void YACReaderComicsViewsManager::focusComicsViewViaShortcut() +{ + comicsView->focusComicsNavigation(Qt::ShortcutFocusReason); +} + //PROTECTED void YACReaderComicsViewsManager::disconnectComicsViewConnections(ComicsView *widget) diff --git a/YACReaderLibrary/yacreader_comics_views_manager.h b/YACReaderLibrary/yacreader_comics_views_manager.h index b93fed05..4e79dd25 100644 --- a/YACReaderLibrary/yacreader_comics_views_manager.h +++ b/YACReaderLibrary/yacreader_comics_views_manager.h @@ -55,6 +55,7 @@ signals: public slots: void toggleComicsView(); + void focusComicsViewViaShortcut(); void showComicsView(); void showEmptyFolderView(); diff --git a/custom_widgets/yacreader_macosx_toolbar.h b/custom_widgets/yacreader_macosx_toolbar.h index c6fe9000..b49e6e8b 100644 --- a/custom_widgets/yacreader_macosx_toolbar.h +++ b/custom_widgets/yacreader_macosx_toolbar.h @@ -12,6 +12,7 @@ class YACReaderMacOSXSearchLineEdit : public QObject Q_OBJECT public: YACReaderMacOSXSearchLineEdit(); + void setFocus(Qt::FocusReason reason); void *getNSTextField(); public slots: diff --git a/custom_widgets/yacreader_macosx_toolbar.mm b/custom_widgets/yacreader_macosx_toolbar.mm index 229e825a..51ea4d76 100644 --- a/custom_widgets/yacreader_macosx_toolbar.mm +++ b/custom_widgets/yacreader_macosx_toolbar.mm @@ -316,6 +316,13 @@ YACReaderMacOSXSearchLineEdit::YACReaderMacOSXSearchLineEdit() nstextfield = searchEdit; } +void YACReaderMacOSXSearchLineEdit::setFocus(Qt::FocusReason reason) +{ + Q_UNUSED(reason) + + [((NSTextField *)nstextfield) becomeFirstResponder]; +} + void *YACReaderMacOSXSearchLineEdit::getNSTextField() { return nstextfield; diff --git a/shortcuts_management/shortcuts_manager.cpp b/shortcuts_management/shortcuts_manager.cpp index 541e4efd..67e645e4 100644 --- a/shortcuts_management/shortcuts_manager.cpp +++ b/shortcuts_management/shortcuts_manager.cpp @@ -13,6 +13,7 @@ void ShortcutsManager::initDefaultShorcuts() { #ifdef YACREADER_LIBRARY //ACTIONS + defaultShorcuts.insert(FOCUS_SEARCH_LINE_ACTION_YL, Qt::CTRL | Qt::Key_F); defaultShorcuts.insert(CREATE_LIBRARY_ACTION_YL, Qt::Key_A); defaultShorcuts.insert(OPEN_LIBRARY_ACTION_YL, Qt::Key_O); defaultShorcuts.insert(UPDATE_LIBRARY_ACTION_YL, Qt::Key_U); diff --git a/shortcuts_management/shortcuts_manager.h b/shortcuts_management/shortcuts_manager.h index d07a926c..787eee2a 100644 --- a/shortcuts_management/shortcuts_manager.h +++ b/shortcuts_management/shortcuts_manager.h @@ -75,6 +75,8 @@ public: #define DELETE_COMICS_ACTION_YL "DELETE_COMICS_ACTION_YL" #define HIDE_COMIC_VIEW_ACTION_YL "HIDE_COMIC_VIEW_ACTION_YL" #define GET_INFO_ACTION_YL "GET_INFO_ACTION_YL" +#define FOCUS_SEARCH_LINE_ACTION_YL "FOCUS_SEARCH_LINE_ACTION_YL" +#define FOCUS_COMICS_VIEW_ACTION_YL "FOCUS_COMICS_VIEW_ACTION_YL" #define SHOW_EDIT_SHORTCUTS_ACTION_YL "SHOW_EDIT_SHORTCUTS_ACTION_YL" #define UPDATE_CURRENT_FOLDER_ACTION_YL "UPDATE_CURRENT_FOLDER_ACTION_YL" #define ADD_FOLDER_ACTION_YL "ADD_FOLDER_ACTION_YL"