mirror of
https://github.com/YACReader/yacreader
synced 2025-05-28 03:10:27 -04:00
closeEvent is accepted by default, so this commit does not change the application behavior. But Qt documentation recommends not relying on the default value as subclasses may choose to clear it in their constructor.
1657 lines
63 KiB
C++
1657 lines
63 KiB
C++
#include "main_window_viewer.h"
|
||
#include "configuration.h"
|
||
#include "viewer.h"
|
||
#include "goto_dialog.h"
|
||
#include "custom_widgets.h"
|
||
#include "options_dialog.h"
|
||
#include "check_new_version.h"
|
||
#include "comic.h"
|
||
#include "bookmarks_dialog.h"
|
||
#include "shortcuts_dialog.h"
|
||
#include "width_slider.h"
|
||
#include "qnaturalsorting.h"
|
||
#include "help_about_dialog.h"
|
||
#include "yacreader_tool_bar_stretch.h"
|
||
|
||
#include "comic_db.h"
|
||
#include "yacreader_local_client.h"
|
||
|
||
#include "yacreader_global.h"
|
||
#include "edit_shortcuts_dialog.h"
|
||
#include "shortcuts_manager.h"
|
||
|
||
#include <ctime>
|
||
#include <algorithm>
|
||
#include <QApplication>
|
||
#include <QCoreApplication>
|
||
#include <QDesktopWidget>
|
||
#include <QToolButton>
|
||
#include <QMenu>
|
||
#include <QFileDialog>
|
||
#include <QMessageBox>
|
||
#include <QImage>
|
||
#include <QDate>
|
||
#include <QMenuBar>
|
||
|
||
/* TODO remove, no longer used
|
||
#ifdef Q_OS_MAC
|
||
class MacToolBarSeparator : public QWidget
|
||
{
|
||
public:
|
||
MacToolBarSeparator(QWidget * parent =0)
|
||
:QWidget(parent)
|
||
{
|
||
setFixedWidth(2);
|
||
}
|
||
|
||
void paintEvent(QPaintEvent *event)
|
||
{
|
||
Q_UNUSED(event);
|
||
QPainter painter(this);
|
||
|
||
QLinearGradient lG(0,0,0,height());
|
||
|
||
lG.setColorAt(0,QColor(128,128,128,0));
|
||
lG.setColorAt(0.5,QColor(128,128,128,255));
|
||
lG.setColorAt(1,QColor(128,128,128,0));
|
||
|
||
painter.fillRect(0,0,1,height(),lG);
|
||
|
||
QLinearGradient lG2(1,0,1,height());
|
||
|
||
lG2.setColorAt(0,QColor(220,220,220,0));
|
||
lG2.setColorAt(0.5,QColor(220,220,220,255));
|
||
lG2.setColorAt(1,QColor(220,220,220,0));
|
||
|
||
painter.fillRect(1,0,1,height(),lG2);
|
||
}
|
||
};
|
||
#endif*/
|
||
|
||
MainWindowViewer::MainWindowViewer()
|
||
: QMainWindow(), fullscreen(false), toolbars(true), alwaysOnTop(false), currentDirectory("."), currentDirectoryImgDest("."), isClient(false)
|
||
{
|
||
loadConfiguration();
|
||
setupUI();
|
||
}
|
||
|
||
MainWindowViewer::~MainWindowViewer()
|
||
{
|
||
delete settings;
|
||
delete viewer;
|
||
delete had;
|
||
|
||
//delete sliderAction;
|
||
delete openAction;
|
||
delete openFolderAction;
|
||
delete openLatestComicAction;
|
||
delete saveImageAction;
|
||
delete openPreviousComicAction;
|
||
delete openNextComicAction;
|
||
delete prevAction;
|
||
delete nextAction;
|
||
delete adjustHeightAction;
|
||
delete adjustWidthAction;
|
||
delete leftRotationAction;
|
||
delete rightRotationAction;
|
||
delete doublePageAction;
|
||
delete doubleMangaPageAction;
|
||
delete increasePageZoomAction;
|
||
delete decreasePageZoomAction;
|
||
delete resetZoomAction;
|
||
delete goToPageAction;
|
||
delete optionsAction;
|
||
delete helpAboutAction;
|
||
delete showMagnifyingGlassAction;
|
||
delete setBookmarkAction;
|
||
delete showBookmarksAction;
|
||
delete showShorcutsAction;
|
||
delete showInfoAction;
|
||
delete closeAction;
|
||
delete showDictionaryAction;
|
||
delete alwaysOnTopAction;
|
||
delete adjustToFullSizeAction;
|
||
delete fitToPageAction;
|
||
delete showFlowAction;
|
||
}
|
||
void MainWindowViewer::loadConfiguration()
|
||
{
|
||
settings = new QSettings(YACReader::getSettingsPath() + "/YACReader.ini", QSettings::IniFormat);
|
||
|
||
Configuration &config = Configuration::getConfiguration();
|
||
config.load(settings);
|
||
currentDirectory = config.getDefaultPath();
|
||
fullscreen = config.getFullScreen();
|
||
}
|
||
|
||
void MainWindowViewer::setupUI()
|
||
{
|
||
//setUnifiedTitleAndToolBarOnMac(true);
|
||
|
||
viewer = new Viewer(this);
|
||
connect(viewer, SIGNAL(reset()), this, SLOT(processReset()));
|
||
//detected end of comic
|
||
connect(viewer, SIGNAL(openNextComic()), this, SLOT(openNextComic()));
|
||
//detected start of comic
|
||
connect(viewer, SIGNAL(openPreviousComic()), this, SLOT(openPreviousComic()));
|
||
|
||
setCentralWidget(viewer);
|
||
int heightDesktopResolution = QApplication::desktop()->screenGeometry().height();
|
||
int widthDesktopResolution = QApplication::desktop()->screenGeometry().width();
|
||
int height, width;
|
||
height = static_cast<int>(heightDesktopResolution * 0.84);
|
||
width = static_cast<int>(height * 0.70);
|
||
Configuration &conf = Configuration::getConfiguration();
|
||
QPoint p = conf.getPos();
|
||
QSize s = conf.getSize();
|
||
if (s.width() != 0) {
|
||
move(p);
|
||
resize(s);
|
||
} else {
|
||
move(QPoint((widthDesktopResolution - width) / 2, ((heightDesktopResolution - height) - 40) / 2));
|
||
resize(QSize(width, height));
|
||
}
|
||
|
||
had = new HelpAboutDialog(this); //TODO load data
|
||
|
||
had->loadAboutInformation(":/files/about.html");
|
||
had->loadHelp(":/files/helpYACReader.html");
|
||
|
||
optionsDialog = new OptionsDialog(this);
|
||
connect(optionsDialog, SIGNAL(accepted()), viewer, SLOT(updateOptions()));
|
||
connect(optionsDialog, SIGNAL(optionsChanged()), this, SLOT(reloadOptions()));
|
||
connect(optionsDialog, SIGNAL(changedFilters(int, int, int)), viewer, SLOT(updateFilters(int, int, int)));
|
||
|
||
optionsDialog->restoreOptions(settings);
|
||
//shortcutsDialog = new ShortcutsDialog(this);
|
||
editShortcutsDialog = new EditShortcutsDialog(this);
|
||
connect(optionsDialog, SIGNAL(editShortcuts()), editShortcutsDialog, SLOT(show()));
|
||
|
||
createActions();
|
||
setUpShortcutsManagement();
|
||
|
||
createToolBars();
|
||
|
||
setWindowTitle("YACReader");
|
||
|
||
checkNewVersion();
|
||
|
||
viewer->setFocusPolicy(Qt::StrongFocus);
|
||
|
||
//if(Configuration::getConfiguration().getAlwaysOnTop())
|
||
//{
|
||
// setWindowFlags(this->windowFlags() | Qt::CustomizeWindowHint | Qt::WindowStaysOnTopHint);
|
||
//}
|
||
|
||
previousWindowFlags = windowFlags();
|
||
previousPos = pos();
|
||
previousSize = size();
|
||
|
||
if (fullscreen)
|
||
toFullScreen();
|
||
if (conf.getMaximized())
|
||
showMaximized();
|
||
|
||
setAcceptDrops(true);
|
||
|
||
if (Configuration::getConfiguration().getShowToolbars() && !Configuration::getConfiguration().getFullScreen())
|
||
showToolBars();
|
||
else
|
||
hideToolBars();
|
||
}
|
||
|
||
void MainWindowViewer::createActions()
|
||
{
|
||
openAction = new QAction(tr("&Open"), this);
|
||
openAction->setIcon(QIcon(":/images/viewer_toolbar/open.png"));
|
||
openAction->setToolTip(tr("Open a comic"));
|
||
openAction->setData(OPEN_ACTION_Y);
|
||
openAction->setShortcut(ShortcutsManager::getShortcutsManager().getShortcut(OPEN_ACTION_Y));
|
||
connect(openAction, SIGNAL(triggered()), this, SLOT(open()));
|
||
|
||
openFolderAction = new QAction(tr("Open Folder"), this);
|
||
openFolderAction->setIcon(QIcon(":/images/viewer_toolbar/openFolder.png"));
|
||
openFolderAction->setToolTip(tr("Open image folder"));
|
||
openFolderAction->setData(OPEN_FOLDER_ACTION_Y);
|
||
openFolderAction->setShortcut(ShortcutsManager::getShortcutsManager().getShortcut(OPEN_FOLDER_ACTION_Y));
|
||
connect(openFolderAction, SIGNAL(triggered()), this, SLOT(openFolder()));
|
||
|
||
openLatestComicAction = new QAction(tr("Open latest comic"), this);
|
||
openLatestComicAction->setToolTip(tr("Open the latest comic opened in the previous reading session"));
|
||
openLatestComicAction->setData(OPEN_LATEST_COMIC_Y);
|
||
openLatestComicAction->setShortcut(ShortcutsManager::getShortcutsManager().getShortcut(OPEN_LATEST_COMIC_Y));
|
||
connect(openLatestComicAction, SIGNAL(triggered()), this, SLOT(openLatestComic()));
|
||
|
||
QAction *recentFileAction = nullptr;
|
||
//TODO: Replace limit with a configurable value
|
||
for (int i = 0; i < Configuration::getConfiguration().getOpenRecentSize(); i++) {
|
||
recentFileAction = new QAction(this);
|
||
recentFileAction->setVisible(false);
|
||
QObject::connect(recentFileAction, &QAction::triggered, this, &MainWindowViewer::openRecent);
|
||
recentFilesActionList.append(recentFileAction);
|
||
}
|
||
|
||
clearRecentFilesAction = new QAction(tr("Clear"), this);
|
||
clearRecentFilesAction->setToolTip(tr("Clear open recent list"));
|
||
connect(clearRecentFilesAction, &QAction::triggered, this, &MainWindowViewer::clearRecentFiles);
|
||
|
||
saveImageAction = new QAction(tr("Save"), this);
|
||
saveImageAction->setIcon(QIcon(":/images/viewer_toolbar/save.png"));
|
||
saveImageAction->setToolTip(tr("Save current page"));
|
||
saveImageAction->setDisabled(true);
|
||
saveImageAction->setData(SAVE_IMAGE_ACTION_Y);
|
||
saveImageAction->setShortcut(ShortcutsManager::getShortcutsManager().getShortcut(SAVE_IMAGE_ACTION_Y));
|
||
connect(saveImageAction, SIGNAL(triggered()), this, SLOT(saveImage()));
|
||
|
||
openPreviousComicAction = new QAction(tr("Previous Comic"), this);
|
||
openPreviousComicAction->setIcon(QIcon(":/images/viewer_toolbar/openPrevious.png"));
|
||
openPreviousComicAction->setToolTip(tr("Open previous comic"));
|
||
openPreviousComicAction->setDisabled(true);
|
||
openPreviousComicAction->setData(OPEN_PREVIOUS_COMIC_ACTION_Y);
|
||
openPreviousComicAction->setShortcut(ShortcutsManager::getShortcutsManager().getShortcut(OPEN_PREVIOUS_COMIC_ACTION_Y));
|
||
connect(openPreviousComicAction, SIGNAL(triggered()), this, SLOT(openPreviousComic()));
|
||
|
||
openNextComicAction = new QAction(tr("Next Comic"), this);
|
||
openNextComicAction->setIcon(QIcon(":/images/viewer_toolbar/openNext.png"));
|
||
openNextComicAction->setToolTip(tr("Open next comic"));
|
||
openNextComicAction->setDisabled(true);
|
||
openNextComicAction->setData(OPEN_NEXT_COMIC_ACTION_Y);
|
||
openNextComicAction->setShortcut(ShortcutsManager::getShortcutsManager().getShortcut(OPEN_NEXT_COMIC_ACTION_Y));
|
||
connect(openNextComicAction, SIGNAL(triggered()), this, SLOT(openNextComic()));
|
||
|
||
prevAction = new QAction(tr("&Previous"), this);
|
||
prevAction->setIcon(QIcon(":/images/viewer_toolbar/previous.png"));
|
||
prevAction->setShortcutContext(Qt::WidgetShortcut);
|
||
prevAction->setToolTip(tr("Go to previous page"));
|
||
prevAction->setDisabled(true);
|
||
prevAction->setData(PREV_ACTION_Y);
|
||
prevAction->setShortcut(ShortcutsManager::getShortcutsManager().getShortcut(PREV_ACTION_Y));
|
||
connect(prevAction, SIGNAL(triggered()), viewer, SLOT(prev()));
|
||
|
||
nextAction = new QAction(tr("&Next"), this);
|
||
nextAction->setIcon(QIcon(":/images/viewer_toolbar/next.png"));
|
||
nextAction->setShortcutContext(Qt::WidgetShortcut);
|
||
nextAction->setToolTip(tr("Go to next page"));
|
||
nextAction->setDisabled(true);
|
||
nextAction->setData(NEXT_ACTION_Y);
|
||
nextAction->setShortcut(ShortcutsManager::getShortcutsManager().getShortcut(NEXT_ACTION_Y));
|
||
connect(nextAction, SIGNAL(triggered()), viewer, SLOT(next()));
|
||
|
||
adjustHeightAction = new QAction(tr("Fit Height"), this);
|
||
adjustHeightAction->setIcon(QIcon(":/images/viewer_toolbar/toHeight.png"));
|
||
//adjustWidth->setCheckable(true);
|
||
adjustHeightAction->setDisabled(true);
|
||
adjustHeightAction->setToolTip(tr("Fit image to height"));
|
||
//adjustWidth->setIcon(QIcon(":/images/fitWidth.png"));
|
||
adjustHeightAction->setData(ADJUST_HEIGHT_ACTION_Y);
|
||
adjustHeightAction->setShortcut(ShortcutsManager::getShortcutsManager().getShortcut(ADJUST_HEIGHT_ACTION_Y));
|
||
adjustHeightAction->setCheckable(true);
|
||
connect(adjustHeightAction, SIGNAL(triggered()), this, SLOT(fitToHeight()));
|
||
|
||
adjustWidthAction = new QAction(tr("Fit Width"), this);
|
||
adjustWidthAction->setIcon(QIcon(":/images/viewer_toolbar/toWidth.png"));
|
||
//adjustWidth->setCheckable(true);
|
||
adjustWidthAction->setDisabled(true);
|
||
adjustWidthAction->setToolTip(tr("Fit image to width"));
|
||
//adjustWidth->setIcon(QIcon(":/images/fitWidth.png"));
|
||
adjustWidthAction->setData(ADJUST_WIDTH_ACTION_Y);
|
||
adjustWidthAction->setShortcut(ShortcutsManager::getShortcutsManager().getShortcut(ADJUST_WIDTH_ACTION_Y));
|
||
adjustWidthAction->setCheckable(true);
|
||
connect(adjustWidthAction, SIGNAL(triggered()), this, SLOT(fitToWidth()));
|
||
|
||
adjustToFullSizeAction = new QAction(tr("Show full size"), this);
|
||
adjustToFullSizeAction->setIcon(QIcon(":/images/viewer_toolbar/full.png"));
|
||
adjustToFullSizeAction->setCheckable(false);
|
||
adjustToFullSizeAction->setDisabled(true);
|
||
adjustToFullSizeAction->setData(ADJUST_TO_FULL_SIZE_ACTION_Y);
|
||
adjustToFullSizeAction->setShortcut(ShortcutsManager::getShortcutsManager().getShortcut(ADJUST_TO_FULL_SIZE_ACTION_Y));
|
||
adjustToFullSizeAction->setCheckable(true);
|
||
connect(adjustToFullSizeAction, SIGNAL(triggered()), this, SLOT(adjustToFullSizeSwitch()));
|
||
|
||
fitToPageAction = new QAction(tr("Fit to page"), this);
|
||
fitToPageAction->setIcon(QIcon(":/images/viewer_toolbar/fitToPage.png"));
|
||
fitToPageAction->setDisabled(true);
|
||
fitToPageAction->setData(FIT_TO_PAGE_ACTION_Y);
|
||
fitToPageAction->setShortcut(ShortcutsManager::getShortcutsManager().getShortcut(FIT_TO_PAGE_ACTION_Y));
|
||
fitToPageAction->setCheckable(true);
|
||
connect(fitToPageAction, SIGNAL(triggered()), this, SLOT(fitToPageSwitch()));
|
||
|
||
//fit modes have to be exclusive and checkable
|
||
auto fitModes = new QActionGroup(this);
|
||
fitModes->addAction(adjustHeightAction);
|
||
fitModes->addAction(adjustWidthAction);
|
||
fitModes->addAction(adjustToFullSizeAction);
|
||
fitModes->addAction(fitToPageAction);
|
||
|
||
switch (Configuration::getConfiguration().getFitMode()) {
|
||
case YACReader::FitMode::ToWidth:
|
||
adjustWidthAction->setChecked(true);
|
||
break;
|
||
case YACReader::FitMode::ToHeight:
|
||
adjustHeightAction->setChecked(true);
|
||
break;
|
||
case YACReader::FitMode::FullRes:
|
||
adjustToFullSizeAction->setChecked(true);
|
||
break;
|
||
case YACReader::FitMode::FullPage:
|
||
fitToPageAction->setChecked(true);
|
||
break;
|
||
default:
|
||
fitToPageAction->setChecked(true);
|
||
}
|
||
|
||
resetZoomAction = new QAction(tr("Reset zoom"), this);
|
||
resetZoomAction->setDisabled(true);
|
||
resetZoomAction->setData(RESET_ZOOM_ACTION_Y);
|
||
resetZoomAction->setShortcut(ShortcutsManager::getShortcutsManager().getShortcut(RESET_ZOOM_ACTION_Y));
|
||
connect(resetZoomAction, SIGNAL(triggered()), this, SLOT(resetZoomLevel()));
|
||
|
||
showZoomSliderlAction = new QAction(tr("Show zoom slider"), this);
|
||
showZoomSliderlAction->setIcon(QIcon(":/images/viewer_toolbar/zoom.png"));
|
||
showZoomSliderlAction->setDisabled(true);
|
||
|
||
increasePageZoomAction = new QAction(tr("Zoom+"), this);
|
||
increasePageZoomAction->setDisabled(true);
|
||
increasePageZoomAction->setData(ZOOM_PLUS_ACTION_Y);
|
||
increasePageZoomAction->setShortcut(ShortcutsManager::getShortcutsManager().getShortcut(ZOOM_PLUS_ACTION_Y));
|
||
connect(increasePageZoomAction, SIGNAL(triggered()), this, SLOT(increasePageZoomLevel()));
|
||
|
||
decreasePageZoomAction = new QAction(tr("Zoom-"), this);
|
||
decreasePageZoomAction->setDisabled(true);
|
||
decreasePageZoomAction->setData(ZOOM_MINUS_ACTION_Y);
|
||
decreasePageZoomAction->setShortcut(ShortcutsManager::getShortcutsManager().getShortcut(ZOOM_MINUS_ACTION_Y));
|
||
connect(decreasePageZoomAction, SIGNAL(triggered()), this, SLOT(decreasePageZoomLevel()));
|
||
|
||
leftRotationAction = new QAction(tr("Rotate image to the left"), this);
|
||
leftRotationAction->setIcon(QIcon(":/images/viewer_toolbar/rotateL.png"));
|
||
leftRotationAction->setDisabled(true);
|
||
leftRotationAction->setData(LEFT_ROTATION_ACTION_Y);
|
||
leftRotationAction->setShortcut(ShortcutsManager::getShortcutsManager().getShortcut(LEFT_ROTATION_ACTION_Y));
|
||
connect(leftRotationAction, SIGNAL(triggered()), viewer, SLOT(rotateLeft()));
|
||
|
||
rightRotationAction = new QAction(tr("Rotate image to the right"), this);
|
||
rightRotationAction->setIcon(QIcon(":/images/viewer_toolbar/rotateR.png"));
|
||
rightRotationAction->setDisabled(true);
|
||
rightRotationAction->setData(RIGHT_ROTATION_ACTION_Y);
|
||
rightRotationAction->setShortcut(ShortcutsManager::getShortcutsManager().getShortcut(RIGHT_ROTATION_ACTION_Y));
|
||
connect(rightRotationAction, SIGNAL(triggered()), viewer, SLOT(rotateRight()));
|
||
|
||
doublePageAction = new QAction(tr("Double page mode"), this);
|
||
doublePageAction->setToolTip(tr("Switch to double page mode"));
|
||
doublePageAction->setIcon(QIcon(":/images/viewer_toolbar/doublePage.png"));
|
||
doublePageAction->setDisabled(true);
|
||
doublePageAction->setCheckable(true);
|
||
doublePageAction->setChecked(Configuration::getConfiguration().getDoublePage());
|
||
doublePageAction->setData(DOUBLE_PAGE_ACTION_Y);
|
||
doublePageAction->setShortcut(ShortcutsManager::getShortcutsManager().getShortcut(DOUBLE_PAGE_ACTION_Y));
|
||
connect(doublePageAction, SIGNAL(triggered()), viewer, SLOT(doublePageSwitch()));
|
||
|
||
//inversed pictures mode
|
||
doubleMangaPageAction = new QAction(tr("Double page manga mode"), this);
|
||
doubleMangaPageAction->setToolTip(tr("Reverse reading order in double page mode"));
|
||
doubleMangaPageAction->setIcon(QIcon(":/images/viewer_toolbar/doubleMangaPage.png"));
|
||
doubleMangaPageAction->setDisabled(true);
|
||
doubleMangaPageAction->setCheckable(true);
|
||
doubleMangaPageAction->setChecked(Configuration::getConfiguration().getDoubleMangaPage());
|
||
doubleMangaPageAction->setData(DOUBLE_MANGA_PAGE_ACTION_Y);
|
||
doubleMangaPageAction->setShortcut(ShortcutsManager::getShortcutsManager().getShortcut(DOUBLE_MANGA_PAGE_ACTION_Y));
|
||
connect(doubleMangaPageAction, SIGNAL(triggered()), viewer, SLOT(doubleMangaPageSwitch()));
|
||
|
||
goToPageAction = new QAction(tr("Go To"), this);
|
||
goToPageAction->setIcon(QIcon(":/images/viewer_toolbar/goto.png"));
|
||
goToPageAction->setDisabled(true);
|
||
goToPageAction->setToolTip(tr("Go to page ..."));
|
||
goToPageAction->setData(GO_TO_PAGE_ACTION_Y);
|
||
goToPageAction->setShortcut(ShortcutsManager::getShortcutsManager().getShortcut(GO_TO_PAGE_ACTION_Y));
|
||
connect(goToPageAction, SIGNAL(triggered()), viewer, SLOT(showGoToDialog()));
|
||
|
||
optionsAction = new QAction(tr("Options"), this);
|
||
optionsAction->setToolTip(tr("YACReader options"));
|
||
optionsAction->setData(OPTIONS_ACTION_Y);
|
||
optionsAction->setShortcut(ShortcutsManager::getShortcutsManager().getShortcut(OPTIONS_ACTION_Y));
|
||
optionsAction->setIcon(QIcon(":/images/viewer_toolbar/options.png"));
|
||
|
||
connect(optionsAction, SIGNAL(triggered()), optionsDialog, SLOT(show()));
|
||
|
||
helpAboutAction = new QAction(tr("Help"), this);
|
||
helpAboutAction->setToolTip(tr("Help, About YACReader"));
|
||
helpAboutAction->setIcon(QIcon(":/images/viewer_toolbar/help.png"));
|
||
helpAboutAction->setData(HELP_ABOUT_ACTION_Y);
|
||
helpAboutAction->setShortcut(ShortcutsManager::getShortcutsManager().getShortcut(HELP_ABOUT_ACTION_Y));
|
||
connect(helpAboutAction, SIGNAL(triggered()), had, SLOT(show()));
|
||
|
||
showMagnifyingGlassAction = new QAction(tr("Magnifying glass"), this);
|
||
showMagnifyingGlassAction->setToolTip(tr("Switch Magnifying glass"));
|
||
showMagnifyingGlassAction->setIcon(QIcon(":/images/viewer_toolbar/magnifyingGlass.png"));
|
||
showMagnifyingGlassAction->setDisabled(true);
|
||
showMagnifyingGlassAction->setCheckable(true);
|
||
showMagnifyingGlassAction->setData(SHOW_MAGNIFYING_GLASS_ACTION_Y);
|
||
showMagnifyingGlassAction->setShortcut(ShortcutsManager::getShortcutsManager().getShortcut(SHOW_MAGNIFYING_GLASS_ACTION_Y));
|
||
connect(showMagnifyingGlassAction, SIGNAL(triggered()), viewer, SLOT(magnifyingGlassSwitch()));
|
||
|
||
setBookmarkAction = new QAction(tr("Set bookmark"), this);
|
||
setBookmarkAction->setToolTip(tr("Set a bookmark on the current page"));
|
||
setBookmarkAction->setIcon(QIcon(":/images/viewer_toolbar/bookmark.png"));
|
||
setBookmarkAction->setDisabled(true);
|
||
setBookmarkAction->setCheckable(true);
|
||
setBookmarkAction->setData(SET_BOOKMARK_ACTION_Y);
|
||
setBookmarkAction->setShortcut(ShortcutsManager::getShortcutsManager().getShortcut(SET_BOOKMARK_ACTION_Y));
|
||
connect(setBookmarkAction, SIGNAL(triggered(bool)), viewer, SLOT(setBookmark(bool)));
|
||
connect(viewer, SIGNAL(pageAvailable(bool)), setBookmarkAction, SLOT(setEnabled(bool)));
|
||
connect(viewer, SIGNAL(pageIsBookmark(bool)), setBookmarkAction, SLOT(setChecked(bool)));
|
||
|
||
showBookmarksAction = new QAction(tr("Show bookmarks"), this);
|
||
showBookmarksAction->setToolTip(tr("Show the bookmarks of the current comic"));
|
||
showBookmarksAction->setIcon(QIcon(":/images/viewer_toolbar/showBookmarks.png"));
|
||
showBookmarksAction->setDisabled(true);
|
||
showBookmarksAction->setData(SHOW_BOOKMARKS_ACTION_Y);
|
||
showBookmarksAction->setShortcut(ShortcutsManager::getShortcutsManager().getShortcut(SHOW_BOOKMARKS_ACTION_Y));
|
||
connect(showBookmarksAction, SIGNAL(triggered()), viewer->getBookmarksDialog(), SLOT(show()));
|
||
|
||
showShorcutsAction = new QAction(tr("Show keyboard shortcuts"), this);
|
||
showShorcutsAction->setIcon(QIcon(":/images/viewer_toolbar/shortcuts.png"));
|
||
showShorcutsAction->setData(SHOW_SHORCUTS_ACTION_Y);
|
||
showShorcutsAction->setShortcut(ShortcutsManager::getShortcutsManager().getShortcut(SHOW_SHORCUTS_ACTION_Y));
|
||
//connect(showShorcutsAction, SIGNAL(triggered()),shortcutsDialog,SLOT(show()));
|
||
connect(showShorcutsAction, SIGNAL(triggered()), editShortcutsDialog, SLOT(show()));
|
||
|
||
showInfoAction = new QAction(tr("Show Info"), this);
|
||
showInfoAction->setIcon(QIcon(":/images/viewer_toolbar/info.png"));
|
||
showInfoAction->setDisabled(true);
|
||
showInfoAction->setData(SHOW_INFO_ACTION_Y);
|
||
showInfoAction->setShortcut(ShortcutsManager::getShortcutsManager().getShortcut(SHOW_INFO_ACTION_Y));
|
||
connect(showInfoAction, SIGNAL(triggered()), viewer, SLOT(informationSwitch()));
|
||
|
||
closeAction = new QAction(tr("Close"), this);
|
||
closeAction->setIcon(QIcon(":/images/viewer_toolbar/close.png"));
|
||
closeAction->setData(CLOSE_ACTION_Y);
|
||
closeAction->setShortcut(ShortcutsManager::getShortcutsManager().getShortcut(CLOSE_ACTION_Y));
|
||
connect(closeAction, SIGNAL(triggered()), this, SLOT(close()));
|
||
|
||
showDictionaryAction = new QAction(tr("Show Dictionary"), this);
|
||
showDictionaryAction->setIcon(QIcon(":/images/viewer_toolbar/translator.png"));
|
||
//showDictionaryAction->setCheckable(true);
|
||
showDictionaryAction->setDisabled(true);
|
||
showDictionaryAction->setData(SHOW_DICTIONARY_ACTION_Y);
|
||
showDictionaryAction->setShortcut(ShortcutsManager::getShortcutsManager().getShortcut(SHOW_DICTIONARY_ACTION_Y));
|
||
connect(showDictionaryAction, SIGNAL(triggered()), viewer, SLOT(translatorSwitch()));
|
||
|
||
//deprecated
|
||
alwaysOnTopAction = new QAction(tr("Always on top"), this);
|
||
alwaysOnTopAction->setIcon(QIcon(":/images/alwaysOnTop.png"));
|
||
alwaysOnTopAction->setCheckable(true);
|
||
alwaysOnTopAction->setDisabled(true);
|
||
alwaysOnTopAction->setChecked(Configuration::getConfiguration().getAlwaysOnTop());
|
||
alwaysOnTopAction->setData(ALWAYS_ON_TOP_ACTION_Y);
|
||
alwaysOnTopAction->setShortcut(ShortcutsManager::getShortcutsManager().getShortcut(ALWAYS_ON_TOP_ACTION_Y));
|
||
connect(alwaysOnTopAction, SIGNAL(triggered()), this, SLOT(alwaysOnTopSwitch()));
|
||
|
||
showFlowAction = new QAction(tr("Show go to flow"), this);
|
||
showFlowAction->setIcon(QIcon(":/images/viewer_toolbar/flow.png"));
|
||
showFlowAction->setDisabled(true);
|
||
showFlowAction->setData(SHOW_FLOW_ACTION_Y);
|
||
showFlowAction->setShortcut(ShortcutsManager::getShortcutsManager().getShortcut(SHOW_FLOW_ACTION_Y));
|
||
connect(showFlowAction, SIGNAL(triggered()), viewer, SLOT(goToFlowSwitch()));
|
||
|
||
showEditShortcutsAction = new QAction(tr("Edit shortcuts"), this);
|
||
showEditShortcutsAction->setData(SHOW_EDIT_SHORTCUTS_ACTION_Y);
|
||
showEditShortcutsAction->setShortcut(ShortcutsManager::getShortcutsManager().getShortcut(SHOW_EDIT_SHORTCUTS_ACTION_Y));
|
||
connect(showEditShortcutsAction, SIGNAL(triggered()), editShortcutsDialog, SLOT(show()));
|
||
}
|
||
|
||
void MainWindowViewer::createToolBars()
|
||
{
|
||
#ifdef Q_OS_MAC
|
||
comicToolBar = new YACReaderMacOSXToolbar(this);
|
||
#else
|
||
comicToolBar = addToolBar(tr("&File"));
|
||
#endif
|
||
|
||
#ifdef Q_OS_MAC
|
||
//comicToolBar->setIconSize(QSize(16,16));
|
||
#else
|
||
comicToolBar->setIconSize(QSize(18, 18));
|
||
comicToolBar->setStyleSheet("QToolBar{border:none;}");
|
||
#endif
|
||
|
||
#ifdef Q_OS_MAC
|
||
comicToolBar->addAction(openAction);
|
||
comicToolBar->addAction(openFolderAction);
|
||
#else
|
||
auto recentmenu = new QMenu(tr("Open recent"));
|
||
recentmenu->addActions(recentFilesActionList);
|
||
recentmenu->addSeparator();
|
||
recentmenu->addAction(clearRecentFilesAction);
|
||
refreshRecentFilesActionList();
|
||
|
||
auto tb = new QToolButton();
|
||
tb->addAction(openAction);
|
||
tb->addAction(openLatestComicAction);
|
||
tb->addAction(openFolderAction);
|
||
tb->addAction(recentmenu->menuAction());
|
||
tb->setPopupMode(QToolButton::MenuButtonPopup);
|
||
tb->setDefaultAction(openAction);
|
||
|
||
comicToolBar->addWidget(tb);
|
||
#endif
|
||
|
||
comicToolBar->addAction(saveImageAction);
|
||
comicToolBar->addAction(openPreviousComicAction);
|
||
comicToolBar->addAction(openNextComicAction);
|
||
|
||
comicToolBar->addSeparator();
|
||
|
||
comicToolBar->addAction(prevAction);
|
||
comicToolBar->addAction(nextAction);
|
||
comicToolBar->addAction(goToPageAction);
|
||
|
||
comicToolBar->addSeparator();
|
||
|
||
comicToolBar->addAction(adjustWidthAction);
|
||
comicToolBar->addAction(adjustHeightAction);
|
||
comicToolBar->addAction(adjustToFullSizeAction);
|
||
comicToolBar->addAction(fitToPageAction);
|
||
|
||
zoomSliderAction = new YACReaderSlider(this);
|
||
zoomSliderAction->hide();
|
||
|
||
comicToolBar->addAction(showZoomSliderlAction);
|
||
|
||
connect(showZoomSliderlAction, SIGNAL(triggered()), this, SLOT(toggleFitToWidthSlider()));
|
||
connect(zoomSliderAction, SIGNAL(zoomRatioChanged(int)), viewer, SLOT(updateZoomRatio(int)));
|
||
connect(viewer, SIGNAL(zoomUpdated(int)), zoomSliderAction, SLOT(updateZoomRatio(int)));
|
||
|
||
comicToolBar->addAction(leftRotationAction);
|
||
comicToolBar->addAction(rightRotationAction);
|
||
comicToolBar->addAction(doublePageAction);
|
||
comicToolBar->addAction(doubleMangaPageAction);
|
||
|
||
comicToolBar->addSeparator();
|
||
|
||
comicToolBar->addAction(showMagnifyingGlassAction);
|
||
|
||
comicToolBar->addSeparator();
|
||
|
||
comicToolBar->addAction(setBookmarkAction);
|
||
comicToolBar->addAction(showBookmarksAction);
|
||
|
||
comicToolBar->addSeparator();
|
||
|
||
comicToolBar->addAction(showDictionaryAction);
|
||
comicToolBar->addAction(showFlowAction);
|
||
comicToolBar->addAction(showInfoAction);
|
||
|
||
#ifdef Q_OS_MAC
|
||
comicToolBar->addStretch();
|
||
#else
|
||
comicToolBar->addWidget(new YACReaderToolBarStretch());
|
||
#endif
|
||
|
||
comicToolBar->addAction(showShorcutsAction);
|
||
comicToolBar->addAction(optionsAction);
|
||
comicToolBar->addAction(helpAboutAction);
|
||
//comicToolBar->addAction(closeAction);
|
||
|
||
#ifndef Q_OS_MAC
|
||
comicToolBar->setMovable(false);
|
||
#endif
|
||
|
||
viewer->addAction(openAction);
|
||
viewer->addAction(openFolderAction);
|
||
viewer->addAction(saveImageAction);
|
||
viewer->addAction(openPreviousComicAction);
|
||
viewer->addAction(openNextComicAction);
|
||
YACReader::addSperator(viewer);
|
||
|
||
viewer->addAction(prevAction);
|
||
viewer->addAction(nextAction);
|
||
viewer->addAction(goToPageAction);
|
||
viewer->addAction(adjustHeightAction);
|
||
viewer->addAction(adjustWidthAction);
|
||
viewer->addAction(adjustToFullSizeAction);
|
||
viewer->addAction(fitToPageAction);
|
||
viewer->addAction(leftRotationAction);
|
||
viewer->addAction(rightRotationAction);
|
||
viewer->addAction(doublePageAction);
|
||
viewer->addAction(doubleMangaPageAction);
|
||
YACReader::addSperator(viewer);
|
||
|
||
viewer->addAction(showMagnifyingGlassAction);
|
||
viewer->addAction(increasePageZoomAction);
|
||
viewer->addAction(decreasePageZoomAction);
|
||
viewer->addAction(resetZoomAction);
|
||
YACReader::addSperator(viewer);
|
||
|
||
viewer->addAction(setBookmarkAction);
|
||
viewer->addAction(showBookmarksAction);
|
||
YACReader::addSperator(viewer);
|
||
|
||
viewer->addAction(showDictionaryAction);
|
||
viewer->addAction(showFlowAction);
|
||
viewer->addAction(showInfoAction);
|
||
YACReader::addSperator(viewer);
|
||
|
||
viewer->addAction(showShorcutsAction);
|
||
viewer->addAction(showEditShortcutsAction);
|
||
viewer->addAction(optionsAction);
|
||
viewer->addAction(helpAboutAction);
|
||
YACReader::addSperator(viewer);
|
||
|
||
viewer->addAction(closeAction);
|
||
|
||
viewer->setContextMenuPolicy(Qt::ActionsContextMenu);
|
||
|
||
//MacOSX app menus
|
||
#ifdef Q_OS_MAC
|
||
auto menuBar = this->menuBar();
|
||
//about / preferences
|
||
//TODO
|
||
|
||
//file
|
||
auto fileMenu = new QMenu(tr("File"));
|
||
|
||
fileMenu->addAction(openAction);
|
||
fileMenu->addAction(openLatestComicAction);
|
||
fileMenu->addAction(openFolderAction);
|
||
fileMenu->addSeparator();
|
||
fileMenu->addAction(saveImageAction);
|
||
fileMenu->addSeparator();
|
||
|
||
auto recentmenu = new QMenu(tr("Open recent"));
|
||
recentmenu->addActions(recentFilesActionList);
|
||
recentmenu->addSeparator();
|
||
recentmenu->addAction(clearRecentFilesAction);
|
||
refreshRecentFilesActionList();
|
||
fileMenu->addMenu(recentmenu);
|
||
|
||
fileMenu->addSeparator();
|
||
fileMenu->addAction(closeAction);
|
||
|
||
auto editMenu = new QMenu(tr("Edit"));
|
||
editMenu->addAction(leftRotationAction);
|
||
editMenu->addAction(rightRotationAction);
|
||
|
||
auto viewMenu = new QMenu(tr("View"));
|
||
viewMenu->addAction(adjustHeightAction);
|
||
viewMenu->addAction(adjustWidthAction);
|
||
viewMenu->addAction(fitToPageAction);
|
||
viewMenu->addAction(adjustToFullSizeAction);
|
||
viewMenu->addSeparator();
|
||
viewMenu->addAction(increasePageZoomAction);
|
||
viewMenu->addAction(decreasePageZoomAction);
|
||
viewMenu->addAction(resetZoomAction);
|
||
viewMenu->addAction(showZoomSliderlAction);
|
||
viewMenu->addSeparator();
|
||
viewMenu->addAction(doublePageAction);
|
||
viewMenu->addAction(doubleMangaPageAction);
|
||
viewMenu->addSeparator();
|
||
viewMenu->addAction(showMagnifyingGlassAction);
|
||
|
||
auto goMenu = new QMenu(tr("Go"));
|
||
goMenu->addAction(prevAction);
|
||
goMenu->addAction(nextAction);
|
||
goMenu->addAction(goToPageAction);
|
||
goMenu->addSeparator();
|
||
goMenu->addAction(setBookmarkAction);
|
||
goMenu->addAction(showBookmarksAction);
|
||
|
||
auto windowMenu = new QMenu(tr("Window"));
|
||
windowMenu->addAction(optionsAction); // this action goes to MacOS's Preference menu by Qt
|
||
windowMenu->addAction(showShorcutsAction);
|
||
windowMenu->addAction(showFlowAction);
|
||
windowMenu->addAction(showInfoAction);
|
||
windowMenu->addAction(showDictionaryAction);
|
||
|
||
auto helpMenu = new QMenu(tr("Help"));
|
||
helpMenu->addAction(helpAboutAction);
|
||
|
||
menuBar->addMenu(fileMenu);
|
||
menuBar->addMenu(editMenu);
|
||
menuBar->addMenu(viewMenu);
|
||
menuBar->addMenu(goMenu);
|
||
menuBar->addMenu(windowMenu);
|
||
menuBar->addMenu(helpMenu);
|
||
|
||
//tool bar
|
||
//QMenu * toolbarMenu = new QMenu(tr("Toolbar"));
|
||
//toolbarMenu->addAction();
|
||
//TODO
|
||
|
||
//menu->addMenu(toolbarMenu);
|
||
|
||
//attach toolbar
|
||
|
||
comicToolBar->attachToWindow(this->windowHandle());
|
||
|
||
#endif
|
||
}
|
||
|
||
void MainWindowViewer::refreshRecentFilesActionList()
|
||
{
|
||
QStringList recentFilePaths = Configuration::getConfiguration().openRecentList();
|
||
|
||
//TODO: Replace limit with something configurable
|
||
int iteration = (recentFilePaths.size() < Configuration::getConfiguration().getOpenRecentSize())
|
||
? recentFilePaths.size()
|
||
: Configuration::getConfiguration().getOpenRecentSize();
|
||
for (int i = 0; i < iteration; i++) {
|
||
QString strippedName = QFileInfo(recentFilePaths.at(i)).fileName();
|
||
recentFilesActionList.at(i)->setText(strippedName);
|
||
recentFilesActionList.at(i)->setData(recentFilePaths.at(i));
|
||
recentFilesActionList.at(i)->setVisible(true);
|
||
}
|
||
|
||
for (int i = iteration; i < Configuration::getConfiguration().getOpenRecentSize(); i++) {
|
||
recentFilesActionList.at(i)->setVisible(false);
|
||
}
|
||
}
|
||
|
||
void MainWindowViewer::clearRecentFiles()
|
||
{
|
||
Configuration::getConfiguration().clearOpenRecentList();
|
||
refreshRecentFilesActionList();
|
||
}
|
||
|
||
void MainWindowViewer::openRecent()
|
||
{
|
||
auto action = qobject_cast<QAction *>(sender());
|
||
|
||
openComicFromRecentAction(action);
|
||
}
|
||
|
||
void MainWindowViewer::openLatestComic()
|
||
{
|
||
if (recentFilesActionList.isEmpty()) {
|
||
return;
|
||
}
|
||
|
||
openComicFromRecentAction(recentFilesActionList[0]);
|
||
}
|
||
|
||
void MainWindowViewer::openComicFromRecentAction(QAction *action)
|
||
{
|
||
if (action == nullptr) {
|
||
return;
|
||
}
|
||
|
||
QFileInfo info1(action->data().toString());
|
||
if (info1.exists()) {
|
||
if (info1.isFile()) {
|
||
openComicFromPath(action->data().toString());
|
||
} else if (info1.isDir()) {
|
||
openFolderFromPath(action->data().toString());
|
||
}
|
||
}
|
||
}
|
||
|
||
void MainWindowViewer::reloadOptions()
|
||
{
|
||
viewer->updateConfig(settings);
|
||
}
|
||
|
||
void MainWindowViewer::open()
|
||
{
|
||
QFileDialog openDialog;
|
||
#ifndef use_unarr
|
||
QString pathFile = openDialog.getOpenFileName(this, tr("Open Comic"), currentDirectory, tr("Comic files") + "(*.cbr *.cbz *.rar *.zip *.tar *.pdf *.7z *.cb7 *.arj *.cbt)");
|
||
#else
|
||
QString pathFile = openDialog.getOpenFileName(this, tr("Open Comic"), currentDirectory, tr("Comic files") + "(*.cbr *.cbz *.rar *.zip *.tar *.pdf *.cbt)");
|
||
#endif
|
||
if (!pathFile.isEmpty()) {
|
||
openComicFromPath(pathFile);
|
||
}
|
||
}
|
||
|
||
void MainWindowViewer::open(QString path, ComicDB &comic, QList<ComicDB> &siblings)
|
||
{
|
||
//currentComicDB = comic;
|
||
//siblingComics = siblings;
|
||
|
||
QFileInfo fi(path);
|
||
|
||
if (!comic.info.title.isNull() && !comic.info.title.toString().isEmpty())
|
||
setWindowTitle("YACReader - " + comic.info.title.toString());
|
||
else
|
||
setWindowTitle("YACReader - " + fi.fileName());
|
||
|
||
viewer->open(path, comic);
|
||
enableActions();
|
||
int index = siblings.indexOf(comic);
|
||
|
||
optionsDialog->setFilters(currentComicDB.info.brightness, currentComicDB.info.contrast, currentComicDB.info.gamma);
|
||
|
||
if (index > 0)
|
||
openPreviousComicAction->setDisabled(false);
|
||
else
|
||
openPreviousComicAction->setDisabled(true);
|
||
|
||
if (index + 1 < siblings.count())
|
||
openNextComicAction->setDisabled(false);
|
||
else
|
||
openNextComicAction->setDisabled(true);
|
||
}
|
||
|
||
void MainWindowViewer::open(QString path, qint64 comicId, qint64 libraryId)
|
||
{
|
||
//QString pathFile = QCoreApplication::arguments().at(1);
|
||
currentDirectory = path;
|
||
//quint64 comicId = QCoreApplication::arguments().at(2).split("=").at(1).toULongLong();
|
||
//libraryId = QCoreApplication::arguments().at(3).split("=").at(1).toULongLong();
|
||
this->libraryId = libraryId;
|
||
// this->path=path;
|
||
|
||
enableActions();
|
||
|
||
currentComicDB.id = comicId;
|
||
YACReaderLocalClient client;
|
||
int tries = 1;
|
||
bool success = false;
|
||
while (!(success = client.requestComicInfo(libraryId, currentComicDB, siblingComics)) && tries != 0)
|
||
tries--;
|
||
|
||
if (success) {
|
||
isClient = true;
|
||
open(path + currentComicDB.path, currentComicDB, siblingComics);
|
||
} else {
|
||
isClient = false;
|
||
QMessageBox::information(this, "Connection Error", "Unable to connect to YACReaderLibrary");
|
||
//error
|
||
}
|
||
|
||
optionsDialog->setFilters(currentComicDB.info.brightness, currentComicDB.info.contrast, currentComicDB.info.gamma);
|
||
}
|
||
|
||
void MainWindowViewer::openComicFromPath(QString pathFile)
|
||
{
|
||
openComic(pathFile);
|
||
isClient = false; //this method is used for direct openings
|
||
}
|
||
|
||
//isClient shouldn't be modified when a siblinig comic is opened
|
||
void MainWindowViewer::openSiblingComic(QString pathFile)
|
||
{
|
||
openComic(pathFile);
|
||
}
|
||
|
||
void MainWindowViewer::openComic(QString pathFile)
|
||
{
|
||
QFileInfo fi(pathFile);
|
||
currentDirectory = fi.dir().absolutePath();
|
||
getSiblingComics(fi.absolutePath(), fi.fileName());
|
||
|
||
setWindowTitle("YACReader - " + fi.fileName());
|
||
|
||
enableActions();
|
||
|
||
viewer->open(pathFile);
|
||
Configuration::getConfiguration().updateOpenRecentList(fi.absoluteFilePath());
|
||
refreshRecentFilesActionList();
|
||
}
|
||
|
||
void MainWindowViewer::openFolder()
|
||
{
|
||
QFileDialog openDialog;
|
||
QString pathDir = openDialog.getExistingDirectory(this, tr("Open folder"), currentDirectory);
|
||
if (!pathDir.isEmpty()) {
|
||
openFolderFromPath(pathDir);
|
||
isClient = false;
|
||
}
|
||
}
|
||
|
||
void MainWindowViewer::openFolderFromPath(QString pathDir)
|
||
{
|
||
currentDirectory = pathDir; //TODO ??
|
||
QFileInfo fi(pathDir);
|
||
getSiblingComics(fi.absolutePath(), fi.fileName());
|
||
|
||
setWindowTitle("YACReader - " + fi.fileName());
|
||
|
||
enableActions();
|
||
|
||
viewer->open(pathDir);
|
||
Configuration::getConfiguration().updateOpenRecentList(fi.absoluteFilePath());
|
||
refreshRecentFilesActionList();
|
||
}
|
||
|
||
void MainWindowViewer::openFolderFromPath(QString pathDir, QString atFileName)
|
||
{
|
||
currentDirectory = pathDir; //TODO ??
|
||
QFileInfo fi(pathDir);
|
||
getSiblingComics(fi.absolutePath(), fi.fileName());
|
||
|
||
setWindowTitle("YACReader - " + fi.fileName());
|
||
|
||
enableActions();
|
||
|
||
QDir d(pathDir);
|
||
d.setFilter(QDir::Files | QDir::NoDotAndDotDot);
|
||
d.setNameFilters(Comic::getSupportedImageFormats());
|
||
d.setSorting(QDir::Name | QDir::IgnoreCase | QDir::LocaleAware);
|
||
QStringList list = d.entryList();
|
||
|
||
qSort(list.begin(), list.end(), naturalSortLessThanCI);
|
||
int i = 0;
|
||
foreach (QString path, list) {
|
||
if (path.endsWith(atFileName))
|
||
break;
|
||
i++;
|
||
}
|
||
|
||
int index = 0;
|
||
if (i < list.count())
|
||
index = i;
|
||
|
||
viewer->open(pathDir, index);
|
||
}
|
||
|
||
void MainWindowViewer::saveImage()
|
||
{
|
||
QFileDialog saveDialog;
|
||
QString pathFile = saveDialog.getSaveFileName(this, tr("Save current page"), currentDirectoryImgDest + "/" + tr("page_%1.jpg").arg(viewer->getIndex()), tr("Image files (*.jpg)"));
|
||
if (!pathFile.isEmpty()) {
|
||
QFileInfo fi(pathFile);
|
||
currentDirectoryImgDest = fi.absolutePath();
|
||
const QPixmap *p = viewer->pixmap();
|
||
if (p != nullptr)
|
||
p->save(pathFile);
|
||
}
|
||
}
|
||
|
||
void MainWindowViewer::enableActions()
|
||
{
|
||
saveImageAction->setDisabled(false);
|
||
prevAction->setDisabled(false);
|
||
nextAction->setDisabled(false);
|
||
adjustHeightAction->setDisabled(false);
|
||
adjustWidthAction->setDisabled(false);
|
||
goToPageAction->setDisabled(false);
|
||
//alwaysOnTopAction->setDisabled(false);
|
||
leftRotationAction->setDisabled(false);
|
||
rightRotationAction->setDisabled(false);
|
||
showMagnifyingGlassAction->setDisabled(false);
|
||
doublePageAction->setDisabled(false);
|
||
doubleMangaPageAction->setDisabled(false);
|
||
adjustToFullSizeAction->setDisabled(false);
|
||
adjustToFullSizeAction->setDisabled(false);
|
||
fitToPageAction->setDisabled(false);
|
||
showZoomSliderlAction->setDisabled(false);
|
||
increasePageZoomAction->setDisabled(false);
|
||
decreasePageZoomAction->setDisabled(false);
|
||
resetZoomAction->setDisabled(false);
|
||
//setBookmark->setDisabled(false);
|
||
showBookmarksAction->setDisabled(false);
|
||
showInfoAction->setDisabled(false); //TODO enable goTo and showInfo (or update) when numPages emited
|
||
showDictionaryAction->setDisabled(false);
|
||
showFlowAction->setDisabled(false);
|
||
|
||
#ifdef Q_OS_MAC
|
||
activateWindow();
|
||
raise();
|
||
#endif
|
||
}
|
||
void MainWindowViewer::disableActions()
|
||
{
|
||
saveImageAction->setDisabled(true);
|
||
prevAction->setDisabled(true);
|
||
nextAction->setDisabled(true);
|
||
adjustHeightAction->setDisabled(true);
|
||
adjustWidthAction->setDisabled(true);
|
||
goToPageAction->setDisabled(true);
|
||
//alwaysOnTopAction->setDisabled(true);
|
||
leftRotationAction->setDisabled(true);
|
||
rightRotationAction->setDisabled(true);
|
||
showMagnifyingGlassAction->setDisabled(true);
|
||
doublePageAction->setDisabled(true);
|
||
doubleMangaPageAction->setDisabled(true);
|
||
adjustToFullSizeAction->setDisabled(true);
|
||
fitToPageAction->setDisabled(true);
|
||
showZoomSliderlAction->setDisabled(true);
|
||
increasePageZoomAction->setDisabled(true);
|
||
decreasePageZoomAction->setDisabled(true);
|
||
resetZoomAction->setDisabled(true);
|
||
setBookmarkAction->setDisabled(true);
|
||
showBookmarksAction->setDisabled(true);
|
||
showInfoAction->setDisabled(true); //TODO enable goTo and showInfo (or update) when numPages emited
|
||
openPreviousComicAction->setDisabled(true);
|
||
openNextComicAction->setDisabled(true);
|
||
showDictionaryAction->setDisabled(true);
|
||
showFlowAction->setDisabled(true);
|
||
}
|
||
|
||
void MainWindowViewer::keyPressEvent(QKeyEvent *event)
|
||
{
|
||
//TODO remove unused keys
|
||
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(TOGGLE_FULL_SCREEN_ACTION_Y)) {
|
||
toggleFullScreen();
|
||
event->accept();
|
||
} else if (key == ShortcutsManager::getShortcutsManager().getShortcut(TOGGLE_TOOL_BARS_ACTION_Y)) {
|
||
toggleToolBars();
|
||
event->accept();
|
||
} else if (key == ShortcutsManager::getShortcutsManager().getShortcut(CHANGE_FIT_ACTION_Y)) {
|
||
toggleWidthHeight();
|
||
event->accept();
|
||
} else
|
||
QWidget::keyPressEvent(event);
|
||
}
|
||
|
||
void MainWindowViewer::mouseDoubleClickEvent(QMouseEvent *event)
|
||
{
|
||
toggleFullScreen();
|
||
event->accept();
|
||
}
|
||
|
||
void MainWindowViewer::toggleFullScreen()
|
||
{
|
||
fullscreen ? toNormal() : toFullScreen();
|
||
Configuration::getConfiguration().setFullScreen(fullscreen = !fullscreen);
|
||
}
|
||
|
||
#ifdef Q_OS_WIN //fullscreen mode in Windows for preventing this bug: QTBUG-41309 https://bugreports.qt.io/browse/QTBUG-41309
|
||
|
||
void MainWindowViewer::toFullScreen()
|
||
{
|
||
fromMaximized = this->isMaximized();
|
||
|
||
hideToolBars();
|
||
viewer->hide();
|
||
viewer->fullscreen = true; //TODO, change by the right use of windowState();
|
||
|
||
previousWindowFlags = windowFlags();
|
||
previousPos = pos();
|
||
previousSize = size();
|
||
|
||
showNormal();
|
||
setWindowFlags(previousWindowFlags | Qt::FramelessWindowHint);
|
||
|
||
const QRect r = windowHandle()->screen()->geometry();
|
||
|
||
move(r.x(), r.y());
|
||
resize(r.width(), r.height() + 1);
|
||
show();
|
||
|
||
viewer->show();
|
||
if (viewer->magnifyingGlassIsVisible())
|
||
viewer->showMagnifyingGlass();
|
||
}
|
||
|
||
void MainWindowViewer::toNormal()
|
||
{
|
||
//show all
|
||
viewer->hide();
|
||
viewer->fullscreen = false; //TODO, change by the right use of windowState();
|
||
//viewer->hideMagnifyingGlass();
|
||
|
||
setWindowFlags(previousWindowFlags);
|
||
move(previousPos);
|
||
resize(previousSize);
|
||
show();
|
||
|
||
if (fromMaximized)
|
||
showMaximized();
|
||
|
||
if (Configuration::getConfiguration().getShowToolbars())
|
||
showToolBars();
|
||
viewer->show();
|
||
if (viewer->magnifyingGlassIsVisible())
|
||
viewer->showMagnifyingGlass();
|
||
}
|
||
|
||
#else
|
||
void MainWindowViewer::toFullScreen()
|
||
{
|
||
fromMaximized = this->isMaximized();
|
||
|
||
hideToolBars();
|
||
viewer->hide();
|
||
viewer->fullscreen = true; //TODO, change by the right use of windowState();
|
||
setWindowState(Qt::WindowFullScreen);
|
||
viewer->show();
|
||
if (viewer->magnifyingGlassIsVisible())
|
||
viewer->showMagnifyingGlass();
|
||
}
|
||
|
||
void MainWindowViewer::toNormal()
|
||
{
|
||
//show all
|
||
viewer->hide();
|
||
viewer->fullscreen = false; //TODO, change by the right use of windowState();
|
||
//viewer->hideMagnifyingGlass();
|
||
if (fromMaximized)
|
||
showMaximized();
|
||
else
|
||
showNormal();
|
||
|
||
if (Configuration::getConfiguration().getShowToolbars())
|
||
showToolBars();
|
||
viewer->show();
|
||
if (viewer->magnifyingGlassIsVisible())
|
||
viewer->showMagnifyingGlass();
|
||
}
|
||
#endif
|
||
|
||
void MainWindowViewer::toggleToolBars()
|
||
{
|
||
toolbars ? hideToolBars() : showToolBars();
|
||
|
||
Configuration::getConfiguration().setShowToolbars(toolbars);
|
||
#ifndef Q_OS_MAC
|
||
comicToolBar->setMovable(false);
|
||
#endif
|
||
}
|
||
void MainWindowViewer::hideToolBars()
|
||
{
|
||
//hide all
|
||
this->comicToolBar->hide();
|
||
toolbars = false;
|
||
}
|
||
|
||
void MainWindowViewer::showToolBars()
|
||
{
|
||
this->comicToolBar->show();
|
||
toolbars = true;
|
||
}
|
||
void MainWindowViewer::fitToWidth()
|
||
{
|
||
Configuration::getConfiguration().setFitMode(YACReader::FitMode::ToWidth);
|
||
viewer->setZoomFactor(100);
|
||
viewer->updatePage();
|
||
}
|
||
void MainWindowViewer::fitToHeight()
|
||
{
|
||
Configuration::getConfiguration().setFitMode(YACReader::FitMode::ToHeight);
|
||
viewer->setZoomFactor(100);
|
||
viewer->updatePage();
|
||
}
|
||
|
||
void MainWindowViewer::toggleWidthHeight()
|
||
{
|
||
//Only switch to "Fit to height" when we're in "Fit to width"
|
||
if (Configuration::getConfiguration().getFitMode() == YACReader::FitMode::ToWidth) {
|
||
adjustHeightAction->trigger();
|
||
}
|
||
//Default to "Fit to width" in all other cases
|
||
else {
|
||
adjustWidthAction->trigger();
|
||
}
|
||
}
|
||
void MainWindowViewer::checkNewVersion()
|
||
{
|
||
Configuration &conf = Configuration::getConfiguration();
|
||
QDate lastCheck = conf.getLastVersionCheck();
|
||
QDate current = QDate::currentDate();
|
||
if (lastCheck.isNull() || lastCheck.daysTo(current) >= conf.getNumDaysBetweenVersionChecks()) {
|
||
versionChecker = new HttpVersionChecker();
|
||
|
||
connect(versionChecker, SIGNAL(newVersionDetected()),
|
||
this, SLOT(newVersion()));
|
||
|
||
auto tT = new QTimer;
|
||
tT->setSingleShot(true);
|
||
connect(tT, SIGNAL(timeout()), versionChecker, SLOT(get()));
|
||
//versionChecker->get(); //TOD<4F>
|
||
tT->start(100);
|
||
|
||
conf.setLastVersionCheck(current);
|
||
}
|
||
}
|
||
|
||
void MainWindowViewer::processReset()
|
||
{
|
||
if (isClient) {
|
||
if (siblingComics.count() > 1) {
|
||
bool openNextB = openNextComicAction->isEnabled();
|
||
bool openPrevB = openPreviousComicAction->isEnabled();
|
||
disableActions();
|
||
openNextComicAction->setEnabled(openNextB);
|
||
openPreviousComicAction->setEnabled(openPrevB);
|
||
} else
|
||
disableActions();
|
||
} else
|
||
disableActions();
|
||
}
|
||
|
||
void MainWindowViewer::setUpShortcutsManagement()
|
||
{
|
||
//actions holder
|
||
auto orphanActions = new QObject;
|
||
|
||
QList<QAction *> allActions;
|
||
QList<QAction *> tmpList;
|
||
|
||
editShortcutsDialog->addActionsGroup(tr("Comics"), QIcon(":/images/shortcuts_group_comics.png"),
|
||
tmpList = { openAction,
|
||
openLatestComicAction,
|
||
openFolderAction,
|
||
saveImageAction,
|
||
openPreviousComicAction,
|
||
openNextComicAction });
|
||
|
||
allActions << tmpList;
|
||
|
||
//keys without actions (General)
|
||
QAction *toggleFullScreenAction = new QAction(tr("Toggle fullscreen mode"), orphanActions);
|
||
toggleFullScreenAction->setData(TOGGLE_FULL_SCREEN_ACTION_Y);
|
||
toggleFullScreenAction->setShortcut(ShortcutsManager::getShortcutsManager().getShortcut(TOGGLE_FULL_SCREEN_ACTION_Y));
|
||
|
||
QAction *toggleToolbarsAction = new QAction(tr("Hide/show toolbar"), orphanActions);
|
||
toggleToolbarsAction->setData(TOGGLE_TOOL_BARS_ACTION_Y);
|
||
toggleToolbarsAction->setShortcut(ShortcutsManager::getShortcutsManager().getShortcut(TOGGLE_TOOL_BARS_ACTION_Y));
|
||
|
||
editShortcutsDialog->addActionsGroup(tr("General"), QIcon(":/images/shortcuts_group_general.png"),
|
||
tmpList = QList<QAction *>()
|
||
<< optionsAction
|
||
<< helpAboutAction
|
||
<< showShorcutsAction
|
||
<< showInfoAction
|
||
<< closeAction
|
||
<< showDictionaryAction
|
||
<< showFlowAction
|
||
<< toggleFullScreenAction
|
||
<< toggleToolbarsAction
|
||
<< showEditShortcutsAction);
|
||
|
||
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));
|
||
|
||
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));
|
||
|
||
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));
|
||
|
||
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));
|
||
|
||
editShortcutsDialog->addActionsGroup(tr("Magnifiying glass"), QIcon(":/images/shortcuts_group_mglass.png"),
|
||
tmpList = QList<QAction *>()
|
||
<< showMagnifyingGlassAction
|
||
<< sizeUpMglassAction
|
||
<< sizeDownMglassAction
|
||
<< zoomInMglassAction
|
||
<< zoomOutMglassAction);
|
||
|
||
allActions << tmpList;
|
||
|
||
//keys without actions
|
||
auto toggleFitToScreenAction = new QAction(tr("Toggle between fit to width and fit to height"), orphanActions);
|
||
toggleFitToScreenAction->setData(CHANGE_FIT_ACTION_Y);
|
||
toggleFitToScreenAction->setShortcut(ShortcutsManager::getShortcutsManager().getShortcut(CHANGE_FIT_ACTION_Y));
|
||
|
||
editShortcutsDialog->addActionsGroup(tr("Page adjustement"), QIcon(":/images/shortcuts_group_page.png"),
|
||
tmpList = QList<QAction *>()
|
||
<< adjustHeightAction
|
||
<< adjustWidthAction
|
||
<< toggleFitToScreenAction
|
||
<< leftRotationAction
|
||
<< rightRotationAction
|
||
<< doublePageAction
|
||
<< doubleMangaPageAction
|
||
<< adjustToFullSizeAction
|
||
<< increasePageZoomAction
|
||
<< decreasePageZoomAction
|
||
<< resetZoomAction);
|
||
|
||
allActions << tmpList;
|
||
|
||
auto autoScrollForwardAction = new QAction(tr("Autoscroll down"), orphanActions);
|
||
autoScrollForwardAction->setData(AUTO_SCROLL_FORWARD_ACTION_Y);
|
||
autoScrollForwardAction->setShortcut(ShortcutsManager::getShortcutsManager().getShortcut(AUTO_SCROLL_FORWARD_ACTION_Y));
|
||
|
||
auto autoScrollBackwardAction = new QAction(tr("Autoscroll up"), orphanActions);
|
||
autoScrollBackwardAction->setData(AUTO_SCROLL_BACKWARD_ACTION_Y);
|
||
autoScrollBackwardAction->setShortcut(ShortcutsManager::getShortcutsManager().getShortcut(AUTO_SCROLL_BACKWARD_ACTION_Y));
|
||
|
||
auto autoScrollForwardHorizontalFirstAction = new QAction(tr("Autoscroll forward, horizontal first"), orphanActions);
|
||
autoScrollForwardHorizontalFirstAction->setData(AUTO_SCROLL_FORWARD_HORIZONTAL_FIRST_ACTION_Y);
|
||
autoScrollForwardHorizontalFirstAction->setShortcut(ShortcutsManager::getShortcutsManager().getShortcut(AUTO_SCROLL_FORWARD_HORIZONTAL_FIRST_ACTION_Y));
|
||
|
||
auto autoScrollBackwardHorizontalFirstAction = new QAction(tr("Autoscroll backward, horizontal first"), orphanActions);
|
||
autoScrollBackwardHorizontalFirstAction->setData(AUTO_SCROLL_BACKWARD_HORIZONTAL_FIRST_ACTION_Y);
|
||
autoScrollBackwardHorizontalFirstAction->setShortcut(ShortcutsManager::getShortcutsManager().getShortcut(AUTO_SCROLL_BACKWARD_HORIZONTAL_FIRST_ACTION_Y));
|
||
|
||
auto autoScrollForwardVerticalFirstAction = new QAction(tr("Autoscroll forward, vertical first"), orphanActions);
|
||
autoScrollForwardVerticalFirstAction->setData(AUTO_SCROLL_FORWARD_VERTICAL_FIRST_ACTION_Y);
|
||
autoScrollForwardVerticalFirstAction->setShortcut(ShortcutsManager::getShortcutsManager().getShortcut(AUTO_SCROLL_FORWARD_VERTICAL_FIRST_ACTION_Y));
|
||
|
||
auto autoScrollBackwardVerticalFirstAction = new QAction(tr("Autoscroll backward, vertical first"), orphanActions);
|
||
autoScrollBackwardVerticalFirstAction->setData(AUTO_SCROLL_BACKWARD_VERTICAL_FIRST_ACTION_Y);
|
||
autoScrollBackwardVerticalFirstAction->setShortcut(ShortcutsManager::getShortcutsManager().getShortcut(AUTO_SCROLL_BACKWARD_VERTICAL_FIRST_ACTION_Y));
|
||
|
||
auto moveDownAction = new QAction(tr("Move down"), orphanActions);
|
||
moveDownAction->setData(MOVE_DOWN_ACTION_Y);
|
||
moveDownAction->setShortcut(ShortcutsManager::getShortcutsManager().getShortcut(MOVE_DOWN_ACTION_Y));
|
||
|
||
auto moveUpAction = new QAction(tr("Move up"), orphanActions);
|
||
moveUpAction->setData(MOVE_UP_ACTION_Y);
|
||
moveUpAction->setShortcut(ShortcutsManager::getShortcutsManager().getShortcut(MOVE_UP_ACTION_Y));
|
||
|
||
auto moveLeftAction = new QAction(tr("Move left"), orphanActions);
|
||
moveLeftAction->setData(MOVE_LEFT_ACTION_Y);
|
||
moveLeftAction->setShortcut(ShortcutsManager::getShortcutsManager().getShortcut(MOVE_LEFT_ACTION_Y));
|
||
|
||
auto moveRightAction = new QAction(tr("Move right"), orphanActions);
|
||
moveRightAction->setData(MOVE_RIGHT_ACTION_Y);
|
||
moveRightAction->setShortcut(ShortcutsManager::getShortcutsManager().getShortcut(MOVE_RIGHT_ACTION_Y));
|
||
|
||
auto goToFirstPageAction = new QAction(tr("Go to the first page"), orphanActions);
|
||
goToFirstPageAction->setData(GO_TO_FIRST_PAGE_ACTION_Y);
|
||
goToFirstPageAction->setShortcut(ShortcutsManager::getShortcutsManager().getShortcut(GO_TO_FIRST_PAGE_ACTION_Y));
|
||
|
||
auto goToLastPageAction = new QAction(tr("Go to the last page"), orphanActions);
|
||
goToLastPageAction->setData(GO_TO_LAST_PAGE_ACTION_Y);
|
||
goToLastPageAction->setShortcut(ShortcutsManager::getShortcutsManager().getShortcut(GO_TO_LAST_PAGE_ACTION_Y));
|
||
|
||
editShortcutsDialog->addActionsGroup(tr("Reading"), QIcon(":/images/shortcuts_group_reading.png"),
|
||
tmpList = QList<QAction *>()
|
||
<< nextAction
|
||
<< prevAction
|
||
<< setBookmarkAction
|
||
<< showBookmarksAction
|
||
<< autoScrollForwardAction
|
||
<< autoScrollBackwardAction
|
||
<< autoScrollForwardHorizontalFirstAction
|
||
<< autoScrollBackwardHorizontalFirstAction
|
||
<< autoScrollForwardVerticalFirstAction
|
||
<< autoScrollBackwardVerticalFirstAction
|
||
<< moveDownAction
|
||
<< moveUpAction
|
||
<< moveLeftAction
|
||
<< moveRightAction
|
||
<< goToFirstPageAction
|
||
<< goToLastPageAction
|
||
<< goToPageAction);
|
||
|
||
allActions << tmpList;
|
||
|
||
ShortcutsManager::getShortcutsManager().registerActions(allActions);
|
||
}
|
||
|
||
void MainWindowViewer::toggleFitToWidthSlider()
|
||
{
|
||
int y;
|
||
|
||
#ifdef Q_OS_MAC
|
||
y = 0;
|
||
#else
|
||
y = this->comicToolBar->frameSize().height();
|
||
#endif
|
||
|
||
if (zoomSliderAction->isVisible()) {
|
||
zoomSliderAction->hide();
|
||
} else {
|
||
zoomSliderAction->move(250, y);
|
||
zoomSliderAction->show();
|
||
}
|
||
}
|
||
|
||
void MainWindowViewer::newVersion()
|
||
{
|
||
QMessageBox msgBox;
|
||
msgBox.setText(tr("There is a new version available"));
|
||
msgBox.setInformativeText(tr("Do you want to download the new version?"));
|
||
msgBox.setStandardButtons(QMessageBox::Yes | QMessageBox::Ignore | QMessageBox::No);
|
||
msgBox.setDefaultButton(QMessageBox::Yes);
|
||
msgBox.button(QMessageBox::Ignore)->setText(tr("Remind me in 14 days"));
|
||
msgBox.button(QMessageBox::No)->setText(tr("Not now"));
|
||
msgBox.setWindowFlags(Qt::WindowStaysOnTopHint);
|
||
msgBox.setModal(true);
|
||
int ret = msgBox.exec();
|
||
|
||
switch (ret) {
|
||
case QMessageBox::Yes:
|
||
QDesktopServices::openUrl(QUrl("http://www.yacreader.com"));
|
||
break;
|
||
case QMessageBox::No:
|
||
Configuration::getConfiguration().setNumDaysBetweenVersionChecks(1);
|
||
break;
|
||
case QMessageBox::Ignore:
|
||
Configuration::getConfiguration().setNumDaysBetweenVersionChecks(14);
|
||
break;
|
||
}
|
||
}
|
||
|
||
void MainWindowViewer::closeEvent(QCloseEvent *event)
|
||
{
|
||
if (isClient)
|
||
sendComic();
|
||
|
||
viewer->save();
|
||
Configuration &conf = Configuration::getConfiguration();
|
||
if (!fullscreen && !isMaximized()) {
|
||
conf.setPos(pos());
|
||
conf.setSize(size());
|
||
}
|
||
conf.setMaximized(isMaximized());
|
||
|
||
event->accept();
|
||
}
|
||
|
||
void MainWindowViewer::openPreviousComic()
|
||
{
|
||
if (!siblingComics.isEmpty() && isClient) {
|
||
sendComic();
|
||
|
||
int currentIndex = siblingComics.indexOf(currentComicDB);
|
||
if (currentIndex == -1)
|
||
return;
|
||
if (currentIndex - 1 >= 0 && currentIndex - 1 < siblingComics.count()) {
|
||
siblingComics[currentIndex] = currentComicDB; //updated
|
||
currentComicDB = siblingComics.at(currentIndex - 1);
|
||
open(currentDirectory + currentComicDB.path, currentComicDB, siblingComics);
|
||
}
|
||
return;
|
||
}
|
||
if (!previousComicPath.isEmpty()) {
|
||
openSiblingComic(previousComicPath);
|
||
}
|
||
}
|
||
|
||
void MainWindowViewer::openNextComic()
|
||
{
|
||
if (!siblingComics.isEmpty() && isClient) {
|
||
sendComic();
|
||
|
||
int currentIndex = siblingComics.indexOf(currentComicDB);
|
||
if (currentIndex == -1)
|
||
return;
|
||
if (currentIndex + 1 > 0 && currentIndex + 1 < siblingComics.count()) {
|
||
siblingComics[currentIndex] = currentComicDB; //updated
|
||
currentComicDB = siblingComics.at(currentIndex + 1);
|
||
open(currentDirectory + currentComicDB.path, currentComicDB, siblingComics);
|
||
}
|
||
return;
|
||
}
|
||
if (!nextComicPath.isEmpty()) {
|
||
openSiblingComic(nextComicPath);
|
||
}
|
||
}
|
||
|
||
void MainWindowViewer::getSiblingComics(QString path, QString currentComic)
|
||
{
|
||
QDir d(path);
|
||
d.setFilter(QDir::Files | QDir::NoDotAndDotDot);
|
||
#ifndef use_unarr
|
||
d.setNameFilters(QStringList() << "*.cbr"
|
||
<< "*.cbz"
|
||
<< "*.rar"
|
||
<< "*.zip"
|
||
<< "*.tar"
|
||
<< "*.pdf"
|
||
<< "*.7z"
|
||
<< "*.cb7"
|
||
<< "*.arj"
|
||
<< "*.cbt");
|
||
#else
|
||
d.setNameFilters(QStringList() << "*.cbr"
|
||
<< "*.cbz"
|
||
<< "*.rar"
|
||
<< "*.zip"
|
||
<< "*.tar"
|
||
<< "*.pdf"
|
||
<< "*.cbt");
|
||
#endif
|
||
d.setSorting(QDir::Name | QDir::IgnoreCase | QDir::LocaleAware);
|
||
QStringList list = d.entryList();
|
||
qSort(list.begin(), list.end(), naturalSortLessThanCI);
|
||
//std::sort(list.begin(),list.end(),naturalSortLessThanCI);
|
||
int index = list.indexOf(currentComic);
|
||
if (index == -1) //comic not found
|
||
{
|
||
/*QFile f(QCoreApplication::applicationDirPath()+"/errorLog.txt");
|
||
if(!f.open(QIODevice::WriteOnly))
|
||
{
|
||
QMessageBox::critical(NULL,tr("Saving error log file...."),tr("There was a problem saving YACReader error log file. Please, check if you have enough permissions in the YACReader root folder."));
|
||
}
|
||
else
|
||
{
|
||
QTextStream txtS(&f);
|
||
txtS << "METHOD : MainWindowViewer::getSiblingComics" << '\n';
|
||
txtS << "ERROR : current comic not found in its own path" << '\n';
|
||
txtS << path << '\n';
|
||
txtS << currentComic << '\n';
|
||
txtS << "Comic list count : " + list.count() << '\n';
|
||
foreach(QString s, list){
|
||
txtS << s << '\n';
|
||
}
|
||
f.close();
|
||
}*/
|
||
}
|
||
|
||
previousComicPath = nextComicPath = "";
|
||
if (index > 0) {
|
||
previousComicPath = path + "/" + list.at(index - 1);
|
||
openPreviousComicAction->setDisabled(false);
|
||
} else
|
||
openPreviousComicAction->setDisabled(true);
|
||
|
||
if (index + 1 < list.count()) {
|
||
nextComicPath = path + "/" + list.at(index + 1);
|
||
openNextComicAction->setDisabled(false);
|
||
} else
|
||
openNextComicAction->setDisabled(true);
|
||
}
|
||
|
||
void MainWindowViewer::dropEvent(QDropEvent *event)
|
||
{
|
||
QList<QUrl> urlList;
|
||
QString fName;
|
||
QFileInfo info;
|
||
|
||
if (event->mimeData()->hasUrls()) {
|
||
urlList = event->mimeData()->urls();
|
||
|
||
if (urlList.size() > 0) {
|
||
fName = urlList[0].toLocalFile(); // convert first QUrl to local path
|
||
info.setFile(fName); // information about file
|
||
if (info.isFile()) {
|
||
QStringList imageSuffixs = Comic::getSupportedImageLiteralFormats();
|
||
if (imageSuffixs.contains(info.suffix())) //image dropped
|
||
openFolderFromPath(info.absoluteDir().absolutePath(), info.fileName());
|
||
else
|
||
openComicFromPath(fName); // if is file, setText
|
||
} else if (info.isDir())
|
||
openFolderFromPath(fName);
|
||
|
||
isClient = false;
|
||
}
|
||
}
|
||
|
||
event->acceptProposedAction();
|
||
}
|
||
void MainWindowViewer::dragEnterEvent(QDragEnterEvent *event)
|
||
{
|
||
// accept just text/uri-list mime format
|
||
if (event->mimeData()->hasFormat("text/uri-list")) {
|
||
event->acceptProposedAction();
|
||
isClient = false;
|
||
}
|
||
}
|
||
|
||
void MainWindowViewer::alwaysOnTopSwitch()
|
||
{
|
||
if (!Configuration::getConfiguration().getAlwaysOnTop()) {
|
||
setWindowFlags(this->windowFlags() | Qt::CustomizeWindowHint | Qt::WindowStaysOnTopHint); //always on top
|
||
show();
|
||
} else {
|
||
setWindowFlags(this->windowFlags() ^ (Qt::CustomizeWindowHint | Qt::WindowStaysOnTopHint));
|
||
show();
|
||
}
|
||
Configuration::getConfiguration().setAlwaysOnTop(!Configuration::getConfiguration().getAlwaysOnTop());
|
||
}
|
||
|
||
void MainWindowViewer::adjustToFullSizeSwitch()
|
||
{
|
||
Configuration::getConfiguration().setFitMode(YACReader::FitMode::FullRes);
|
||
viewer->setZoomFactor(100);
|
||
viewer->updatePage();
|
||
}
|
||
|
||
void MainWindowViewer::fitToPageSwitch()
|
||
{
|
||
Configuration::getConfiguration().setFitMode(YACReader::FitMode::FullPage);
|
||
viewer->setZoomFactor(100);
|
||
viewer->updatePage();
|
||
}
|
||
|
||
void MainWindowViewer::resetZoomLevel()
|
||
{
|
||
viewer->setZoomFactor(100);
|
||
viewer->updatePage();
|
||
}
|
||
|
||
void MainWindowViewer::increasePageZoomLevel()
|
||
{
|
||
viewer->increaseZoomFactor();
|
||
}
|
||
|
||
void MainWindowViewer::decreasePageZoomLevel()
|
||
{
|
||
viewer->decreaseZoomFactor();
|
||
}
|
||
|
||
void MainWindowViewer::sendComic()
|
||
{
|
||
auto client = new YACReaderLocalClient;
|
||
|
||
connect(client, &YACReaderLocalClient::finished, client, &YACReaderLocalClient::deleteLater);
|
||
currentComicDB.info.lastTimeOpened = QDateTime::currentMSecsSinceEpoch() / 1000;
|
||
|
||
viewer->updateComic(currentComicDB);
|
||
|
||
int currentIndex = siblingComics.indexOf(currentComicDB);
|
||
bool sendNextComicInfo = (currentComicDB.info.currentPage == currentComicDB.info.numPages) && (currentIndex + 1 > 0 && currentIndex + 1 < siblingComics.count());
|
||
|
||
if (sendNextComicInfo) {
|
||
ComicDB &nextComic = siblingComics[currentIndex + 1];
|
||
nextComic.info.hasBeenOpened = true;
|
||
int retries = 1;
|
||
while (!client->sendComicInfo(libraryId, currentComicDB, nextComic.id) && retries != 0)
|
||
retries--;
|
||
} else {
|
||
int retries = 1;
|
||
while (!client->sendComicInfo(libraryId, currentComicDB) && retries != 0)
|
||
retries--;
|
||
}
|
||
}
|