Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

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


Ignore:
Timestamp:
May 19, 2006, 11:38:34 PM (19 years ago)
Author:
bensch
Message:

Using MultiLine-Text in the Shell. This is much faster, and Nicer :)

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

Legend:

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

    r7426 r7737  
    2121#include "shell_input.h"
    2222
    23 
    24 #include "text.h"
     23#include "multi_line_text.h"
     24
    2525#include "graphics_engine.h"
    2626#include "material.h"
    2727#include "event_handler.h"
    28 #include "debug.h"
    29 #include "class_list.h"
    30 
    31 #include "key_names.h"
    32 #include <stdarg.h>
    33 #include <stdio.h>
    3428
    3529namespace OrxShell
     
    137131    std::list<std::string>::const_iterator textLine = --ShellBuffer::getInstance()->getBuffer().end();
    138132    bool top = false;
    139     for (std::list<Text*>::iterator text = this->bufferText.begin(); text != this->bufferText.end(); ++text)
     133    for (std::list<MultiLineText*>::iterator text = this->bufferText.begin(); text != this->bufferText.end(); ++text)
    140134    {
    141135      (*text)->setVisibility(true);
     
    164158    this->setRelCoorSoft2D(0, -(int)this->shellHeight, 5);
    165159
    166     for (std::list<Text*>::iterator text = this->bufferText.begin(); text != this->bufferText.end(); ++text)
     160    for (std::list<MultiLineText*>::iterator text = this->bufferText.begin(); text != this->bufferText.end(); ++text)
    167161      (*text)->setVisibility(false);
    168162    this->bufferOffset = 0;
     
    257251     * output is routed from Some other Thread or by Changing any Values.
    258252     */
    259     std::list<Text*> bufferTextCopy = this->bufferText;
    260     for (std::list<Text*>::iterator text = bufferTextCopy.begin(); text != bufferTextCopy.end(); ++text, ++i)
     253    std::list<MultiLineText*> bufferTextCopy = this->bufferText;
     254    for (std::list<MultiLineText*>::iterator text = bufferTextCopy.begin(); text != bufferTextCopy.end(); ++text, ++i)
    261255    {
    262256      this->resetText(*text, i);
     
    296290      for (unsigned int i = oldSize; i <= bufferDisplaySize; i++)
    297291      {
    298         this->bufferText.push_back(new Text);
     292        this->bufferText.push_back(new MultiLineText);
     293        this->bufferText.back()->setLineWidth(this->getSizeX2D() * GraphicsEngine::getInstance()->getResolutionX());
     294        this->bufferText.back()->setLineSpacing(0);
    299295      }
    300296    }
     
    308304  void Shell::flush()
    309305  {
    310     for (std::list<Text*>::iterator text = this->bufferText.begin(); text != this->bufferText.end(); ++text)
     306    for (std::list<MultiLineText*>::iterator text = this->bufferText.begin(); text != this->bufferText.end(); ++text)
    311307    {
    312308      (*text)->setText("");  // remove all chars from the BufferTexts.
     
    322318  void Shell::printToDisplayBuffer(const std::string& text)
    323319  {
     320    // Remove Last Entry and prepend it to the front.
    324321    this->bufferText.push_front(this->bufferText.back());
    325322    this->bufferText.pop_back();
    326323
    327 
    328     unsigned int i = 0;
    329     for (std::list<Text*>::iterator textIt = ++this->bufferText.begin(); textIt != this->bufferText.end(); ++textIt, i++)
    330     {
    331       (*textIt)->setRelCoorSoft2D(this->calculateLinePosition(i+1), 5);
    332     }
    333 
    334     this->bufferText.front()->setRelCoor2D(this->calculateLinePosition(0)- Vector2D(-1000,0));
    335     this->bufferText.front()->setRelCoorSoft2D(this->calculateLinePosition(0),10);
     324    // Set the new Text.
     325    this->bufferText.front()->setText(text);
     326
     327    // The LineCount will be started here.
     328    int linePos = -1;
     329
     330    // The First Line gets a special Animation
     331    this->bufferText.front()->setRelCoor2D(this->calculateLinePosition(linePos)- Vector2D(-1000,0));
     332
     333    // Move all lines one Entry up.
     334    for (std::list<MultiLineText*>::iterator textIt = this->bufferText.begin(); textIt != this->bufferText.end(); ++textIt)
     335    {
     336      linePos += (*textIt)->getLineCount();
     337      (*textIt)->setRelCoorSoft2D(this->calculateLinePosition(linePos), 8);
     338    }
     339
    336340
    337341    /*  FANCY EFFECTS :)
     
    344348    */
    345349
    346     this->bufferText.front()->setText(text);
    347350  }
    348351
     
    389392    {
    390393      /// FIXME
    391       PRINTF(1)("Should not heappen\n");
     394      PRINTF(1)("Should not happen\n");
    392395      it--;
    393396    }
    394     for (std::list<Text*>::iterator textIt = this->bufferText.begin(); textIt != this->bufferText.end(); ++textIt)
     397    for (std::list<MultiLineText*>::iterator textIt = this->bufferText.begin(); textIt != this->bufferText.end(); ++textIt)
    395398    {
    396399      (*textIt)->setText((*it));
     
    398401      {
    399402        /// FIXME
    400         PRINTF(1)("Should not heappen\n");
     403        PRINTF(1)("Should not happen\n");
    401404        break;
    402405      }
     
    478481  Vector2D Shell::calculateLinePosition(unsigned int lineNumber)
    479482  {
    480     return Vector2D(5, (this->textSize + this->lineSpacing)*(this->bufferDisplaySize - lineNumber - 2) + this->textSize);
     483    Vector2D val(5, (int)(this->textSize + this->lineSpacing)*(int)((int)this->bufferDisplaySize - (int)lineNumber - (int)2) + (int)this->textSize);
     484     val.debug();
     485     return val;
    481486  }
    482487
  • trunk/src/lib/shell/shell.h

    r7426 r7737  
    2020
    2121// FORWARD DECLARATION
    22 class Text;
     22class MultiLineText;
    2323class ShellInput;
    2424class Material;
     
    104104    // BUFFER
    105105    unsigned int                bufferDisplaySize;      //!< The Size of the Display-buffer, in lines (not in characters).
    106     std::list<Text*>            bufferText;             //!< A list of stored bufferTexts for the display of the buffer.
     106    std::list<MultiLineText*>   bufferText;             //!< A list of stored bufferTexts for the display of the buffer.
    107107    int                         bufferOffset;           //!< how many lines from the bottom up we display the Buffer.
    108108    std::list<std::string>::const_iterator  bufferIterator;         //!< used to move through and print the Buffer
  • trunk/src/lib/shell/shell_buffer.cc

    r7729 r7737  
    1717
    1818#include "shell_buffer.h"
     19
     20#include <stdarg.h>
     21
    1922#include "debug.h"
    2023#include "shell.h"
     24#include "lib/util/threading.h"
    2125
    2226namespace OrxShell
     
    3943
    4044  ShellBuffer* ShellBuffer::singletonRef = NULL;
    41   SDL_mutex* ShellBuffer::bufferMutex = NULL;
     45  std::list<std::string> ShellBuffer::buffer;
    4246
    4347  /**
     
    4852    if (this->shell != NULL)
    4953      delete this->shell;
    50 
    51     this->flush();
    52 
    53     if (ShellBuffer::bufferMutex != NULL)
    54       SDL_DestroyMutex(ShellBuffer::bufferMutex);
    55     ShellBuffer::bufferMutex = NULL;
    5654
    5755    ShellBuffer::singletonRef = NULL;
     
    9997    va_start(arguments, line);
    10098
    101     if (ShellBuffer::bufferMutex == NULL)
    102       ShellBuffer::bufferMutex = SDL_CreateMutex();
     99    static OrxThread::Mutex ShellBuffer__bufferMutex;
    103100
    104     SDL_mutexP(ShellBuffer::bufferMutex);
     101    OrxThread::MutexLock bufferLock(&ShellBuffer__bufferMutex);
    105102#if DEBUG_LEVEL < 3
    106103    if (ShellBuffer::singletonRef == NULL)
     
    113110#endif
    114111      ShellBuffer::singletonRef->addBufferLine(line, arguments);
    115     SDL_mutexV(ShellBuffer::bufferMutex);
    116112    return true;
    117113  }
  • trunk/src/lib/shell/shell_buffer.h

    r7661 r7737  
    88#define _SHELL_BUFFER_H
    99
    10 #include <stdarg.h>
    1110#include <list>
    12 #include "lib/util/threading.h"
    1311
    1412#define      SHELL_BUFFER_SIZE       16384         //!< The Size of the input-buffers (should be large enough to carry any kind of input)
     
    5048
    5149  private:
    52     static ShellBuffer*      singletonRef;                       //!< The singleton-reference to the only memeber of this class.
    53     unsigned int             bufferSize;                         //!< The Size of the buffer
    54     std::list<std::string>   buffer;                             //!< A list of stored char-arrays(strings) to store the history
     50    static ShellBuffer*           singletonRef;                       //!< The singleton-reference to the only memeber of this class.
     51    unsigned int                  bufferSize;                         //!< The Size of the buffer
    5552
    56     Shell*                   shell;                              //!< the Registered Shell.
    57     char                     bufferArray[SHELL_BUFFER_SIZE];     //!< a BUFFER for fast writing
    58     char                     keepBufferArray[SHELL_BUFFER_SIZE]; //!< a BUFFER to have multi-non-newLine commands be copied into the shell.
    59     bool                     keepBuffer;                         //!< if the keepbuffer contains unfinished lines.
     53    Shell*                        shell;                              //!< the Registered Shell.
     54    char                          bufferArray[SHELL_BUFFER_SIZE];     //!< a BUFFER for fast writing
     55    char                          keepBufferArray[SHELL_BUFFER_SIZE]; //!< a BUFFER to have multi-non-newLine commands be copied into the shell.
     56    bool                          keepBuffer;                         //!< if the keepbuffer contains unfinished lines.
    6057
    61     unsigned long            lineCount;                          //!< how many Lines have been written out so far.
     58    unsigned long                 lineCount;                          //!< how many Lines have been written out so far.
    6259
    63     static SDL_mutex*        bufferMutex;                        //!< Only one thread may write into the ShellBuffer at a time.
     60    static std::list<std::string> buffer;                             //!< A list of stored char-arrays(strings) to store the history
    6461  };
    6562
Note: See TracChangeset for help on using the changeset viewer.