summaryrefslogtreecommitdiff
authorllornkcor <llornkcor>2005-03-20 09:26:37 (UTC)
committer llornkcor <llornkcor>2005-03-20 09:26:37 (UTC)
commit421ee128d31c51f8530b0e37313ea0086e023237 (patch) (side-by-side diff)
treee5738e366ba3b14559361fdde87c4c8ce1a19a59
parentd5451e7abbfa3c3d14202311abccac8781736dae (diff)
downloadopie-421ee128d31c51f8530b0e37313ea0086e023237.zip
opie-421ee128d31c51f8530b0e37313ea0086e023237.tar.gz
opie-421ee128d31c51f8530b0e37313ea0086e023237.tar.bz2
add rainbow leds
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/multimedia/opierec/vumeter.cpp378
-rw-r--r--noncore/multimedia/opierec/vumeter.h8
2 files changed, 171 insertions, 215 deletions
diff --git a/noncore/multimedia/opierec/vumeter.cpp b/noncore/multimedia/opierec/vumeter.cpp
index 8bab2f2..0edc806 100644
--- a/noncore/multimedia/opierec/vumeter.cpp
+++ b/noncore/multimedia/opierec/vumeter.cpp
@@ -1,280 +1,240 @@
+//************************************************************
+//=======-VUMeter
+///// copyright : (C) 1999 by Martin Lorenz
+////// email : lorenz@ch.tum.de
+
#include "vumeter.h"
#include "qtrec.h"
+
+#include <qpe/config.h>
#include <qtimer.h>
-#include <math.h>
#include <qdrawutl.h>
+
#include <opie2/odebug.h>
using namespace Opie::Core;
-//************************************************************
-//===========================================================-VUMeter
-
-///// copyright : (C) 1999 bY Martin Lorenz
-////// email : lorenz@ch.tum.de
+#include <math.h>
VUMeter::VUMeter(QWidget *parent, const char *name, const int tr)
- : QWidget( parent, name )
+ : QWidget( parent, name )
{
-// qDebug("Making VUMeter");
- int tracks = tr;
- int i;
-
- qWarning("initialize peakvalues");
- for(i=0;i < tracks+2;i++) {
- peak[i] = hold[i] = 32768;
-// i_peak[i]=i_hold[i]=32768;
- holdTime[i] = 20;
- }
-
- para.onOff = true;
- para.hold = 20;
- para.update = 25; //timer
- para.leds = 17;
- para.reso = 3;
- para.resoFactor = pow(2, para.reso/6.0);
-
- for( i = 0; i < para.leds; i++) color[i] = green;
- color[0] = color[1] = red;
- color[2] = color[3] = color[4] = color[5] = yellow;
-
- buffer = new QPixmap();
- setBackgroundMode(NoBackground);
- vuTimer = new QTimer(this,"vu timer");
-
-
-// vuProp= new QPopupMenu(NULL,"vu popoup");
-// vuProp->insertItem(("O&n"),this,SLOT(slotOn()),0,0 );
-// vuProp->setItemEnabled(0, FALSE);
-// vuProp->insertItem(("O&ff"),this,SLOT(slotOff()), 0,1);
-// vuProp->insertSeparator();
-// vuProp->insertItem(("&Properties..."),this,SLOT(slotProps()) );
-
-// dia=new VUMeterDialog(&para);
-// connect(dia, SIGNAL(accepted()), this, SLOT(update()) );
- // QtRec *qtrecPtr;
-
-// if(qtrecPtr->tab_2->isActiveWindow())
-// vuTimer->start( 50 /*para.update*/, FALSE);
-// startTimer();
- connect(vuTimer, SIGNAL(timeout()), this , SLOT(timeSlot()));
-// update();
+ int tracks = tr;
+ int i;
+
+ qWarning("initialize peakvalues");
+ for(i = 0; i < tracks + 2; i++) {
+ peak[i] = hold[i] = 32768;
+ holdTime[i] = 20;
+ }
+
+ readConf();
+
+// QColor c;
+// c.setHsv( (x * 255)/w, 255, 255 );// rainbow effect
+// c.setRgb( 255, 0, 255);
+// p.setPen(c);
+
+ //rainbow effect
+ if( colorScheme = 0 ) {
+ for( i = 0; i < para.leds; i++) color[i] = green;
+ color[0] = color[1] = red;
+ color[2] = color[3] = color[4] = color[5] = yellow;
+ } else {
+ int j = para.leds - 4;
+ for( i = 0; i < para.leds; i++) {
+ int i16 = (j);// & 15;
+ color[i] = QColor(( 15 - i16) * 16, 255, 255, QColor::Hsv);
+ owarn << color[i].name() << oendl;
+ j--;
+ }
+ }
+
+ buffer = new QPixmap();
+ setBackgroundMode(NoBackground);
+ vuTimer = new QTimer(this,"vu timer");
+
+ connect(vuTimer, SIGNAL(timeout()), this , SLOT(timeSlot()));
}
VUMeter::~VUMeter(){
-// delete vuProp;
+ writeConf();
}
void VUMeter::update(){
- qWarning("vumeter update");
- vuTimer->start(para.update, FALSE);
- if (para.onOff) {
-// vuProp->setItemEnabled(0, FALSE);
-// vuProp->setItemEnabled(1, TRUE);
- disconnect(vuTimer, SIGNAL(timeout()), this , SLOT(timeSlot()));
- connect(vuTimer, SIGNAL(timeout()), this , SLOT(timeSlot()));
- } else {
-// vuProp->setItemEnabled(0, TRUE);
-// vuProp->setItemEnabled(1, FALSE);
- disconnect(vuTimer, SIGNAL(timeout()), this , SLOT(timeSlot()));
- }
- resize();
+ qWarning("vumeter update");
+ vuTimer->start(para.update, FALSE);
+ if (para.onOff) {
+ disconnect(vuTimer, SIGNAL(timeout()), this , SLOT(timeSlot()));
+ connect(vuTimer, SIGNAL(timeout()), this , SLOT(timeSlot()));
+ } else {
+ disconnect(vuTimer, SIGNAL(timeout()), this , SLOT(timeSlot()));
+ }
+ resize();
}
void VUMeter::slotOn() {
- connect(vuTimer, SIGNAL(timeout()), this , SLOT(timeSlot()));
- para.onOff=true;
-// dia->updatePara();
-// vuProp->setItemEnabled(0, FALSE);
-// vuProp->setItemEnabled(1, TRUE);
+ connect(vuTimer, SIGNAL(timeout()), this , SLOT(timeSlot()));
+ para.onOff=true;
}
void VUMeter::slotOff() {
- disconnect(vuTimer, SIGNAL(timeout()), this , SLOT(timeSlot()));
- para.onOff=false;
-// dia->updatePara();
-// vuProp->setItemEnabled(0, TRUE);
-// vuProp->setItemEnabled(1, FALSE);
+ disconnect(vuTimer, SIGNAL(timeout()), this , SLOT(timeSlot()));
+ para.onOff=false;
}
void VUMeter::slotProps() {
- qDebug("VU-Dialog");
-// dia->show();
+ qDebug("VU-Dialog");
}
void VUMeter::paintEvent(QPaintEvent* e) {
Q_UNUSED(e);
- bitBlt(this, 0, 0, buffer);
+ bitBlt(this, 0, 0, buffer);
}
void VUMeter::mousePressEvent(QMouseEvent* e) {
Q_UNUSED(e);
-// if (e->button() == RightButton)
-// vuProp->popup(QCursor::pos() );
}
void VUMeter::resizeEvent(QResizeEvent* event) {
- buffer->resize(event->size());
- resize();
+ buffer->resize(event->size());
+ resize();
}
void VUMeter::resize() {
- qWarning("resize VUMeter painting");
- if(buffer == 0)
- qDebug("Dude NULL pixmap buffer!");
-
- buffer->fill(black);
-
- x=width()-7; y=height()-12;
- dx=x/(tracks+2); dy=y/(para.leds+2); // size of one LED + black frame
- ox=dx/6+4+(x-(tracks+2)*dx)/2;
- oy=dy/5+5+(y-(para.leds+2)*dy)/2; //offsets
- sx=(4*dx)/6; sy=(4*dy)/5; //size of one LED
-
- QPainter painter; QString str; QFont font;
- int i, textOffset=0;
-
- if( painter.begin(buffer) ==FALSE)
- qWarning("Painting pixmap did not work!");
- else {
-// QColor c;
- //c.setHsv( (x * 255)/w, 255, 255 );// rainbow effect
- // c.setRgb( 255, 0, 255);
-// p.setPen(c);
- painter.setPen(green);
- qDrawShadePanel ( &painter, 0,0, width(),height(), colorGroup(), TRUE, 2, 0);
- if (2*dy-2 == 10) textOffset=1;
- font=painter.font(); font.setPointSize(2*dy-2);
- painter.setFont(font);
- for(i=0;i<tracks+2;i++) {
- painter.setPen(green); painter.setBrush(green);
- str.sprintf("%d",i+1);
- if (i==tracks) str.sprintf("L");
- if (i==tracks+1) str.sprintf("R");
-
- painter.drawRect(ox+dx*i,oy+dy*(para.leds)-2,sx,2*dy-1);
-// painter.drawRect(ox+dx*i,oy+dy*(15)+1,sx,2*dy-1);
- painter.setPen(black);
- painter.drawText(textOffset+ox+dx*i,oy+dy*(para.leds)-2,sx,2*dy,AlignCenter,str);
-// painter.drawText(textOffset+ox+dx*i,oy+dy*(15),sx,2*dy,AlignCenter,str);
- }
- painter.end();
- paint();
- }
+ qWarning("resize VUMeter painting");
+ if(buffer == 0)
+ qDebug("Dude NULL pixmap buffer!");
+
+ buffer->fill(black);
+
+ x = width() - 7; y = height() - 12;
+ dx = x / (tracks + 2); dy = y / (para.leds + 2); // size of one LED + black frame
+ ox = dx / 6 + 4 + (x - (tracks + 2) * dx) / 2;
+ oy = dy / 5 + 5 + (y - (para.leds + 2) * dy) / 2; //offsets
+ sx = (4 *dx) / 6; sy = (4 * dy) / 5; //size of one LED
+
+ QPainter painter; QString str; QFont font;
+ int i, textOffset=0;
+
+ if( painter.begin(buffer) ==FALSE)
+ qWarning("Painting pixmap did not work!");
+ else {
+ painter.setPen(green);
+ qDrawShadePanel ( &painter, 0,0, width(),height(), colorGroup(), TRUE, 2, 0);
+ if (2 * dy - 2 == 10) textOffset = 1;
+ font = painter.font(); font.setPointSize( 2 * dy - 2);
+ painter.setFont(font);
+ for(i = 0; i < tracks + 2; i++) {
+ painter.setPen(green); painter.setBrush(green);
+ str.sprintf("%d",i+1);
+ if (i == tracks) str.sprintf("L");
+ if (i == tracks + 1) str.sprintf("R");
+
+ painter.drawRect(ox + dx * i, oy + dy * (para.leds) - 2, sx, 2 * dy - 1);
+ painter.setPen(black);
+ painter.drawText(textOffset + ox + dx * i, oy + dy * (para.leds) - 2, sx, 2 * dy, AlignCenter, str);
+ }
+ painter.end();
+ paint();
+ }
}
void VUMeter::timeSlot() {
- int i;
+ int i;
// getting stuck here
// qDebug("calling paint() from timeSlot()\n");
- paint();
- for(i=0;i<tracks+2;i++) {
- peak[i] /= para.resoFactor;
-// i_peak[i] /= (int)para.resoFactor;
- }
-//cout <<"VU "<<peak[0]<<"\n";
-
+ paint();
+ for(i = 0; i < tracks + 2; i++) {
+ peak[i] /= para.resoFactor;
+ }
}
void VUMeter::paint() {
- int i, k;
- float p, h ;
-// int i_p, i_h;
-//draw background in resizeEvent
-//cout <<x <<" "<<y <<" "<<dx<<" " <<dy <<" vumeter.paint\n";
-// qDebug("paint()\n");
- QPainter painter;
- painter.begin(buffer);
- int c;
-
- for(i=0;i<tracks+2;i++) {
-// i_p=i_peak[i]; i_h=i_hold[i];
- p=peak[i]; h=hold[i];
- if (p>=32767) p=32768;
-// if (i_p>=32767) i_p=32768;
- if (h>=32767) h=32768;
-// if (i_h>=32767) i_h=32768;
- for(k=para.leds+1; k>=2; k--) {
- c=para.leds+1-k;
- if (p>=32768) { //LED on
-// if (i_p>=32768) { //LED on
- painter.setBrush(color[c]);
- } else { //LED off
- //painter.setPen(color[c].dark(300));
- painter.setBrush(color[c].dark(300));
- }
- if (h>=32768) { //LED-Frame on
-// if (i_h>=32768) { //LED-Frame on
- painter.setPen(color[c]);
- } else { //LED off
- painter.setPen(color[c].dark(300));
- }
- painter.drawRect(ox+dx*i,oy+dy*c,sx,sy);
- p*=para.resoFactor; h*=para.resoFactor;
-// i_p*=(int)para.resoFactor; i_h*=(int)para.resoFactor;
- }
- if (--holdTime[i]<=0) hold[i]=peak[i];
-// if (--holdTime[i]<=0) i_hold[i]=i_peak[i];
- }
- painter.end();
- bitBlt(this, 0, 0, buffer);
+ int i, k;
+ float p, h ;
+ QPainter painter;
+ painter.begin(buffer);
+ int c;
+
+ for(i = 0; i < tracks + 2; i++) {
+ p = peak[i]; h = hold[i];
+ if (p >= 32767) p = 32768;
+ if (h >= 32767) h = 32768;
+ for(k = para.leds + 1; k >= 2; k--) {
+ c = para.leds + 1 - k;
+ if (p >= 32768) { //LED on
+ painter.setBrush(color[c]);
+ } else { //LED off
+ painter.setBrush(color[c].dark(300));
+ }
+ if (h >= 32768) { //LED-Frame on
+ painter.setPen(color[c]);
+ } else { //LED off
+ painter.setPen(color[c].dark(300));
+ }
+ painter.drawRect(ox + dx * i, oy + dy * c, sx, sy);
+ p *= para.resoFactor; h *= para.resoFactor;
+ }
+ if ( --holdTime[i] <= 0) hold[i] = peak[i];
+ }
+ painter.end();
+ bitBlt(this, 0, 0, buffer);
}
void VUMeter::setPeak(int a[]) {
- int i;
+ int i;
// qDebug("set peak int");
// cerr<<"setting peak\n";
- for(i=0;i<tracks+2;i++) {
- if (a[i] > i_peak[i]) i_peak[i]= a[i];
- if (a[i] > i_hold[i]) {i_hold[i]=a[i]; holdTime[i]=para.hold;}
- }
- paint();
+ for(i = 0; i < tracks + 2; i++) {
+ if (a[i] > i_peak[i]) i_peak[i] = a[i];
+ if (a[i] > i_hold[i]) { i_hold[i] = a[i]; holdTime[i] = para.hold; }
+ }
+ paint();
}
void VUMeter::setPeak(float a[]) {
- int i;
-// owarn <<"set peak float"<< a[0]<< oendl;
-
- for(i=0;i<tracks+2;i++) {
- if (a[i] > peak[i]) peak[i]= a[i];
- if (a[i] > hold[i]) {hold[i]= a[i]; holdTime[i]=para.hold;}
- }
- paint();
+ int i;
+ for(i = 0; i < tracks + 2; i++) {
+ if (a[i] > peak[i]) peak[i] = a[i];
+ if (a[i] > hold[i]) { hold[i] = a[i]; holdTime[i] = para.hold; }
+ }
+ paint();
}
void VUMeter::startTimer() {
- vuTimer->start(para.update, FALSE);
+ vuTimer->start(para.update, FALSE);
}
void VUMeter::stopTimer() {
- vuTimer->stop();
+ vuTimer->stop();
}
void VUMeter::readConf() {
-// Config config("QtRec");
-// config->setGroup("VU-Meter");
-
-// para.onOff=config->readBoolEntry("OnOff", true ) ;
-// para.update=config->readNumEntry("Update", 50 );
-// para.hold=config->readNumEntry("Hold", 20 );
-// para.reso=config->readNumEntry("Resolution", 3 );
-// para.leds=config->readNumEntry("LEDs", 16 );
-// para.resoFactor=pow(2,para.reso/6.0);
-
-// update();
-// dia->updatePara();
-}
+ Config config("OpieRec");
+ config.setGroup("VU-Meter");
+ para.onOff = config.readBoolEntry("OnOff", true);
+ para.update = config.readNumEntry("Update", 25);
+ para.hold = config.readNumEntry("Hold", 20);
+ para.reso = config.readNumEntry("Resolution", 3);
+ para.leds = config.readNumEntry("LEDs", 20);
+ para.resoFactor = pow(2, para.reso / 6.0);
-void VUMeter::writeConf() {
-// Config config("QtRec");
-// config->setGroup("VU-Meter");
+ colorScheme = config.readNumEntry("colorScheme", 0);
+// update();
+// dia->updatePara();
+}
-// config->writeEntry("OnOff" ,para.onOff );
-// config->writeEntry("Update" ,para.update );
-// config->writeEntry("Hold" ,para.hold );
-// config->writeEntry("Resolution" , para.reso );
-// config->writeEntry("LEDs" , para.leds);
+void VUMeter::writeConf() {
+ Config config("OpieRec");
+ config.setGroup("VU-Meter");
+
+ config.writeEntry("OnOff", para.onOff);
+ config.writeEntry("Update", para.update);
+ config.writeEntry("Hold", para.hold);
+ config.writeEntry("Resolution", para.reso);
+ config.writeEntry("LEDs", para.leds);
}
diff --git a/noncore/multimedia/opierec/vumeter.h b/noncore/multimedia/opierec/vumeter.h
index e167686..435dff5 100644
--- a/noncore/multimedia/opierec/vumeter.h
+++ b/noncore/multimedia/opierec/vumeter.h
@@ -45,22 +45,18 @@ protected:
virtual void resizeEvent(QResizeEvent*);
virtual void mousePressEvent(QMouseEvent*);
void paint();
private:
- //bool status;
- int tracks;
-// VUPara para; // dialogs.h
+ int tracks, colorScheme;
float resoFactor;
int x,y,sx,sy,dx,dy,ox,oy;
float peak[4], hold[4];
int i_peak[4], i_hold[4];
int holdTime[4];
- // VUMeterDialog *dia;
- QPixmap *buffer, *warning; /// ?
+ QPixmap *buffer, *warning;
QPopupMenu *vuProp;
QColor color[37];
-
};
#endif