mirror of
https://github.com/YACReader/yacreader
synced 2025-06-03 17:18:23 -04:00
Added new info comcis view skeleton + setting the comics model. So far it can loads the list of covers from the model. FlowView.qml will be a FlowGL replacement that will be the default in the ANGLE version and an option in the main version.
This commit is contained in:
parent
56e7737931
commit
81c785f787
@ -1,9 +1,32 @@
|
||||
#include "info_comics_view.h"
|
||||
|
||||
#include <QtQuick>
|
||||
|
||||
#include "comic_model.h"
|
||||
|
||||
#include "QsLog.h"
|
||||
|
||||
InfoComicsView::InfoComicsView(QWidget *parent)
|
||||
:ComicsView(parent)
|
||||
{
|
||||
int FIXME;
|
||||
qmlRegisterType<ComicModel>("com.yacreader.ComicModel",1,0,"ComicModel");
|
||||
|
||||
view = new QQuickView();
|
||||
container = QWidget::createWindowContainer(view, this);
|
||||
|
||||
container->setFocusPolicy(Qt::StrongFocus);
|
||||
|
||||
view->setSource(QUrl("qrc:/qml/InfoComicsView.qml"));
|
||||
|
||||
QVBoxLayout * l = new QVBoxLayout;
|
||||
l->addWidget(container);
|
||||
this->setLayout(l);
|
||||
|
||||
setContentsMargins(0,0,0,0);
|
||||
l->setContentsMargins(0,0,0,0);
|
||||
l->setSpacing(0);
|
||||
|
||||
QLOG_TRACE() << "GridComicsView";
|
||||
}
|
||||
|
||||
void InfoComicsView::setToolBar(QToolBar *toolBar)
|
||||
@ -15,7 +38,36 @@ void InfoComicsView::setToolBar(QToolBar *toolBar)
|
||||
|
||||
void InfoComicsView::setModel(ComicModel *model)
|
||||
{
|
||||
int FIXME;
|
||||
if(model == NULL)
|
||||
return;
|
||||
|
||||
ComicsView::setModel(model);
|
||||
|
||||
QQmlContext *ctxt = view->rootContext();
|
||||
|
||||
/*if(_selectionModel != NULL)
|
||||
delete _selectionModel;
|
||||
|
||||
_selectionModel = new QItemSelectionModel(model);*/
|
||||
|
||||
//TODO fix crash in the following line on comics views switch
|
||||
|
||||
int row = currentIndex().row();
|
||||
ctxt->setContextProperty("comicsList", model);
|
||||
ctxt->setContextProperty("backgroundImage", this->model->data(this->model->index(0, 0), ComicModel::CoverPathRole));
|
||||
|
||||
/*ctxt->setContextProperty("comicsSelection", _selectionModel);
|
||||
ctxt->setContextProperty("contextMenuHelper",this);
|
||||
ctxt->setContextProperty("comicsSelectionHelper", this);
|
||||
ctxt->setContextProperty("comicRatingHelper", this);
|
||||
ctxt->setContextProperty("dummyValue", true);
|
||||
ctxt->setContextProperty("dragManager", this);
|
||||
ctxt->setContextProperty("dropManager", this);
|
||||
|
||||
updateBackgroundConfig();*/
|
||||
|
||||
if(model->rowCount()>0)
|
||||
setCurrentIndex(model->index(0,0));
|
||||
}
|
||||
|
||||
void InfoComicsView::setCurrentIndex(const QModelIndex &index)
|
||||
|
@ -5,6 +5,10 @@
|
||||
|
||||
|
||||
|
||||
class QQuickView;
|
||||
|
||||
|
||||
|
||||
class InfoComicsView : public ComicsView
|
||||
{
|
||||
Q_OBJECT
|
||||
@ -25,6 +29,10 @@ public:
|
||||
public slots:
|
||||
void setShowMarks(bool show);
|
||||
void selectAll();
|
||||
|
||||
protected:
|
||||
QQuickView *view;
|
||||
QWidget *container;
|
||||
};
|
||||
|
||||
#endif // INFOCOMICSVIEW_H
|
||||
|
@ -6,5 +6,10 @@
|
||||
<file>qml/reading.png</file>
|
||||
<file>qml/star_menu.png</file>
|
||||
<file>qml/star_menu@2x.png</file>
|
||||
<file>qml/InfoComicsView.qml</file>
|
||||
<file>qml/FlowView.qml</file>
|
||||
<file>qml/info-indicator.png</file>
|
||||
<file>qml/info-shadow.png</file>
|
||||
<file>qml/info-top-shadow.png</file>
|
||||
</qresource>
|
||||
</RCC>
|
||||
|
180
YACReaderLibrary/qml/FlowView.qml
Normal file
180
YACReaderLibrary/qml/FlowView.qml
Normal file
@ -0,0 +1,180 @@
|
||||
import QtQuick 2.3
|
||||
|
||||
import QtGraphicalEffects 1.0
|
||||
|
||||
import com.yacreader.ComicModel 1.0
|
||||
|
||||
Rectangle {
|
||||
property url backgroundImageURL;
|
||||
|
||||
property real backgroundBlurRadius : 100;
|
||||
property real backgroundBlurOpacity : 0.25;
|
||||
property bool backgroundBlurVisible : true;
|
||||
|
||||
property real additionalBottomSpace;
|
||||
|
||||
property real verticalPadding: 11
|
||||
|
||||
Rectangle {
|
||||
id: background
|
||||
color: "#2A2A2A"
|
||||
anchors.fill: backgroundImg
|
||||
}
|
||||
|
||||
Image {
|
||||
id: backgroundImg
|
||||
width: parent.width
|
||||
height: parent.height + additionalBottomSpace
|
||||
source: backgroundImage
|
||||
fillMode: Image.PreserveAspectCrop
|
||||
smooth: true
|
||||
mipmap: true
|
||||
asynchronous : true
|
||||
cache: false //TODO clear cache only when it is needed
|
||||
opacity: 0
|
||||
visible: false
|
||||
}
|
||||
|
||||
FastBlur {
|
||||
anchors.fill: backgroundImg
|
||||
source: backgroundImg
|
||||
radius: backgroundBlurRadius
|
||||
opacity: backgroundBlurOpacity
|
||||
visible: backgroundBlurVisible
|
||||
}
|
||||
|
||||
anchors.margins: 0
|
||||
|
||||
|
||||
MouseArea {
|
||||
anchors.fill : list
|
||||
onWheel: {
|
||||
var ci
|
||||
if(wheel.angleDelta.y < 0) {
|
||||
ci = Math.min(list.currentIndex+1, list.count);
|
||||
}
|
||||
else if(wheel.angleDelta.y > 0) {
|
||||
ci = Math.max(0,list.currentIndex-1);
|
||||
} else {
|
||||
return;
|
||||
}
|
||||
|
||||
list.currentIndex = ci;
|
||||
}
|
||||
}
|
||||
|
||||
ListView {
|
||||
id: list
|
||||
anchors.fill: parent
|
||||
|
||||
property int previousIndex;
|
||||
|
||||
orientation: Qt.Horizontal
|
||||
pixelAligned: true
|
||||
|
||||
model: comicsList
|
||||
|
||||
spacing: 16
|
||||
anchors.leftMargin: 11
|
||||
|
||||
snapMode: ListView.SnapToItem
|
||||
|
||||
highlightFollowsCurrentItem: true
|
||||
highlightRangeMode: ListView.StrictlyEnforceRange
|
||||
preferredHighlightEnd: 50
|
||||
|
||||
delegate: Component {
|
||||
|
||||
//cover
|
||||
Rectangle {
|
||||
width: Math.floor((list.height - (verticalPadding * 2)) * 0.65);
|
||||
height: list.height - (verticalPadding * 2);
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
|
||||
color:"transparent"
|
||||
|
||||
DropShadow {
|
||||
anchors.fill: coverElement
|
||||
horizontalOffset: 0
|
||||
verticalOffset: 0
|
||||
radius: 6
|
||||
samples: 17
|
||||
color: "#BB000000"
|
||||
source: coverElement
|
||||
visible: (Qt.platform.os === "osx") ? false : true;
|
||||
}
|
||||
|
||||
Image {
|
||||
id: coverElement
|
||||
anchors.fill: parent
|
||||
source: cover_path
|
||||
fillMode: Image.PreserveAspectCrop
|
||||
smooth: true
|
||||
mipmap: true
|
||||
asynchronous : true
|
||||
cache: false
|
||||
}
|
||||
|
||||
//border
|
||||
Rectangle {
|
||||
width: coverElement.width
|
||||
height: coverElement.height
|
||||
anchors.centerIn: coverElement
|
||||
color: "transparent"
|
||||
border {
|
||||
color: "#30FFFFFF"
|
||||
width: 1
|
||||
}
|
||||
}
|
||||
|
||||
MouseArea {
|
||||
id: mouseArea
|
||||
anchors.fill: parent
|
||||
acceptedButtons: Qt.LeftButton | Qt.RightButton
|
||||
|
||||
onClicked: {
|
||||
gotoIndex(index);
|
||||
}
|
||||
}
|
||||
|
||||
NumberAnimation {
|
||||
id: anim;
|
||||
target: list;
|
||||
property: "contentX";
|
||||
duration: Math.min(850, Math.max(350, 75 * Math.abs(list.currentIndex - list.previousIndex)))
|
||||
}
|
||||
|
||||
function gotoIndex(idx) {
|
||||
var pos = list.contentX;
|
||||
var destPos;
|
||||
list.previousIndex = list.currentIndex
|
||||
list.positionViewAtIndex(idx, ListView.Beginning);
|
||||
destPos = list.contentX;
|
||||
anim.from = pos;
|
||||
anim.to = destPos;
|
||||
anim.running = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
focus: true
|
||||
Keys.onPressed: {
|
||||
if (event.modifiers & Qt.ControlModifier || event.modifiers & Qt.ShiftModifier)
|
||||
return;
|
||||
var ci
|
||||
if (event.key === Qt.Key_Right) {
|
||||
ci = Math.min(list.currentIndex+1, list.count);
|
||||
}
|
||||
else if (event.key === Qt.Key_Left) {
|
||||
ci = Math.max(0,list.currentIndex-1);
|
||||
} else {
|
||||
return;
|
||||
}
|
||||
|
||||
list.currentIndex = ci;
|
||||
|
||||
event.accepted = true;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
62
YACReaderLibrary/qml/InfoComicsView.qml
Normal file
62
YACReaderLibrary/qml/InfoComicsView.qml
Normal file
@ -0,0 +1,62 @@
|
||||
import QtQuick 2.3
|
||||
|
||||
import QtQuick.Controls 1.2
|
||||
import QtGraphicalEffects 1.0
|
||||
|
||||
import com.yacreader.ComicModel 1.0
|
||||
|
||||
Rectangle {
|
||||
id: main
|
||||
|
||||
color: "#2e2e2e"
|
||||
|
||||
width: parent.width
|
||||
height: parent.height
|
||||
anchors.margins: 0
|
||||
|
||||
FlowView {
|
||||
id: flow
|
||||
height: 256 //TODO dynamic size?
|
||||
|
||||
anchors.top: parent.top
|
||||
anchors.left: parent.left
|
||||
anchors.right: parent.right
|
||||
|
||||
additionalBottomSpace: indicator.height
|
||||
}
|
||||
|
||||
Image {
|
||||
id: top_shadow
|
||||
source: "info-top-shadow.png"
|
||||
width: parent.width
|
||||
fillMode: Image.TileHorizontally
|
||||
}
|
||||
|
||||
Rectangle {
|
||||
width: parent.width
|
||||
y: 250
|
||||
|
||||
Image {
|
||||
id: indicator
|
||||
source: "info-indicator.png"
|
||||
}
|
||||
|
||||
Image {
|
||||
id: bottom_shadow
|
||||
x: indicator.width
|
||||
width: parent.width - indicator.width
|
||||
source: "info-shadow.png"
|
||||
fillMode: Image.TileHorizontally
|
||||
}
|
||||
}
|
||||
Rectangle {
|
||||
id: info_container
|
||||
width: parent.width
|
||||
y: flow.height + flow.additionalBottomSpace - 6
|
||||
height: parent.height
|
||||
|
||||
color: "#2e2e2e"
|
||||
}
|
||||
|
||||
|
||||
}
|
BIN
YACReaderLibrary/qml/info-indicator.png
Normal file
BIN
YACReaderLibrary/qml/info-indicator.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 652 B |
BIN
YACReaderLibrary/qml/info-shadow.png
Normal file
BIN
YACReaderLibrary/qml/info-shadow.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 135 B |
BIN
YACReaderLibrary/qml/info-top-shadow.png
Normal file
BIN
YACReaderLibrary/qml/info-top-shadow.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 121 B |
Loading…
x
Reference in New Issue
Block a user