Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Changeset 5180 in orxonox.OLD for trunk/src/lib/shell/shell_input.cc


Ignore:
Timestamp:
Sep 13, 2005, 11:45:51 PM (19 years ago)
Author:
bensch
Message:

orxonox/trunk: Shell Input is totally out of shell.cc/h

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/lib/shell/shell_input.cc

    r5179 r5180  
    1818#include "shell_input.h"
    1919
    20 #include "text_engine.h"
     20#include "event_handler.h"
    2121
    2222#include "shell_command.h"
     
    2525#include "compiler.h"
    2626#include "stdlibincl.h"
     27#include "key_names.h"
     28
    2729
    2830using namespace std;
     
    4042  this->inputLine[0] = '\0';
    4143  this->inputHistory = new tList<char>;
     44  this->delayed = 0;
     45  this->setRepeatDelay(.3, .05);
     46
     47  // subscribe all keyboard commands to ES_SEHLL
     48  EventHandler* evh = EventHandler::getInstance();
     49  for (int i = 1; i < SDLK_LAST; i++)
     50    evh->subscribe(this, ES_SHELL, i);
     51
    4252}
    4353
     
    144154}
    145155
     156
     157/**
     158 * prints out some nice help about the Shell
     159 */
     160void ShellInput::help() const
     161{
     162  PRINT(0)("Help for the most important Shell-commands\n");
     163  PRINT(0)("F1 - HELP; F2 - DEBUG; ` - open/close shell\n");
     164  PRINT(0)("input order:\n");
     165  PRINT(0)("ClassName::objectName function [parameter1, [parameter2 ...]]  or\n");
     166  PRINT(0)("Command [parameter]\n");
     167}
     168
     169void ShellInput::tick(float dt)
     170{
     171  if (this->delayed > 0.0)
     172    this->delayed -= dt;
     173  else if (this->pressedKey != SDLK_FIRST )
     174  {
     175    this->delayed = this->repeatRate;
     176    if (this->pressedKey == SDLK_BACKSPACE)
     177      this->removeCharacters(1);
     178    else if (pressedKey < 127)
     179      this->addCharacter(this->pressedKey);
     180  }
     181}
     182
     183/**
     184 * listens for some event
     185 * @param event the Event happened
     186 */
     187void ShellInput::process(const Event &event)
     188{
     189  if (event.bPressed)
     190  {
     191    PRINTF(5)("Shell received command %s\n", SDLKToKeyname(event.type));
     192    if (event.type == SDLK_F1)
     193      this->help();
     194    else if (event.type == SDLK_F2)
     195      this->debug();
     196    else if (event.type == SDLK_TAB)
     197      ;//this->autoComplete();
     198    else if (event.type == SDLK_BACKSPACE)
     199    {
     200      this->delayed = this->repeatDelay;
     201      this->pressedKey = SDLK_BACKSPACE;
     202      this->removeCharacters(1);
     203    }
     204    else if (event.type == SDLK_RETURN)
     205      this->executeCommand();
     206    /*
     207    else if (event.type == SDLK_UP)
     208    {
     209//      this->flushInputLine();
     210    tIterator<char>* iterator = this->commandList->getIterator();
     211    char* command = iterator->lastElement();
     212    while (command)
     213    {
     214    if (!strcmp (command, inputLine))
     215    {
     216    inputLine = iterator->prevElement();
     217    return;
     218  }
     219    command = iterator->prevElement();
     220  }
     221    inputLine = iterator->lastElement();
     222  }
     223    */
     224    else if (likely(event.type < 127))
     225    {
     226      Uint8 *keystate = SDL_GetKeyState(NULL);
     227      this->delayed = this->repeatDelay;
     228      if (unlikely( keystate[SDLK_LSHIFT] || keystate[SDLK_RSHIFT] ))
     229      {
     230        this->pressedKey = event.type-32;
     231        this->addCharacter(event.type-32);
     232      }
     233      else
     234      {
     235        this->pressedKey = event.type;
     236        this->addCharacter(event.type);
     237      }
     238    }
     239  }
     240  else // if(!event.bPressed)
     241  {
     242    if (this->pressedKey == event.type || (this->pressedKey == event.type - 32))
     243    {
     244      this->pressedKey = SDLK_FIRST;
     245      this->delayed = 0.0;
     246    }
     247  }
     248}
Note: See TracChangeset for help on using the changeset viewer.