summaryrefslogtreecommitdiff
Side-by-side diff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/multimedia/opierec/qtrec.cpp115
-rw-r--r--noncore/multimedia/opierec/qtrec.h3
2 files changed, 67 insertions, 51 deletions
diff --git a/noncore/multimedia/opierec/qtrec.cpp b/noncore/multimedia/opierec/qtrec.cpp
index 75413be..d8b8ce3 100644
--- a/noncore/multimedia/opierec/qtrec.cpp
+++ b/noncore/multimedia/opierec/qtrec.cpp
@@ -421,177 +421,178 @@ QtRec::QtRec( QWidget* parent, const char* name, WFlags fl )
// open sound device to get volumes
Config hwcfg("OpieRec");
hwcfg.setGroup("Hardware");
soundDevice = new Device( this, false); //open play
getInVol();
getOutVol();
soundDevice->closeDevice( true);
soundDevice->sd = -1;
soundDevice = 0;
wavFile = 0;
// if( soundDevice) delete soundDevice;
QTimer::singleShot(100,this, SLOT(initIconView()));
if( autoMute)
doMute( true);
// ListView1->setFocus();
playing = false;
}
QtRec::~QtRec() {
// if( soundDevice) delete soundDevice;
}
void QtRec::cleanUp() {
if( !stopped) {
stopped = true;
endRecording();
}
ListView1->clear();
if( autoMute)
doMute(false);
// if( wavFile) delete wavFile;
// if(soundDevice) delete soundDevice;
}
void QtRec::init() {
needsStereoOut = false;
- QPixmap image3( ( const char** ) image3_data );
- QPixmap image4( ( const char** ) image4_data );
QPixmap image6( ( const char** ) image6_data );
stopped = true;
setCaption( tr( "OpieRecord " ));
QGridLayout *layout = new QGridLayout( this );
layout->setSpacing( 2);
layout->setMargin( 2);
TabWidget = new QTabWidget( this, "TabWidget" );
layout->addMultiCellWidget(TabWidget, 0, 7, 0, 8);
// TabWidget->setTabShape(QTabWidget::Triangular);
///**********<<<<<<<<<<<<>>>>>>>>>>>>***************
tab = new QWidget( TabWidget, "tab" );
QGridLayout *layout1 = new QGridLayout( tab);
layout1->setSpacing( 2);
layout1->setMargin( 2);
timeSlider = new QSlider( 0,100,10,0, QSlider::Horizontal, tab, (const char *) "timeSlider" );
layout1->addMultiCellWidget( timeSlider, 1, 1, 0, 3);
// timeLabel = new QLabel( tab, "TimeLabel" );
// layout1->addMultiCellWidget( timeLabel, 0, 0, 0, 3);
// playLabel2 = new QLabel(tab, "PlayLabel2" );
// playLabel2->setText(tr("Play") );
// playLabel2->setFixedHeight( 18);
// layout1->addMultiCellWidget( playLabel2, 0, 0, 4, 4);
Stop_PushButton = new QPushButton( tab, "Stop_PushButton" );
layout1->addMultiCellWidget( Stop_PushButton, 1, 1, 4, 4);
Stop_PushButton->setFixedSize( 22, 22);
- Stop_PushButton->setPixmap( image4 );
+ Stop_PushButton->setPixmap( Opie::Core::OResource::loadPixmap("play2", Opie::Core::OResource::SmallIcon) );
toBeginningButton = new QPushButton( tab, "Beginning_PushButton" );
layout1->addMultiCellWidget(toBeginningButton, 1, 1, 5, 5);
toBeginningButton->setFixedSize( 22, 22);
toBeginningButton->setPixmap( Opie::Core::OResource::loadPixmap("fastback", Opie::Core::OResource::SmallIcon) );
toEndButton = new QPushButton( tab, "End_PushButton" );
layout1->addMultiCellWidget( toEndButton, 1, 1, 6, 6);
toEndButton->setFixedSize( 22, 22);
toEndButton->setPixmap( Opie::Core::OResource::loadPixmap( "fastforward", Opie::Core::OResource::SmallIcon ) );
// QLabel *recLabel2;
// recLabel2 = new QLabel( tab, "recLabel2" );
// recLabel2->setText(tr("Rec"));
// recLabel2->setFixedHeight( 18);
// layout1->addMultiCellWidget( recLabel2, 0, 0, 7, 7);
Rec_PushButton = new QPushButton( tab, "Rec_PushButton" );
layout1->addMultiCellWidget( Rec_PushButton, 1, 1, 7, 7);
Rec_PushButton->setFixedSize( 22, 22);
Rec_PushButton->setPixmap( image6 );
t = new QTimer( this );
connect( t, SIGNAL( timeout() ), SLOT( timerBreak() ) );
rewindTimer = new QTimer( this );
connect( rewindTimer, SIGNAL( timeout() ),
this, SLOT( rewindTimerTimeout() ) );
forwardTimer = new QTimer( this );
connect( forwardTimer, SIGNAL( timeout() ),
this, SLOT( forwardTimerTimeout() ) );
deleteSoundButton = new QPushButton( tab, "deleteSoundButton" );
layout1->addMultiCellWidget( deleteSoundButton, 1, 1, 8, 8);
- deleteSoundButton->setText( tr( "Del" ) );
+ deleteSoundButton->setFixedSize( 22, 22);
+ deleteSoundButton->setPixmap( Opie::Core::OResource::loadPixmap( "editdelete", Opie::Core::OResource::SmallIcon ) );
ListView1 = new QListView( tab, "IconView1" );
layout1->addMultiCellWidget( ListView1, 2, 2, 0, 8);
ListView1->addColumn( tr( "Name" ) );
ListView1->setSorting( 1, false);
ListView1->addColumn( tr( "Time" ) ); //in seconds
+ ListView1->addColumn( tr( "Size" ) );
ListView1->setColumnWidthMode(0, QListView::Maximum);
- ListView1->setColumnAlignment( 1, QListView::AlignCenter);
+ ListView1->setColumnAlignment( 1, QListView::AlignRight);
+ ListView1->setColumnAlignment( 2, QListView::AlignRight);
ListView1->setAllColumnsShowFocus( true );
QPEApplication::setStylusOperation( ListView1->viewport(), QPEApplication::RightOnHold);
TabWidget->insertTab( tab, tr( "Files" ) );
///**********<<<<<<<<<<<<>>>>>>>>>>>>***************
tab_3 = new QWidget( TabWidget, "tab_3" );
QGridLayout *glayout3 = new QGridLayout( tab_3 );
glayout3->setSpacing( 2);
glayout3->setMargin( 2);
////////////////////////////////////
sampleGroup = new QGroupBox( tab_3, "samplegroup" );
sampleGroup->setTitle( tr( "Sample Rate" ) );
sampleGroup->setFixedSize( 95,50);
sampleRateComboBox = new QComboBox( false, sampleGroup, "SampleRateComboBox" );
sampleRateComboBox->setGeometry( QRect( 10, 20, 80, 25 ) );
QString s;
int z = 0;
while( deviceSampleRates[z] != -1) {
sampleRateComboBox->insertItem( s.setNum( deviceSampleRates[z], 10));
z++;
}
glayout3->addMultiCellWidget( sampleGroup, 0, 0, 0, 0);
sizeGroup= new QGroupBox( tab_3, "sizeGroup" );
sizeGroup->setTitle( tr( "Limit Size" ) );
sizeGroup->setFixedSize( 80, 50);
sizeLimitCombo = new QComboBox( false, sizeGroup, "sizeLimitCombo" );
sizeLimitCombo ->setGeometry( QRect( 5, 20, 70, 25 ) );
sizeLimitCombo->insertItem(tr("Unlimited"));
for(int i=1;i<13; i++) {
sizeLimitCombo->insertItem( QString::number( i * 5));
}
glayout3->addMultiCellWidget( sizeGroup, 0, 0, 1, 1);
dirGroup = new QGroupBox( tab_3, "dirGroup" );
dirGroup->setTitle( tr( "File Directory" ) );
dirGroup->setFixedSize( 130, 50);
directoryComboBox = new QComboBox( false, dirGroup, "dirGroup" );
directoryComboBox->setGeometry( QRect( 10, 15, 115, 25 ) );
@@ -657,317 +658,318 @@ void QtRec::init() {
outMuteCheckBox = new QCheckBox ( tr("mute"), tab_5 );
Layout15->addWidget( outMuteCheckBox );
inMuteCheckBox = new QCheckBox ( tr("mute"), tab_5 );
inMuteCheckBox-> setFocusPolicy ( QWidget::NoFocus );
Layout15b->addWidget( inMuteCheckBox );
Layout19a->addLayout( Layout15 );
Layout19a->addLayout( Layout15b );
fillDirectoryCombo();
TabWidget->insertTab( tab_3, tr( "Options" ) );
TabWidget->insertTab( tab_5, tr( "Volume" ) );
waveform = new Waveform( this, "waveform" );
waveform->setMinimumSize( QSize( 0, 50 ) );
layout->addMultiCellWidget( waveform, 8, 8, 0, 8);
waveform->setBackgroundColor ( black );
}
void QtRec::initIconView() {
ListView1->clear();
Config cfg("OpieRec");
cfg.setGroup("Sounds");
QString temp;
QPixmap image0( ( const char** ) image0_data );
int nFiles = cfg.readNumEntry("NumberofFiles",0);
// owarn << "init number of files " << nFiles << "" << oendl;
for(int i = 1; i <= nFiles; i++) {
QListViewItem * item;
QString fileS, mediaLocation, fileDate, filePath;
temp.sprintf( "%d",i);
temp = cfg.readEntry( temp,""); //reads currentFile
filePath = cfg.readEntry( temp,""); //currentFileName
QFileInfo info(filePath);
fileDate = info.lastModified().toString();
fileS = cfg.readEntry( filePath, "0" );// file length in seconds
+ QString sizeStr;
+ fileSize(info.size(), sizeStr);
mediaLocation = getStorage( filePath);
if( info.exists()) {
// owarn << "new item " << temp << oendl;
- item = new QListViewItem( ListView1, temp, fileS /*, mediaLocation, fileDate*/);
+ item = new QListViewItem( ListView1, temp, fileS, sizeStr );
item->setPixmap( 0, image0);
if( currentFileName == filePath)
ListView1->setSelected( item, true);
}
}
+
+ setButtons();
}
void QtRec::initConnections() {
connect(qApp,SIGNAL(aboutToQuit()),SLOT(cleanUp()));
connect(toBeginningButton,SIGNAL(pressed()),this,SLOT(rewindPressed()));
connect(toBeginningButton,SIGNAL(released()),this,SLOT(rewindReleased()));
connect(toEndButton,SIGNAL(pressed()),this,SLOT(FastforwardPressed()));
connect(toEndButton,SIGNAL(released()),this,SLOT(FastforwardReleased()));
connect(deleteSoundButton,SIGNAL(released()),this,SLOT(deleteSound()));
connect(Stop_PushButton,SIGNAL(released()),this,SLOT(doPlayBtn()));
// connect(Stop_PushButton,SIGNAL(released()),this,SLOT(doPlayBtn()));
// connect(Rec_PushButton,SIGNAL(released()),this,SIGNAL(startRecording()));
connect(Rec_PushButton,SIGNAL(released()),this,SLOT(newSound()));
connect(TabWidget,SIGNAL(currentChanged(QWidget*)),this,SLOT(thisTab(QWidget*)));
connect(OutputSlider,SIGNAL(sliderReleased()),this,SLOT(changedOutVolume()));
connect(InputSlider,SIGNAL(sliderReleased()),this,SLOT(changedInVolume()));
connect(sampleRateComboBox,SIGNAL(activated(int)),this,SLOT(changesamplerateCombo(int)));
connect(bitRateComboBox,SIGNAL(activated(int)),this,SLOT(changebitrateCombo(int)));
connect(directoryComboBox,SIGNAL(activated(int)),this,SLOT(changeDirCombo(int)));
connect(sizeLimitCombo,SIGNAL(activated(int)),this,SLOT(changeSizeLimitCombo(int)));
connect(stereoCheckBox,SIGNAL(toggled(bool)),this,SLOT(changeStereoCheck(bool)));
connect(outMuteCheckBox,SIGNAL(toggled(bool)),this,SLOT(doVolMuting(bool)));
connect(inMuteCheckBox,SIGNAL(toggled(bool)),this,SLOT(doMicMuting(bool)));
connect(ListView1,SIGNAL(doubleClicked(QListViewItem*)),this,SLOT(itClick(QListViewItem*)));
connect(ListView1,SIGNAL(mouseButtonPressed(int,QListViewItem*,const QPoint&,int)),this,SLOT(listPressed(int,QListViewItem*,const QPoint&,int)));
connect(timeSlider,SIGNAL(sliderMoved(int)),this,SLOT(changeTimeSlider(int)));
connect(timeSlider,SIGNAL(sliderPressed()),this,SLOT(timeSliderPressed()));
connect(timeSlider,SIGNAL(sliderReleased()),this,SLOT(timeSliderReleased()));
connect(compressionCheckBox,SIGNAL(toggled(bool)),this,SLOT(compressionSelected(bool)));
connect(autoMuteCheckBox,SIGNAL(toggled(bool)),this,SLOT(slotAutoMute(bool)));
}
void QtRec::initConfig() {
int index, fred, i;
Config cfg("OpieRec");
cfg.setGroup("Settings");
index = cfg.readNumEntry("samplerate",22050);
bool ok;
for(int ws=0;ws<sampleRateComboBox->count();ws++) {
fred = sampleRateComboBox->text(ws).toInt(&ok, 10);
if( index == fred) {
filePara.sampleRate = fred;
sampleRateComboBox->setCurrentItem(ws);
}
}
i = cfg.readNumEntry("bitrate",16);
if(i == 16)
bitRateComboBox->setCurrentItem( 1);
else if(i == 24)
bitRateComboBox->setCurrentItem( 2);
else if(i == 32)
bitRateComboBox->setCurrentItem( 3);
else
bitRateComboBox->setCurrentItem( 0);
filePara.resolution = i;
i = cfg.readNumEntry("sizeLimit", 5 );
QString temp;
sizeLimitCombo->setCurrentItem((i/5));
- stereoCheckBox->setChecked( cfg.readBoolEntry("stereo", 1));
+ stereoCheckBox->setChecked( cfg.readBoolEntry("stereo", 0));
if( stereoCheckBox->isChecked()) {
filePara.channels = 2;
} else {
filePara.channels = 1;
}
compressionCheckBox->setChecked( cfg.readBoolEntry("wavCompression",1));
if( compressionCheckBox->isChecked()) {
bitRateComboBox->setCurrentItem(1);
bitRateComboBox->setEnabled(false);
filePara.resolution=16;
}
autoMuteCheckBox->setChecked( cfg.readBoolEntry("useAutoMute",0));
if( autoMuteCheckBox->isChecked())
slotAutoMute(true);
else
slotAutoMute(false);
Config cofg( "qpe");
cofg.setGroup( "Volume");
outMuteCheckBox->setChecked( cofg.readBoolEntry( "Mute",0));
inMuteCheckBox->setChecked( cofg.readBoolEntry( "MicMute",0));
}
void QtRec::stop() {
// owarn << "STOP" << oendl;
- setRecordButton(false);
if( !recording) {
emit stopPlaying();
endPlaying();
} else {
emit stopRecording();
endRecording();
}
timeSlider->setValue(0);
+ setButtons();
}
void QtRec::doPlayBtn() {
if(!stopped) {
// playLabel2->setText(tr("Play"));
stop();
} else {
if(ListView1->currentItem() == 0) return;
// playLabel2->setText(tr("Stop"));
currentFile = ListView1->currentItem()->text(0);
start();
}
}
void QtRec::start() { //play
if( stopped) {
- QPixmap image3( ( const char** ) image3_data );
- Stop_PushButton->setPixmap( image3 );
- Stop_PushButton->setDown( true);
stopped = false;
paused = false;
+ setButtons();
secCount = 1;
if( openPlayFile())
if( setupAudio( false)) //recording is false
doPlay();
}
}
bool QtRec::rec() { //record
QString timeString;
timeString.sprintf("%.0f", 0.0);
// timeLabel->setText( timeString+ " seconds");
if(!stopped) {
monitoring = true;
return false;
} else {
secCount = 1;
// playLabel2->setText(tr("Stop"));
monitoring = false;
- setRecordButton( true);
+ setButtons();
if( setupAudio( true))
if(setUpFile()) {
int fileSize = 0;
Config cfg("OpieRec");
cfg.setGroup("Settings");
filePara.SecondsToRecord = getCurrentSizeLimit();
int diskSize = checkDiskSpace( (const QString &) wavFile->trackName());
if( filePara.SecondsToRecord == 0) {
fileSize = diskSize;
} else if( filePara.format == WAVE_FORMAT_PCM) {
// odebug << "WAVE_FORMAT_PCM" << oendl;
fileSize = (filePara.SecondsToRecord ) * filePara.channels
* filePara.sampleRate * ( filePara.resolution / 8) + 1000;
} else {
// odebug << "WAVE_FORMAT_DVI_ADPCM" << oendl;
fileSize = ((filePara.SecondsToRecord) * filePara.channels
* filePara.sampleRate * ( filePara.resolution / 8) ) / 4 + 250;
}
filePara.samplesToRecord = fileSize;
odebug << "filesize should be " << filePara.samplesToRecord
<< ", bits " << filePara.resolution << ", rate " << filePara.sampleRate;
if( paused) {
paused = false;
}
// else {
odebug << "Setting timeslider " << filePara.samplesToRecord << "" << oendl;
// if(fileSize != 0)
timeSlider->setRange(0, filePara.samplesToRecord);
// }
if( diskSize < fileSize/1024) {
QMessageBox::warning(this,
tr("Low Disk Space"),
tr("You are running low of\nrecording space\n"
"or a card isn't being recognized"));
stopped = true; //we need to be stopped
stop();
} else {
QString msg;
msg.sprintf("%d, %d, %d", filePara.sampleRate, filePara.channels, filePara.resolution);
#ifdef DEV_VERSION
setCaption( msg);
#endif
filePara.fileName=currentFile.latin1();
odebug << "Start recording" << oendl;
stopped = false;
#ifdef THREADED
odebug << "Start recording thread" << oendl;
pthread_t thread1;
pthread_create( &thread1, NULL, (void * (*)(void *))quickRec, NULL/* &*/);
#endif
- toBeginningButton->setEnabled( false);
- toEndButton->setEnabled( false);
+ setButtons();
startTimer(1000);
#ifndef THREADED
quickRec();
#endif
}
} //end setUpFile
} //end setupAudio
return true;
}
/*
This happens when a tab is selected*/
void QtRec::thisTab(QWidget* widg) {
if(widg != NULL) {
int index = TabWidget->currentPageIndex();
if(index == 0) { //file page
}
if(index == 1) { //control page
fillDirectoryCombo();
// soundDevice->getOutVol();
// soundDevice->getInVol();
}
if( index==2) { //help page
}
qApp->processEvents();
update();
}
}
void QtRec::getOutVol( ) {
filePara.outVol = soundDevice->getOutVolume();
// odebug << "out vol " << filePara.outVol << "" << oendl;
OutputSlider->setValue( -filePara.outVol);
}
void QtRec::getInVol() {
filePara.inVol = soundDevice->getInVolume();
// odebug << "in vol " << filePara.inVol << "" << oendl;
InputSlider->setValue( -filePara.inVol);
}
void QtRec::changedOutVolume() {
soundDevice->changedOutVolume( -OutputSlider->value());
}
@@ -1095,210 +1097,211 @@ bool QtRec::setUpFile() { //setup file for recording
filePara.resolution,
filePara.format);
filePara.fd = wavFile->wavHandle();
if(filePara.fd == -1) {
return false;
} else {
}
return true;
}
/// <<<<<<<<<<<<<<<< PLAY >>>>>>>>>>>>>>>>>>>
bool QtRec::doPlay() {
if( !paused) {
total = 0;
filePara.numberOfRecordedSeconds = 0;
} else {
paused = false;
secCount = (int)filePara.numberOfRecordedSeconds;
}
playing = true;
stopped = false;
recording = false;
QString num;
odebug << "Play number of samples " << filePara.numberSamples << "" << oendl;
// timeSlider->setRange( 0, filePara.numberSamples);
timeString.sprintf("%f", filePara.numberOfRecordedSeconds);
// timeLabel->setText( timeString+ tr(" seconds"));
QString msg;
msg.sprintf("%d, %d, %d",
filePara.sampleRate,
filePara.channels,
filePara.resolution);
#ifdef DEV_VERSION
setCaption( msg);
#endif
startTimer( 1000);
#ifdef THREADED
pthread_t thread2;
pthread_create( &thread2, NULL, (void * (*)(void *))playIt, NULL/* &*/);
#endif
- toBeginningButton->setEnabled( false);
- toEndButton->setEnabled( false);
+ setButtons();
#ifndef THREADED
playIt();
#endif
return true;
}
void QtRec::changebitrateCombo(int i) {
Config cfg("OpieRec");
cfg.setGroup("Settings");
int bits = 0;
if( i == 1) { bits = 16; }
else if( i == 2) { bits = 24; }
else if( i == 3) { bits = 32; }
else { bits=8; }
cfg.writeEntry("bitrate", bits);
filePara.resolution = bits;
cfg.write();
}
void QtRec::changesamplerateCombo(int i) {
Config cfg("OpieRec");
cfg.setGroup("Settings");
int rate=0;
bool ok;
rate = sampleRateComboBox->text(i).toInt(&ok, 10);
cfg.writeEntry( "samplerate",rate);
filePara.sampleRate=rate;
odebug << "Change sample rate " << rate << "" << oendl;
cfg.write();
}
void QtRec::changeDirCombo(int index) {
Config cfg("OpieRec");
cfg.setGroup("Settings");
QString sName = directoryComboBox->text(index);
StorageInfo storageInfo;
const QList<FileSystem> &fs = storageInfo.fileSystems();
QListIterator<FileSystem> it ( fs );
QString storage;
for( ; it.current(); ++it ){
if( sName == (*it)->name()+" "+ (*it)->path() ||
(*it)->name() == sName ) {
const QString path = (*it)->path();
recDir = path;
cfg.writeEntry("directory", recDir);
odebug << "new rec dir "+recDir << oendl;
}
}
cfg.write();
}
void QtRec::changeSizeLimitCombo(int) {
Config cfg("OpieRec");
cfg.setGroup("Settings");
cfg.writeEntry("sizeLimit", getCurrentSizeLimit() );
cfg.write();
}
void QtRec::newSound() {
- if( !rec()) {
- endRecording();
- deleteSound();
+ if(!rec()) {
+ stop();
}
}
void QtRec::itClick(QListViewItem *item) {
currentFile = item->text(0);
setCaption("OpieRecord "+currentFile);
}
void QtRec::deleteSound() {
Config cfg("OpieRec");
cfg.setGroup("Sounds");
if( ListView1->currentItem() == NULL)
return;
+
+ if (QMessageBox::information(this, tr("Delete"), tr("Are you sure?"), QMessageBox::Yes, QMessageBox::No)==QMessageBox::Yes) {
QString file = ListView1->currentItem()->text(0);
QString fileName;
fileName = cfg.readEntry( file, "");
QFile f( fileName);
if( f.exists())
if( !f.remove())
QMessageBox::message( tr("Error"), tr("Could not remove file."));
int nFiles = cfg.readNumEntry( "NumberofFiles",0);
bool found = false;
for(int i=0;i<nFiles+1;i++) {
if( cfg.readEntry( QString::number(i),"").find( file,0,true) != -1) {
found = true;
cfg.writeEntry( QString::number(i), cfg.readEntry( QString::number(i+1),""));
}
if(found)
cfg.writeEntry( QString::number(i), cfg.readEntry( QString::number(i+1),""));
}
cfg.removeEntry( cfg.readEntry( file));
cfg.removeEntry( file);
cfg.writeEntry( "NumberofFiles", nFiles-1);
cfg.write();
ListView1->takeItem( ListView1->currentItem() );
delete ListView1->currentItem();
ListView1->clear();
ListView1->setSelected( ListView1->firstChild(), true);
initIconView();
update();
setCaption( tr( "OpieRecord " ));
+ }
}
void QtRec::keyPressEvent( QKeyEvent *e) {
switch ( e->key() ) {
// case Key_F1:
// if(stopped && !recording)
// newSound();
// else
// stop();
// break;
// case Key_F2: {
// if( !e->isAutoRepeat())
// rewindPressed();
// }
// break;
// case Key_F3: {
// if( !e->isAutoRepeat())
// FastforwardPressed();
// }
// break;
////////////////////////////// Zaurus keys
case Key_F9: //activity
break;
case Key_F10: //contacts
break;
case Key_F11: //menu
break;
case Key_F12: //home
break;
case Key_F13: //mail
break;
case Key_Space:
break;
case Key_Delete:
break;
case Key_Up:
// stop();
break;
case Key_Down:
// newSound();
break;
case Key_Left: {
odebug << "rewinding" << oendl;
if( !e->isAutoRepeat())
rewindPressed();
}
@@ -1331,347 +1334,347 @@ void QtRec::keyReleaseEvent( QKeyEvent *e) {
break;
case Key_F10: //contacts
break;
case Key_F11: //menu
break;
case Key_F12: //home
if(stopped)
doPlayBtn();
else
stop();
break;
case Key_F13: //mail
break;
case Key_Space:
if(stopped && !recording)
newSound();
else
stop();
break;
case Key_Delete:
deleteSound();
break;
case Key_Up:
// stop();
odebug << "Up" << oendl;
break;
case Key_Down:
// start();
// odebug << "Down" << oendl;
// newSound();
break;
case Key_Left:
odebug << "Left" << oendl;
rewindReleased();
break;
case Key_Right:
odebug << "Right" << oendl;
FastforwardReleased();
break;
}
}
void QtRec::endRecording() {
monitoring = false;
recording = false;
stopped = true;
waveform->reset();
- setRecordButton( false);
- toBeginningButton->setEnabled( true);
- toEndButton->setEnabled( true);
+ setButtons();
killTimers();
if(autoMute)
doMute( true);
soundDevice->closeDevice( true);
if( wavFile->track.isOpen()) {
wavFile->adjustHeaders( filePara.fd, filePara.numberSamples);
filePara.numberSamples = 0;
wavFile->closeFile();
filePara.fd=0;
if( wavFile->isTempFile()) {
// move tmp file to regular file
QString cmd;
cmd.sprintf("mv "+ wavFile->trackName() + " " + wavFile->currentFileName);
odebug << "moving tmp file to "+currentFileName << oendl;
system( cmd.latin1());
}
odebug << "Just moved " + wavFile->currentFileName << oendl;
Config cfg("OpieRec");
cfg.setGroup("Sounds");
int nFiles = cfg.readNumEntry( "NumberofFiles",0);
currentFile = QFileInfo( wavFile->currentFileName).fileName();
currentFile = currentFile.left( currentFile.length() - 4);
cfg.writeEntry( "NumberofFiles", nFiles + 1);
cfg.writeEntry( QString::number( nFiles + 1), currentFile);
cfg.writeEntry( currentFile, wavFile->currentFileName);
QString time;
time.sprintf("%.2f", filePara.numberOfRecordedSeconds);
cfg.writeEntry( wavFile->currentFileName, time );
odebug << "writing config numberOfRecordedSeconds "+time << oendl;
cfg.write();
odebug << "finished recording" << oendl;
// timeLabel->setText("");
}
// if(soundDevice) delete soundDevice;
timeSlider->setValue(0);
initIconView();
selectItemByName( currentFile);
setCaption( tr( "OpieRecord " ));
}
void QtRec::endPlaying() {
monitoring = false;
recording = false;
playing = false;
stopped = true;
waveform->reset();
// errorStop();
odebug << "end playing" << oendl;
- setRecordButton( false);
-
- toBeginningButton->setEnabled( true);
- toEndButton->setEnabled( true);
+ setButtons();
if(autoMute)
doMute( true);
soundDevice->closeDevice( false);
soundDevice->sd = -1;
// if(soundDevice) delete soundDevice;
odebug << "file and sound device closed" << oendl;
// timeLabel->setText("");
total = 0;
filePara.numberSamples = 0;
filePara.sd = -1;
// wavFile->closeFile();
filePara.fd = 0;
// if(wavFile) delete wavFile; //this crashes
odebug << "track closed" << oendl;
killTimers();
// owarn << "reset slider" << oendl;
timeSlider->setValue(0);
// if(soundDevice) delete soundDevice;
}
bool QtRec::openPlayFile() {
qWarning("opening file");
qApp->processEvents();
if( currentFile.isEmpty()) {
QMessageBox::message(tr("Opierec"),tr("Please select file to play"));
endPlaying();
return false;
}
QString currentFileName;
Config cfg("OpieRec");
cfg.setGroup("Sounds");
int nFiles = cfg.readNumEntry( "NumberofFiles", 0);
for(int i=0;i<nFiles+1;i++) { //look for file
if( cfg.readEntry( QString::number(i),"").find( currentFile,0,true) != -1) {
currentFileName = cfg.readEntry( currentFile, "" );
odebug << "opening for play: " + currentFileName << oendl;
}
}
wavFile = new WavFile(this,
currentFileName,
false);
filePara.fd = wavFile->wavHandle();
if(filePara.fd == -1) {
// if(!track.open(IO_ReadOnly)) {
QString errorMsg = (QString)strerror(errno);
monitoring = false;
setCaption( tr( "OpieRecord " ));
QMessageBox::message(tr("Note"), tr("Could not open audio file.\n")
+ errorMsg + "\n" + currentFile);
return false;
} else {
filePara.numberSamples = wavFile->getNumberSamples();
filePara.format = wavFile->getFormat();
filePara.sampleRate = wavFile->getSampleRate();
filePara.resolution = wavFile->getResolution();
filePara.channels = wavFile->getChannels();
timeSlider->setPageStep(1);
monitoring = true;
odebug << "file " << filePara.fd << ", samples " << filePara.numberSamples << " " << filePara.sampleRate << "" << oendl;
int sec = (int) (( filePara.numberSamples / filePara.sampleRate) / filePara.channels) / ( filePara.channels*( filePara.resolution/8));
// owarn << "seconds " << sec << "" << oendl;
timeSlider->setRange(0, filePara.numberSamples );
}
return true;
}
void QtRec::listPressed( int mouse, QListViewItem *item, const QPoint &, int ) {
if(item == NULL )
return;
switch (mouse) {
case 1: {
if( renameBox != 0 ) //tricky
cancelRename();
currentFile = item->text(0);
+ setButtons();
// setCaption( "OpieRecord " + currentFile);
}
break;
case 2:
showListMenu(item);
ListView1->clearSelection();
break;
};
}
void QtRec::showListMenu(QListViewItem * item) {
if(item == NULL)
return;
QPopupMenu *m = new QPopupMenu(this);
m->insertItem( tr("Play"), this, SLOT( doMenuPlay() ));
if(Ir::supported()) m->insertItem( tr( "Send with Ir" ), this, SLOT( doBeam() ));
m->insertItem( tr( "Rename" ), this, SLOT( doRename() ));
// #if defined (QTOPIA_INTERNAL_FSLP)
// m->insertItem( tr( "Properties" ), this, SLOT( doProperties() ));
// #endif
m->insertSeparator();
m->insertItem( tr("Delete"), this, SLOT( deleteSound() ) );
m->exec( QCursor::pos() );
qApp->processEvents();
}
void QtRec::fileBeamFinished( Ir *ir) {
if(ir)
QMessageBox::message( tr("Ir Beam out"), tr("Ir sent.") ,tr("Ok") );
}
void QtRec::doBeam() {
qApp->processEvents();
if( ListView1->currentItem() == NULL)
return;
Ir ir;
if( ir.supported()) {
QString file = ListView1->currentItem()->text(0);
Config cfg("OpieRec");
cfg.setGroup("Sounds");
int nFiles = cfg.readNumEntry("NumberofFiles",0);
for(int i=0;i<nFiles+1;i++) {
if( cfg.readEntry( QString::number( i),"").find( file, 0, true) != -1) {
QString filePath = cfg.readEntry(file,"");
Ir *file = new Ir(this, "IR");
connect( file, SIGNAL( done(Ir*)),
this, SLOT( fileBeamFinished(Ir*)));
file->send( filePath, "OPieRec audio file\n" + filePath );
}
}
}
}
void QtRec::doMenuPlay() {
qApp->processEvents();
currentFile = ListView1->currentItem()->text(0);
+ doPlayBtn();
}
void QtRec::doRename() {
QRect r = ListView1->itemRect( ListView1->currentItem( ));
r = QRect( ListView1->viewportToContents( r.topLeft() ), r.size() );
r.setX( ListView1->contentsX() );
if ( r.width() > ListView1->visibleWidth() )
r.setWidth( ListView1->visibleWidth() );
renameBox = new QLineEdit( ListView1->viewport(), "qt_renamebox" );
renameBox->setFrame(true);
renameBox->setText( ListView1->currentItem()->text(0) );
renameBox->selectAll();
renameBox->installEventFilter( this );
ListView1->addChild( renameBox, r.x(), r.y() );
renameBox->resize( r.size() );
ListView1->viewport()->setFocusProxy( renameBox );
renameBox->setFocus();
renameBox->show();
}
void QtRec::okRename() {
odebug << renameBox->text() << oendl;
QString filename = renameBox->text();
cancelRename();
if( ListView1->currentItem() == NULL)
return;
Config cfg("OpieRec");
cfg.setGroup("Sounds");
QString file = ListView1->currentItem()->text(0);
+ if(file == filename)
+ return;
+
odebug << "filename is " + filename << oendl;
int nFiles = cfg.readNumEntry("NumberofFiles",0);
for(int i=0;i<nFiles+1;i++) { //look for file
if( cfg.readEntry( QString::number(i),"").find(file,0,true) != -1) {
QString filePath = cfg.readEntry(file,"");
cfg.writeEntry( QString::number(i), filename );
cfg.writeEntry( filename, filePath );
cfg.removeEntry( file);
cfg.write();
}
}
ListView1->takeItem( ListView1->currentItem() );
delete ListView1->currentItem();
ListView1->clear();
initIconView();
update();
}
void QtRec::cancelRename() {
bool resetFocus = ListView1->viewport()->focusProxy() == renameBox;
delete renameBox;
renameBox = 0;
if ( resetFocus ) {
ListView1->viewport()->setFocusProxy( ListView1 );
ListView1->setFocus();
}
}
bool QtRec::eventFilter( QObject * o, QEvent * e ) {
if ( o->inherits( "QLineEdit" ) ) {
if ( e->type() == QEvent::KeyPress ) {
QKeyEvent *ke = (QKeyEvent*)e;
if ( ke->key() == Key_Return ||
ke->key() == Key_Enter ) {
okRename();
return true;
} else if ( ke->key() == Key_Escape ) {
cancelRename();
return true;
}
} else if ( e->type() == QEvent::FocusOut ) {
cancelRename();
return true;
@@ -1893,161 +1896,173 @@ void QtRec::forwardTimerTimeout() {
timeString.sprintf( "%.2f", filePara.numberOfRecordedSeconds);
// timeLabel->setText( timeString+ tr(" seconds"));
}
void QtRec::FastforwardReleased() {
forwardTimer->stop();
if( wavFile->track.isOpen()) {
sliderPos=timeSlider->value();
stopped = false;
int newPos = lseek( filePara.fd, sliderPos, SEEK_SET);
total = newPos * 4;
filePara.numberOfRecordedSeconds = (float)sliderPos / (float)filePara.sampleRate * (float)2;
startTimer( 1000);
doPlay();
}
}
QString QtRec::getStorage(const QString &fileName) {
StorageInfo storageInfo;
const QList<FileSystem> &fs = storageInfo.fileSystems();
QListIterator<FileSystem> it ( fs );
QString storage;
for( ; it.current(); ++it ){
const QString name = ( *it)->name();
const QString path = ( *it)->path();
const QString disk = ( *it)->disk();
if( fileName.find( path,0,true) != -1)
storage = name;
// const QString options = (*it)->options();
// if( name.find( tr("Internal"),0,true) == -1) {
// storageComboBox->insertItem( name +" -> "+disk);
// odebug << name << oendl;
}
return storage;
// struct mntent *me;
// // if(fileName == "/etc/mtab") {
// FILE *mntfp = setmntent( fileName.latin1(), "r" );
// if ( mntfp ) {
// while ( (me = getmntent( mntfp )) != 0 ) {
// QString filesystemType = me->mnt_type;
// }
// }
// endmntent( mntfp );
}
-void QtRec::setRecordButton(bool b) {
-
- if(b) { //about to record or play
-
- Rec_PushButton->setDown( true);
- QPixmap image3( ( const char** ) image3_data );
- Stop_PushButton->setPixmap( image3 );
- if(Stop_PushButton->isDown())
- Stop_PushButton->setDown( true);
-// playLabel2->setText( tr("Stop") );
-
- } else { //about to stop
-
- QPixmap image4( ( const char** ) image4_data );
- Stop_PushButton->setPixmap( image4);
- if(Stop_PushButton->isDown())
- Stop_PushButton->setDown( false);
-// playLabel2->setText( tr("Play") );
- if(Rec_PushButton->isDown())
- Rec_PushButton->setDown( false);
- }
-}
-
void QtRec::fillDirectoryCombo() {
if( directoryComboBox->count() > 0)
directoryComboBox->clear();
int index = 0;
Config cfg("OpieRec");
cfg.setGroup("Settings");
QString dir = cfg.readEntry("directory", "/");
StorageInfo storageInfo;
const QList<FileSystem> &fs = storageInfo.fileSystems();
QListIterator<FileSystem> it ( fs );
QString storage;
for( ; it.current(); ++it ){
const QString name = ( *it)->name();
const QString path = ( *it)->path();
// directoryComboBox->insertItem(name+" "+path);
directoryComboBox->insertItem(name);
if( path == dir)
directoryComboBox->setCurrentItem( index);
index++;
}
}
void QtRec::errorStop() {
stopped = true;
wavFile->closeFile();
killTimers();
}
void QtRec::doMute(bool b) {
doVolMuting( b);
doMicMuting( b);
}
void QtRec::slotAutoMute(bool b) {
autoMute = b;
Config cfg("OpieRec");
cfg.setGroup("Settings");
cfg.writeEntry("useAutoMute",b);
doMute( b);
outMuteCheckBox->setChecked( b);
inMuteCheckBox->setChecked( b);
}
void QtRec::selectItemByName(const QString & name) {
QListViewItemIterator it( ListView1 );
for ( ; it.current(); ++it )
if( name == it.current()->text(0))
ListView1->setCurrentItem(it.current());
}
// long findPeak(long input ) {
// // halfLife = time in seconds for output to decay to half value after an impulse
// static float output = 0.0;
// float halfLife = .0025;
// float vsf = .0025;
// float scalar = pow( 0.5, 1.0/(halfLife * filePara.sampleRate ));
// if( input < 0.0 )
// input = -input; // Absolute value.
// if ( input >= output ) {
// // When we hit a peak, ride the peak to the top.
// output = input;
// } else {
// // Exponential decay of output when signal is low.
// output = output * scalar;
// //
// // When current gets close to 0.0, set current to 0.0 to prevent FP underflow
// // which can cause a severe performance degradation due to a flood
// // of interrupts.
// //
// if( output < vsf ) output = 0.0;
// }
// return (long) output;
// }
void QtRec::changeStereoCheck(bool b) {
Config cfg("OpieRec");
cfg.setGroup("Settings");
int ch = 0;
if ( !b) { ch = 1;}
else { ch = 2;}
cfg.writeEntry("stereo", b);
filePara.channels = ch;
cfg.write();
}
-
+void QtRec::setButtons() {
+ if(stopped) {
+ Stop_PushButton->setPixmap( Opie::Core::OResource::loadPixmap("play2", Opie::Core::OResource::SmallIcon) );
+ if(ListView1->currentItem()) {
+ Stop_PushButton->setEnabled(true);
+ toBeginningButton->setEnabled(true);
+ toEndButton->setEnabled(true);
+ deleteSoundButton->setEnabled(true);
+ timeSlider->setEnabled(true);
+ }
+ else {
+ Stop_PushButton->setEnabled(false);
+ toBeginningButton->setEnabled(false);
+ toEndButton->setEnabled(false);
+ deleteSoundButton->setEnabled(false);
+ timeSlider->setEnabled(false);
+ }
+ }
+ else {
+ timeSlider->setEnabled(true);
+ Stop_PushButton->setPixmap( Opie::Core::OResource::loadPixmap("stop", Opie::Core::OResource::SmallIcon) );
+ Stop_PushButton->setEnabled(true);
+ toBeginningButton->setEnabled(false);
+ toEndButton->setEnabled(false);
+ deleteSoundButton->setEnabled(false);
+ }
+}
+
+void QtRec::fileSize(unsigned long size, QString &str) {
+ if( size > 1048576 )
+ str.sprintf( "%.0fM", size / 1048576.0 );
+ else if( size > 1024 )
+ str.sprintf( "%.0fk", size / 1024.0 );
+ else
+ str.sprintf( "%d", size );
+}
diff --git a/noncore/multimedia/opierec/qtrec.h b/noncore/multimedia/opierec/qtrec.h
index 6e81af6..b463597 100644
--- a/noncore/multimedia/opierec/qtrec.h
+++ b/noncore/multimedia/opierec/qtrec.h
@@ -53,100 +53,101 @@ class QLineEdit;
class QtRec : public QWidget
{
Q_OBJECT
public:
static QString appName() { return QString::fromLatin1("opierec"); }
QtRec( QWidget* parent=0, const char* name=0, WFlags fl=0 );
~QtRec();
QSlider *OutputSlider,*InputSlider;
signals:
void stopRecording();
void startRecording();
void stopPlaying();
void startPlaying();
public slots:
private:
// int fragment;
int fd1;
int secCount;
QString timeString;
QLineEdit *renameBox;
QGroupBox* GroupBox1;
QString currentFile;
QString date, currentFileName, tmpFileName;
QTimer *t_timer;
bool needsStereoOut, paused;
bool useTmpFile, autoMute;
bool eventFilter( QObject * , QEvent * );
void okRename();
void cancelRename();
QString getStorage(const QString &);
bool rec();
int getCurrentSizeLimit();
long checkDiskSpace(const QString &);
void doMute(bool);
void errorStop();
void fillDirectoryCombo();
void getInVol();
void getOutVol();
void init();
void initConfig();
void initConnections();
void selectItemByName(const QString &);
- void setRecordButton(bool);
void start();
void stop();
void timerEvent( QTimerEvent *e );
+ void setButtons();
+ void QtRec::fileSize(unsigned long size, QString &str);
private slots:
void endPlaying();
void endRecording();
void FastforwardPressed();
void FastforwardReleased();
void changeDirCombo(int);
void changeSizeLimitCombo(int);
void changeTimeSlider(int);
void changebitrateCombo(int);
void changeStereoCheck( bool);
void changedInVolume();
void changedOutVolume();
void changesamplerateCombo(int);
void cleanUp();
void compressionSelected(bool);
void deleteSound();
void doBeam();
void doMenuPlay();
void doMicMuting(bool);
void doPlayBtn();
void doRename();
void doVolMuting(bool);
void forwardTimerTimeout();
void itClick(QListViewItem *item);
void listPressed(int, QListViewItem *, const QPoint&, int);
void newSound();
void rewindPressed();
void rewindReleased();
void rewindTimerTimeout();
void slotAutoMute(bool);
void thisTab(QWidget*);
void timeSliderPressed();
void timeSliderReleased();
void timerBreak();
void initIconView();
/* void changedOutVolume(int); */
/* void changedInVolume(int); */
protected:
WavFile *wavFile;
QButtonGroup *ButtonGroup1;
QCheckBox *outMuteCheckBox, *inMuteCheckBox, *compressionCheckBox, *autoMuteCheckBox, *stereoCheckBox;