Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

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


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

Location:
trunk/src/lib/shell
Files:
4 edited

Legend:

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

    r5179 r5180  
    5858  // INPUT LINE
    5959  this->shellInput = new ShellInput;
    60   this->delayed = 0;
    61   this->shellInput->setRepeatDelay(.3, .05);
    6260  //this->commandList = new tList<ShellCommand>;
    6361
     
    6563  this->completionList = NULL;
    6664
    67   // EVENT-Handler subscription of '`' to all States, and all other keyboard commands to ES_SEHLL
    68   EventHandler* evh = EventHandler::getInstance();
    69   evh->subscribe(this, ES_ALL, SDLK_BACKQUOTE);
    70   for (int i = 1; i < SDLK_LAST; i++)
    71     evh->subscribe(this, ES_SHELL, i);
     65  // EVENT-Handler subscription of '`' to all States.
     66  EventHandler::getInstance()->subscribe(this, ES_ALL, SDLK_BACKQUOTE);
     67
    7268}
    7369
     
    8581
    8682  // delete the inputLine
     83  delete this->shellInput;
    8784
    8885  Shell::singletonRef = NULL;
     
    250247  if (event.bPressed)
    251248  {
    252     PRINTF(5)("Shell received command %s\n", SDLKToKeyname(event.type));
    253249    if (event.type == SDLK_BACKQUOTE)
    254250    {
     
    258254        this->deactivate();
    259255    }
    260     else if (event.type == SDLK_F1)
    261       this->help();
    262     else if (event.type == SDLK_F2)
    263       this->debug();
    264     else if (event.type == SDLK_TAB)
    265       ;//this->autoComplete();
    266     else if (event.type == SDLK_BACKSPACE)
    267     {
    268       this->delayed = this->repeatDelay;
    269       this->pressedKey = SDLK_BACKSPACE;
    270       this->shellInput->removeCharacters(1);
    271     }
    272     else if (event.type == SDLK_RETURN)
    273       this->shellInput->executeCommand();
    274     /*
    275     else if (event.type == SDLK_UP)
    276     {
    277 //      this->flushInputLine();
    278       tIterator<char>* iterator = this->commandList->getIterator();
    279       char* command = iterator->lastElement();
    280       while (command)
    281       {
    282         if (!strcmp (command, inputLine))
    283         {
    284           inputLine = iterator->prevElement();
    285           return;
    286         }
    287         command = iterator->prevElement();
    288       }
    289       inputLine = iterator->lastElement();
    290     }
    291     */
    292     else if (likely(event.type < 127))
    293     {
    294       Uint8 *keystate = SDL_GetKeyState(NULL);
    295       this->delayed = this->repeatDelay;
    296       if (unlikely( keystate[SDLK_LSHIFT] || keystate[SDLK_RSHIFT] ))
    297       {
    298         this->pressedKey = event.type-32;
    299         this->shellInput->addCharacter(event.type-32);
    300       }
    301       else
    302       {
    303         this->pressedKey = event.type;
    304         this->shellInput->addCharacter(event.type);
    305       }
    306     }
    307256  }
    308   else // if(!event.bPressed)
    309   {
    310     if (this->pressedKey == event.type || (this->pressedKey == event.type - 32))
    311     {
    312       this->pressedKey = SDLK_FIRST;
    313       this->delayed = 0.0;
    314     }
    315   }
    316 }
    317 
    318 /**
    319  * ticks the Shell for dt Seconds
    320  * @param dt the elapsed time since the last tick();
    321  */
    322 void Shell::tick(float dt)
    323 {
    324   if (this->delayed > 0.0)
    325     this->delayed -= dt;
    326   else if (this->pressedKey != SDLK_FIRST )
    327   {
    328     this->delayed = this->repeatRate;
    329     if (this->pressedKey == SDLK_BACKSPACE)
    330       this->shellInput->removeCharacters(1);
    331     else if (pressedKey < 127)
    332       this->shellInput->addCharacter(this->pressedKey);
    333   }
    334 }
     257}
     258
    335259/**
    336260 * displays the Shell
     
    365289}
    366290
    367 /**
    368  * prints out some nice help about the Shell
    369  */
    370 void Shell::help() const
    371 {
    372   PRINT(0)("Help for the most important Shell-commands\n");
    373   PRINT(0)("F1 - HELP; F2 - DEBUG; ` - open/close shell\n");
    374   PRINT(0)("input order:\n");
    375   PRINT(0)("ClassName::objectName function [parameter1, [parameter2 ...]]  or\n");
    376   PRINT(0)("Command [parameter]\n");
    377 }
    378 
    379 
    380291///////////////////////
    381292// HELPER FUNCTIONS  //
     
    401312  PRINT(3)("Debugging output to console (not this shell)\n");
    402313
    403   if (this->pressedKey != SDLK_FIRST)
    404     printf("%s::%f %f\n", SDLKToKeyname(this->pressedKey), this->delayed, this->repeatDelay);
     314//   if (this->pressedKey != SDLK_FIRST)
     315//     printf("%s::%f %f\n", SDLKToKeyname(this->pressedKey), this->delayed, this->repeatDelay);
    405316
    406317
  • trunk/src/lib/shell/shell.h

    r5179 r5180  
    5454    void clear();
    5555
    56 
    5756    // EventListener
    5857    virtual void process(const Event &event);
    5958
    6059    // Element2D-functions
    61     void tick(float dt);
    6260    virtual void draw() const;
    6361
    64     void help() const;
    6562    void debug() const;
    6663
     
    7976    static Shell*            singletonRef;           //!< The singleton-reference to the only memeber of this class.
    8077
    81     unsigned int             bufferDisplaySize;      //!< The Size of the Display-buffer, in lines (not in characters)
     78    // GENERAL
     79    bool                     bActive;                //!< if the shell is active;
     80    unsigned int             shellHeight;            //!< The hight of the Shell in Pixels
     81    unsigned int             lineSpacing;            //!< The Spacing between lines.
     82    unsigned int             textSize;               //!< The size of the text.
    8283
    8384    // HANDLING TEXT INPUT
    8485    ShellInput*              shellInput;
    85 
    86     float                    repeatRate;             //!< The Repeat-Delay.
    87     float                    repeatDelay;            //!< The delay of the first Character of a given Character.
    88     float                    delayed;                //!< how much of the delay is remaining.
    89     int                      pressedKey;             //!< the pressed key that will be repeated.
    90 
    91     tList<char>*             inputHistory;           //!< The history of given commands.
    92 
     86    // BUFFER
     87    unsigned int             bufferDisplaySize;      //!< The Size of the Display-buffer, in lines (not in characters)
    9388    Text**                   bufferText;             //!< A list of stored bufferTexts for the display of the buffer
    94     unsigned int             textSize;               //!< The size of the text.
    95     unsigned int             lineSpacing;            //!< The Spacing between lines.
    96     unsigned int             shellHeight;            //!< The hight of the Shell in Pixels
    97     bool                     bActive;                //!< if the shell is active;
    9889
    9990    // completion
  • 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}
  • trunk/src/lib/shell/shell_input.h

    r5179 r5180  
    88
    99#include "text_engine.h"
     10#include "event_listener.h"
    1011
    1112// FORWARD DECLARATION
     
    1415
    1516//! A class for ...
    16 class ShellInput : public Text {
     17class ShellInput : public Text,  public EventListener {
    1718
    1819 public:
     
    2829  void setRepeatDelay(float repeatDelay, float repeatRate);
    2930  bool executeCommand();
     31  void help() const;
    3032  const char* getInputString() const { return this->inputLine; };
    3133
     34
     35  virtual void tick(float dt);
     36  virtual void process(const Event &event);
    3237
    3338 private:
Note: See TracChangeset for help on using the changeset viewer.