Here is a timer widget. Minutes, seconds and milliseconds are in LMMS 0.4.15
is it ok or you really want the patch to work in git?
Rubén Ibarra Pastor
/*
* timer_widget.cpp - widget for visualization of ellapsed time
* Based on visualization widget
* Uploaded by Ruben Ibarra
* TODO: Add glow effect
* Licensed by GPLv2
*/
#ifndef _TIMER_WIDGET
#define _TIMER_WIDGET
#include <QtGui/QWidget>
#include <QtGui/QPixmap>
#include <QtGui/QGraphicsDropShadowEffect>
#include "mixer.h"
class timerWidget : public QWidget
{
Q_OBJECT
public:
timerWidget( const QPixmap & _bg, QWidget * _parent);
virtual ~timerWidget();
void setActive( bool _active );
protected:
virtual void paintEvent( QPaintEvent * _pe );
virtual void mousePressEvent( QMouseEvent * _me );
protected slots:
void updateAudioBuffer();
private:
QPixmap s_background;
QPointF * m_points;
QString seconds;
QString minutes;
QString milliseconds;
QString tacts;
QString ticks;
QString time1,time2,time3;
QString total;
QGraphicsDropShadowEffect * dse;
sampleFrame * m_buffer;
int mode;
} ;
#endif
/*
* timer_widget.cpp - widget for visualization of ellapsed time
* Based on visualization widget
* Uploaded by Ruben Ibarra
* TODO: Add glow effect and make it look more digital
* Licensed by GPLv2
*/
#include <QtGui/QMouseEvent>
#include <QtGui/QPainter>
#include "timer_widget.h"
#include "gui_templates.h"
#include "MainWindow.h"
#include "embed.h"
#include "engine.h"
#include "tooltip.h"
#include "song.h"
timerWidget::timerWidget( const QPixmap & _bg, QWidget * _p ) :
QWidget( _p ),
s_background( _bg ),
mode( 0 )
{
setFixedSize( s_background.width(), s_background.height() );
setAttribute( Qt::WA_OpaquePaintEvent, true );
const fpp_t frames = engine::getMixer()->framesPerPeriod();
m_buffer = new sampleFrame[frames];
engine::getMixer()->clearAudioBuffer( m_buffer, frames );
toolTip::add( this, tr( "click to enable/disable visualization of "
"time" ) );
}
timerWidget::~timerWidget()
{
delete[] m_buffer;
}
void timerWidget::updateAudioBuffer()
{
if( !engine::getSong()->isExporting() )
{
engine::getMixer()->lock();
const surroundSampleFrame * c = engine::getMixer()->
currentReadBuffer();
const fpp_t fpp = engine::getMixer()->framesPerPeriod();
memcpy( m_buffer, c, sizeof( surroundSampleFrame ) * fpp );
engine::getMixer()->unlock();
}
}
void timerWidget::setActive( bool _active )
{
if( mode != 2 )
{
connect( engine::mainWindow(),
SIGNAL( periodicUpdate() ),
this, SLOT( update() ) );
connect( engine::getMixer(),
SIGNAL( nextAudioBuffer() ),
this, SLOT( updateAudioBuffer() ) );
}
else
{
disconnect( engine::mainWindow(),
SIGNAL( periodicUpdate() ),
this, SLOT( update() ) );
disconnect( engine::getMixer(),
SIGNAL( nextAudioBuffer() ),
this, SLOT( updateAudioBuffer() ) );
// we have to update (remove last waves),
// because timer doesn't do that anymore
update();
}
}
void timerWidget::paintEvent( QPaintEvent * )
{
QPainter p( this );
p.drawPixmap( 0, 0, s_background );
//if( m_active && !engine::getSong()->isExporting() )
if( (mode == 1) && !engine::getSong()->isExporting() )
{
p.setPen( QColor( 64, 224, 255 ) );
p.setRenderHint( QPainter::Antialiasing );
// now draw all that stuff
milliseconds = milliseconds.setNum(engine::getSong()->getMilliseconds()%100);
seconds = seconds.setNum((engine::getSong()->getMilliseconds()/100)%60);
minutes = minutes.setNum((engine::getSong()->getMilliseconds()/6000));
p.setFont( pointSize<16>( p.font() ) );
if((engine::getSong()->getMilliseconds()/6000) < 10)//Minutes
time1 = "0";
else
time1 = "";
if((engine::getSong()->getMilliseconds()/100)%60 < 10)//Seconds
time2 = ":0";
else
time2 = ":";
if(engine::getSong()->getMilliseconds()%100 < 10)//Milliseconds
time3 = ":0";
else
time3 = ":";
total = minutes + ":" + seconds + ":" + milliseconds;
total = time1 + minutes + time2 + seconds + time3 + milliseconds;
p.drawText( 10, 30,total);
}
else if(mode == 2)
{
p.setPen( QColor( 64, 224, 255 ) );
p.setRenderHint( QPainter::Antialiasing );
tacts = seconds.setNum(engine::getSong()->getTacts());
ticks = minutes.setNum(engine::getSong()->getTicks());
milliseconds = milliseconds.setNum(engine::getSong()->getMilliseconds()%100);
p.setFont( pointSize<16>( p.font() ) );
if(engine::getSong()->getTacts() < 10)//Tacts
time1 = "0";
else
time1 = "";
if(engine::getSong()->getTicks() < 10)//Ticks
time2 = ":0";
else
time2 = ":";
if(engine::getSong()->getMilliseconds()%100 < 10)//Milliseconds
time3 = ":0";
else
time3 = ":";
total = time1 + tacts + time2 + ticks + time3 + milliseconds;
p.drawText( 10, 30,total);
}
else
{
p.setPen( QColor( 192, 192, 192 ) );
p.setFont( pointSize<7>( p.font() ) );
p.drawText( 6, height()-5, tr( "Click to enable" ) );
}
}
void timerWidget::mousePressEvent( QMouseEvent * _me )
{
if( _me->button() == Qt::LeftButton )
{
if(mode == 0)
setActive( true );
else if(mode == 2)
setActive( false);
mode++;
mode = mode%3;
}
}
#include "moc_timer_widget.cxx"
------------------------------------------------------------------------------
This SF.net email is sponsored by Windows:
Build for Windows Store.
http://p.sf.net/sfu/windows-dev2dev
_______________________________________________
LMMS-devel mailing list
LMMS-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/lmms-devel