[Sv1-commits] SF.net SVN: sv1: [407] sonic-visualiser/trunk
Brought to you by:
cannam
From: <ca...@us...> - 2006-10-18 16:38:43
|
Revision: 407 http://svn.sourceforge.net/sv1/?rev=407&view=rev Author: cannam Date: 2006-10-18 09:38:30 -0700 (Wed, 18 Oct 2006) Log Message: ----------- * A start to a panner widget to go with thumbwheels Modified Paths: -------------- sonic-visualiser/trunk/data/fft/FFTDataServer.cpp sonic-visualiser/trunk/data/model/WaveFileModel.cpp sonic-visualiser/trunk/sv/main/main.cpp sonic-visualiser/trunk/view/Pane.cpp sonic-visualiser/trunk/view/Pane.h sonic-visualiser/trunk/widgets/widgets.pro Added Paths: ----------- sonic-visualiser/trunk/widgets/Panner.cpp sonic-visualiser/trunk/widgets/Panner.h Modified: sonic-visualiser/trunk/data/fft/FFTDataServer.cpp =================================================================== --- sonic-visualiser/trunk/data/fft/FFTDataServer.cpp 2006-10-17 19:27:23 UTC (rev 406) +++ sonic-visualiser/trunk/data/fft/FFTDataServer.cpp 2006-10-18 16:38:30 UTC (rev 407) @@ -27,7 +27,7 @@ #define DEBUG_FFT_SERVER 1 -//#define DEBUG_FFT_SERVER_FILL 1 +#define DEBUG_FFT_SERVER_FILL 1 #ifdef DEBUG_FFT_SERVER_FILL #ifndef DEBUG_FFT_SERVER @@ -325,6 +325,10 @@ m_suspended(true), //!!! or false? m_fillThread(0) { +#ifdef DEBUG_FFT_SERVER + std::cerr << "FFTDataServer(" << this << " [" << (void *)QThread::currentThreadId() << "])::FFTDataServer" << std::endl; +#endif + size_t start = m_model->getStartFrame(); size_t end = m_model->getEndFrame(); @@ -405,7 +409,7 @@ FFTDataServer::~FFTDataServer() { #ifdef DEBUG_FFT_SERVER - std::cerr << "FFTDataServer(" << this << ")::~FFTDataServer()" << std::endl; + std::cerr << "FFTDataServer(" << this << " [" << (void *)QThread::currentThreadId() << "])::~FFTDataServer()" << std::endl; #endif m_suspended = false; @@ -428,6 +432,9 @@ void FFTDataServer::deleteProcessingData() { +#ifdef DEBUG_FFT_SERVER + std::cerr << "FFTDataServer(" << this << " [" << (void *)QThread::currentThreadId() << "]): deleteProcessingData" << std::endl; +#endif if (m_fftInput) { fftwf_destroy_plan(m_fftPlan); fftwf_free(m_fftInput); @@ -441,7 +448,7 @@ FFTDataServer::suspend() { #ifdef DEBUG_FFT_SERVER - std::cerr << "FFTDataServer(" << this << "): suspend" << std::endl; + std::cerr << "FFTDataServer(" << this << " [" << (void *)QThread::currentThreadId() << "]): suspend" << std::endl; #endif Profiler profiler("FFTDataServer::suspend", false); @@ -456,7 +463,7 @@ FFTDataServer::suspendWrites() { #ifdef DEBUG_FFT_SERVER - std::cerr << "FFTDataServer(" << this << "): suspendWrites" << std::endl; + std::cerr << "FFTDataServer(" << this << " [" << (void *)QThread::currentThreadId() << "]): suspendWrites" << std::endl; #endif Profiler profiler("FFTDataServer::suspendWrites", false); @@ -467,7 +474,7 @@ FFTDataServer::resume() { #ifdef DEBUG_FFT_SERVER - std::cerr << "FFTDataServer(" << this << "): resume" << std::endl; + std::cerr << "FFTDataServer(" << this << " [" << (void *)QThread::currentThreadId() << "]): resume" << std::endl; #endif Profiler profiler("FFTDataServer::resume", false); @@ -487,6 +494,9 @@ FFTDataServer::getCacheAux(size_t c) { Profiler profiler("FFTDataServer::getCacheAux", false); +#ifdef DEBUG_FFT_SERVER + std::cerr << "FFTDataServer(" << this << " [" << (void *)QThread::currentThreadId() << "])::getCacheAux" << std::endl; +#endif QMutexLocker locker(&m_writeMutex); @@ -702,6 +712,13 @@ } } + std::cerr << "FFTDataServer::fillColumn: requesting frames " + << startFrame + pfx << " -> " << endFrame << " ( = " + << endFrame - (startFrame + pfx) << ") at index " + << off + pfx << " in buffer of size " << m_fftSize + << " with window size " << m_windowSize + << " from channel " << m_channel << std::endl; + size_t got = m_model->getValues(m_channel, startFrame + pfx, endFrame, m_fftInput + off + pfx); @@ -826,13 +843,13 @@ while (m_server.m_suspended) { #ifdef DEBUG_FFT_SERVER - std::cerr << "FFTDataServer(" << this << "): suspended, waiting..." << std::endl; + std::cerr << "FFTDataServer(" << this << " [" << (void *)QThread::currentThreadId() << "]): suspended, waiting..." << std::endl; #endif m_server.m_writeMutex.lock(); m_server.m_condition.wait(&m_server.m_writeMutex, 10000); m_server.m_writeMutex.unlock(); #ifdef DEBUG_FFT_SERVER - std::cerr << "FFTDataServer(" << this << "): waited" << std::endl; + std::cerr << "FFTDataServer(" << this << " [" << (void *)QThread::currentThreadId() << "]): waited" << std::endl; #endif if (m_server.m_exiting) return; } @@ -860,7 +877,7 @@ while (m_server.m_suspended) { #ifdef DEBUG_FFT_SERVER - std::cerr << "FFTDataServer(" << this << "): suspended, waiting..." << std::endl; + std::cerr << "FFTDataServer(" << this << " [" << (void *)QThread::currentThreadId() << "]): suspended, waiting..." << std::endl; #endif m_server.m_writeMutex.lock(); m_server.m_condition.wait(&m_server.m_writeMutex, 10000); Modified: sonic-visualiser/trunk/data/model/WaveFileModel.cpp =================================================================== --- sonic-visualiser/trunk/data/model/WaveFileModel.cpp 2006-10-17 19:27:23 UTC (rev 406) +++ sonic-visualiser/trunk/data/model/WaveFileModel.cpp 2006-10-18 16:38:30 UTC (rev 407) @@ -130,8 +130,8 @@ if (!m_reader || !m_reader->isOK()) return 0; -// std::cerr << "WaveFileModel::getValues(" << channel << ", " -// << start << ", " << end << "): calling reader" << std::endl; + std::cerr << "WaveFileModel::getValues(" << channel << ", " + << start << ", " << end << "): calling reader" << std::endl; SampleBlock frames; m_reader->getInterleavedFrames(start, end - start, frames); Modified: sonic-visualiser/trunk/sv/main/main.cpp =================================================================== --- sonic-visualiser/trunk/sv/main/main.cpp 2006-10-17 19:27:23 UTC (rev 406) +++ sonic-visualiser/trunk/sv/main/main.cpp 2006-10-18 16:38:30 UTC (rev 407) @@ -138,15 +138,7 @@ settings.endGroup(); gui.show(); -/* - QStringList pathList; - for (QStringList::iterator i = args.begin(); i != args.end(); ++i) { - if (i == args.begin()) continue; - if (!i->startsWith('-')) { - pathList.push_back(*i); - } - } -*/ + bool haveSession = false; bool haveMainModel = false; @@ -185,23 +177,7 @@ QMessageBox::tr("File \"%1\" could not be opened").arg(path)); } } - /* - if (!pathList.isEmpty()) { - bool success = false; - if (path.endsWith(".sv")) { - success = gui.openSessionFile(path); - } - if (!success) { - success = gui.openSomeFile(path); - } - if (!success) { - QMessageBox::critical(&gui, QMessageBox::tr("Failed to open file"), - QMessageBox::tr("File \"%1\" could not be opened").arg(path)); - } - } - */ - int rv = application.exec(); std::cerr << "application.exec() returned " << rv << std::endl; Modified: sonic-visualiser/trunk/view/Pane.cpp =================================================================== --- sonic-visualiser/trunk/view/Pane.cpp 2006-10-17 19:27:23 UTC (rev 406) +++ sonic-visualiser/trunk/view/Pane.cpp 2006-10-18 16:38:30 UTC (rev 407) @@ -33,6 +33,7 @@ #include <QGridLayout> #include <QPushButton> #include "widgets/Thumbwheel.h" +#include "widgets/Panner.h" using std::cerr; using std::endl; @@ -84,16 +85,21 @@ m_headsUpDisplay->setLayout(layout); m_hthumb = new Thumbwheel(Qt::Horizontal); - layout->addWidget(m_hthumb, 1, 0); + layout->addWidget(m_hthumb, 1, 0, 2, 1); m_hthumb->setFixedWidth(70); m_hthumb->setFixedHeight(16); m_hthumb->setDefaultValue(0); m_hthumb->setSpeed(0.6); connect(m_hthumb, SIGNAL(valueChanged(int)), this, SLOT(horizontalThumbwheelMoved(int))); - + + m_vpan = new Panner; + layout->addWidget(m_vpan, 0, 1); + m_vpan->setFixedWidth(16); + m_vpan->setFixedHeight(70); + m_vthumb = new Thumbwheel(Qt::Vertical); - layout->addWidget(m_vthumb, 0, 1); + layout->addWidget(m_vthumb, 0, 2); m_vthumb->setFixedWidth(16); m_vthumb->setFixedHeight(70); connect(m_vthumb, SIGNAL(valueChanged(int)), this, @@ -102,7 +108,7 @@ QPushButton *reset = new QPushButton; reset->setFixedHeight(16); reset->setFixedWidth(16); - layout->addWidget(reset, 1, 1); + layout->addWidget(reset, 1, 2); connect(reset, SIGNAL(clicked()), m_hthumb, SLOT(resetToDefault())); connect(reset, SIGNAL(clicked()), m_vthumb, SLOT(resetToDefault())); } Modified: sonic-visualiser/trunk/view/Pane.h =================================================================== --- sonic-visualiser/trunk/view/Pane.h 2006-10-17 19:27:23 UTC (rev 406) +++ sonic-visualiser/trunk/view/Pane.h 2006-10-18 16:38:30 UTC (rev 407) @@ -28,6 +28,7 @@ class QPaintEvent; class Layer; class Thumbwheel; +class Panner; class Pane : public View { @@ -108,6 +109,7 @@ DragMode m_dragMode; QWidget *m_headsUpDisplay; + Panner *m_vpan; Thumbwheel *m_hthumb; Thumbwheel *m_vthumb; }; Added: sonic-visualiser/trunk/widgets/Panner.cpp =================================================================== --- sonic-visualiser/trunk/widgets/Panner.cpp (rev 0) +++ sonic-visualiser/trunk/widgets/Panner.cpp 2006-10-18 16:38:30 UTC (rev 407) @@ -0,0 +1,156 @@ +/* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */ + +/* + Sonic Visualiser + An audio file viewer and annotation editor. + Centre for Digital Music, Queen Mary, University of London. + This file copyright 2006 Chris Cannam. + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. See the file + COPYING included with this distribution for more information. +*/ + +#include "Panner.h" + +#include <QMouseEvent> +#include <QPaintEvent> +#include <QWheelEvent> +#include <QPainter> + +#include <iostream> + +Panner::Panner(QWidget *parent) : + QWidget(parent), + m_rectX(0), + m_rectY(0), + m_rectWidth(1), + m_rectHeight(1) +{ +} + +Panner::~Panner() +{ +} + +void +Panner::mousePressEvent(QMouseEvent *e) +{ +} + +void +Panner::mouseDoubleClickEvent(QMouseEvent *e) +{ +} + +void +Panner::mouseMoveEvent(QMouseEvent *e) +{ +} + +void +Panner::mouseReleaseEvent(QMouseEvent *e) +{ +} + +void +Panner::wheelEvent(QWheelEvent *e) +{ +} + +void +Panner::paintEvent(QPaintEvent *e) +{ + QPainter paint(this); + paint.fillRect(rect(), palette().background().color()); + paint.setRenderHint(QPainter::Antialiasing, false); + paint.setPen(palette().dark().color()); + paint.setBrush(palette().highlight().color()); + paint.drawRect(QRectF(width() * m_rectX, height() - height() * m_rectY, + width() * m_rectWidth, height() * m_rectHeight)); +} + +void +Panner::normalise() +{ + if (m_rectWidth > 1.0) m_rectWidth = 1.0; + if (m_rectHeight > 1.0) m_rectHeight = 1.0; + if (m_rectX + m_rectWidth > 1.0) m_rectX = 1.0 - m_rectWidth; + if (m_rectX < 0) m_rectX = 0; + if (m_rectY + m_rectHeight > 1.0) m_rectY = 1.0 - m_rectHeight; + if (m_rectY < 0) m_rectY = 0; +} + +void +Panner::emitAndUpdate() +{ + emit rectExtentsChanged(m_rectX, m_rectY, m_rectWidth, m_rectHeight); + emit rectCentreMoved(m_rectX + (m_rectWidth/2), m_rectY + (m_rectHeight/2)); + update(); +} + +void +Panner::setRectExtents(float x0, float y0, float width, float height) +{ + if (m_rectX == x0 && + m_rectY == y0 && + m_rectWidth == width && + m_rectHeight == height) { + return; + } + m_rectX = x0; + m_rectY = y0; + m_rectWidth = width; + m_rectHeight = height; + normalise(); + emitAndUpdate(); +} + +void +Panner::setRectWidth(float width) +{ + if (m_rectWidth == width) return; + m_rectWidth = width; + normalise(); + emitAndUpdate(); +} + +void +Panner::setRectHeight(float height) +{ + if (m_rectHeight == height) return; + m_rectHeight = height; + normalise(); + emitAndUpdate(); +} + +void +Panner::setRectCentreX(float x) +{ + float x0 = x - m_rectWidth/2; + if (x0 == m_rectX) return; + m_rectX = x0; + normalise(); + emitAndUpdate(); +} + +void +Panner::setRectCentreY(float y) +{ + float y0 = y - m_rectWidth/2; + if (y0 == m_rectY) return; + m_rectY = y0; + normalise(); + emitAndUpdate(); +} + +QSize +Panner::sizeHint() const +{ + return QSize(30, 30); +} + + + Added: sonic-visualiser/trunk/widgets/Panner.h =================================================================== --- sonic-visualiser/trunk/widgets/Panner.h (rev 0) +++ sonic-visualiser/trunk/widgets/Panner.h 2006-10-18 16:38:30 UTC (rev 407) @@ -0,0 +1,100 @@ +/* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */ + +/* + Sonic Visualiser + An audio file viewer and annotation editor. + Centre for Digital Music, Queen Mary, University of London. + This file copyright 2006 Chris Cannam. + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. See the file + COPYING included with this distribution for more information. +*/ + +#ifndef _PANNER_H_ +#define _PANNER_H_ + +#include <QWidget> + +class Panner : public QWidget +{ + Q_OBJECT + +public: + Panner(QWidget *parent = 0); + virtual ~Panner(); + + virtual void mousePressEvent(QMouseEvent *e); + virtual void mouseDoubleClickEvent(QMouseEvent *e); + virtual void mouseMoveEvent(QMouseEvent *e); + virtual void mouseReleaseEvent(QMouseEvent *e); + virtual void wheelEvent(QWheelEvent *e); + virtual void paintEvent(QPaintEvent *e); + + virtual QSize sizeHint() const; + +signals: + /** + * Emitted when the panned rectangle is dragged or otherwise + * moved. Arguments are x0, y0, width and height of the rectangle + * in the range 0 -> 1 as proportions of the width and height of + * the whole widget. + */ + void rectExtentsChanged(float, float, float, float); + + /** + * Emitted when the rectangle is dragged or otherwise moved (as + * well as extentsChanged). Arguments are the centre coordinates + * of the rectangle in the range 0 -> 1 as proportions of the + * width and height of the whole widget. + */ + void rectCentreMoved(float, float); + +public slots: + /** + * Set the extents of the panned rectangle within the overall + * panner widget. Coordinates are in the range 0 -> 1 in both axes, + * with 0 at the top in the y axis. + */ + void setRectExtents(float x0, float y0, float width, float height); + + /** + * Set the width of the panned rectangle as a fraction (0 -> 1) of + * that of the whole panner widget. + */ + void setRectWidth(float width); + + /** + * Set the height of the panned rectangle as a fraction (0 -> 1) + * of that of the whole panner widget. + */ + void setRectHeight(float height); + + /** + * Set the location of the centre of the panned rectangle on the x + * axis, as a proportion (0 -> 1) of the width of the whole panner + * widget. + */ + void setRectCentreX(float x); + + /** + * Set the location of the centre of the panned rectangle on the y + * axis, as a proportion (0 -> 1) of the height of the whole panner + * widget. + */ + void setRectCentreY(float y); + +protected: + void normalise(); + void emitAndUpdate(); + + float m_rectX; + float m_rectY; + float m_rectWidth; + float m_rectHeight; +}; + +#endif + Modified: sonic-visualiser/trunk/widgets/widgets.pro =================================================================== --- sonic-visualiser/trunk/widgets/widgets.pro 2006-10-17 19:27:23 UTC (rev 406) +++ sonic-visualiser/trunk/widgets/widgets.pro 2006-10-18 16:38:30 UTC (rev 407) @@ -20,6 +20,7 @@ LayerTree.h \ LEDButton.h \ ListInputDialog.h \ + Panner.h \ PluginParameterBox.h \ PluginParameterDialog.h \ PropertyBox.h \ @@ -34,6 +35,7 @@ LayerTree.cpp \ LEDButton.cpp \ ListInputDialog.cpp \ + Panner.cpp \ PluginParameterBox.cpp \ PluginParameterDialog.cpp \ PropertyBox.cpp \ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |