From c477d7f3a79e66aec97f44133542e793d43f9207 Mon Sep 17 00:00:00 2001 From: kanryu6 Date: Fri, 16 Jun 2017 04:41:20 +0900 Subject: [PATCH] 4 bugfixed - bugfixed: Opening the volume again after reading over 10 pages resulted in an unauthorized termination - bugfixed: Keyboard input did not work if FolderWindow is displayed in the main window - bugfixed: The image was not loaded even if switching the volume with the keyboard in FolderWindow - bugfixed: After switching to another Volume with SpreadViewing, and go back to original Volume, it goes one page - changed: for including some Qt common headers --- QuickViewer/QuickViewer.pro | 8 ++-- QuickViewer/src/folderview/foldertreeview.cpp | 14 +++++++ QuickViewer/src/folderview/foldertreeview.h | 19 +++++++++ QuickViewer/src/folderview/folderwindow.cpp | 40 +++++++++++++++++++ QuickViewer/src/folderview/folderwindow.h | 3 ++ QuickViewer/src/folderview/folderwindow.ui | 15 ++++++- QuickViewer/src/mainwindow.cpp | 21 ++++++++-- QuickViewer/src/mainwindow.h | 1 + QuickViewer/src/models/filevolume.cpp | 19 ++++++++- QuickViewer/src/models/filevolume.h | 15 +------ QuickViewer/src/models/pagemanager.cpp | 8 +++- QuickViewer/src/models/qvapplication.h | 1 + 12 files changed, 141 insertions(+), 23 deletions(-) create mode 100644 QuickViewer/src/folderview/foldertreeview.cpp create mode 100644 QuickViewer/src/folderview/foldertreeview.h diff --git a/QuickViewer/QuickViewer.pro b/QuickViewer/QuickViewer.pro index 0caebe9f..48bdd0f1 100644 --- a/QuickViewer/QuickViewer.pro +++ b/QuickViewer/QuickViewer.pro @@ -8,7 +8,7 @@ QT += core gui opengl concurrent opengl-private sql greaterThan(QT_MAJOR_VERSION, 4): QT += widgets -VERSION = 0.7.4 +VERSION = 0.7.5 TARGET = QuickViewer TEMPLATE = app @@ -112,7 +112,8 @@ SOURCES += \ src/folderview/folderwindow.cpp \ src/models/pagecontent.cpp \ src/folderview/folderitemdelegate.cpp \ - src/models/bookprogressmanager.cpp + src/models/bookprogressmanager.cpp \ + src/folderview/foldertreeview.cpp HEADERS += \ src/qv_init.h \ @@ -139,7 +140,8 @@ HEADERS += \ src/folderview/folderwindow.h \ src/models/pagecontent.h \ src/folderview/folderitemdelegate.h \ - src/models/bookprogressmanager.h + src/models/bookprogressmanager.h \ + src/folderview/foldertreeview.h win32 { SOURCES += src/mainwindowforwindows.cpp diff --git a/QuickViewer/src/folderview/foldertreeview.cpp b/QuickViewer/src/folderview/foldertreeview.cpp new file mode 100644 index 00000000..65e614a3 --- /dev/null +++ b/QuickViewer/src/folderview/foldertreeview.cpp @@ -0,0 +1,14 @@ +#include "foldertreeview.h" + +FolderTreeView::FolderTreeView(QWidget *parent) + : QTreeView(parent) +{ + +} + +void FolderTreeView::selectionChanged(const QItemSelection &selection, const QItemSelection &) +{ + auto list = selection.indexes(); + if(list.size() > 0) + emit selected(list.first()); +} diff --git a/QuickViewer/src/folderview/foldertreeview.h b/QuickViewer/src/folderview/foldertreeview.h new file mode 100644 index 00000000..f1f24e46 --- /dev/null +++ b/QuickViewer/src/folderview/foldertreeview.h @@ -0,0 +1,19 @@ +#ifndef FOLDERTREEVIEW_H +#define FOLDERTREEVIEW_H + +#include + +class FolderTreeView : public QTreeView +{ + Q_OBJECT +public: + FolderTreeView(QWidget* parent); + +signals: + void selected(const QModelIndex & index); + +protected: + void selectionChanged(const QItemSelection &selected, const QItemSelection &deselected) override; +}; + +#endif // FOLDERTREEVIEW_H diff --git a/QuickViewer/src/folderview/folderwindow.cpp b/QuickViewer/src/folderview/folderwindow.cpp index e9ab1a6b..51c6db5c 100644 --- a/QuickViewer/src/folderview/folderwindow.cpp +++ b/QuickViewer/src/folderview/folderwindow.cpp @@ -234,6 +234,41 @@ QString FolderWindow::itemPath(const QModelIndex &index) return dir.absoluteFilePath(filename); } +const static QKeySequence seqReturn("Return"); +const static QKeySequence seqEnter("Num+Enter"); +const static QKeySequence seqBackspace("Backspace"); + +void FolderWindow::keyPressEvent(QKeyEvent *event) +{ + QKeySequence seq(event->key() | event->modifiers()); + qDebug() << seq; + if(seq == seqReturn || seq == seqEnter) { + on_currentItem_triggered(); + return; + } + if(seq == seqBackspace) { + if(m_historyPrev.empty()) + on_parent_triggered(); + else + on_prev_triggered(); + return; + } +} + +void FolderWindow::mousePressEvent(QMouseEvent *event) +{ + // 5 buttons mouse forward for browsers + if(event->button() == Qt::ForwardButton) { + on_next_triggered(); + return; + } + // 5 buttons mouse back for browsers + if(event->button() == Qt::BackButton) { + on_prev_triggered(); + return; + } +} + void FolderWindow::on_home_triggered() { if(m_historyPrev.contains(m_currentPath)) @@ -333,6 +368,11 @@ void FolderWindow::on_itemDoubleClicked(const QModelIndex &index) setFolderPath(subpath, false); } +void FolderWindow::on_currentItem_triggered() +{ + on_itemDoubleClicked(ui->folderView->currentIndex()); +} + void FolderWindow::on_sortMode_triggered() { QWidget* widget = ui->sortModeButton; diff --git a/QuickViewer/src/folderview/folderwindow.h b/QuickViewer/src/folderview/folderwindow.h index 04efda42..0b8a3523 100644 --- a/QuickViewer/src/folderview/folderwindow.h +++ b/QuickViewer/src/folderview/folderwindow.h @@ -30,6 +30,8 @@ class FolderWindow : public QWidget void resetPathLabel(int maxWidth); QString currentPath() { return m_currentPath; } QString itemPath(const QModelIndex& index); + void keyPressEvent(QKeyEvent *event); + void mousePressEvent(QMouseEvent *event); public slots: void on_home_triggered(); @@ -40,6 +42,7 @@ public slots: void on_volumeChanged_triggered(QString); void on_itemSingleClicked(const QModelIndex & index); void on_itemDoubleClicked(const QModelIndex & index); + void on_currentItem_triggered(); void on_setHome_triggered(); void on_sortMode_triggered(); void on_orderByName_triggered(); diff --git a/QuickViewer/src/folderview/folderwindow.ui b/QuickViewer/src/folderview/folderwindow.ui index 4f4c8b9d..576c63e6 100644 --- a/QuickViewer/src/folderview/folderwindow.ui +++ b/QuickViewer/src/folderview/folderwindow.ui @@ -298,7 +298,7 @@ QPushButton:hover { - + Qt::WheelFocus @@ -398,6 +398,16 @@ QPushButton:hover { + + + FolderTreeView + QTreeView +
foldertreeview.h
+ + selected(QModelIndex) + +
+
homeButton prevButton @@ -412,7 +422,7 @@ QPushButton:hover { folderView - clicked(QModelIndex) + selected(QModelIndex) FolderWindow on_itemSingleClicked(QModelIndex) @@ -600,5 +610,6 @@ QPushButton:hover { on_orderByName_triggered() on_orderByUpdatedAt_triggered() on_setHome_triggered() + on_currentItem_triggered() diff --git a/QuickViewer/src/mainwindow.cpp b/QuickViewer/src/mainwindow.cpp index e65e1b77..c6b2b0da 100644 --- a/QuickViewer/src/mainwindow.cpp +++ b/QuickViewer/src/mainwindow.cpp @@ -362,10 +362,18 @@ void MainWindow::keyPressEvent(QKeyEvent *event) QKeySequence seq(event->key() | event->modifiers()); qDebug() << seq; - // if the focus is on searchbar on CatalogWindow - if(isCatalogSearching() && (seq == seqReturn || seq == seqEnter)) { + if(this->focusWidget() != ui->graphicsView) return; - } +// // if the focus is on searchbar on CatalogWindow +// if(seq == seqReturn || seq == seqEnter) { +// if(isCatalogSearching()) { +// return; +// } +// if(isFolderSearching()) { +// m_folderWindow->on_currentItem_triggered(); +// return; +// } +// } QAction* action = qApp->getAction(seq); if(action) action->trigger(); @@ -680,6 +688,13 @@ bool MainWindow::isCatalogSearching() return m_catalogWindow->isCatalogSearching(); } +bool MainWindow::isFolderSearching() +{ + if(!m_folderWindow || !m_folderWindow->parent()) + return false; + return true; +} + void MainWindow::on_openVolumeByCatalog_triggered(QString path) { loadVolume(path); diff --git a/QuickViewer/src/mainwindow.h b/QuickViewer/src/mainwindow.h index f4f4a47f..ae6c2730 100644 --- a/QuickViewer/src/mainwindow.h +++ b/QuickViewer/src/mainwindow.h @@ -38,6 +38,7 @@ class MainWindow : public QMainWindow void setThumbnailManager(ThumbnailManager* manager); void loadVolume(QString path); bool isCatalogSearching(); + bool isFolderSearching(); protected: void dragEnterEvent(QDragEnterEvent *e); diff --git a/QuickViewer/src/models/filevolume.cpp b/QuickViewer/src/models/filevolume.cpp index 6c1215e0..cd104fa1 100644 --- a/QuickViewer/src/models/filevolume.cpp +++ b/QuickViewer/src/models/filevolume.cpp @@ -105,11 +105,28 @@ bool IFileVolume::findPageByIndex(int idx) return true; } +bool IFileVolume::findImageByIndex(int idx) { + if(idx < 0 || idx >= m_filelist.size()) + return false; + m_cnt = idx; + on_ready(); + return true; +} + +bool IFileVolume::findImageByName(QString name) { + int idx = m_filelist.indexOf(name); + if(idx < 0) + return false; + m_cnt = idx; + on_ready(); + return true; +} + static IFileVolume* CreateVolumeImpl(QObject* parent, QString path, PageManager* pageManager) { QDir dir(path); -// if(dir.exists() && dir.entryList(QDir::Files, QDir::Name).size() > 0) { + // if(dir.exists() && dir.entryList(QDir::Files, QDir::Name).size() > 0) { if(dir.exists()) { return new IFileVolume(parent, qApp->ShowSubfolders() ? new FileLoaderSubDirectory(parent, path) : new FileLoaderDirectory(parent, path), pageManager); } diff --git a/QuickViewer/src/models/filevolume.h b/QuickViewer/src/models/filevolume.h index 33436d30..1b9cbf96 100644 --- a/QuickViewer/src/models/filevolume.h +++ b/QuickViewer/src/models/filevolume.h @@ -87,23 +87,12 @@ class IFileVolume : public QObject /** * @brief Move to the file corresponding to the idx value specified in the file list(Max is size()-1) */ - bool findImageByIndex(int idx) { - if(idx < 0 || idx >= m_filelist.size()) - return false; - m_cnt = idx; - return true; - } + bool findImageByIndex(int idx); /** * @brief Move to the file corresponding to the file name specified in the current file list */ - bool findImageByName(QString name) { - int idx = m_filelist.indexOf(name); - if(idx < 0) - return false; - m_cnt = idx; - return true; - } + bool findImageByName(QString name); /** * @brief loadImageByName Reads and returns the image corresponding to the file name specified in the file list without advancing the internal counter diff --git a/QuickViewer/src/models/pagemanager.cpp b/QuickViewer/src/models/pagemanager.cpp index c58a728f..b732fb43 100644 --- a/QuickViewer/src/models/pagemanager.cpp +++ b/QuickViewer/src/models/pagemanager.cpp @@ -15,6 +15,9 @@ PageManager::PageManager(QObject* parent) bool PageManager::loadVolume(QString path, bool coverOnly) { + if(m_fileVolume && m_pages.size() == 2) { + m_fileVolume->prevPage(); + } clearPages(); m_fileVolume = nullptr; IFileVolume* newer = addVolumeCache(path, coverOnly); @@ -133,7 +136,7 @@ IFileVolume* PageManager::addVolumeCache(QString path, bool onlyCover) if(qApp->OpenVolumeWithProgress() && qApp->bookshelfManager()->contains(volumepath)) { BookProgress book = qApp->bookshelfManager()->at(volumepath); - newer->findImageByName(book.CurrenPage); + newer->findPageByIndex(book.Current); } } } else { @@ -180,6 +183,9 @@ void PageManager::prevPage() } if(m_currentPage < 0) m_currentPage = 0; + + bookProgress(); + selectPage(m_currentPage); } diff --git a/QuickViewer/src/models/qvapplication.h b/QuickViewer/src/models/qvapplication.h index c52040c5..3bcdc99c 100644 --- a/QuickViewer/src/models/qvapplication.h +++ b/QuickViewer/src/models/qvapplication.h @@ -3,6 +3,7 @@ #include #include +#include #include "qv_init.h" #include "bookprogressmanager.h"