QGCImageProvider.cc 2.33 KB
Newer Older
1 2 3 4 5 6 7 8
/****************************************************************************
 *
 *   (c) 2009-2016 QGROUNDCONTROL PROJECT <http://www.qgroundcontrol.org>
 *
 * QGroundControl is licensed according to the terms in the file
 * COPYING.md in the root of the source code directory.
 *
 ****************************************************************************/
dogmaphobic's avatar
dogmaphobic committed
9 10 11 12 13 14 15 16 17 18 19 20 21 22


/**
* @file
*   @brief Image Provider
*
*   @author Gus Grubba <mavlink@grubba.com>
*
*/


#include "QGCImageProvider.h"

#include <QPainter>
23
#include <QFont>
dogmaphobic's avatar
dogmaphobic committed
24

25 26
QGCImageProvider::QGCImageProvider(QGCApplication *app, QGCToolbox* toolbox)
    : QGCTool(app, toolbox)
dogmaphobic's avatar
dogmaphobic committed
27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84
    , QQuickImageProvider(QQmlImageProviderBase::Image)
{
}

QGCImageProvider::~QGCImageProvider()
{

}

void QGCImageProvider::setToolbox(QGCToolbox *toolbox)
{
   QGCTool::setToolbox(toolbox);
   //-- Dummy temporary image until something comes along
   _pImage = QImage(320, 240, QImage::Format_RGBA8888);
   _pImage.fill(Qt::black);
   QPainter painter(&_pImage);
   QFont f = painter.font();
   f.setPixelSize(20);
   painter.setFont(f);
   painter.setPen(Qt::white);
   painter.drawText(QRectF(0, 0, 320, 240), Qt::AlignCenter, "Waiting...");
}

QImage QGCImageProvider::requestImage(const QString & /* image url with vehicle id*/, QSize *, const QSize &)
{
/*
    The QML side will request an image using a special URL, which we've registered as QGCImages.
    The URL follows this format (or anything you want to make out of it after the "QGCImages" part):

    "image://QGCImages/vvv/iii"

    Where:
        vvv: Some vehicle id
        iii: An auto incremented index (which forces the Item to reload the image)

    The image index is incremented each time a new image arrives. A signal is emitted and the QML side
    updates its contents automatically.

        Image {
            source:     "image://QGCImages/" + _activeVehicle.id + "/" + _activeVehicle.flowImageIndex
            width:      parent.width * 0.5
            height:     width * 0.75
            cache:      false
            anchors.centerIn: parent
            fillMode: Image.PreserveAspectFit
        }

    For now, we don't even look at the URL. This will have to be fixed if we're to support multiple
    vehicles transmitting flow images.
*/
    return _pImage;
}

void QGCImageProvider::setImage(QImage* pImage, int /* vehicle id*/)
{
    _pImage = pImage->mirrored();
}