00001 #include "picker.h"
00002
00003 #include <opie2/odebug.h>
00004
00005 #include <qtimer.h>
00006 #include <qlayout.h>
00007
00008 char PickerLabel::lastLetter = '\0';
00009
00010 PickerLabel::PickerLabel( QWidget *parent, const char *name )
00011 : QLabel ( parent, name )
00012 {
00013 currentLetter = 0;
00014
00015
00016 letter1 = '\0';
00017 letter2 = '\0';
00018 letter3 = '\0';
00019
00020
00021 setFont( QFont::defaultFont() );
00022 setTextFormat( Qt::RichText );
00023
00024 }
00025
00026 PickerLabel::~PickerLabel()
00027 {
00028
00029 }
00030
00031 void PickerLabel::setLetters( char ch1, char ch2, char ch3 )
00032 {
00033 QString tmpStr;
00034
00035 if (ch1 != '\0')
00036 letter1 = ch1;
00037 else
00038 letter1 = ' ';
00039
00040 if (ch2 != '\0')
00041 letter2 = ch2;
00042 else
00043 letter2 = ' ';
00044
00045 if (ch3 != '\0')
00046 letter3 = ch3;
00047 else
00048 letter3 = ' ';
00049
00050 tmpStr = "<qt>";
00051 tmpStr += letter1;
00052 tmpStr += letter2;
00053 tmpStr += letter3;
00054 tmpStr += "</qt>";
00055
00056 setText(tmpStr);
00057
00058 currentLetter = 0;
00059
00060 }
00061
00062 void PickerLabel::clearLetter()
00063 {
00064
00065 QString tmpStr;
00066
00067 tmpStr = "<qt>";
00068 tmpStr += letter1;
00069 tmpStr += letter2;
00070 tmpStr += letter3;
00071 tmpStr += "</qt>";
00072
00073 setText(tmpStr);
00074
00075 currentLetter = 0;
00076
00077 }
00078
00079 void PickerLabel::mousePressEvent( QMouseEvent* e )
00080 {
00081
00082
00083
00084
00085 if ( ( currentLetter == 0 ) && ( lastLetter != '\0' ) ) mouseReleaseEvent( e );
00086 }
00087
00088 void PickerLabel::mouseReleaseEvent( QMouseEvent* )
00089 {
00090 QString tmpStr;
00091
00092 if (lastLetter != letter1 && lastLetter != letter2 && lastLetter != letter3 && lastLetter != '\0')
00093 QTimer::singleShot( 0, this, SLOT(emitClearSignal()) );
00094
00095 switch (currentLetter) {
00096 case 0:
00097 tmpStr = "<qt><u><b><font color=\"#FF00FF\">";
00098 tmpStr += letter1;
00099 tmpStr += "</font></b></u>";
00100 tmpStr += letter2;
00101 tmpStr += letter3;
00102 tmpStr += "</qt>";
00103
00104 setText(tmpStr);
00105
00106 currentLetter++;
00107 lastLetter = letter1;
00108 emit selectedLetter( letter1 );
00109 break;
00110
00111 case 1:
00112 tmpStr = "<qt>";
00113 tmpStr += letter1;
00114 tmpStr += "<u><b><font color=\"#FF00FF\">";
00115 tmpStr += letter2;
00116 tmpStr += "</font></b></u>";
00117 tmpStr += letter3;
00118 tmpStr += "</qt>";
00119
00120 setText(tmpStr);
00121
00122 currentLetter++;
00123 lastLetter = letter2;
00124 emit selectedLetter( letter2 );
00125 break;
00126
00127 case 2:
00128 tmpStr = "<qt>";
00129 tmpStr += letter1;
00130 tmpStr += letter2;
00131 tmpStr += "<u><b><font color=\"#FF00FF\">";
00132 tmpStr += letter3;
00133 tmpStr += "</font></b></u></qt>";
00134
00135 setText(tmpStr);
00136
00137 currentLetter++;
00138 lastLetter = letter3;
00139 emit selectedLetter( letter3 );
00140 break;
00141
00142 default:
00143 clearLetter();
00144 lastLetter = '\0';
00145 emit selectedLetter( '\0' );
00146
00147
00148 }
00149 }
00150
00151 void PickerLabel::emitClearSignal() {
00152 emit clearAll();
00153 }
00154
00155 LetterPicker::LetterPicker( QWidget *parent, const char *name )
00156 : QFrame( parent, name )
00157 {
00158 QHBoxLayout *l = new QHBoxLayout(this);
00159
00160 lblABC = new PickerLabel( this );
00161 l->addWidget( lblABC );
00162
00163 lblDEF = new PickerLabel( this );
00164 l->addWidget( lblDEF );
00165
00166 lblGHI = new PickerLabel( this );
00167 l->addWidget( lblGHI );
00168
00169 lblJKL = new PickerLabel( this );
00170 l->addWidget( lblJKL );
00171
00172 lblMNO = new PickerLabel( this );
00173 l->addWidget( lblMNO );
00174
00175 lblPQR = new PickerLabel( this );
00176 l->addWidget( lblPQR );
00177
00178 lblSTU = new PickerLabel( this );
00179 l->addWidget( lblSTU );
00180
00181 lblVWX = new PickerLabel( this );
00182 l->addWidget( lblVWX );
00183
00184 lblYZ = new PickerLabel( this );
00185 l->addWidget( lblYZ );
00186
00187 lblABC->setLetters( 'A', 'B', 'C' );
00188 lblDEF->setLetters( 'D', 'E', 'F' );
00189 lblGHI->setLetters( 'G', 'H', 'I' );
00190 lblJKL->setLetters( 'J', 'K', 'L' );
00191 lblMNO->setLetters( 'M', 'N', 'O' );
00192 lblPQR->setLetters( 'P', 'Q', 'R' );
00193 lblSTU->setLetters( 'S', 'T', 'U' );
00194 lblVWX->setLetters( 'V', 'W', 'X' );
00195 lblYZ->setLetters( 'Y', 'Z', '#' );
00196
00197 connect(lblABC, SIGNAL(selectedLetter(char)), this, SLOT(newLetter(char)));
00198 connect(lblDEF, SIGNAL(selectedLetter(char)), this, SLOT(newLetter(char)));
00199 connect(lblGHI, SIGNAL(selectedLetter(char)), this, SLOT(newLetter(char)));
00200 connect(lblJKL, SIGNAL(selectedLetter(char)), this, SLOT(newLetter(char)));
00201 connect(lblMNO, SIGNAL(selectedLetter(char)), this, SLOT(newLetter(char)));
00202 connect(lblPQR, SIGNAL(selectedLetter(char)), this, SLOT(newLetter(char)));
00203 connect(lblSTU, SIGNAL(selectedLetter(char)), this, SLOT(newLetter(char)));
00204 connect(lblVWX, SIGNAL(selectedLetter(char)), this, SLOT(newLetter(char)));
00205 connect(lblYZ, SIGNAL(selectedLetter(char)), this, SLOT(newLetter(char)));
00206 connect(lblABC, SIGNAL(clearAll()), this, SLOT(clear()));
00207 connect(lblDEF, SIGNAL(clearAll()), this, SLOT(clear()));
00208 connect(lblGHI, SIGNAL(clearAll()), this, SLOT(clear()));
00209 connect(lblJKL, SIGNAL(clearAll()), this, SLOT(clear()));
00210 connect(lblMNO, SIGNAL(clearAll()), this, SLOT(clear()));
00211 connect(lblPQR, SIGNAL(clearAll()), this, SLOT(clear()));
00212 connect(lblSTU, SIGNAL(clearAll()), this, SLOT(clear()));
00213 connect(lblVWX, SIGNAL(clearAll()), this, SLOT(clear()));
00214 connect(lblYZ, SIGNAL(clearAll()), this, SLOT(clear()));
00215
00216 }
00217
00218 LetterPicker::~LetterPicker()
00219 {
00220 }
00221
00222 QSizePolicy LetterPicker::sizePolicy () const
00223 {
00224 return QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Maximum);
00225 }
00226
00227 void LetterPicker::clear()
00228 {
00229 lblABC->clearLetter();
00230 lblDEF->clearLetter();
00231 lblGHI->clearLetter();
00232 lblJKL->clearLetter();
00233 lblMNO->clearLetter();
00234 lblPQR->clearLetter();
00235 lblSTU->clearLetter();
00236 lblVWX->clearLetter();
00237 lblYZ->clearLetter();
00238 }
00239
00240 void LetterPicker::newLetter( char letter )
00241 {
00242 odebug << "LetterClicked" << oendl;
00243 emit letterClicked( letter );
00244
00245 }