view edwaveform.cpp @ 357:1b8362a26692

Work towards Qt based editor.
author Matti Hamalainen <ccr@tnsp.org>
date Tue, 16 Oct 2012 20:09:11 +0300
parents
children 40e33ad0d153
line wrap: on
line source

#include <QtGui>
#include "edwaveform.h"


WaveformView::WaveformView(QWidget *parent) : QWidget(parent)
{
    track = NULL;
    time = offs = 0;
    scale = 1.0f;
}


void WaveformView::setTrack(DMWaveform *mtrack)
{
    track = mtrack;
    update();
}


DMWaveform * WaveformView::getTrack()
{
    return track;
}


void WaveformView::setTime(const int mtime)
{
    time = mtime;
    update();
}


void WaveformView::setOffset(const int moffs)
{
    offs = moffs;
    update();
}


void WaveformView::setScale(const float mscale)
{
    if (mscale > 0.05)
        scale = mscale;
    update();
}


void WaveformView::paintEvent(QPaintEvent *)
{
    QColor waveColor(0, 150, 0);
    QColor markerColor(255,255,255);

    QPainter painter(this);
    painter.setRenderHint(QPainter::Antialiasing);

    painter.save();
    painter.translate(0, height() / 2);
    painter.scale(scale, height() / 32768.0f);
    painter.setPen(waveColor);

    int prevY = 0, prevX = 0;
    for (int xc = 0; xc < width(); xc++)
    {
        qint16 value = data[(offs + xc) * scale];
        painter.drawLine(prevX, prevY, xc, value);
        prevY = value; prevX = xc;
    }
    painter.restore();
    
    
    if (time >= offs * scale && time - offs <= width() * scale)
    {
        int xc = time - offs;
        painter.scale(scale, 1);
        painter.setPen(markerColor);
        painter.drawLine(xc, 0, xc, height());
    }
}


void WaveformView::mousePressEvent(QMouseEvent *ev)
{
/*
    if (ev->button() == Qt::LeftButton)
    {
        lastPoint = ev->pos();
        scribbling = true;
    }
*/
}


void WaveformView::mouseMoveEvent(QMouseEvent *ev)
{
/*
    if ((ev->buttons() & Qt::LeftButton) && scribbling)
        drawLineTo(ev->pos());
*/
}


void WaveformView::mouseReleaseEvent(QMouseEvent *ev)
{
/*
    if (ev->button() == Qt::LeftButton && scribbling)
    {
        drawLineTo(ev->pos());
        scribbling = false;
    }
*/
}