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:
Luis Ángel San Martín 2016-03-28 11:40:17 +02:00
parent 56e7737931
commit 81c785f787
8 changed files with 309 additions and 2 deletions

View File

@ -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)

View File

@ -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

View File

@ -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>

View 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;
}
}
}

View 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"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 652 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 135 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 121 B