Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Ignore:
Timestamp:
Oct 30, 2009, 12:39:51 PM (15 years ago)
Author:
rgrieder
Message:

De-singletonised Shell so that both consoles have their own Shell instance. However they share the history.
Also modified IOConsole to hopefully work with status lines.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • code/branches/console/src/libraries/core/IOConsole.cc

    r5998 r6004  
    5252    const std::string promptString_g = "orxonox>";
    5353
    54 #if 1//def ORXONOX_PLATFORM_UNIX
     54#ifdef ORXONOX_PLATFORM_UNIX
    5555
    5656    termios* IOConsole::originalTerminalSettings_;
     
    6767
    6868    IOConsole::IOConsole()
    69         : shell_(Shell::getInstance())
    70         , buffer_(Shell::getInstance().getInputBuffer())
     69        : shell_(new Shell("IOConsole", false))
     70        , buffer_(shell_->getInputBuffer())
     71        , originalTerminalSettings_(new termios())
    7172        , bStatusPrinted_(false)
    7273    {
    73         this->originalTerminalSettings_ = new termios;
    7474        this->setTerminalMode();
    75         this->shell_.registerListener(this);
    76 
     75        this->shell_->registerListener(this);
    7776
    7877        // Manually set the widths of the individual status lines
    79         this->statusLineWidths_.push_back(20);
     78        this->statusLineWidths_.push_back(6);
     79        this->statusLineMaxWidth_ = 6;
    8080    }
    8181
     
    8686        resetTerminalMode();
    8787        delete this->originalTerminalSettings_;
     88        this->shell_->destroy();
    8889    }
    8990
     
    189190            this->buffer_->buttonPressed(KeyEvent(KeyCode::Escape, '\033', 0));
    190191
    191         // Print input line
     192        // Clear screen below the last output line by first moving the cursor to the beginning of the first status line
     193        std::cout << "\033[" << (this->bStatusPrinted_ ? this->statusLineWidths_.size() : 0) << "F\033[J";
     194        this->printStatusLines();
    192195        this->printInputLine();
    193196    }
     
    233236        // Set cursor to the beginning of the line and erase the line
    234237        std::cout << "\033[1G\033[K";
    235         // Print status line
    236         //std::cout << std::fixed << std::setprecision(2) << std::setw(5) << Game::getInstance().getAvgFPS() << " fps, " << std::setprecision(2) << std::setw(5) << Game::getInstance().getAvgTickTime() << " ms avg ticktime # ";
    237238        // Indicate a command prompt
    238239        std::cout << promptString_g;
     
    240241        std::cout << "\033[s";
    241242        // Print command line buffer
    242         std::cout << this->shell_.getInput();
     243        std::cout << this->shell_->getInput();
    243244        // Restore cursor position and move it to the right
    244245        std::cout << "\033[u";
     
    252253        if (!this->statusLineWidths_.empty())
    253254        {
    254             if (this->bStatusPrinted_)
    255             {
    256                 // Erase the status lines first (completely, including new lines!)
    257 
    258             }
    259255            // Check terminal size
    260             /*
    261256            int x, y;
    262             if (this->getTerminalSize(&x, &y) && (x < statusTextWidth_g || y < (2 + statusTextHeight_g)))
     257            if (this->getTerminalSize(&x, &y) && (x < (int)this->statusLineMaxWidth_ || y < (int)(this->minOutputLines_ + this->statusLineWidths_.size())))
    263258            {
    264259                this->bStatusPrinted_ = false;
    265260                return;
    266261            }
    267             */
     262            std::cout << "Status" << std::endl;
     263            std::cout.flush();
     264            this->bStatusPrinted_ = true;
    268265        }
    269266    }
     
    307304
    308305    IOConsole::IOConsole()
    309         : shell_(Shell::getInstance())
    310         , buffer_(Shell::getInstance().getInputBuffer())
     306        : shell_(new Shell("IOConsole", false))
     307        , buffer_(shell_->getInputBuffer())
    311308    {
    312309        this->setTerminalMode();
     
    329326    }
    330327
    331     void IOConsole::print(const std::string& text)
     328    void IOConsole::printLogText(const std::string& text)
    332329    {
    333330    }
     
    360357    {
    361358        // Save cursor position and move it to the beginning of the first output line
    362         std::cout << "\033[s\033[" << (1 + 0/*statusTextHeight_g*/) << "F";
     359        std::cout << "\033[s\033[" << (1 + this->statusLineWidths_.size()) << "F";
    363360        // Erase the line
    364361        std::cout << "\033[K";
    365362        // Reprint the last output line
    366         this->printLogText(*(this->shell_.getNewestLineIterator()));
     363        this->printLogText(*(this->shell_->getNewestLineIterator()));
    367364        // Restore cursor
    368365        std::cout << "\033[u";
     
    376373    void IOConsole::lineAdded()
    377374    {
    378         // Save cursor and move it to the beginning of the first status line
    379         std::cout << "\033[s\033[" << 0/*statusTextHeight_g*/ << "F";
    380         // Create a new line and move cursor to the beginning of it (one cell up)
    381         std::cout << std::endl << "\033[1F";
     375        // Move cursor to the beginning of the first status line and erase screen from there
     376        std::cout << "\033[" << this->statusLineWidths_.size() << "F\033[J";
    382377        // Print the new output line
    383         this->printLogText(*(this->shell_.getNewestLineIterator()));
    384         // Restore cursor (for horizontal position) and move it down again (just in case the lines were shifted)
    385         std::cout << "\033[u\033[" << (1 + 0/*statusTextHeight_g*/) << "B";
    386         std::cout.flush();
     378        this->printLogText(*(this->shell_->getNewestLineIterator()));
     379        std::cout << std::endl;
     380        this->printStatusLines();
     381        this->printInputLine();
    387382    }
    388383
     
    414409        std::cout << "\033[1G";
    415410        // Print command so the user knows what he has typed
    416         std::cout << promptString_g << this->shell_.getInput() << std::endl;
     411        std::cout << promptString_g << this->shell_->getInput() << std::endl;
    417412        this->printInputLine();
    418413    }
Note: See TracChangeset for help on using the changeset viewer.