-rw-r--r-- | noncore/multimedia/camera/mainwindow.cpp | 125 | ||||
-rw-r--r-- | noncore/multimedia/camera/mainwindow.h | 14 |
2 files changed, 128 insertions, 11 deletions
diff --git a/noncore/multimedia/camera/mainwindow.cpp b/noncore/multimedia/camera/mainwindow.cpp index 7e60e16..16ee8bc 100644 --- a/noncore/multimedia/camera/mainwindow.cpp +++ b/noncore/multimedia/camera/mainwindow.cpp @@ -26,7 +26,9 @@ #include <qcursor.h> #include <qdatastream.h> +#include <qdir.h> #include <qfile.h> #include <qimage.h> #include <qlabel.h> +#include <qlineedit.h> #include <qpopupmenu.h> #include <qprogressbar.h> @@ -54,9 +56,12 @@ using namespace Opie; #define OUTPUTFILE "/tmp/output.avi" +#define OUTPUT_TO_CUSTOM 250 +#define OUTPUT_TO_DOCFOLDER 251 + CameraMainWindow::CameraMainWindow( QWidget * parent, const char * name, WFlags f ) :QMainWindow( parent, name, f ), _rotation( 270 ), // FIXME: get this from current settings (ODevice?) _capturing( false ), - _pics( 0 ), _videos( 0 ) + _pics( 1 ), _videos( 1 ) { #ifdef QT_NO_DEBUG @@ -114,4 +119,7 @@ void CameraMainWindow::init() captureY = 640; captureFormat = "JPEG"; + outputTo = "Documents Folder"; + prefix = "Untitled"; + appendSettings = true; resog = new QActionGroup( 0, "reso", true ); @@ -130,9 +138,9 @@ void CameraMainWindow::init() qualityg = new QActionGroup( 0, "quality", true ); qualityg->setToggleAction( true ); - new QAction( " 0 (minimal)", 0, 0, qualityg, 0, true ); - new QAction( " 25 (low)", 0, 0, qualityg, 0, true ); - ( new QAction( " 50 (good)", 0, 0, qualityg, 0, true ) )->setOn( true ); - new QAction( " 75 (better)", 0, 0, qualityg, 0, true ); - new QAction( "100 (best)", 0, 0, qualityg, 0, true ); + new QAction( " 0 (&minimal)", 0, 0, qualityg, 0, true ); + new QAction( " 25 (&low)", 0, 0, qualityg, 0, true ); + ( new QAction( " 50 (&good)", 0, 0, qualityg, 0, true ) )->setOn( true ); + new QAction( " 75 (&better)", 0, 0, qualityg, 0, true ); + new QAction( "100 (bes&t)", 0, 0, qualityg, 0, true ); zoomg = new QActionGroup( 0, "zoom", true ); @@ -149,4 +157,13 @@ void CameraMainWindow::init() new QAction( "* (always both)", 0, 0, flipg, 0, true ); + outputTog = new QActionGroup( 0, "output", true ); + outputTog->setToggleAction( true ); + new QAction( "/tmp", 0, 0, outputTog, 0, true ); + new QAction( "/mnt/card/", 0, 0, outputTog, 0, true ); + new QAction( "/mnt/sd/", 0, 0, outputTog, 0, true ); + docfolder = new QAction( "Documents Folder", 0, 0, outputTog, 0, true ); + docfolder->setOn( true ); + custom = new QAction( "&Custom...", 0, 0, outputTog, 0, true ); + outputg = new QActionGroup( 0, "output", true ); outputg->setToggleAction( true ); @@ -160,4 +177,5 @@ void CameraMainWindow::init() connect( zoomg, SIGNAL( selected(QAction*) ), this, SLOT( zoomMenuItemClicked(QAction*) ) ); connect( flipg, SIGNAL( selected(QAction*) ), this, SLOT( flipMenuItemClicked(QAction*) ) ); + connect( outputTog, SIGNAL( selected(QAction*) ), this, SLOT( outputToMenuItemClicked(QAction*) ) ); connect( outputg, SIGNAL( selected(QAction*) ), this, SLOT( outputMenuItemClicked(QAction*) ) ); @@ -232,4 +250,13 @@ void CameraMainWindow::showContextMenu() zoomg->addTo( &zoom ); + QPopupMenu prefix; + prefix.insertItem( "&Choose...", this, SLOT( prefixItemChoosen() ) ); + int id = prefix.insertItem( "&Append Settings", this, SLOT( appendSettingsChoosen() ) ); + prefix.setItemChecked( id, appendSettings ); + + QPopupMenu outputTo; + outputTo.setCheckable( true ); + outputTog->addTo( &outputTo ); + QPopupMenu output; output.setCheckable( true ); @@ -241,4 +268,7 @@ void CameraMainWindow::showContextMenu() m.insertItem( "&Flip", &flip ); m.insertItem( "&Quality", &quality ); + m.insertSeparator(); + m.insertItem( "&Prefix", &prefix ); + m.insertItem( "Output &To", &outputTo ); m.insertItem( "&Output As", &output ); @@ -308,4 +338,36 @@ void CameraMainWindow::flipMenuItemClicked( QAction* a ) +void CameraMainWindow::outputToMenuItemClicked( QAction* a ) +{ + if ( a->text() == "&Custom..." ) + { + QMap<QString, QStringList> map; + map.insert( tr("All"), QStringList() ); + QStringList text; + text << "text/*"; + map.insert(tr("Text"), text ); + text << "*"; + map.insert(tr("All"), text ); + + QString str; + str = OFileDialog::getSaveFileName( 2, "/", QString::null, map ); + if ( str.isEmpty() || !QFileInfo(str).isDir() ) + { + docfolder->setOn( true ); + outputTo = "Documents Folder"; + } + else + { + outputTo = str; + } + } + else + { + outputTo = a->text(); + } + odebug << "Output to now: " << outputTo << oendl; +} + + void CameraMainWindow::outputMenuItemClicked( QAction* a ) { @@ -316,4 +378,25 @@ void CameraMainWindow::outputMenuItemClicked( QAction* a ) +void CameraMainWindow::prefixItemChoosen() +{ + QDialog* d = new QDialog( this, "dialog", true ); + d->setCaption( "Enter Prefix..." ); + QVBoxLayout* v = new QVBoxLayout( d ); + QLineEdit* le = new QLineEdit( prefix, d ); + v->addWidget( le ); + le->setFixedWidth( 150 ); //FIXME: 'tis a bit dirty + if ( d->exec() == QDialog::Accepted ) + prefix = le->text(); + odebug << "Prefix now: " << prefix << oendl; +} + + +void CameraMainWindow::appendSettingsChoosen() +{ + appendSettings = !appendSettings; + odebug << "appendSettings now: " << appendSettings << oendl; +} + + void CameraMainWindow::shutterClicked() { @@ -338,5 +421,17 @@ void CameraMainWindow::performCapture( const QString& format ) { QString name; - name.sprintf( "/tmp/image-%d_%d_%d_q%d.%s", _pics++, captureX, captureY, quality, (const char*) captureFormat.lower() ); + + if ( outputTo == "Documents Folder" ) + name.sprintf( "%s/Documents/image/%s/", (const char*) QDir::homeDirPath(), (const char*) captureFormat.lower() ); + else + name = outputTo; + + name.append( prefix ); + if ( appendSettings ) + { + name.append( QString().sprintf( "_%d_%d_q%d", captureX, captureY, quality ) ); + } + name.append( QString().sprintf( "-%d.%s", _pics++, (const char*) captureFormat.lower() ) ); + QImage i; ZCameraIO::instance()->captureFrame( captureX, captureY, zoom, &i ); @@ -407,5 +502,10 @@ void CameraMainWindow::stopVideoCapture() _framerate = 1000.0 / (_time.elapsed()/_videopics); - postProcessVideo( CAPTUREFILE, QString().sprintf( "/tmp/video-%d_%d_%d_q%d-%dfps.avi", _videos++, captureX, captureY, quality, _framerate ) ); + QString name( outputTo ); + name.append( "/prefix" ); + if ( appendSettings ) + name.append( QString().sprintf( "_%d_%d_q%d_%dfps", captureX, captureY, quality, _framerate ) ); + name.append( QString().sprintf( "-%d.%s", _videos++, (const char*) captureFormat.lower() ) ); + postProcessVideo( CAPTUREFILE, name ); #ifndef QT_NO_DEBUG @@ -521,7 +621,12 @@ void CameraMainWindow::postProcessVideo( const QString& infile, const QString& o delete tempbuffer; framefile.close(); + + odebug << "deleting temporary capturefile " << infile << oendl; + ::close( infd ); + QFile::remove( infile ); } avi_end( outfd, captureX, captureY, _framerate ); + ::close( outfd ); fr->hide(); @@ -552,4 +657,8 @@ void CameraMainWindow::doSomething() "/tmp/output.avi" ); } +#else +void CameraMainWindow::doSomething() +{ +} #endif diff --git a/noncore/multimedia/camera/mainwindow.h b/noncore/multimedia/camera/mainwindow.h index 1d844da..451ad5f 100644 --- a/noncore/multimedia/camera/mainwindow.h +++ b/noncore/multimedia/camera/mainwindow.h @@ -49,5 +49,8 @@ class CameraMainWindow: public QMainWindow void zoomMenuItemClicked( QAction* ); void flipMenuItemClicked( QAction* ); + void outputToMenuItemClicked( QAction* ); void outputMenuItemClicked( QAction* ); + void prefixItemChoosen(); + void appendSettingsChoosen(); void shutterClicked(); @@ -64,7 +67,5 @@ class CameraMainWindow: public QMainWindow protected slots: - #ifndef QT_NO_DEBUG - //void doSomething(); // solely for debugging purposes - #endif + void doSomething(); // solely for debugging purposes private: @@ -77,4 +78,7 @@ class CameraMainWindow: public QMainWindow QActionGroup* zoomg; QActionGroup* flipg; + QActionGroup* outputTog; + QAction* custom; + QAction* docfolder; QActionGroup* outputg; @@ -86,4 +90,8 @@ class CameraMainWindow: public QMainWindow QString captureFormat; + QString outputTo; + QString prefix; + bool appendSettings; + bool _capturing; int _pics; |