00001 #ifndef _QCamDisplay_hpp_
00002 #define _QCamDisplay_hpp_
00003
00004 #include "QCamClient.hpp"
00005 #include "QCamFrame.hpp"
00006 #include <qwidget.h>
00007 #include "../config.h"
00008
00009 class QCam;
00010 class QPainter;
00011 class QVBox;
00012 class QCamComboBox;
00013 class QCamDisplayImpl;
00014 class QCamSlider;
00015 class QHBox;
00016 class QLabel;
00017
00020 class QCamDisplay : public QCamClient {
00021 Q_OBJECT
00022 void commonInit(QWidget * parent);
00023 public:
00024 QCamDisplay(QWidget * parent=NULL);
00025 QCamDisplay(QCam &, QWidget * parent=NULL);
00026 virtual ~QCamDisplay();
00027 QWidget & widget();
00028 QCamFrame yuvFrame() const { return yuvFrame_;}
00029 enum CrossType {
00030 None,
00031 Cross,
00032 Circle
00033 };
00034 enum DisplayMode {
00035 Color,
00036 Gray,
00037 Negate,
00038 FalseColor
00039 };
00040 static const int defaultLum_;
00041 public slots:
00042 void setCross(CrossType t);
00043 void setDisplayMode(DisplayMode t);
00044 protected:
00045 void camConnected();
00046 protected slots:
00047 void newFrame();
00048 void setCross(int t);
00049 void setDisplayMode(int t);
00050 void setCrossLum(int l);
00051 private:
00052 void setCaption();
00053 QVBox * mainWidget_;
00054 QCamDisplayImpl * widget_;
00055 QHBox * buttonsContainer_;
00056 QLabel * crossLabel_;
00057 QCamSlider * crossLumSlider_;
00058 QCamComboBox * crossButton_;
00059 QCamComboBox * displayModeButton_;
00060 QCamFrame yuvFrame_;
00061 int crossLum_;
00062 #if HAVE_SDL_H
00063 static bool SDL_on_;
00064 bool use_SDL_;
00065 friend class QCamDisplayImplSDL;
00066 #endif
00067 friend class QCamDisplayImpl;
00068 };
00069
00071 class QCamDisplayImpl : public QWidget {
00072 Q_OBJECT;
00073 protected slots:
00074 virtual void setCross(QCamDisplay::CrossType);
00075 virtual void setDisplayMode(QCamDisplay::DisplayMode);
00076 virtual void setCrossLum(int l);
00077 protected:
00078 QCamDisplayImpl(QCamDisplay &, QWidget * parent);
00079 virtual void paintEvent(QPaintEvent * ev)=0;
00080 virtual void resizeEvent(QResizeEvent*ev);
00081 QSize sizeHint () const;
00082 void mouseDoubleClickEvent ( QMouseEvent * e );
00084 void annotate(QPainter &);
00085 protected:
00086 int crossCenterX_;
00087 int crossCenterY_;
00088 QCamDisplay & camClient_;
00089 QCamDisplay::CrossType currentCross_;
00090 QCamDisplay::DisplayMode displayMode_;
00091
00092 QPainter * painter_;
00093 QPen * pen_;
00094 bool firtsFrameReceived_;
00095
00096 friend class QCamDisplay;
00097 };
00098
00101 class QCamDisplayImplQT : public QCamDisplayImpl {
00102 Q_OBJECT;
00103 private:
00104 QCamDisplayImplQT(QCamDisplay &, QWidget * parent);
00105 protected:
00106 void paintEvent(QPaintEvent * ev);
00107 private:
00108 friend class QCamDisplay;
00109 };
00110
00111
00112
00113 #include "QCamDisplayImplSDL.hpp"
00114
00115 #endif