mirror of
https://github.com/YACReader/yacreader
synced 2025-05-28 03:10:27 -04:00
121 lines
3.5 KiB
C++
121 lines
3.5 KiB
C++
#ifndef GRID_COMICS_VIEW_H
|
|
#define GRID_COMICS_VIEW_H
|
|
|
|
#include "comics_view.h"
|
|
|
|
#include <QModelIndex>
|
|
|
|
#include "comic_db.h"
|
|
|
|
class QAbstractListModel;
|
|
class QItemSelectionModel;
|
|
class QQuickWidget;
|
|
class QQmlContext;
|
|
|
|
class YACReaderToolBarStretch;
|
|
class YACReaderComicsSelectionHelper;
|
|
class YACReaderComicInfoHelper;
|
|
|
|
// values relative to visible cells
|
|
const unsigned int YACREADER_MIN_GRID_ZOOM_WIDTH = 156;
|
|
const unsigned int YACREADER_MAX_GRID_ZOOM_WIDTH = 312;
|
|
|
|
// GridView cells
|
|
const unsigned int YACREADER_MIN_CELL_CUSTOM_HEIGHT = 295;
|
|
const unsigned int YACREADER_MIN_CELL_CUSTOM_WIDTH = 185;
|
|
|
|
// Covers
|
|
const unsigned int YACREADER_MAX_COVER_HEIGHT = 236;
|
|
const unsigned int YACREADER_MIN_COVER_WIDTH = YACREADER_MIN_GRID_ZOOM_WIDTH;
|
|
|
|
// visible cells (realCell in qml), grid cells size is used to create faux inner margings
|
|
const unsigned int YACREADER_MIN_ITEM_HEIGHT = YACREADER_MAX_COVER_HEIGHT + 51; // 51 is the height of the bottom rectangle used for title and other info
|
|
const unsigned int YACREADER_MIN_ITEM_WIDTH = YACREADER_MIN_COVER_WIDTH;
|
|
|
|
class GridComicsView : public ComicsView
|
|
{
|
|
Q_OBJECT
|
|
public:
|
|
explicit GridComicsView(QWidget *parent = nullptr);
|
|
~GridComicsView() override;
|
|
void setToolBar(QToolBar *toolBar) override;
|
|
void setModel(ComicModel *model) override;
|
|
void setCurrentIndex(const QModelIndex &index) override;
|
|
QModelIndex currentIndex() override;
|
|
QItemSelectionModel *selectionModel() override;
|
|
void scrollTo(const QModelIndex &mi, QAbstractItemView::ScrollHint hint) override;
|
|
void toFullScreen() override;
|
|
void toNormal() override;
|
|
void updateConfig(QSettings *settings) override;
|
|
void enableFilterMode(bool enabled) override;
|
|
QByteArray getMimeDataFromSelection();
|
|
void updateCurrentComicView() override;
|
|
void focusComicsNavigation(Qt::FocusReason reason) override;
|
|
void reloadContent() override;
|
|
|
|
public slots:
|
|
// ComicsView
|
|
void setShowMarks(bool show) override;
|
|
void selectAll() override;
|
|
void selectIndex(int index) override;
|
|
void triggerOpenCurrentComic();
|
|
|
|
void updateBackgroundConfig();
|
|
|
|
void showInfo();
|
|
|
|
protected slots:
|
|
void setCurrentIndex(int index);
|
|
// QML - double clicked item
|
|
void selectedItem(int index);
|
|
|
|
// QML - rating
|
|
void rate(int index, int rating);
|
|
// QML - dragManager
|
|
void startDrag();
|
|
// QML - dropManager
|
|
bool canDropUrls(const QList<QUrl> &urls, Qt::DropAction action);
|
|
bool canDropFormats(const QString &formats);
|
|
void droppedFiles(const QList<QUrl> &urls, Qt::DropAction action);
|
|
void droppedComicsForResortingAt(const QString &data, int index);
|
|
// QML - context menu
|
|
void requestedContextMenu(const QPoint &point);
|
|
|
|
void setCoversSize(int width);
|
|
void updateCoversSizeInContext(int width, QQmlContext *ctxt);
|
|
|
|
void dummyUpdater(); // TODO remove this
|
|
|
|
void setCurrentComicIfNeeded();
|
|
|
|
void resetScroll();
|
|
|
|
virtual void showEvent(QShowEvent *event) override;
|
|
|
|
signals:
|
|
void onScrollToOrigin();
|
|
|
|
private:
|
|
QSettings *settings;
|
|
QToolBar *toolbar;
|
|
QWidget *coverSizeSliderWidget;
|
|
QSlider *coverSizeSlider;
|
|
QAction *coverSizeSliderAction;
|
|
QAction *showInfoAction;
|
|
QAction *showInfoSeparatorAction;
|
|
QAction *startSeparatorAction;
|
|
|
|
bool filterEnabled;
|
|
|
|
YACReaderComicsSelectionHelper *selectionHelper;
|
|
YACReaderComicInfoHelper *comicInfoHelper;
|
|
|
|
ComicDB currentComic;
|
|
|
|
bool dummy;
|
|
void closeEvent(QCloseEvent *event) override;
|
|
void createCoverSizeSliderWidget();
|
|
};
|
|
|
|
#endif // GRID_COMICS_VIEW_H
|