Example #1
0
void Line::moveCursorTo(int idx)
{
	if (idx < 0)
		idx = 0;
	if (idx > getLength())
		idx = getLength();
		
	while (idx > gapstart) {
		moveCursorRight();
	}
	
	while (idx < gapstart) {
		moveCursorLeft();
	}		
}
Example #2
0
void InputReader::moveCursor(char direction) {
    switch (direction) {
        case 'A':
            historyUp();
            break;
        case 'B':
            historyDown();
            break;
        case 'C':
            moveCursorRight();
            break;
        case 'D':
            moveCursorLeft();
            break;
        default:
            break;
    }
}
void ArrowNavigationHandler::onKey(ArrowKey direction) {
    checkTimeBetweenKeyStrokes(direction);
    if (m_throttling[direction])
        return;

    m_timeStart[direction] = std::chrono::system_clock::now();

    switch (direction) {
    case ArrowKey::UP:
        moveCursorUp();
        break;
    case ArrowKey::RIGHT:
        moveCursorRight();
        break;
    case ArrowKey::DOWN:
        moveCursorDown();
        break;
    case ArrowKey::LEFT:
        moveCursorLeft();
        break;
    default: break;
    }
}
Example #4
0
void sdlMapBoucle(sdlMap *sdMap)
{
	int continuGame = 1;
	int resultMenu;
	int i, num;
	char c;
	Menu menu;
	sdlMenuInit(&menu, getSdlMapEcran(sdMap));
	//Lancement du menu
	resultMenu = sdlMenuBoucle(&menu);

	SDL_Event event;

	/* Horloges (en secondes) */
	float currentClock, prevClock;

	/* Intervalle de temps (en secondes) entre deux Èvolutions du jeu */
	float intervalClock = 0.1f;

	int rafraichissement;

	sdlMapAff(sdMap);
	assert(SDL_Flip(getSdlMapEcran(sdMap))!=-1);

	// RÈcupËre l'horloge actuelle et la convertit en secondes 
	// clock() retourne le nombre de tops horloge depuis le lancement du programme 
	prevClock = (float)clock()/(float)CLOCKS_PER_SEC;

	// Tant que ce n'est pas la fin ... 
	while (continuGame == 1)
	{
		switch (resultMenu) 
		{
		case 0:
			continuGame = 0;
			resultMenu = 1;
			break;
		case 2:
			num = getMapNum(getSdlMap(sdMap));
			num++;
			if(num > 4)
				num = 1;
			setMapNum(getSdlMap(sdMap), num);
			setSdlMap(sdMap,newMap(15, 15, num));
			setSdlMapMode(sdMap, 0);
			setSdlMapSpeed(sdMap, 0);
			continuGame = 1;
			resultMenu = 1;
			break;
		default:
			break;
		}

		rafraichissement = 0;

		// RÈcupËre l'horloge actuelle et la convertit en secondes
		currentClock = (float)clock()/(float)CLOCKS_PER_SEC;
		//printf("\n %f \n %f \n %f \n %f \n", horloge_precedente, horloge_courante, (horloge_courante - horloge_precedente), intervalle_horloge);
		// Si suffisamment de temps s'est ÈcoulÈ depuis la derniËre prise d'horloge

		if ((currentClock - prevClock) >= intervalClock)
		{
			if (getSdlMapSpeed(sdMap)) 
			{
				for (i=0; i<10; i++) 
				{
					updateMap(getSdlMap(sdMap));
				}
			} else {
				for (i=0; i<5; i++) 
				{
					updateMap(sdMap->map);
				}
			}

			updateInterface(getSdlMapInterface(sdMap), getSdlMap(sdMap));
			rafraichissement = 1;
			prevClock = currentClock;

			if(getSdlMap(sdMap)->life <= 0)
			{
				resultMenu = sdlMenuBoucle(&menu);
			}

			if(getSdlMapMode(sdMap) && isWaveEnd(getSdlMap(sdMap)))
			{
				newWave(getSdlMap(sdMap));
			}

		}

		// tant qu'il y a des evenements ‡ traiter : cette boucle n'est pas bloquante 
		while (SDL_PollEvent(&event))
		{
			// Si l'utilisateur a cliquÈ sur la croix de fermeture 
			if ( event.type == SDL_QUIT )
				continuGame = 0;

			// Si l'utilisateur a appuyÈ sur une touche 
			if (event.type == SDL_KEYDOWN)
			{
				rafraichissement = 1;
				Map *map = getSdlMap(sdMap);
				Interface *interface = getSdlMapInterface(sdMap);
				Cursor *cursor = getInterfaceCursor(interface);
				switch (event.key.keysym.sym) 
				{
					//Quiter (esc)
				case SDLK_ESCAPE:
					resultMenu = sdlMenuBoucle(&menu);
					break;

					//Deplacement curseur droite (left)
				case SDLK_LEFT:
					moveCursorLeft(cursor);
					break;

					//Deplacement curseur gauche (right)
				case SDLK_RIGHT:
					moveCursorRight(cursor);
					break;

					//Deplacement curseur haut (up)
				case SDLK_UP:
					moveCursorUp(cursor);
					break;

					//Deplacement curseur bas (down)
				case SDLK_DOWN:
					moveCursorDown(cursor);
					break;

					//Nouvelle vague (w)
				case SDLK_w:
					if(isWaveEnd(map)){
						newWave(map);
					}
					break;

					//Nouvelle tours type archer (a)
				case SDLK_a:
					buyInterfaceTower('A', &(cursor->position), sdMap->map);

					break;

					//Nouvelle tours type knight (k)
				case SDLK_k:
					buyInterfaceTower('K', &(cursor->position), sdMap->map);
					break;

					//Nouvelle tours type mage (m)
				case SDLK_m:
					buyInterfaceTower('M', &(cursor->position), sdMap->map);
					break;

				case SDLK_c:
					buyInterfaceTower('C', &(cursor->position), sdMap->map);
					break;

				case SDLK_e:
					if(isCursorOnTower(cursor, getSdlMap(sdMap)))
					{
						evolveTower(interface->tower, &map->gold);
					}
					break;

				case SDLK_v:
					sellInterfaceTower(getSdlMap(sdMap), &(cursor->position), getInterfaceTower(interface));
					break;

				case SDLK_s:
					if (getSdlMapSpeed(sdMap))
					{
						setSdlMapSpeed(sdMap,0);
					} else 
					{
						setSdlMapSpeed(sdMap,1);
					}
					break;
				case SDLK_i:
					if(getSdlMapMode(sdMap)){
						setSdlMapMode(sdMap,0);
					} else {
						setSdlMapMode(sdMap,1);
					}
					break;
				default:
					break;
				}
			}
		}
		if (rafraichissement==1)
		{
			// on affiche le jeu sur le buffer caché
			sdlMapAff(sdMap);

			// on permute les deux buffers (cette fonction ne doit se faire qu'une seule fois dans a boucle)
			SDL_Flip( getSdlMapEcran(sdMap) );
		}

	}
	sdlMenuLibere(&menu);
}
Example #5
0
/////////////////////////////////////////////////////////////////////
//  Keyboard Event overrides
/////////////////////////////////////////////////////////////////////
void CFreqCtrl::keyPressEvent( QKeyEvent * event )
{
    //call base class if dont over ride key
    bool fSkipMsg = FALSE;
    qint64 tmp;

    //qDebug() <<event->key();

    switch(event->key())
    {
        case Qt::Key_0:
        case Qt::Key_1:
        case Qt::Key_2:
        case Qt::Key_3:
        case Qt::Key_4:
        case Qt::Key_5:
        case Qt::Key_6:
        case Qt::Key_7:
        case Qt::Key_8:
        case Qt::Key_9:
            if (m_ActiveEditDigit >= 0)
            {
                if (m_DigitInfo[m_ActiveEditDigit].editmode)
                {
                    tmp = (m_freq/m_DigitInfo[m_ActiveEditDigit].weight) % 10;
                    m_freq -= tmp*m_DigitInfo[m_ActiveEditDigit].weight;
                    m_freq = m_freq+(event->key()-'0')*m_DigitInfo[m_ActiveEditDigit].weight;
                    setFrequency(m_freq);
                }
            }
            moveCursorRight();
            fSkipMsg = TRUE;
            break;
        case Qt::Key_Left:
            if (m_ActiveEditDigit != -1)
            {
                moveCursorLeft();
                fSkipMsg = TRUE;
            }
            break;
        case Qt::Key_Up:
            if (m_ActiveEditDigit != -1)
            {
                incFreq();
                fSkipMsg = TRUE;
            }
            break;
        case Qt::Key_Down:
            if (m_ActiveEditDigit != -1)
            {
                decFreq();
                fSkipMsg = TRUE;
            }
            break;
        case Qt::Key_Right:
            if (m_ActiveEditDigit != -1)
            {
                moveCursorRight();
                fSkipMsg = TRUE;
            }
            break;
        case Qt::Key_Home:
            cursorHome();
            fSkipMsg = TRUE;
            break;
        case Qt::Key_End:
            cursorEnd();
            fSkipMsg = TRUE;
            break;
        default:
            break;
    }
    if (!fSkipMsg)
        QFrame::keyPressEvent(event);
}
Example #6
0
string initWriter()
{
	string vidmem = (string) 0xb8000;
    char oldmem[strlen(vidmem)];
    strcpy(oldmem, vidmem);

	paintScreen(screen_color);

	drawFrame(header_background, 0, 0, 80, 4);
	printAt("Q OS Text Editor\r\n", header_foreground, 1, 1);
	printAt("Simple Text Editor built for Q OS by Raph Hennessy & Plankp T",desc_foreground,1,2);

	drawBorder(screen_background, 0, 4, 80, sh - 1);

	cursorY = 5;
	cursorX = 1;
	updateCursor();

    bool inCmdMode = true;
    uint16 curX = 1, curY = 5;
    uint32 index = 0;
    strbuilder_t data = strbuilder_init();
    int k;
    while(true)
    {
        cursorX = curX % sw;
        cursorY = curY;
        updateCursor();

        cursorBoundsCheck(&curX, &curY, &index);
        printStatus(curX, curY, inCmdMode);

        if(inCmdMode)
        {
            k = waitUntilKey(7, 0x10 /*Q*/, 0x17 /*I*/, 0x18 /*O*/, 0x3A /*<CAPS>*/, 0x23 /*H*/, 0x26 /*L*/, 0x2D /*X*/);
            switch(k)
            {
            case 0x10:
                goto end;
            case 0x17:
                inCmdMode = false;
                break;
            case 0x18:
                appendln(&data, &curX, &curY, &index);
                inCmdMode = false;
                break;
            case 0x23:
                moveCursorLeft(&curX, &curY, &index);
                break;
            case 0x26:
                moveCursorRight(&curX, &curY, &index);
                break;
            case 0x2D:
                deleteCharAt(&curX, &curY, &index, &data);
                break;
            }
        } else {
            k = getKeycode() / KC_MAGIC_VAL;
            char charInput = ' ';
            switch(k)
            {
            case 0x01:
                inCmdMode = true;
                break;
            case 0x1C:
				cursorBoundsCheck(&curX, &curY, &index);
                appendln(&data, &curX, &curY, &index);
                break;
            case 0x48:
                curY--;
                curX = 1;
				cursorBoundsCheck(&curX, &curY, &index);
                break;
            case 0x4B:
                moveCursorLeft(&curX, &curY, &index);
                break;
            case 0x4D:
                moveCursorRight(&curX, &curY, &index);
                break;
            case 0x50:
                curY++;
                curX = 1;
                cursorBoundsCheck(&curX, &curY, &index);
                break;
            case 0x0E:
                deleteCharAt(&curX, &curY, &index, &data);
                break;
            default:
                if(k < 59 && k > 0)
                {
                    charInput = retCorrespChar(kbShiftChars[k], kbLowerChars[k]);
                    if(charInput == 0)
                    {
                        break;
                    }
                    insertCharAt(&curX, &curY, &index, &data, charInput);
                }
                break;
            }
        }
    }
end: // Sorry for the mom spaghetti code
    // Must be last line (before any prints)
	strcpy(vidmem, oldmem);
    string msg = strbuilder_tostr(data);
    if(msg == NULL)
    {
        msg = "";
    }
    strbuilder_destroy(&data);
    cursorX = 1;
	cursorY = 5;
    print(msg, black);
    return msg;
}
Example #7
0
bool appl::TextViewer::onEventEntry(const ewol::event::Entry& _event) {
	if (m_buffer == nullptr) {
		return false;
	}
	// First call plugin
	if (m_pluginManager->onEventEntry(*this, _event) == true) {
		markToRedraw();
		return true;
	}
	// just forward event  == > manage directly in the buffer
	if (_event.getType() == gale::key::keyboard::character) {
		//APPL_DEBUG("KB EVENT : \"" << UTF8_data << "\" size=" << strlen(UTF8_data) << "type=" << (int32_t)typeEvent);
		if (_event.getStatus() != gale::key::status::down) {
			return false;
		}
		char32_t localValue = _event.getChar();
		if (localValue == u32char::Return) {
			if (true == _event.getSpecialKey().getShift()) {
				localValue = u32char::CarrierReturn;
			}
		} else if (localValue == u32char::Suppress ) {
			//APPL_INFO("keyEvent : <suppr> pos=" << m_cursorPos);
			if (m_buffer->hasTextSelected()) {
				remove();
			} else {
				appl::Buffer::Iterator pos = m_buffer->cursor();
				appl::Buffer::Iterator posEnd = pos;
				++posEnd;
				replace("", pos, posEnd);
			}
			return true;
		} else if (localValue == u32char::Delete) {
			//APPL_INFO("keyEvent : <del> pos=" << m_cursorPos);
			if (m_buffer->hasTextSelected()) {
				remove();
			} else {
				appl::Buffer::Iterator pos = m_buffer->cursor();
				appl::Buffer::Iterator posEnd = pos;
				--pos;
				replace("", pos, posEnd);
			}
			return true;
		}
		m_buffer->setSelectMode(false);
		// normal adding char ...
		char output[5];
		output[0] = '0';
		u32char::convertUtf8(localValue, output);
		if (    m_buffer->hasTextSelected() == false
		     && _event.getSpecialKey().getInsert() == true) {
			appl::Buffer::Iterator pos = m_buffer->cursor();
			appl::Buffer::Iterator posEnd = pos;
			++posEnd;
			replace(output, pos, posEnd);
			//TODO : choisce UTF  ... replace(localValue, pos, posEnd);
		} else {
			std::string myString = output;
			write(myString);
		}
		return true;
	}
	// move events ...
	if (_event.getStatus() == gale::key::status::down) {
		// selection when shift is set:
		m_buffer->setSelectMode(_event.getSpecialKey().getShift());
		// check selection event ...
		switch(_event.getType()) {
			case gale::key::keyboard::insert:
				m_insertMode = m_insertMode==true?false:true;
				markToRedraw();
				break;
			case gale::key::keyboard::left:
				//APPL_INFO("keyEvent : <LEFT>");
				moveCursorLeft();
				break;
			case gale::key::keyboard::right:
				//APPL_INFO("keyEvent : <RIGHT>");
				moveCursorRight();
				break;
			case gale::key::keyboard::up:
				//APPL_INFO("keyEvent : <UP>");
				moveCursorUp(1);
				break;
			case gale::key::keyboard::down:
				//APPL_INFO("keyEvent : <DOWN>");
				moveCursorDown(1);
				break;
			case gale::key::keyboard::pageUp:
				//APPL_INFO("keyEvent : <PAGE-UP>");
				moveCursorUp(15); // TODO : Set the real number of line ...
				break;
			case gale::key::keyboard::pageDown:
				//APPL_INFO("keyEvent : <PAGE-DOWN>");
				moveCursorDown(15); // TODO : Set the real number of line ...
				break;
			case gale::key::keyboard::start:
				//APPL_INFO("keyEvent : <Start of line>");
				moveCursorLeft(moveEnd);
				break;
			case gale::key::keyboard::end:
				//APPL_INFO("keyEvent : <End of line>");
				moveCursorRight(moveEnd);
				break;
			default:
				break;
		}
		return true;
	}
	return false;
}