Пример #1
0
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;
}
Пример #2
0
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();
}
Пример #3
0
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));
		}
	}
}
Пример #4
0
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;
}