26 #include <boost/bind.hpp>
32 #include "util/time/timeevent.h"
33 #include "util/time/timemanager.h"
35 #include "commandline.h"
43 m_blinkTimer.setInterval(500);
47 m_suppressBlinkTimer.setInterval(2000);
56 m_caretVisible = !m_caretVisible;
60 m_suppressBlinkTimer.start();
62 m_caretVisible =
true;
66 m_suppressBlinkTimer.stop();
70 void CommandLine::keyPressed(gcn::KeyEvent &keyEvent) {
71 gcn::Key key = keyEvent.getKey();
72 int32_t keyType = key.getValue();
74 if (keyType == Key::LEFT && mCaretPosition > 0)
78 else if (keyType == Key::RIGHT && mCaretPosition < mText.size())
82 else if (keyType == Key::DOWN && !m_history.empty())
84 if( m_history_position < m_history.size() ) {
86 if( ++m_history_position == m_history.size() ) {
89 setText( m_history[m_history_position] );
93 else if (keyType == Key::UP && !m_history.empty())
95 if( m_history_position > 0 ) {
96 if( m_history_position == m_history.size() ) {
100 setText( m_history[m_history_position] );
103 else if (keyType == Key::DELETE && mCaretPosition < mText.size())
107 else if (keyType == Key::BACKSPACE && mCaretPosition > 0)
111 else if (keyType == Key::ENTER)
117 m_history.push_back( mText );
118 m_history_position = m_history.size();
122 else if (keyType == Key::HOME)
126 else if (keyType == Key::END)
128 mCaretPosition = mText.size();
130 else if (key.isCharacter())
138 void CommandLine::drawCaret(gcn::Graphics * graphics, int32_t x) {
139 if( !m_caretVisible )
142 graphics->setColor(getForegroundColor());
143 graphics->drawLine(x, getHeight() - 2, x, 1);
144 graphics->drawLine(x+1, getHeight() - 2, x+1, 1);