author | llornkcor <llornkcor> | 2002-05-19 17:00:41 (UTC) |
---|---|---|
committer | llornkcor <llornkcor> | 2002-05-19 17:00:41 (UTC) |
commit | 61a917bec9006516115d94be8c49acadf4eba222 (patch) (unidiff) | |
tree | 5cf91393455b95749978f28ab3f2a251c4c08b07 | |
parent | 602ff2a6f588584bf47afa6faae08ce60b49047f (diff) | |
download | opie-61a917bec9006516115d94be8c49acadf4eba222.zip opie-61a917bec9006516115d94be8c49acadf4eba222.tar.gz opie-61a917bec9006516115d94be8c49acadf4eba222.tar.bz2 |
changed keypress stuff, and added a secret key/button for zaurus, available from config [Defaults] toggleKey = 4148 (or the int for the wanted keypress), ipaqs is 4096=KeyEscape -record button
-rw-r--r-- | core/applets/vmemo/vmemo.cpp | 116 | ||||
-rw-r--r-- | core/applets/vmemo/vmemo.h | 5 |
2 files changed, 63 insertions, 58 deletions
diff --git a/core/applets/vmemo/vmemo.cpp b/core/applets/vmemo/vmemo.cpp index e14d532..7e91ef0 100644 --- a/core/applets/vmemo/vmemo.cpp +++ b/core/applets/vmemo/vmemo.cpp | |||
@@ -176,189 +176,193 @@ static char * vmemo_xpm[] = { | |||
176 | "&. c #1A1D22", | 176 | "&. c #1A1D22", |
177 | "*. c #000713", | 177 | "*. c #000713", |
178 | "=. c #1F1F21", | 178 | "=. c #1F1F21", |
179 | " ", | 179 | " ", |
180 | " . + @ # ", | 180 | " . + @ # ", |
181 | " $ % & * = - ", | 181 | " $ % & * = - ", |
182 | " ; > , ' ) ! ~ ", | 182 | " ; > , ' ) ! ~ ", |
183 | " { ] ^ / ( _ : ", | 183 | " { ] ^ / ( _ : ", |
184 | " < [ } | 1 2 3 ", | 184 | " < [ } | 1 2 3 ", |
185 | " 4 5 6 7 8 9 0 a b c ", | 185 | " 4 5 6 7 8 9 0 a b c ", |
186 | " d e f g h i j 3 k l m n ", | 186 | " d e f g h i j 3 k l m n ", |
187 | " o p q r s t u v w n ", | 187 | " o p q r s t u v w n ", |
188 | " o x y z A B C D E n ", | 188 | " o x y z A B C D E n ", |
189 | " F G H I J K L M N O ", | 189 | " F G H I J K L M N O ", |
190 | " P Q R S T U V W X ", | 190 | " P Q R S T U V W X ", |
191 | " Y Z ` b ...+. ", | 191 | " Y Z ` b ...+. ", |
192 | " @.#.$.%.&. ", | 192 | " @.#.$.%.&. ", |
193 | " *.B =. ", | 193 | " *.B =. ", |
194 | " n n n n n n n n n "}; | 194 | " n n n n n n n n n "}; |
195 | 195 | ||
196 | 196 | ||
197 | VMemo::VMemo( QWidget *parent, const char *_name ) | 197 | VMemo::VMemo( QWidget *parent, const char *_name ) |
198 | : QWidget( parent, _name ) | 198 | : QWidget( parent, _name ) |
199 | { | 199 | { |
200 | setFixedHeight( 18 ); | 200 | setFixedHeight( 18 ); |
201 | setFixedWidth( 14 ); | 201 | setFixedWidth( 14 ); |
202 | 202 | ||
203 | recording = FALSE; | 203 | recording = FALSE; |
204 | 204 | ||
205 | struct utsname name; /* check for embedix kernel running on the zaurus*/ | 205 | struct utsname name; /* check for embedix kernel running on the zaurus*/ |
206 | if (uname(&name) != -1) { | 206 | if (uname(&name) != -1) { |
207 | QString release=name.release; | 207 | QString release=name.release; |
208 | if(release.find("embedix",0,TRUE) !=-1) | 208 | Config vmCfg("VMemo"); |
209 | systemZaurus=TRUE; | 209 | vmCfg.setGroup("Defaults"); |
210 | else { | 210 | |
211 | systemZaurus=FALSE; | 211 | if(release.find("embedix",0,TRUE) !=-1) { |
212 | myChannel = new QCopChannel( "QPE/VMemo", this ); | 212 | int toggleKey = vmCfg.readNumEntry("toggleKey", -1); |
213 | connect( myChannel, SIGNAL(received(const QCString&, const QByteArray&)), | 213 | systemZaurus=TRUE; |
214 | this, SLOT(receive(const QCString&, const QByteArray&)) ); | 214 | } else { |
215 | 215 | int toggleKey = vmCfg.readNumEntry("toggleKey", 4096); | |
216 | // // Register the REC key press, for ipaq only | 216 | //default key for ipaq record button is Key_Escape = 4096 |
217 | QCopEnvelope e("QPE/Desktop", "keyRegister(int key, QString channel, QString message)"); | 217 | systemZaurus=FALSE; |
218 | e << 4096; | 218 | } |
219 | e << QString("QPE/VMemo"); | 219 | |
220 | e << QString("toggleRecord()"); | 220 | myChannel = new QCopChannel( "QPE/VMemo", this ); |
221 | } | 221 | connect( myChannel, SIGNAL(received(const QCString&, const QByteArray&)), |
222 | } | 222 | this, SLOT(receive(const QCString&, const QByteArray&)) ); |
223 | |||
224 | if( toggleKey != -1 ) { | ||
225 | QCopEnvelope e("QPE/Desktop", "keyRegister(int key, QString channel, QString message)"); | ||
226 | // e << 4096; // Key_Escape | ||
227 | // e << Key_F5; //4148 | ||
228 | e << toggleKey; | ||
229 | e << QString("QPE/VMemo"); | ||
230 | e << QString("toggleRecord()"); | ||
231 | } | ||
232 | } | ||
223 | } | 233 | } |
224 | 234 | ||
225 | VMemo::~VMemo() | 235 | VMemo::~VMemo() |
226 | { | 236 | { |
227 | } | 237 | } |
228 | 238 | ||
229 | void VMemo::receive( const QCString &msg, const QByteArray &data ) | 239 | void VMemo::receive( const QCString &msg, const QByteArray &data ) |
230 | { | 240 | { |
231 | QDataStream stream( data, IO_ReadOnly ); | 241 | QDataStream stream( data, IO_ReadOnly ); |
232 | if (msg == "toggleRecord()") { | 242 | if (msg == "toggleRecord()") { |
233 | if (recording) | 243 | if (recording) { |
234 | mouseReleaseEvent(NULL); | 244 | fromToggle = TRUE; |
235 | else | 245 | stopRecording(); |
236 | mousePressEvent(NULL); | 246 | } else { |
237 | } | 247 | fromToggle = TRUE; |
248 | startRecording(); | ||
249 | } | ||
250 | } | ||
238 | } | 251 | } |
239 | 252 | ||
240 | void VMemo::paintEvent( QPaintEvent* ) | 253 | void VMemo::paintEvent( QPaintEvent* ) |
241 | { | 254 | { |
242 | QPainter p(this); | 255 | QPainter p(this); |
243 | p.drawPixmap( 0, 1,( const char** ) vmemo_xpm ); | 256 | p.drawPixmap( 0, 1,( const char** ) vmemo_xpm ); |
244 | } | 257 | } |
245 | 258 | ||
246 | void VMemo::mousePressEvent( QMouseEvent *me ) | 259 | void VMemo::mousePressEvent( QMouseEvent * ) |
247 | { | 260 | { |
248 | // just to be safe | 261 | startRecording(); |
249 | if (recording) { | 262 | } |
250 | recording = FALSE; | 263 | |
251 | return; | 264 | void VMemo::mouseReleaseEvent( QMouseEvent * ) |
252 | } | 265 | { |
266 | stopRecording(); | ||
267 | } | ||
268 | |||
269 | bool VMemo::startRecording() { | ||
253 | 270 | ||
254 | /* | 271 | if ( recording) |
255 | No mousePress/mouseRelease recording on the iPAQ. The REC button on the iPAQ calls these functions | 272 | return FALSE;; |
256 | mousePressEvent and mouseReleaseEvent with a NULL parameter. | ||
257 | */ | ||
258 | // #if defined(QT_QWS_IPAQ) || defined(QT_QWS_EBX) | ||
259 | // if (!systemZaurus ) | ||
260 | // return; | ||
261 | // #endif | ||
262 | |||
263 | Config config( "Sound" ); | 273 | Config config( "Sound" ); |
264 | config.setGroup( "System" ); | 274 | config.setGroup( "System" ); |
265 | useAlerts = config.readBoolEntry("Alert"); | 275 | useAlerts = config.readBoolEntry("Alert"); |
266 | 276 | ||
267 | // if(useAlerts) | 277 | // if(useAlerts) |
268 | // QMessageBox::message("VMemo","Really Record?");//) ==1) | 278 | // QMessageBox::message("VMemo","Really Record?");//) ==1) |
269 | // return; | 279 | // return; |
270 | // } else { | 280 | // } else { |
271 | if (!systemZaurus ) | 281 | if (!systemZaurus ) |
272 | QSound::play(Resource::findSound("vmemob")); | 282 | QSound::play(Resource::findSound("vmemob")); |
273 | // } | 283 | // } |
274 | qDebug("Start recording"); | 284 | qDebug("Start recording"); |
275 | recording = TRUE; | 285 | recording = TRUE; |
276 | if (openDSP() == -1) { | 286 | if (openDSP() == -1) { |
277 | QMessageBox::critical(0, "VMemo", "Could not open dsp device.\n"+errorMsg, "Abort"); | 287 | QMessageBox::critical(0, "VMemo", "Could not open dsp device.\n"+errorMsg, "Abort"); |
278 | recording = FALSE; | 288 | recording = FALSE; |
279 | return; | 289 | return FALSE; |
280 | } | 290 | } |
281 | 291 | ||
282 | Config vmCfg("VMemo"); | 292 | Config vmCfg("VMemo"); |
283 | vmCfg.setGroup("Defaults"); | 293 | vmCfg.setGroup("Defaults"); |
284 | 294 | ||
285 | QDateTime dt = QDateTime::currentDateTime(); | 295 | QDateTime dt = QDateTime::currentDateTime(); |
286 | 296 | ||
287 | QString fName; | 297 | QString fName; |
288 | Config cfg( "Sound" ); | 298 | Config cfg( "Sound" ); |
289 | cfg.setGroup( "System" ); | 299 | cfg.setGroup( "System" ); |
290 | fName = QPEApplication::documentDir() ; | 300 | fName = QPEApplication::documentDir() ; |
291 | fileName = cfg.readEntry("RecLocation", fName); | 301 | fileName = cfg.readEntry("RecLocation", fName); |
292 | 302 | ||
293 | int s; | 303 | int s; |
294 | s=fileName.find(':'); | 304 | s=fileName.find(':'); |
295 | if(s) | 305 | if(s) |
296 | fileName=fileName.right(fileName.length()-s-2); | 306 | fileName=fileName.right(fileName.length()-s-2); |
297 | qDebug("filename will be "+fileName); | 307 | qDebug("filename will be "+fileName); |
298 | if( fileName.right(1).find('/') == -1) | 308 | if( fileName.right(1).find('/') == -1) |
299 | fileName+="/"; | 309 | fileName+="/"; |
300 | |||
301 | // if(systemZaurus) | ||
302 | // fileName=vmCfg.readEntry("Dir", "/mnt/cf/"); // zaurus does not have /mnt/ramfs | ||
303 | // else | ||
304 | // fileName=vmCfg.readEntry("Dir", "/mnt/ramfs/"); | ||
305 | |||
306 | fName = "vm_"+ dt.toString()+ ".wav"; | 310 | fName = "vm_"+ dt.toString()+ ".wav"; |
307 | 311 | ||
308 | fileName+=fName; | 312 | fileName+=fName; |
309 | qDebug("filename is "+fileName); | 313 | qDebug("filename is "+fileName); |
310 | // No spaces in the filename | 314 | // No spaces in the filename |
311 | fileName.replace(QRegExp("'"),""); | 315 | fileName.replace(QRegExp("'"),""); |
312 | fileName.replace(QRegExp(" "),"_"); | 316 | fileName.replace(QRegExp(" "),"_"); |
313 | fileName.replace(QRegExp(":"),"."); | 317 | fileName.replace(QRegExp(":"),"."); |
314 | fileName.replace(QRegExp(","),""); | 318 | fileName.replace(QRegExp(","),""); |
315 | 319 | ||
316 | if(openWAV(fileName.latin1()) == -1) { | 320 | if(openWAV(fileName.latin1()) == -1) { |
317 | QString err("Could not open the output file\n"); | 321 | QString err("Could not open the output file\n"); |
318 | err += fileName; | 322 | err += fileName; |
319 | QMessageBox::critical(0, "VMemo", err, "Abort"); | 323 | QMessageBox::critical(0, "VMemo", err, "Abort"); |
320 | close(dsp); | 324 | close(dsp); |
321 | return; | 325 | return FALSE; |
322 | } | 326 | } |
323 | 327 | ||
324 | QArray<int> cats(1); | 328 | QArray<int> cats(1); |
325 | cats[0] = vmCfg.readNumEntry("Category", 0); | 329 | cats[0] = vmCfg.readNumEntry("Category", 0); |
326 | 330 | ||
327 | QString dlName("vm_"); | 331 | QString dlName("vm_"); |
328 | dlName += dt.toString(); | 332 | dlName += dt.toString(); |
329 | DocLnk l; | 333 | DocLnk l; |
330 | l.setFile(fileName); | 334 | l.setFile(fileName); |
331 | l.setName(dlName); | 335 | l.setName(dlName); |
332 | l.setType("audio/x-wav"); | 336 | l.setType("audio/x-wav"); |
333 | l.setCategories(cats); | 337 | l.setCategories(cats); |
334 | l.writeLink(); | 338 | l.writeLink(); |
335 | 339 | ||
336 | record(); | 340 | record(); |
341 | return TRUE; | ||
337 | } | 342 | } |
338 | 343 | ||
339 | void VMemo::mouseReleaseEvent( QMouseEvent * ) | 344 | void VMemo::stopRecording() { |
340 | { | ||
341 | recording = FALSE; | 345 | recording = FALSE; |
342 | } | 346 | } |
343 | 347 | ||
344 | int VMemo::openDSP() | 348 | int VMemo::openDSP() |
345 | { | 349 | { |
346 | Config cfg("Sound"); | 350 | Config cfg("Sound"); |
347 | cfg.setGroup("Record"); | 351 | cfg.setGroup("Record"); |
348 | 352 | ||
349 | speed = cfg.readNumEntry("SampleRate", 22050); | 353 | speed = cfg.readNumEntry("SampleRate", 22050); |
350 | channels = cfg.readNumEntry("Stereo", 1) ? 2 : 1; // 1 = stereo(2), 0 = mono(1) | 354 | channels = cfg.readNumEntry("Stereo", 1) ? 2 : 1; // 1 = stereo(2), 0 = mono(1) |
351 | if (cfg.readNumEntry("SixteenBit", 1)==1) { | 355 | if (cfg.readNumEntry("SixteenBit", 1)==1) { |
352 | format = AFMT_S16_LE; | 356 | format = AFMT_S16_LE; |
353 | resolution = 16; | 357 | resolution = 16; |
354 | } else { | 358 | } else { |
355 | format = AFMT_U8; | 359 | format = AFMT_U8; |
356 | resolution = 8; | 360 | resolution = 8; |
357 | } | 361 | } |
358 | 362 | ||
359 | qDebug("samplerate: %d, channels %d, resolution %d", speed, channels, resolution); | 363 | qDebug("samplerate: %d, channels %d, resolution %d", speed, channels, resolution); |
360 | 364 | ||
361 | if(systemZaurus) { | 365 | if(systemZaurus) { |
362 | dsp = open("/dev/dsp1", O_RDWR); //Zaurus needs /dev/dsp1 | 366 | dsp = open("/dev/dsp1", O_RDWR); //Zaurus needs /dev/dsp1 |
363 | channels=1; //zaurus has one input channel | 367 | channels=1; //zaurus has one input channel |
364 | } else { | 368 | } else { |
@@ -458,49 +462,49 @@ void VMemo::record(void) | |||
458 | unsigned short sound[512], monoBuffer[512]; | 462 | unsigned short sound[512], monoBuffer[512]; |
459 | while(recording) { | 463 | while(recording) { |
460 | result = read(dsp, sound, 512); // 8192 | 464 | result = read(dsp, sound, 512); // 8192 |
461 | int j=0; | 465 | int j=0; |
462 | if(systemZaurus) { | 466 | if(systemZaurus) { |
463 | for (int i = 0; i < result; i++) { //since Z is mono do normally | 467 | for (int i = 0; i < result; i++) { //since Z is mono do normally |
464 | monoBuffer[i] = sound[i]; | 468 | monoBuffer[i] = sound[i]; |
465 | } | 469 | } |
466 | length+=write(wav, monoBuffer, result); | 470 | length+=write(wav, monoBuffer, result); |
467 | } else { //ipaq /stereo inputs | 471 | } else { //ipaq /stereo inputs |
468 | for (int i = 0; i < result; i+=2) { | 472 | for (int i = 0; i < result; i+=2) { |
469 | monoBuffer[j] = (sound[i]+sound[i+1])/2; | 473 | monoBuffer[j] = (sound[i]+sound[i+1])/2; |
470 | j++; | 474 | j++; |
471 | } | 475 | } |
472 | length+=write(wav, monoBuffer, result/2); | 476 | length+=write(wav, monoBuffer, result/2); |
473 | } | 477 | } |
474 | length += result; | 478 | length += result; |
475 | // printf("%d\r",length); | 479 | // printf("%d\r",length); |
476 | // fflush(stdout); | 480 | // fflush(stdout); |
477 | } | 481 | } |
478 | 482 | ||
479 | qApp->processEvents(); | 483 | qApp->processEvents(); |
480 | } | 484 | } |
481 | 485 | ||
482 | } else { | 486 | } else { // this is specific for ipaqs that do not have 8 bit capabilities |
483 | 487 | ||
484 | signed short sound[512], monoBuffer[512]; | 488 | signed short sound[512], monoBuffer[512]; |
485 | 489 | ||
486 | while(recording) { | 490 | while(recording) { |
487 | result = read(dsp, sound, 512); // 8192 | 491 | result = read(dsp, sound, 512); // 8192 |
488 | write(wav, sound, result); | 492 | write(wav, sound, result); |
489 | length += result; | 493 | length += result; |
490 | 494 | ||
491 | qApp->processEvents(); | 495 | qApp->processEvents(); |
492 | } | 496 | } |
493 | // printf("%d\r",length); | 497 | // printf("%d\r",length); |
494 | // fflush(stdout); | 498 | // fflush(stdout); |
495 | // qDebug("file has length of %d lasting %d seconds", | 499 | // qDebug("file has length of %d lasting %d seconds", |
496 | // length, (( length / speed) / channels) / 2 ); | 500 | // length, (( length / speed) / channels) / 2 ); |
497 | // medialplayer states wrong length in secs | 501 | // medialplayer states wrong length in secs |
498 | } | 502 | } |
499 | 503 | ||
500 | value = length+36; | 504 | value = length+36; |
501 | lseek(wav, 4, SEEK_SET); | 505 | lseek(wav, 4, SEEK_SET); |
502 | write(wav, &value, 4); | 506 | write(wav, &value, 4); |
503 | lseek(wav, 40, SEEK_SET); | 507 | lseek(wav, 40, SEEK_SET); |
504 | write(wav, &length, 4); | 508 | write(wav, &length, 4); |
505 | track.close(); | 509 | track.close(); |
506 | 510 | ||
diff --git a/core/applets/vmemo/vmemo.h b/core/applets/vmemo/vmemo.h index 3972877..701663f 100644 --- a/core/applets/vmemo/vmemo.h +++ b/core/applets/vmemo/vmemo.h | |||
@@ -16,41 +16,42 @@ | |||
16 | 16 | ||
17 | #ifndef __VMEMO_H__ | 17 | #ifndef __VMEMO_H__ |
18 | #define __VMEMO_H__ | 18 | #define __VMEMO_H__ |
19 | 19 | ||
20 | #include <qwidget.h> | 20 | #include <qwidget.h> |
21 | #include <qpixmap.h> | 21 | #include <qpixmap.h> |
22 | #include <qpe/applnk.h> | 22 | #include <qpe/applnk.h> |
23 | #include <qfile.h> | 23 | #include <qfile.h> |
24 | #include <qpe/qcopenvelope_qws.h> | 24 | #include <qpe/qcopenvelope_qws.h> |
25 | 25 | ||
26 | class VMemo : public QWidget | 26 | class VMemo : public QWidget |
27 | { | 27 | { |
28 | Q_OBJECT | 28 | Q_OBJECT |
29 | public: | 29 | public: |
30 | VMemo( QWidget *parent, const char *name = NULL); | 30 | VMemo( QWidget *parent, const char *name = NULL); |
31 | ~VMemo(); | 31 | ~VMemo(); |
32 | QFile track; | 32 | QFile track; |
33 | QString fileName, errorMsg; | 33 | QString fileName, errorMsg; |
34 | 34 | ||
35 | public slots: | 35 | public slots: |
36 | void record(); | 36 | void record(); |
37 | void mousePressEvent( QMouseEvent * ); | 37 | void mousePressEvent( QMouseEvent * ); |
38 | void mouseReleaseEvent( QMouseEvent * ); | 38 | void mouseReleaseEvent( QMouseEvent * ); |
39 | void receive( const QCString &msg, const QByteArray &data ); | 39 | void receive( const QCString &msg, const QByteArray &data ); |
40 | 40 | bool startRecording(); | |
41 | void stopRecording(); | ||
41 | private: | 42 | private: |
42 | bool useAlerts; | 43 | bool useAlerts; |
43 | void paintEvent( QPaintEvent* ); | 44 | void paintEvent( QPaintEvent* ); |
44 | 45 | ||
45 | int openDSP(); | 46 | int openDSP(); |
46 | int openWAV(const char *filename); | 47 | int openWAV(const char *filename); |
47 | 48 | bool fromToggle; | |
48 | QPixmap vmemoPixmap; | 49 | QPixmap vmemoPixmap; |
49 | QCopChannel *myChannel; | 50 | QCopChannel *myChannel; |
50 | bool systemZaurus; | 51 | bool systemZaurus; |
51 | int dsp, wav, rate, speed, channels, format, resolution; | 52 | int dsp, wav, rate, speed, channels, format, resolution; |
52 | bool recording; | 53 | bool recording; |
53 | }; | 54 | }; |
54 | 55 | ||
55 | #endif // __VMEMO_H__ | 56 | #endif // __VMEMO_H__ |
56 | 57 | ||