summaryrefslogtreecommitdiff
Side-by-side diff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/multimedia/camera/mainwindow.cpp36
-rw-r--r--noncore/multimedia/camera/mainwindow.h2
-rw-r--r--noncore/multimedia/camera/zcameraio.cpp10
-rw-r--r--noncore/multimedia/camera/zcameraio.h2
4 files changed, 42 insertions, 8 deletions
diff --git a/noncore/multimedia/camera/mainwindow.cpp b/noncore/multimedia/camera/mainwindow.cpp
index 7080e63..34ebe9e 100644
--- a/noncore/multimedia/camera/mainwindow.cpp
+++ b/noncore/multimedia/camera/mainwindow.cpp
@@ -14,43 +14,62 @@
**********************************************************************/
#include "mainwindow.h"
#include "previewwidget.h"
#include "zcameraio.h"
#include <qvbox.h>
#include <qcombobox.h>
+#include <qcursor.h>
#include <qdatastream.h>
-#include <qpushbutton.h>
#include <qlabel.h>
+#include <qpopupmenu.h>
+#include <qpushbutton.h>
+#include <qmessagebox.h>
#include <qdirectpainter_qws.h>
#include <qpe/resource.h>
#include <qpe/qcopenvelope_qws.h>
#include <opie/ofiledialog.h>
#include <opie2/odebug.h>
#include <assert.h>
CameraMainWindow::CameraMainWindow( QWidget * parent, const char * name, WFlags f )
:QMainWindow( parent, name, f )
{
+ if ( !ZCameraIO::instance()->isOpen() )
+ {
+ QVBox* v = new QVBox( this );
+ v->setMargin( 10 );
+ QLabel* l1 = new QLabel( v );
+ l1->setPixmap( Resource::loadPixmap( "camera/error" ) );
+ QLabel* l2 = new QLabel( v );
+ l2->setText( "<b>Sorry. could not detect your camera :-(</b><p>"
+ "* Is the sharpzdc_cs module loaded ?<br>"
+ "* Is /dev/sharpzdc read/writable ?<p>" );
+ connect( new QPushButton( "Exit", v ), SIGNAL( clicked() ), this, SLOT( close() ) );
+ setCentralWidget( v );
+ return;
+ }
+
_rotation = 270; //TODO: grab these from the actual settings
preview = new PreviewWidget( this, "camera preview widget" );
//setCentralWidget( preview ); <--- don't do this!
preview->resize( QSize( 240, 288 ) );
preview->show();
// construct a System Channel to receive setRotation messages
_sysChannel = new QCopChannel( "QPE/System", this );
connect( _sysChannel, SIGNAL( received( const QCString&, const QByteArray& ) ),
this, SLOT( systemMessage( const QCString&, const QByteArray& ) ) );
+ connect( preview, SIGNAL( contextMenuRequested() ), this, SLOT( showContextMenu() ) );
};
CameraMainWindow::~CameraMainWindow()
{
}
@@ -62,17 +81,19 @@ void CameraMainWindow::systemMessage( const QCString& msg, const QByteArray& dat
{
stream >> _rotation;
odebug << "received setCurrentRotation(" << _rotation << ")" << oendl;
switch ( _rotation )
{
case 270: preview->resize( QSize( 240, 288 ) ); break;
case 180: preview->resize( QSize( 320, 208 ) ); break;
- default: assert( 0 ); // not yet handled
+ default: QMessageBox::warning( this, "opie-camera",
+ "This rotation is not supported.\n"
+ "Supported are 180° and 270°" );
}
}
}
void CameraMainWindow::changeZoom( int zoom )
{
int z;
@@ -82,8 +103,19 @@ void CameraMainWindow::changeZoom( int zoom )
case 1: z = 256; break;
case 2: z = 512; break;
default: assert( 0 ); break;
}
ZCameraIO::instance()->setCaptureFrame( 240, 160, z );
}
+
+void CameraMainWindow::showContextMenu()
+{
+ QPopupMenu m( this );
+ m.insertItem( "Item 1" );
+ m.insertItem( "Item 1" );
+ m.insertItem( "Item 1" );
+ m.insertItem( "Item 1" );
+ m.exec( QCursor::pos() );
+}
+
diff --git a/noncore/multimedia/camera/mainwindow.h b/noncore/multimedia/camera/mainwindow.h
index cc12840..df66204 100644
--- a/noncore/multimedia/camera/mainwindow.h
+++ b/noncore/multimedia/camera/mainwindow.h
@@ -35,16 +35,18 @@ class CameraMainWindow: public QMainWindow
public:
CameraMainWindow( QWidget * parent = 0, const char * name = "mainwindow", WFlags f = 0 );
virtual ~CameraMainWindow();
public slots:
void changeZoom( int );
void systemMessage( const QCString&, const QByteArray& );
+ void showContextMenu();
+
protected:
private:
PreviewWidget* preview;
int _rotation;
QCopChannel* _sysChannel;
};
diff --git a/noncore/multimedia/camera/zcameraio.cpp b/noncore/multimedia/camera/zcameraio.cpp
index 51771a5..b37ae8c 100644
--- a/noncore/multimedia/camera/zcameraio.cpp
+++ b/noncore/multimedia/camera/zcameraio.cpp
@@ -70,42 +70,42 @@ ZCameraIO::~ZCameraIO()
if ( _driver != -1 )
{
setReadMode( 0 );
::close( _driver );
}
}
-inline bool ZCameraIO::isOpen() const
+bool ZCameraIO::isOpen() const
{
return _driver != -1;
}
-inline bool ZCameraIO::isShutterPressed()
+bool ZCameraIO::isShutterPressed()
{
return _status[0] == 'S';
clearShutterLatch();
}
-inline bool ZCameraIO::isFinderReversed() const
+bool ZCameraIO::isFinderReversed() const
{
return _status[1] == 'M';
}
-inline bool ZCameraIO::isCapturing() const
+bool ZCameraIO::isCapturing() const
{
return _status[2] == 'C';
}
-inline bool ZCameraIO::isAvailable() const
+bool ZCameraIO::isAvailable() const
{
return _status[3] == 'A';
}
bool ZCameraIO::setCaptureFrame( int width, int height, int zoom, bool rot )
{
odebug << "setCaptureFrame( " << width << ", " << height << ", " << zoom << ", " << rot << " )" << oendl;
diff --git a/noncore/multimedia/camera/zcameraio.h b/noncore/multimedia/camera/zcameraio.h
index bc4926b..9d4b1d7 100644
--- a/noncore/multimedia/camera/zcameraio.h
+++ b/noncore/multimedia/camera/zcameraio.h
@@ -33,18 +33,18 @@ class ZCameraIO
bool setCaptureFrame( int w, int h, int zoom = 256, bool rot = true );
void setReadMode( int = IMAGE | XFLIP | YFLIP );
bool isShutterPressed(); // not const, because it calls clearShutterLatch
bool isAvailable() const;
bool isCapturing() const;
bool isFinderReversed() const;
-
bool isOpen() const;
+
bool snapshot( QImage* );
bool snapshot( unsigned char* );
static ZCameraIO* instance();
protected:
ZCameraIO();
void clearShutterLatch();
void init();