00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029 #include "calibration.h"
00030 #include "sensor.h"
00031
00032 #include <opie2/odevice.h>
00033
00034 #include <qlayout.h>
00035 #include <qslider.h>
00036 #include <qspinbox.h>
00037
00038 using namespace Opie::Core;
00039
00040 Sensor::Sensor ( QStringList ¶ms, QWidget *parent, const char *name )
00041 : SensorBase ( parent, name, true, WStyle_ContextHelp ), m_params ( params )
00042 {
00043 int steps = 12;
00044 int inter = 2;
00045
00046 int smin = 40;
00047 int smax = 215;
00048 int lmin = 1;
00049 int lmax = 255;
00050
00051 switch ( params. count ( )) {
00052 case 6: lmax = params [5]. toInt ( );
00053 case 5: lmin = params [4]. toInt ( );
00054 case 4: smax = params [3]. toInt ( );
00055 case 3: smin = params [2]. toInt ( );
00056 case 2: steps = params [1]. toInt ( );
00057 case 1: inter = params [0]. toInt ( ) / 1000;
00058 }
00059
00060 int xscale = ODevice::inst ( )-> lightSensorResolution ( );
00061 int yscale = ODevice::inst ( )-> displayBrightnessResolution ( );
00062
00063 QVBoxLayout *lay = new QVBoxLayout ( frame );
00064 lay-> setMargin ( 2 );
00065 m_calib = new Calibration ( frame );
00066 lay-> add ( m_calib );
00067
00068 m_calib-> setScale ( QSize ( xscale, yscale ));
00069 m_calib-> setLineSteps ( steps );
00070 m_calib-> setInterval ( inter );
00071 m_calib-> setStartPoint ( QPoint ( smin * xscale / 256, lmax * yscale / 256 ));
00072 m_calib-> setEndPoint ( QPoint ( smax * xscale / 256, lmin * yscale / 256 ));
00073
00074 interval-> setValue ( inter );
00075 linesteps-> setValue ( steps );
00076
00077 connect ( interval, SIGNAL( valueChanged(int)), m_calib, SLOT( setInterval(int)));
00078 connect ( linesteps, SIGNAL( valueChanged(int)), m_calib, SLOT( setLineSteps(int)));
00079
00080 connect ( m_calib, SIGNAL( startPointChanged(const QPoint&)), this, SLOT( pointDrag(const QPoint&)));
00081 connect ( m_calib, SIGNAL( endPointChanged(const QPoint&)), this, SLOT( pointDrag(const QPoint&)));
00082 }
00083
00084 void Sensor::accept ( )
00085 {
00086 int xscale = ODevice::inst ( )-> lightSensorResolution ( );
00087 int yscale = ODevice::inst ( )-> displayBrightnessResolution ( );
00088
00089 m_params. clear ( );
00090 m_params << QString::number ( m_calib-> interval ( ) * 1000 )
00091 << QString::number ( m_calib-> lineSteps ( ))
00092 << QString::number ( m_calib-> startPoint ( ). x ( ) * 256 / xscale )
00093 << QString::number ( m_calib-> endPoint ( ). x ( ) * 256 / xscale )
00094 << QString::number ( m_calib-> endPoint ( ). y ( ) * 256 / yscale )
00095 << QString::number ( m_calib-> startPoint ( ). y ( ) * 256 / yscale );
00096
00097 QDialog::accept ( );
00098 }
00099
00100 void Sensor::pointDrag ( const QPoint &p )
00101 {
00102 emit viewBacklight ( p. y ( ));
00103 }