summaryrefslogtreecommitdiff
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/multimedia/camera/cmd/.cvsignore4
-rw-r--r--noncore/multimedia/camera/gui/.cvsignore4
-rw-r--r--noncore/multimedia/camera/gui/mainwindow.cpp8
-rw-r--r--noncore/multimedia/camera/lib/.cvsignore4
4 files changed, 10 insertions, 10 deletions
diff --git a/noncore/multimedia/camera/cmd/.cvsignore b/noncore/multimedia/camera/cmd/.cvsignore
index 737c5b2..e5aacf6 100644
--- a/noncore/multimedia/camera/cmd/.cvsignore
+++ b/noncore/multimedia/camera/cmd/.cvsignore
@@ -1,5 +1,5 @@
1moc 1*moc
2obj 2*obj
3config.in 3config.in
4Makefile 4Makefile
5 5
diff --git a/noncore/multimedia/camera/gui/.cvsignore b/noncore/multimedia/camera/gui/.cvsignore
index 2a3a7a8..8e95df7 100644
--- a/noncore/multimedia/camera/gui/.cvsignore
+++ b/noncore/multimedia/camera/gui/.cvsignore
@@ -1,6 +1,6 @@
1*.pro 1*.pro
2moc 2*moc
3obj 3*obj
4config.in 4config.in
5Makefile 5Makefile
6 6
diff --git a/noncore/multimedia/camera/gui/mainwindow.cpp b/noncore/multimedia/camera/gui/mainwindow.cpp
index bde448d..b2fcc6c 100644
--- a/noncore/multimedia/camera/gui/mainwindow.cpp
+++ b/noncore/multimedia/camera/gui/mainwindow.cpp
@@ -1,528 +1,528 @@
1/********************************************************************** 1/**********************************************************************
2** Copyright (C) 2002 Michael 'Mickey' Lauer. All rights reserved. 2** Copyright (C) 2002 Michael 'Mickey' Lauer. All rights reserved.
3** 3**
4** This file is part of Opie Environment. 4** This file is part of Opie Environment.
5** 5**
6** This file may be distributed and/or modified under the terms of the 6** This file may be distributed and/or modified under the terms of the
7** GNU General Public License version 2 as published by the Free Software 7** GNU General Public License version 2 as published by the Free Software
8** Foundation and appearing in the file LICENSE.GPL included in the 8** Foundation and appearing in the file LICENSE.GPL included in the
9** packaging of this file. 9** packaging of this file.
10** 10**
11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE 11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
13** 13**
14**********************************************************************/ 14**********************************************************************/
15 15
16#include "mainwindow.h" 16#include "mainwindow.h"
17#include "previewwidget.h" 17#include "previewwidget.h"
18#include "zcameraio.h" 18#include "zcameraio.h"
19#include "imageio.h" 19#include "imageio.h"
20#include "avi.h" 20#include "avi.h"
21 21
22/* OPIE */ 22/* OPIE */
23#include <opie2/ofiledialog.h> 23#include <opie2/ofiledialog.h>
24#include <opie2/odevice.h> 24#include <opie2/odevice.h>
25#include <opie2/oapplication.h> 25#include <opie2/oapplication.h>
26#include <opie2/oconfig.h> 26#include <opie2/oconfig.h>
27#include <opie2/odebug.h> 27#include <opie2/odebug.h>
28#include <opie2/oresource.h>
28#include <qpe/global.h> 29#include <qpe/global.h>
29#include <qpe/resource.h>
30#include <qpe/qcopenvelope_qws.h> 30#include <qpe/qcopenvelope_qws.h>
31 31
32/* QT */ 32/* QT */
33#include <qapplication.h> 33#include <qapplication.h>
34#include <qaction.h> 34#include <qaction.h>
35#include <qvbox.h> 35#include <qvbox.h>
36#include <qcombobox.h> 36#include <qcombobox.h>
37#include <qcursor.h> 37#include <qcursor.h>
38#include <qdatastream.h> 38#include <qdatastream.h>
39#include <qdir.h> 39#include <qdir.h>
40#include <qfile.h> 40#include <qfile.h>
41#include <qimage.h> 41#include <qimage.h>
42#include <qlabel.h> 42#include <qlabel.h>
43#include <qlineedit.h> 43#include <qlineedit.h>
44#include <qpopupmenu.h> 44#include <qpopupmenu.h>
45#include <qprogressbar.h> 45#include <qprogressbar.h>
46#include <qpushbutton.h> 46#include <qpushbutton.h>
47#include <qmessagebox.h> 47#include <qmessagebox.h>
48#include <qlayout.h> 48#include <qlayout.h>
49#include <qdirectpainter_qws.h> 49#include <qdirectpainter_qws.h>
50 50
51/* STD */ 51/* STD */
52#include <assert.h> 52#include <assert.h>
53#include <sys/types.h> 53#include <sys/types.h>
54#include <sys/stat.h> 54#include <sys/stat.h>
55#include <fcntl.h> 55#include <fcntl.h>
56#include <string.h> 56#include <string.h>
57#include <errno.h> 57#include <errno.h>
58#include <unistd.h> 58#include <unistd.h>
59 59
60#define CAPTUREFILE "/tmp/capture.dat" 60#define CAPTUREFILE "/tmp/capture.dat"
61#define OUTPUTFILE "/tmp/output.avi" 61#define OUTPUTFILE "/tmp/output.avi"
62 62
63#define OUTPUT_TO_CUSTOM 250 63#define OUTPUT_TO_CUSTOM 250
64#define OUTPUT_TO_DOCFOLDER 251 64#define OUTPUT_TO_DOCFOLDER 251
65 65
66 66
67using namespace Opie::Ui; 67using namespace Opie::Ui;
68using namespace Opie::Core; 68using namespace Opie::Core;
69 69
70CameraMainWindow::CameraMainWindow( QWidget * parent, const char * name, WFlags f ) 70CameraMainWindow::CameraMainWindow( QWidget * parent, const char * name, WFlags f )
71 :QMainWindow( parent, name, f ), 71 :QMainWindow( parent, name, f ),
72 _rotation( 270 ), // FIXME: get this from current settings (ODevice?) 72 _rotation( 270 ), // FIXME: get this from current settings (ODevice?)
73 _capturing( false ), 73 _capturing( false ),
74 _pics( 1 ), _videos( 1 ) 74 _pics( 1 ), _videos( 1 )
75{ 75{
76 #ifdef QT_NO_DEBUG 76 #ifdef QT_NO_DEBUG
77 if ( !ZCameraIO::instance()->isOpen() ) 77 if ( !ZCameraIO::instance()->isOpen() )
78 { 78 {
79 QVBox* v = new QVBox( this ); 79 QVBox* v = new QVBox( this );
80 v->setMargin( 10 ); 80 v->setMargin( 10 );
81 QLabel* l1 = new QLabel( v ); 81 QLabel* l1 = new QLabel( v );
82 l1->setPixmap( Resource::loadPixmap( "camera/error" ) ); 82 l1->setPixmap( Opie::Core::OResource::loadPixmap( "camera/error", Opie::Core::OResource::SmallIcon ) );
83 QLabel* l2 = new QLabel( v ); 83 QLabel* l2 = new QLabel( v );
84 l2->setText( "<b>Sorry. could not detect your camera :-(</b><p>" 84 l2->setText( "<b>Sorry. could not detect your camera :-(</b><p>"
85 "* Is the sharpzdc_cs module loaded ?<br>" 85 "* Is the sharpzdc_cs module loaded ?<br>"
86 "* Is /dev/sharpzdc read/writable ?<p>" ); 86 "* Is /dev/sharpzdc read/writable ?<p>" );
87 connect( new QPushButton( "Exit", v ), SIGNAL( clicked() ), this, SLOT( close() ) ); 87 connect( new QPushButton( "Exit", v ), SIGNAL( clicked() ), this, SLOT( close() ) );
88 setCentralWidget( v ); 88 setCentralWidget( v );
89 return; 89 return;
90 } 90 }
91 #endif 91 #endif
92 92
93 init(); 93 init();
94 94
95 _rotation = 270; //TODO: grab these from the actual settings 95 _rotation = 270; //TODO: grab these from the actual settings
96 96
97 preview = new PreviewWidget( this, "camera preview widget" ); 97 preview = new PreviewWidget( this, "camera preview widget" );
98 //setCentralWidget( preview ); <--- don't do this! 98 //setCentralWidget( preview ); <--- don't do this!
99 preview->resize( QSize( 240, 288 ) ); 99 preview->resize( QSize( 240, 288 ) );
100 preview->show(); 100 preview->show();
101 101
102 // construct a System Channel to receive setRotation messages 102 // construct a System Channel to receive setRotation messages
103 _sysChannel = new QCopChannel( "QPE/System", this ); 103 _sysChannel = new QCopChannel( "QPE/System", this );
104 connect( _sysChannel, SIGNAL( received(const QCString&,const QByteArray&) ), 104 connect( _sysChannel, SIGNAL( received(const QCString&,const QByteArray&) ),
105 this, SLOT( systemMessage(const QCString&,const QByteArray&) ) ); 105 this, SLOT( systemMessage(const QCString&,const QByteArray&) ) );
106 106
107 connect( preview, SIGNAL( contextMenuRequested() ), this, SLOT( showContextMenu() ) ); 107 connect( preview, SIGNAL( contextMenuRequested() ), this, SLOT( showContextMenu() ) );
108 108
109 connect( ZCameraIO::instance(), SIGNAL( shutterClicked() ), this, SLOT( shutterClicked() ) ); 109 connect( ZCameraIO::instance(), SIGNAL( shutterClicked() ), this, SLOT( shutterClicked() ) );
110 110
111 updateCaption(); 111 updateCaption();
112 112
113}; 113};
114 114
115 115
116CameraMainWindow::~CameraMainWindow() 116CameraMainWindow::~CameraMainWindow()
117{ 117{
118 // write back configuration 118 // write back configuration
119 OConfigGroupSaver cgs( oApp->config(), "General" ); 119 OConfigGroupSaver cgs( oApp->config(), "General" );
120 cgs.config()->writeEntry( "flip", flip ); 120 cgs.config()->writeEntry( "flip", flip );
121 cgs.config()->writeEntry( "quality", quality ); 121 cgs.config()->writeEntry( "quality", quality );
122 cgs.config()->writeEntry( "zoom", zoom ); 122 cgs.config()->writeEntry( "zoom", zoom );
123 cgs.config()->writeEntry( "captureX", captureX ); 123 cgs.config()->writeEntry( "captureX", captureX );
124 cgs.config()->writeEntry( "captureY", captureY ); 124 cgs.config()->writeEntry( "captureY", captureY );
125 cgs.config()->writeEntry( "captureFormat", captureFormat ); 125 cgs.config()->writeEntry( "captureFormat", captureFormat );
126 cgs.config()->writeEntry( "outputTo", outputTo ); 126 cgs.config()->writeEntry( "outputTo", outputTo );
127 cgs.config()->writeEntry( "prefix", prefix ); 127 cgs.config()->writeEntry( "prefix", prefix );
128 cgs.config()->writeEntry( "appendSettings", appendSettings ); 128 cgs.config()->writeEntry( "appendSettings", appendSettings );
129} 129}
130 130
131 131
132void CameraMainWindow::init() 132void CameraMainWindow::init()
133{ 133{
134 // get values from configuration 134 // get values from configuration
135 OConfigGroupSaver cgs( oApp->config(), "General" ); 135 OConfigGroupSaver cgs( oApp->config(), "General" );
136 flip = cgs.config()->readEntry( "flip", "A" ); 136 flip = cgs.config()->readEntry( "flip", "A" );
137 quality = cgs.config()->readNumEntry( "quality", 50 ); 137 quality = cgs.config()->readNumEntry( "quality", 50 );
138 zoom = cgs.config()->readNumEntry( "zoom", 1 ); 138 zoom = cgs.config()->readNumEntry( "zoom", 1 );
139 captureX = cgs.config()->readNumEntry( "captureX", 480 ); 139 captureX = cgs.config()->readNumEntry( "captureX", 480 );
140 captureY = cgs.config()->readNumEntry( "captureY", 640 ); 140 captureY = cgs.config()->readNumEntry( "captureY", 640 );
141 captureFormat = cgs.config()->readEntry( "captureFormat", "JPEG" ); 141 captureFormat = cgs.config()->readEntry( "captureFormat", "JPEG" );
142 outputTo = cgs.config()->readEntry( "outputTo", "Documents Folder" ); 142 outputTo = cgs.config()->readEntry( "outputTo", "Documents Folder" );
143 prefix = cgs.config()->readEntry( "prefix", "Untitled" ); 143 prefix = cgs.config()->readEntry( "prefix", "Untitled" );
144 appendSettings = cgs.config()->readBoolEntry( "appendSettings", true ); 144 appendSettings = cgs.config()->readBoolEntry( "appendSettings", true );
145 145
146 // create action groups 146 // create action groups
147 QAction* a; 147 QAction* a;
148 resog = new QActionGroup( 0, "reso", true ); 148 resog = new QActionGroup( 0, "reso", true );
149 resog->setToggleAction( true ); 149 resog->setToggleAction( true );
150 new QAction( " 64 x 48", 0, 0, resog, "64x48", true ); 150 new QAction( " 64 x 48", 0, 0, resog, "64x48", true );
151 new QAction( "128 x 96", 0, 0, resog, "128x96", true ); 151 new QAction( "128 x 96", 0, 0, resog, "128x96", true );
152 new QAction( "192 x 144", 0, 0, resog, "192x144", true ); 152 new QAction( "192 x 144", 0, 0, resog, "192x144", true );
153 new QAction( "256 x 192", 0, 0, resog, "256x192", true ); 153 new QAction( "256 x 192", 0, 0, resog, "256x192", true );
154 new QAction( "320 x 240", 0, 0, resog, "320x240", true ); 154 new QAction( "320 x 240", 0, 0, resog, "320x240", true );
155 new QAction( "384 x 288", 0, 0, resog, "384x288", true ); 155 new QAction( "384 x 288", 0, 0, resog, "384x288", true );
156 new QAction( "448 x 336", 0, 0, resog, "448x336", true ); 156 new QAction( "448 x 336", 0, 0, resog, "448x336", true );
157 new QAction( "512 x 384", 0, 0, resog, "512x384", true ); 157 new QAction( "512 x 384", 0, 0, resog, "512x384", true );
158 new QAction( "576 x 432", 0, 0, resog, "576x432", true ); 158 new QAction( "576 x 432", 0, 0, resog, "576x432", true );
159 new QAction( "640 x 480", 0, 0, resog, "640x480", true ); 159 new QAction( "640 x 480", 0, 0, resog, "640x480", true );
160 a = (QAction*) resog->child( QString().sprintf( "%dx%d", captureX>captureY ? captureX:captureY, captureX>captureY ? captureY:captureX ) ); 160 a = (QAction*) resog->child( QString().sprintf( "%dx%d", captureX>captureY ? captureX:captureY, captureX>captureY ? captureY:captureX ) );
161 if ( a ) a->setOn( true ); 161 if ( a ) a->setOn( true );
162 else owarn << "can't set resolution" << oendl; 162 else owarn << "can't set resolution" << oendl;
163 163
164 qualityg = new QActionGroup( 0, "quality", true ); 164 qualityg = new QActionGroup( 0, "quality", true );
165 qualityg->setToggleAction( true ); 165 qualityg->setToggleAction( true );
166 new QAction( " 0 (&minimal)", 0, 0, qualityg, "0", true ); 166 new QAction( " 0 (&minimal)", 0, 0, qualityg, "0", true );
167 new QAction( " 25 (&low)", 0, 0, qualityg, "25", true ); 167 new QAction( " 25 (&low)", 0, 0, qualityg, "25", true );
168 new QAction( " 50 (&good)", 0, 0, qualityg, "50", true ); 168 new QAction( " 50 (&good)", 0, 0, qualityg, "50", true );
169 new QAction( " 75 (&better)", 0, 0, qualityg, "75", true ); 169 new QAction( " 75 (&better)", 0, 0, qualityg, "75", true );
170 new QAction( "100 (bes&t)", 0, 0, qualityg, "100", true ); 170 new QAction( "100 (bes&t)", 0, 0, qualityg, "100", true );
171 a = (QAction*) qualityg->child( QString().sprintf( "%d", quality ) ); 171 a = (QAction*) qualityg->child( QString().sprintf( "%d", quality ) );
172 if ( a ) a->setOn( true ); 172 if ( a ) a->setOn( true );
173 else owarn << "can't set quality" << oendl; 173 else owarn << "can't set quality" << oendl;
174 174
175 zoomg = new QActionGroup( 0, "zoom", true ); 175 zoomg = new QActionGroup( 0, "zoom", true );
176 zoomg->setToggleAction( true ); 176 zoomg->setToggleAction( true );
177 new QAction( "x 1", 0, 0, zoomg, "1", true ); 177 new QAction( "x 1", 0, 0, zoomg, "1", true );
178 new QAction( "x 2", 0, 0, zoomg, "2", true ); 178 new QAction( "x 2", 0, 0, zoomg, "2", true );
179 a = (QAction*) zoomg->child( QString().sprintf( "%d", zoom ) ); 179 a = (QAction*) zoomg->child( QString().sprintf( "%d", zoom ) );
180 if ( a ) a->setOn( true ); 180 if ( a ) a->setOn( true );
181 else owarn << "can't set zoom" << oendl; 181 else owarn << "can't set zoom" << oendl;
182 182
183 flipg = new QActionGroup( 0, "flip", true ); 183 flipg = new QActionGroup( 0, "flip", true );
184 flipg->setToggleAction( true ); 184 flipg->setToggleAction( true );
185 new QAction( "Auto (recommended)", 0, 0, flipg, "A", true ); 185 new QAction( "Auto (recommended)", 0, 0, flipg, "A", true );
186 new QAction( "0 (always off)", 0, 0, flipg, "0", true ); 186 new QAction( "0 (always off)", 0, 0, flipg, "0", true );
187 new QAction( "X (always horizontal)", 0, 0, flipg, "X", true ); 187 new QAction( "X (always horizontal)", 0, 0, flipg, "X", true );
188 new QAction( "Y (always vertical)", 0, 0, flipg, "Y", true ); 188 new QAction( "Y (always vertical)", 0, 0, flipg, "Y", true );
189 new QAction( "* (always both)", 0, 0, flipg, "*", true ); 189 new QAction( "* (always both)", 0, 0, flipg, "*", true );
190 a = (QAction*) flipg->child( QString().sprintf( "%s", (const char*) flip ) ); 190 a = (QAction*) flipg->child( QString().sprintf( "%s", (const char*) flip ) );
191 if ( a ) a->setOn( true ); 191 if ( a ) a->setOn( true );
192 else owarn << "can't set flip" << oendl; 192 else owarn << "can't set flip" << oendl;
193 193
194 outputTog = new QActionGroup( 0, "output", true ); 194 outputTog = new QActionGroup( 0, "output", true );
195 outputTog->setToggleAction( true ); 195 outputTog->setToggleAction( true );
196 new QAction( "/tmp/", 0, 0, outputTog, "/tmp/", true ); 196 new QAction( "/tmp/", 0, 0, outputTog, "/tmp/", true );
197 new QAction( "/mnt/card/", 0, 0, outputTog, "/mnt/card/", true ); 197 new QAction( "/mnt/card/", 0, 0, outputTog, "/mnt/card/", true );
198 new QAction( "/mnt/cf/", 0, 0, outputTog, "/mnt/cf/", true ); 198 new QAction( "/mnt/cf/", 0, 0, outputTog, "/mnt/cf/", true );
199 docfolder = new QAction( "Documents Folder", 0, 0, outputTog, "Documents Folder", true ); 199 docfolder = new QAction( "Documents Folder", 0, 0, outputTog, "Documents Folder", true );
200 custom = new QAction( "&Custom...", 0, 0, outputTog, "custom", true ); //TODO: How to save custom!? 200 custom = new QAction( "&Custom...", 0, 0, outputTog, "custom", true ); //TODO: How to save custom!?
201 a = (QAction*) outputTog->child( QString().sprintf( "%s", (const char*) outputTo ) ); 201 a = (QAction*) outputTog->child( QString().sprintf( "%s", (const char*) outputTo ) );
202 if ( a ) a->setOn( true ); 202 if ( a ) a->setOn( true );
203 else owarn << "can't set outputTo" << oendl; 203 else owarn << "can't set outputTo" << oendl;
204 204
205 outputg = new QActionGroup( 0, "output", true ); 205 outputg = new QActionGroup( 0, "output", true );
206 outputg->setToggleAction( true ); 206 outputg->setToggleAction( true );
207 new QAction( "JPEG", 0, 0, outputg, "JPEG", true ); 207 new QAction( "JPEG", 0, 0, outputg, "JPEG", true );
208 new QAction( "PNG", 0, 0, outputg, "PNG", true ); 208 new QAction( "PNG", 0, 0, outputg, "PNG", true );
209 new QAction( "BMP", 0, 0, outputg, "BMP", true ); 209 new QAction( "BMP", 0, 0, outputg, "BMP", true );
210 new QAction( "AVI", 0, 0, outputg, "AVI", true ); 210 new QAction( "AVI", 0, 0, outputg, "AVI", true );
211 a = (QAction*) outputg->child( QString().sprintf( "%s", (const char*) captureFormat ) ); 211 a = (QAction*) outputg->child( QString().sprintf( "%s", (const char*) captureFormat ) );
212 if ( a ) a->setOn( true ); 212 if ( a ) a->setOn( true );
213 else owarn << "can't set output format" << oendl; 213 else owarn << "can't set output format" << oendl;
214 214
215 connect( resog, SIGNAL( selected(QAction*) ), this, SLOT( resoMenuItemClicked(QAction*) ) ); 215 connect( resog, SIGNAL( selected(QAction*) ), this, SLOT( resoMenuItemClicked(QAction*) ) );
216 connect( qualityg, SIGNAL( selected(QAction*) ), this, SLOT( qualityMenuItemClicked(QAction*) ) ); 216 connect( qualityg, SIGNAL( selected(QAction*) ), this, SLOT( qualityMenuItemClicked(QAction*) ) );
217 connect( zoomg, SIGNAL( selected(QAction*) ), this, SLOT( zoomMenuItemClicked(QAction*) ) ); 217 connect( zoomg, SIGNAL( selected(QAction*) ), this, SLOT( zoomMenuItemClicked(QAction*) ) );
218 connect( flipg, SIGNAL( selected(QAction*) ), this, SLOT( flipMenuItemClicked(QAction*) ) ); 218 connect( flipg, SIGNAL( selected(QAction*) ), this, SLOT( flipMenuItemClicked(QAction*) ) );
219 connect( outputTog, SIGNAL( selected(QAction*) ), this, SLOT( outputToMenuItemClicked(QAction*) ) ); 219 connect( outputTog, SIGNAL( selected(QAction*) ), this, SLOT( outputToMenuItemClicked(QAction*) ) );
220 connect( outputg, SIGNAL( selected(QAction*) ), this, SLOT( outputMenuItemClicked(QAction*) ) ); 220 connect( outputg, SIGNAL( selected(QAction*) ), this, SLOT( outputMenuItemClicked(QAction*) ) );
221} 221}
222 222
223 223
224void CameraMainWindow::systemMessage( const QCString& msg, const QByteArray& data ) 224void CameraMainWindow::systemMessage( const QCString& msg, const QByteArray& data )
225{ 225{
226 int _newrotation; 226 int _newrotation;
227 227
228 QDataStream stream( data, IO_ReadOnly ); 228 QDataStream stream( data, IO_ReadOnly );
229 odebug << "received system message: " << msg << oendl; 229 odebug << "received system message: " << msg << oendl;
230 if ( msg == "setCurrentRotation(int)" ) 230 if ( msg == "setCurrentRotation(int)" )
231 { 231 {
232 stream >> _newrotation; 232 stream >> _newrotation;
233 odebug << "received setCurrentRotation(" << _newrotation << ")" << oendl; 233 odebug << "received setCurrentRotation(" << _newrotation << ")" << oendl;
234 234
235 switch ( _newrotation ) 235 switch ( _newrotation )
236 { 236 {
237 case 270: preview->resize( QSize( 240, 288 ) ); break; 237 case 270: preview->resize( QSize( 240, 288 ) ); break;
238 case 180: preview->resize( QSize( 320, 208 ) ); break; 238 case 180: preview->resize( QSize( 320, 208 ) ); break;
239 default: QMessageBox::warning( this, "opie-camera", 239 default: QMessageBox::warning( this, "opie-camera",
240 "This rotation is not supported.\n" 240 "This rotation is not supported.\n"
241 "Supported are 180° and 270°" ); 241 "Supported are 180 and 270" );
242 } 242 }
243 243
244 if ( _newrotation != _rotation ) 244 if ( _newrotation != _rotation )
245 { 245 {
246 int tmp = captureX; 246 int tmp = captureX;
247 captureX = captureY; 247 captureX = captureY;
248 captureY = tmp; 248 captureY = tmp;
249 _rotation = _newrotation; 249 _rotation = _newrotation;
250 } 250 }
251 251
252 updateCaption(); 252 updateCaption();
253 253
254 } 254 }
255} 255}
256 256
257 257
258void CameraMainWindow::changeZoom( int zoom ) 258void CameraMainWindow::changeZoom( int zoom )
259{ 259{
260 int z; 260 int z;
261 switch ( zoom ) 261 switch ( zoom )
262 { 262 {
263 case 0: z = 128; break; 263 case 0: z = 128; break;
264 case 1: z = 256; break; 264 case 1: z = 256; break;
265 case 2: z = 512; break; 265 case 2: z = 512; break;
266 default: assert( 0 ); break; 266 default: assert( 0 ); break;
267 } 267 }
268 268
269 ZCameraIO::instance()->setCaptureFrame( 240, 160, z ); 269 ZCameraIO::instance()->setCaptureFrame( 240, 160, z );
270} 270}
271 271
272 272
273void CameraMainWindow::showContextMenu() 273void CameraMainWindow::showContextMenu()
274{ 274{
275 QPopupMenu reso; 275 QPopupMenu reso;
276 reso.setCheckable( true ); 276 reso.setCheckable( true );
277 resog->addTo( &reso ); 277 resog->addTo( &reso );
278 278
279 QPopupMenu quality; 279 QPopupMenu quality;
280 quality.setCheckable( true ); 280 quality.setCheckable( true );
281 qualityg->addTo( &quality ); 281 qualityg->addTo( &quality );
282 282
283 QPopupMenu flip; 283 QPopupMenu flip;
284 flip.setCheckable( true ); 284 flip.setCheckable( true );
285 flipg->addTo( &flip ); 285 flipg->addTo( &flip );
286 286
287 QPopupMenu zoom; 287 QPopupMenu zoom;
288 zoom.setCheckable( true ); 288 zoom.setCheckable( true );
289 zoomg->addTo( &zoom ); 289 zoomg->addTo( &zoom );
290 290
291 QPopupMenu prefix; 291 QPopupMenu prefix;
292 prefix.insertItem( "&Choose...", this, SLOT( prefixItemChoosen() ) ); 292 prefix.insertItem( "&Choose...", this, SLOT( prefixItemChoosen() ) );
293 int id = prefix.insertItem( "&Append Settings", this, SLOT( appendSettingsChoosen() ) ); 293 int id = prefix.insertItem( "&Append Settings", this, SLOT( appendSettingsChoosen() ) );
294 prefix.setItemChecked( id, appendSettings ); 294 prefix.setItemChecked( id, appendSettings );
295 295
296 QPopupMenu outputTo; 296 QPopupMenu outputTo;
297 outputTo.setCheckable( true ); 297 outputTo.setCheckable( true );
298 outputTog->addTo( &outputTo ); 298 outputTog->addTo( &outputTo );
299 299
300 QPopupMenu output; 300 QPopupMenu output;
301 output.setCheckable( true ); 301 output.setCheckable( true );
302 outputg->addTo( &output ); 302 outputg->addTo( &output );
303 303
304 QPopupMenu m( this ); 304 QPopupMenu m( this );
305 m.insertItem( "&Resolution", &reso ); 305 m.insertItem( "&Resolution", &reso );
306 m.insertItem( "&Zoom", &zoom ); 306 m.insertItem( "&Zoom", &zoom );
307 m.insertItem( "&Flip", &flip ); 307 m.insertItem( "&Flip", &flip );
308 m.insertItem( "&Quality", &quality ); 308 m.insertItem( "&Quality", &quality );
309 m.insertSeparator(); 309 m.insertSeparator();
310 m.insertItem( "&Prefix", &prefix ); 310 m.insertItem( "&Prefix", &prefix );
311 m.insertItem( "Output &To", &outputTo ); 311 m.insertItem( "Output &To", &outputTo );
312 m.insertItem( "&Output As", &output ); 312 m.insertItem( "&Output As", &output );
313 313
314 #ifndef QT_NO_DEBUG 314 #ifndef QT_NO_DEBUG
315 m.insertItem( "&Debug!", this, SLOT( doSomething() ) ); 315 m.insertItem( "&Debug!", this, SLOT( doSomething() ) );
316 #endif 316 #endif
317 317
318 m.exec( QCursor::pos() ); 318 m.exec( QCursor::pos() );
319} 319}
320 320
321 321
322void CameraMainWindow::resoMenuItemClicked( QAction* a ) 322void CameraMainWindow::resoMenuItemClicked( QAction* a )
323{ 323{
324 switch ( _rotation ) 324 switch ( _rotation )
325 { 325 {
326 case 270: 326 case 270:
327 captureY = a->text().left(3).toInt(); 327 captureY = a->text().left(3).toInt();
328 captureX = a->text().right(3).toInt(); 328 captureX = a->text().right(3).toInt();
329 break; 329 break;
330 case 180: 330 case 180:
331 captureX = a->text().left(3).toInt(); 331 captureX = a->text().left(3).toInt();
332 captureY = a->text().right(3).toInt(); 332 captureY = a->text().right(3).toInt();
333 break; 333 break;
334 default: QMessageBox::warning( this, "opie-camera", 334 default: QMessageBox::warning( this, "opie-camera",
335 "This rotation is not supported.\n" 335 "This rotation is not supported.\n"
336 "Supported are 180° and 270°" ); 336 "Supported are 180 and 270" );
337 } 337 }
338 odebug << "Capture Resolution now: " << captureX << ", " << captureY << oendl; 338 odebug << "Capture Resolution now: " << captureX << ", " << captureY << oendl;
339 updateCaption(); 339 updateCaption();
340} 340}
341 341
342 342
343void CameraMainWindow::qualityMenuItemClicked( QAction* a ) 343void CameraMainWindow::qualityMenuItemClicked( QAction* a )
344{ 344{
345 quality = a->text().left(3).toInt(); 345 quality = a->text().left(3).toInt();
346 odebug << "Quality now: " << quality << oendl; 346 odebug << "Quality now: " << quality << oendl;
347 updateCaption(); 347 updateCaption();
348} 348}
349 349
350 350
351void CameraMainWindow::zoomMenuItemClicked( QAction* a ) 351void CameraMainWindow::zoomMenuItemClicked( QAction* a )
352{ 352{
353 zoom = QString( a->text().at(2) ).toInt(); 353 zoom = QString( a->text().at(2) ).toInt();
354 odebug << "Zoom now: " << zoom << oendl; 354 odebug << "Zoom now: " << zoom << oendl;
355 ZCameraIO::instance()->setZoom( zoom ); 355 ZCameraIO::instance()->setZoom( zoom );
356 updateCaption(); 356 updateCaption();
357} 357}
358 358
359 359
360void CameraMainWindow::flipMenuItemClicked( QAction* a ) 360void CameraMainWindow::flipMenuItemClicked( QAction* a )
361{ 361{
362 flip = QString( a->text().at(0) ); 362 flip = QString( a->text().at(0) );
363 odebug << "Flip now: " << flip << oendl; 363 odebug << "Flip now: " << flip << oendl;
364 if ( flip == "A" ) 364 if ( flip == "A" )
365 ZCameraIO::instance()->setFlip( ZCameraIO::AUTOMATICFLIP ); 365 ZCameraIO::instance()->setFlip( ZCameraIO::AUTOMATICFLIP );
366 else if ( flip == "0" ) 366 else if ( flip == "0" )
367 ZCameraIO::instance()->setFlip( ZCameraIO::XNOFLIP | ZCameraIO::YNOFLIP ); 367 ZCameraIO::instance()->setFlip( ZCameraIO::XNOFLIP | ZCameraIO::YNOFLIP );
368 else if ( flip == "X" ) 368 else if ( flip == "X" )
369 ZCameraIO::instance()->setFlip( ZCameraIO::XFLIP ); 369 ZCameraIO::instance()->setFlip( ZCameraIO::XFLIP );
370 else if ( flip == "Y" ) 370 else if ( flip == "Y" )
371 ZCameraIO::instance()->setFlip( ZCameraIO::YFLIP ); 371 ZCameraIO::instance()->setFlip( ZCameraIO::YFLIP );
372 else if ( flip == "*" ) 372 else if ( flip == "*" )
373 ZCameraIO::instance()->setFlip( ZCameraIO::XFLIP | ZCameraIO::YFLIP ); 373 ZCameraIO::instance()->setFlip( ZCameraIO::XFLIP | ZCameraIO::YFLIP );
374 374
375 updateCaption(); 375 updateCaption();
376} 376}
377 377
378 378
379void CameraMainWindow::outputToMenuItemClicked( QAction* a ) 379void CameraMainWindow::outputToMenuItemClicked( QAction* a )
380{ 380{
381 if ( a->text() == "&Custom..." ) 381 if ( a->text() == "&Custom..." )
382 { 382 {
383 QMap<QString, QStringList> map; 383 QMap<QString, QStringList> map;
384 map.insert( tr("All"), QStringList() ); 384 map.insert( tr("All"), QStringList() );
385 QStringList text; 385 QStringList text;
386 text << "text/*"; 386 text << "text/*";
387 map.insert(tr("Text"), text ); 387 map.insert(tr("Text"), text );
388 text << "*"; 388 text << "*";
389 map.insert(tr("All"), text ); 389 map.insert(tr("All"), text );
390 390
391 QString str; 391 QString str;
392 str = OFileDialog::getSaveFileName( 2, "/", QString::null, map ); 392 str = OFileDialog::getSaveFileName( 2, "/", QString::null, map );
393 if ( str.isEmpty() || !QFileInfo(str).isDir() ) 393 if ( str.isEmpty() || !QFileInfo(str).isDir() )
394 { 394 {
395 docfolder->setOn( true ); 395 docfolder->setOn( true );
396 outputTo = "Documents Folder"; 396 outputTo = "Documents Folder";
397 } 397 }
398 else 398 else
399 { 399 {
400 outputTo = str; 400 outputTo = str;
401 } 401 }
402 } 402 }
403 else 403 else
404 { 404 {
405 outputTo = a->text(); 405 outputTo = a->text();
406 } 406 }
407 odebug << "Output to now: " << outputTo << oendl; 407 odebug << "Output to now: " << outputTo << oendl;
408} 408}
409 409
410 410
411void CameraMainWindow::outputMenuItemClicked( QAction* a ) 411void CameraMainWindow::outputMenuItemClicked( QAction* a )
412{ 412{
413 captureFormat = a->text(); 413 captureFormat = a->text();
414 odebug << "Output format now: " << captureFormat << oendl; 414 odebug << "Output format now: " << captureFormat << oendl;
415 updateCaption(); 415 updateCaption();
416} 416}
417 417
418 418
419void CameraMainWindow::prefixItemChoosen() 419void CameraMainWindow::prefixItemChoosen()
420{ 420{
421 QDialog* d = new QDialog( this, "dialog", true ); 421 QDialog* d = new QDialog( this, "dialog", true );
422 d->setCaption( "Enter Prefix..." ); 422 d->setCaption( "Enter Prefix..." );
423 QVBoxLayout* v = new QVBoxLayout( d ); 423 QVBoxLayout* v = new QVBoxLayout( d );
424 QLineEdit* le = new QLineEdit( prefix, d ); 424 QLineEdit* le = new QLineEdit( prefix, d );
425 v->addWidget( le ); 425 v->addWidget( le );
426 le->setFixedWidth( 150 ); //FIXME: 'tis a bit dirty 426 le->setFixedWidth( 150 ); //FIXME: 'tis a bit dirty
427 if ( d->exec() == QDialog::Accepted ) 427 if ( d->exec() == QDialog::Accepted )
428 prefix = le->text(); 428 prefix = le->text();
429 odebug << "Prefix now: " << prefix << oendl; 429 odebug << "Prefix now: " << prefix << oendl;
430} 430}
431 431
432 432
433void CameraMainWindow::appendSettingsChoosen() 433void CameraMainWindow::appendSettingsChoosen()
434{ 434{
435 appendSettings = !appendSettings; 435 appendSettings = !appendSettings;
436 odebug << "appendSettings now: " << appendSettings << oendl; 436 odebug << "appendSettings now: " << appendSettings << oendl;
437} 437}
438 438
439 439
440void CameraMainWindow::shutterClicked() 440void CameraMainWindow::shutterClicked()
441{ 441{
442 if ( captureFormat != "AVI" ) // capture one photo per shutterClick 442 if ( captureFormat != "AVI" ) // capture one photo per shutterClick
443 { 443 {
444 Global::statusMessage( "CAPTURING..." ); 444 Global::statusMessage( "CAPTURING..." );
445 qApp->processEvents(); 445 qApp->processEvents();
446 446
447 odebug << "Shutter has been pressed" << oendl; 447 odebug << "Shutter has been pressed" << oendl;
448 ODevice::inst()->playTouchSound(); 448 ODevice::inst()->playTouchSound();
449 449
450 performCapture( captureFormat ); 450 performCapture( captureFormat );
451 } 451 }
452 else // capture video! start with one shutter click and stop with the next 452 else // capture video! start with one shutter click and stop with the next
453 { 453 {
454 !_capturing ? startVideoCapture() : stopVideoCapture(); 454 !_capturing ? startVideoCapture() : stopVideoCapture();
455 } 455 }
456} 456}
457 457
458 458
459void CameraMainWindow::performCapture( const QString& format ) 459void CameraMainWindow::performCapture( const QString& format )
460{ 460{
461 QString name; 461 QString name;
462 462
463 if ( outputTo == "Documents Folder" ) 463 if ( outputTo == "Documents Folder" )
464 { 464 {
465 name.sprintf( "%s/Documents/image/%s/", (const char*) QDir::homeDirPath(), (const char*) captureFormat.lower() ); 465 name.sprintf( "%s/Documents/image/%s/", (const char*) QDir::homeDirPath(), (const char*) captureFormat.lower() );
466 if ( !QDir( name ).exists() ) 466 if ( !QDir( name ).exists() )
467 { 467 {
468 odebug << "creating directory " << name << oendl; 468 odebug << "creating directory " << name << oendl;
469 QString msg = "mkdir -p " + name; 469 QString msg = "mkdir -p " + name;
470 system( msg.latin1() ); 470 system( msg.latin1() );
471 } 471 }
472 } 472 }
473 else 473 else
474 name = outputTo; 474 name = outputTo;
475 475
476 name.append( prefix ); 476 name.append( prefix );
477 if ( appendSettings ) 477 if ( appendSettings )
478 { 478 {
479 name.append( QString().sprintf( "_%d_%d_q%d", captureX, captureY, quality ) ); 479 name.append( QString().sprintf( "_%d_%d_q%d", captureX, captureY, quality ) );
480 } 480 }
481 name.append( QString().sprintf( "-%d.%s", _pics++, (const char*) captureFormat.lower() ) ); 481 name.append( QString().sprintf( "-%d.%s", _pics++, (const char*) captureFormat.lower() ) );
482 482
483 QImage i; 483 QImage i;
484 ZCameraIO::instance()->captureFrame( captureX, captureY, zoom, &i ); 484 ZCameraIO::instance()->captureFrame( captureX, captureY, zoom, &i );
485 QImage im = i.convertDepth( 32 ); 485 QImage im = i.convertDepth( 32 );
486 bool result = im.save( name, format, quality ); 486 bool result = im.save( name, format, quality );
487 if ( !result ) 487 if ( !result )
488 { 488 {
489 oerr << "imageio-Problem while writing." << oendl; 489 oerr << "imageio-Problem while writing." << oendl;
490 Global::statusMessage( "Error!" ); 490 Global::statusMessage( "Error!" );
491 } 491 }
492 else 492 else
493 { 493 {
494 odebug << captureFormat << "-image has been successfully captured" << oendl; 494 odebug << captureFormat << "-image has been successfully captured" << oendl;
495 Global::statusMessage( "Ok." ); 495 Global::statusMessage( "Ok." );
496 } 496 }
497} 497}
498 498
499 499
500void CameraMainWindow::startVideoCapture() 500void CameraMainWindow::startVideoCapture()
501{ 501{
502 ODevice::inst()->playTouchSound(); 502 ODevice::inst()->playTouchSound();
503 ODevice::inst()->setLedState( Led_Mail, Led_BlinkSlow ); 503 ODevice::inst()->setLedState( Led_Mail, Led_BlinkSlow );
504 504
505 _capturefd = ::open( CAPTUREFILE, O_WRONLY | O_CREAT | O_TRUNC ); 505 _capturefd = ::open( CAPTUREFILE, O_WRONLY | O_CREAT | O_TRUNC );
506 if ( _capturefd == -1 ) 506 if ( _capturefd == -1 )
507 { 507 {
508 owarn << "can't open capture file: " << strerror(errno) << oendl; 508 owarn << "can't open capture file: " << strerror(errno) << oendl;
509 return; 509 return;
510 } 510 }
511 511
512 _capturebuf = new unsigned char[captureX*captureY*2]; 512 _capturebuf = new unsigned char[captureX*captureY*2];
513 _capturing = true; 513 _capturing = true;
514 _videopics = 0; 514 _videopics = 0;
515 _framerate = 0; 515 _framerate = 0;
516 updateCaption(); 516 updateCaption();
517 _time.start(); 517 _time.start();
518 preview->setRefreshingRate( 1000 ); 518 preview->setRefreshingRate( 1000 );
519 startTimer( 100 ); // too fast but that is ok 519 startTimer( 100 ); // too fast but that is ok
520} 520}
521 521
522 522
523void CameraMainWindow::timerEvent( QTimerEvent* ) 523void CameraMainWindow::timerEvent( QTimerEvent* )
524{ 524{
525 if ( !_capturing ) 525 if ( !_capturing )
526 { 526 {
527 odebug << "timer event in CameraMainWindow without capturing video ?" << oendl; 527 odebug << "timer event in CameraMainWindow without capturing video ?" << oendl;
528 return; 528 return;
diff --git a/noncore/multimedia/camera/lib/.cvsignore b/noncore/multimedia/camera/lib/.cvsignore
index 2a3a7a8..8e95df7 100644
--- a/noncore/multimedia/camera/lib/.cvsignore
+++ b/noncore/multimedia/camera/lib/.cvsignore
@@ -1,6 +1,6 @@
1*.pro 1*.pro
2moc 2*moc
3obj 3*obj
4config.in 4config.in
5Makefile 5Makefile
6 6