From d79c0223315beaf55fcd10d6891675c4d57b5e2b Mon Sep 17 00:00:00 2001 From: Stijn Buys Date: Tue, 21 Oct 2008 19:00:39 +0000 Subject: moved client console into libui --- src/client/console.cc | 491 -------------------------------------------------- 1 file changed, 491 deletions(-) delete mode 100644 src/client/console.cc (limited to 'src/client/console.cc') diff --git a/src/client/console.cc b/src/client/console.cc deleted file mode 100644 index f4f66c1..0000000 --- a/src/client/console.cc +++ /dev/null @@ -1,491 +0,0 @@ -/* - client/console.cc - This file is part of the Osirion project and is distributed under - the terms and conditions of the GNU General Public License version 2 -*/ - -#include -#include -#include - -#include "auxiliary/functions.h" -#include "audio/audio.h" -#include "client/chat.h" -#include "client/console.h" -#include "client/video.h" -#include "client/keyboard.h" -#include "core/core.h" -#include "filesystem/filesystem.h" -#include "render/gl.h" -#include "ui/paint.h" - -namespace client { - -const float DEFAULT_CONSOLE_HEIGHT = 0.7f; -const size_t DEFAULT_MAX_HISTO_LINES = 512; - -// the global console buffer object -ConsoleBuffer Console::con_buffer; - -/* -- ConsoleBuffer ------------------------------------------------ */ -ConsoleBuffer::ConsoleBuffer() : sys::ConsoleInterface() -{ - //con_print << "^BInitializing console..." << std::endl; - -} - -ConsoleBuffer::~ConsoleBuffer() -{ - //con_print << "^BShutting down console..." << std::endl; -} - -//--- Console ----------------------------------------------------- - -Console::Console(ui::Widget *parent) : ui::Window(parent) -{ - set_visible(false); - set_border(false); - set_background(true); - set_label("console"); - - history.clear(); - history.push_back(""); - history_pos = history.rbegin(); - - console_scrollpane = new ui::ScrollPane(this, con_buffer.log()); - console_scrollpane->set_border(false); - console_scrollpane->set_scroll(0); - - console_input = new ui::InputBox(this); - console_input->set_focus(); - console_input->set_border(false); - console_input->set_background(false); - console_input->set_prompt("^N>"); - - load_history(); -} - -Console::~Console() -{ - save_history(); - history.clear(); -} - -void Console::show() -{ - ui::Window::show(); - SDL_WM_GrabInput(SDL_GRAB_OFF); - SDL_ShowCursor(SDL_ENABLE); - - console_scrollpane->set_scroll(0); - - history_pos = history.rbegin(); - (*history_pos).clear(); - console_input->set_text((*history_pos)); - - audio::play("ui/console"); -} - -void Console::hide() -{ - ui::Window::hide(); - SDL_WM_GrabInput(SDL_GRAB_ON); - SDL_ShowCursor(SDL_DISABLE); - - audio::play("ui/console"); -} - -void Console::toggle() -{ - if (visible()) - hide(); - else - show(); -} - -bool Console::on_keypress(const int key, const unsigned int modifier) -{ - // number of lines to scroll - const size_t scroll_offset = 3; - - ui::Text::reverse_iterator upit; - - switch( key ) { - - case SDLK_ESCAPE: - if (visible()) { - hide(); - return true; - } else { - return false; - } - break; -/* - case SDLK_TAB: - core::CommandBuffer::complete( (*history_pos), input_pos); - return true; - break; -*/ - case SDLK_RETURN: - if (console_input->text().size()) { - // store input in history - while (history.size() >= DEFAULT_MAX_HISTO_LINES) { - history.pop_front(); - } - core::cmd() << console_input->text() << std::endl; - con_print << "^B>" << console_input->text() << std::endl; - (*history.rbegin()).assign(console_input->text()); - history.push_back(""); - history_pos = history.rbegin(); - console_input->set_text((*history_pos)); - } - return true; - break; - - case SDLK_UP: - upit = history_pos; - ++upit; - if (upit != history.rend()) { - history_pos = upit; - console_input->set_text((*history_pos)); - } - return true; - break; - case SDLK_DOWN: - if (history_pos != history.rbegin()) { - --history_pos; - console_input->set_text((*history_pos)); - } - return true; - break; - case SDLK_PAGEUP: - console_scrollpane->inc_scroll(scroll_offset); - return true; - break; - - case SDLK_PAGEDOWN: - console_scrollpane->dec_scroll(scroll_offset); - return true; - break; - } - - return false; -} - -void Console::draw() -{ - if (core::application()->connected()) { - set_size(parent()->size().width(), parent()->size().height() * DEFAULT_CONSOLE_HEIGHT); - } else { - set_size(parent()->size()); - } - - math::Vector2f s(size()); - s.x -= 8; - s.y -= 8; - - console_scrollpane->set_location(4, 4); - console_scrollpane->set_size(s.x, s.y - font()->height()); - - console_input->set_location(4, height() - font()->height() -4); - console_input->set_size(s.x, font()->height()); - - std::string version(core::name()); - version += ' '; - version.append(core::version()); - - render::gl::color(0.0f, 1.0f, 0.0f, 0.5f); - - s.assign(version.size() * font()->width(), font()->height()); - math::Vector2f l(global_location()); - l.x += width() - s.width() -4; - l.y += height() - s.height() -4; - ui::paint::text(l, s, font(), version); - -/* - render::Text::setfont(font()->name().c_str(), font()->width(), font()->height()); - render::gl::enable(GL_TEXTURE_2D); - - // draw version below the bottom of the console - std::string version(core::name()); - version += ' '; - version.append(core::version()); - render::gl::color(0.0f, 1.0f, 0.0f, 0.5f); - render::Text::draw(width()-font()->width()*(version.size()+1), height()-font()->height()-4, version); - - // draw the console log() - if (console_scroll > log().size()) - console_scroll = log().size(); - - int height = (size_t) (this->height() / font()->height()) -1; - int width = (size_t) ((this->width()-8) / font()->width()); - int bottom = (int) log().size() - console_scroll; - int current_line = 0; - - ui::Text lines; - for (ui::Text::iterator it = log().begin(); it != log().end() && current_line < bottom; it++) { - if (current_line >= bottom - height) { - std::string linedata(*it); - linedata += '\n'; - - std::string word; - size_t word_length = 0; - - std::string line; - size_t line_length = 0; - - const char *c = linedata.c_str(); - char pen = 'N'; - char wordpen = 'N'; - - while (*c) { - - // color code - if (aux::is_color_code(c)) { - c++; - pen = *c; - word += '^'; - word += pen; - } - - // new word, wrap if necessary - else if ((*c == '\n' ) || ( *c == ' ')) { - - if (line_length + word_length > (size_t) width) { - if (line.size()) { - lines.push_back(line); - line.clear(); - line += '^'; - line += wordpen; - line_length = 0; - } - } - - line.append(word); - line_length += word_length; - - word.clear(); - word_length = 0; - wordpen = pen; - - // new line - if (*c == '\n' ) { - lines.push_back(line); - line.clear(); - line_length = 0; - // new word - } else if (*c == ' ' ) { - line += ' '; - line_length++; - } - } - - // new character - else { - word += *c; - word_length++; - - if (word_length == (size_t) width) { - if (line.size()) { - lines.push_back(line); - line.clear(); - line += '^'; - line += wordpen; - line_length = 0; - } - - line.append(word); - line_length = word_length; - - word.clear(); - word_length = 0; - wordpen = pen; - } - } - - c++; - } - - } - current_line++; - } - - float y = this->height()-2*font()->height()-4; - render::Text::setcolor('N'); - for (ui::Text::reverse_iterator rit = lines.rbegin(); (y >= 4) && (rit != lines.rend()); ++rit) { - render::Text::draw(4, y, (*rit)); - y -= font()->height(); - } - - render::gl::disable(GL_TEXTURE_2D); -*/ -} - -void Console::save_history() -{ - if (history.size() <= 1) - return; - - std::string filename(filesystem::writedir()); - filename.append("history.txt"); - std::ofstream ofs(filename.c_str()); - - if (!ofs.is_open()) { - con_warn << "Could not write " << filename << std::endl; - return; - } - ui::Text::iterator it; - size_t l = 1; - for (it = history.begin(); it != history.end(); it++) { - if (l < history.size()) - ofs << (*it) << std::endl; - l++; - } - - ofs.close(); -} - -void Console::load_history() -{ - std::string filename(filesystem::writedir()); - filename.append("history.txt"); - std::ifstream ifs(filename.c_str(), std::ifstream::in); - - if (!ifs.is_open()) { - con_warn << "Could not read " << filename << std::endl; - return; - } - - history.clear(); - char line[MAXCMDSIZE]; - while (ifs.getline(line, MAXCMDSIZE-1)) { - history.push_back(line); - } - - ifs.close(); - - history.push_back(""); - history_pos = history.rbegin(); -} - - -/* -void Console::draw_notify() -{ - // draw notifications - size_t width = (size_t) ((width()-8) / font()->width()); - size_t n = notify_pos % MAXNOTIFYLINES; - float h = height()/2; - for (size_t l = 0; l < MAXNOTIFYLINES; l++) { - if (notify_text[n].size() > 2 && notify_time[n] + 5 > core::application()->time()) { - std::string linedata(notify_text[n]); - linedata += '\n'; - - std::string word; - size_t word_length = 0; - - std::string line; - size_t line_length = 0; - - const char *c = linedata.c_str(); - char pen = 'N'; - char wordpen = 'N'; - render::Text::setcolor('N'); - - while (*c) { - - // color code - if (aux::is_color_code(c)) { - c++; - pen = *c; - word += '^'; - word += pen; - } - - // new word, wrap if necessary - else if ((*c == '\n' ) || ( *c == ' ')) { - - if (line_length + word_length > width) { - if (line.size()) { - render::Text::draw(4, h, line); - h += font()->width(); - line.clear(); - line += '^'; - line += wordpen; - line_length = 0; - } - } - - line.append(word); - line_length += word_length; - - word.clear(); - word_length = 0; - wordpen = pen; - - // new line - if (*c == '\n' ) { - render::Text::draw(4, h, line); - h += font()->width(); - line.clear(); - line_length = 0; - // new word - } else if (*c == ' ' ) { - line += ' '; - line_length++; - } - } - - // new character - else { - word += *c; - word_length++; - - if (word_length == width) { - if (line.size()) { - render::Text::draw(4, h, line); - h += font()->width(); - line.clear(); - line += '^'; - line += wordpen; - line_length = 0; - } - - line.append(word); - line_length = word_length; - - word.clear(); - word_length = 0; - wordpen = pen; - } - } - - c++; - } - - } - n = (n+1) % MAXNOTIFYLINES; - } -} - - -void Console::clear_notify() -{ - for (size_t i=0; i < MAXNOTIFYLINES; i++) { - notify_text[i].clear(); - notify_time[i] = 0; - } - notify_pos = 0; -} - -void Console::notify(std::string const & message) -{ - // save notification - notify_text[notify_pos] = message; - notify_time[notify_pos] = core::application()->time(); - notify_pos = (notify_pos+1) % MAXNOTIFYLINES; -} -*/ - -} // namespace client - -- cgit v1.2.3