bool cRtEpgData::setEventData(const std::string& data, int timeOffset, bool isAscii) { std::string latin = data; if (!isAscii) { latin = convertUTF8DVB(data, 1); } string::size_type index = data.find('~'); int previous = 0; while (index != string::npos) { strings.push_back( data.substr(previous, index-previous)); previous = index + 1; index = data.find('~', previous); } strings.push_back( data.substr(previous)); //don't forget last one - not terminated with a '~' if (strings.size() == 23) { name = strings[0]; subtitle = strings[1]; episode = strings[2]; year = atoi(strings[3].c_str()); director = strings[4]; cast = strings[5]; premiere = strings[6] == "true"; film = strings[7] == "true"; repeat = strings[8] == "true"; subtitled = strings[9] == "true"; widescreen = strings[10] == "true"; new_series = strings[11] == "true"; deaf_signed = strings[12] == "true"; black_white = strings[13] == "true"; starRating = atoi(strings[14].c_str()); certificate = atoi(strings[15].c_str()); genre = strings[16]; description = strings[17]; choice = strings[18] == "true"; startdate = strings[19]; starttime = strings[20]; stoptime = strings[21]; duration = atoi(strings[22].c_str()); offset = timeOffset; /* start time is given in UK local time (GMT or GMT+1) I need gmt time, so I convert the time as if it was a local time, and then account for the timezone difference. Because our daylight saving times/summer times move in sync, the difference remains constant. ==> this means we can use our local timezone to determine the offset. can this go wrong? esp during changeovers? */ startTime = parseDateTime(startdate, starttime) + offset; stopTime = startTime + duration*60; return true; } return false; }
void eTextInputField::lostFocus() { if ( editMode ) { nextCharTimer.stop(); isotext=convertUTF8DVB(editLabel->getText(), table); setText(isotext); setHelpText(oldHelpText); while ( text.length() && text[text.length()-1] == ' ' ) text.erase( text.length()-1 ); editMode=false; /* emit */ selected(); delete editLabel; editLabel=0; } eWindow::globalCancel(eWindow::ON); eButton::lostFocus(); }
void eTextInputField::updateHelpWidget() { if ( helpwidget ) { eString keysStr; for (int i=0; i < 12; ++i ) { char *language=0; eConfig::getInstance()->getKey("/elitedvb/language", language); if ( language && keymappings.find(language) != keymappings.end() ) { keysStr = capslock ? keymappings[language][i].second : keymappings[language][i].first; } else { keysStr = capslock ? keymappings["default"][i].second : keymappings["default"][i].first; } if ( language ) free(language); eString tmpStr = convertUTF8DVB(keysStr, table); if ( i < 10) { if ( swapNum ) tmpStr = (char)(i+0x30) + tmpStr; else tmpStr += (char)(i+0x30); } eString filtered; for (unsigned int d=0; d < tmpStr.length(); ++d ) if ( useableChars.find(tmpStr[d]) != eString::npos ) filtered+=tmpStr[d]; helpwidget->keys[i]->setText(convertDVBUTF8((unsigned char*)filtered.c_str(),filtered.length(), table)); } } }
int eTextInputField::eventHandler( const eWidgetEvent &event ) { if (editLabel) isotext=convertUTF8DVB(editLabel->getText(), table); else isotext=convertUTF8DVB(text, table); switch (event.type) { case eWidgetEvent::evtAction: { if ( curPos < 0 ) curPos=0; // eDebug("curPos=%d, isotext.length=%d",curPos, isotext.length()); int key = -1; if ( event.action == &i_texteditActions->capslock && editMode) { capslock^=1; if ( capslock ) drawCursor(); else if ( !capsRect.isEmpty() ) eWidget::invalidate( capsRect ); updateHelpWidget(); } else if ( event.action == &i_texteditActions->swapnum && editMode) { swapNum^=1; updateHelpWidget(); } else if (event.action == &i_texteditActions->insertchar && editMode) { if ( isotext.length() && (!maxChars || (isotext.length() < maxChars)) ) { lastKey=-1; isotext.insert( curPos, " "); updated(); } } else if (event.action == &i_texteditActions->deletechar && editMode) { // eDebug("istext.length is %d, curPos is %d", isotext.length(), curPos); if ( isotext.length() ) { lastKey=-1; isotext.erase( curPos, 1 ); // eDebug("curPos=%d, length=%d", curPos, text.length() ); if ( (int)isotext.length() == curPos ) { // eDebug("curPos--"); --curPos; } updated(); } } else if (event.action == &i_texteditActions->backspace && editMode) { // eDebug("istext.length is %d, curPos is %d", isotext.length(), curPos); if (isotext.length()) { lastKey=-1; if (curPos) curPos--; isotext.erase( curPos, 1 ); updated(); } } else if ( event.action == &i_texteditActions->showHelp && !helpwidget && editMode ) { eTextInputFieldHelpWindow wnd; helpwidget = wnd.helpwidget; updateHelpWidget(); eWindow::globalCancel(eWindow::ON); wnd.show(); wnd.exec(); wnd.hide(); helpwidget=0; drawCursor(); eWindow::globalCancel(eWindow::OFF); } else if ( (event.action == &i_cursorActions->up || event.action == &i_cursorActions->down) && editMode ) { lastKey=-1; nextCharTimer.stop(); const char *pc1=useableChars.c_str(); const char *pc2=strchr( pc1, isotext[curPos] ); if( !pc2 || !pc2[0] ) pc2=pc1; if(event.action == &i_cursorActions->up) { pc2++; if(!*pc2) pc2=pc1; } else { if(pc2==pc1) while(*pc2) pc2++; pc2--; } if ( isotext.length() ) isotext[curPos] = *pc2; else isotext+=*pc2; updated(); } else if (event.action == &i_cursorActions->left && editMode ) { nextCharTimer.stop(); if ( curPos > 0 ) { --curPos; lastKey=-1; updated(); } } else if (event.action == &i_cursorActions->right && editMode) { nextCharTimer.stop(); nextChar(); } else if (event.action == &i_cursorActions->ok) setState(!editMode, 0); else if ( editMode && event.action == &i_cursorActions->cancel ) { setState(0, 1); if ( flags & flagCloseParent && parent ) parent->reject(); break; } else if (event.action == &i_numberActions->key0 && editMode ) key=0; else if (event.action == &i_numberActions->key1 && editMode ) key=1; else if (event.action == &i_numberActions->key2 && editMode ) key=2; else if (event.action == &i_numberActions->key3 && editMode ) key=3; else if (event.action == &i_numberActions->key4 && editMode ) key=4; else if (event.action == &i_numberActions->key5 && editMode ) key=5; else if (event.action == &i_numberActions->key6 && editMode ) key=6; else if (event.action == &i_numberActions->key7 && editMode ) key=7; else if (event.action == &i_numberActions->key8 && editMode ) key=8; else if (event.action == &i_numberActions->key9 && editMode ) key=9; else if (event.action == &i_numberActions->keyExt1 && editMode ) key=10; else if (event.action == &i_numberActions->keyExt2 && editMode ) key=11; else return eButton::eventHandler( event ); if ( (lastKey != -1 && key != -1) && (key != lastKey || flags & flagGoAlwaysNext) ) { if ( nextCharTimer.isActive() ) nextCharTimer.stop(); nextChar(); } if ( editMode && key != -1 ) { eString keysStr; char *language=0; eConfig::getInstance()->getKey("/elitedvb/language", language); if ( language && keymappings.find(language) != keymappings.end() ) { keysStr = capslock ? keymappings[language][key].second : keymappings[language][key].first; } else { keysStr = capslock ? keymappings["default"][key].second : keymappings["default"][key].first; } if ( language ) free(language); eString tmpStr=convertUTF8DVB(keysStr, table); if ( key < 10) { if ( swapNum ) tmpStr = (char)(key+0x30) + tmpStr; else tmpStr += (char)(key+0x30); } const char *keys = tmpStr.c_str(); char newChar = 0; if ( key == lastKey ) { const char *oldkey = strchr( keys, isotext[curPos] ); newChar = oldkey?keys[oldkey-keys+1]:0; } if (!newChar) newChar = keys[0]; // eDebug("newChar = %d", newChar ); char testChar = newChar; do { if ( strchr( useableChars.c_str(), newChar ) ) // char useable? { if ( curPos == (int)isotext.length() ) isotext += newChar; else isotext[curPos] = newChar; updated(); if(nextCharTimeout) nextCharTimer.start(nextCharTimeout,true); break; } else { nextCharTimer.stop(); const char *oldkey = strchr( keys, newChar ); newChar=oldkey?keys[oldkey-keys+1]:0; if (!newChar) newChar=keys[0]; } } while( newChar != testChar ); // all chars tested.. and no char is useable.. lastKey=key; } } break; default: return eButton::eventHandler( event ); break; } return 1; }