keep track of the focused buffer pane

This commit is contained in:
Josh Holtrop 2017-01-18 21:22:39 -05:00
parent f2770d66fd
commit 9d150524fb
2 changed files with 39 additions and 37 deletions

View File

@ -121,6 +121,7 @@ bool Window::create(std::shared_ptr<Buffer> buffer)
glClearColor (0.0, 0.0, 0.0, 0.0); glClearColor (0.0, 0.0, 0.0, 0.0);
m_buffer_pane = std::make_shared<BufferPane>(this, buffer); m_buffer_pane = std::make_shared<BufferPane>(this, buffer);
m_focused_buffer_pane = m_buffer_pane;
m_buffer_pane->set_focused(true); m_buffer_pane->set_focused(true);
m_command_buffer = std::make_shared<Buffer>(); m_command_buffer = std::make_shared<Buffer>();
m_command_buffer_pane = std::make_shared<BufferPane>(this, m_command_buffer); m_command_buffer_pane = std::make_shared<BufferPane>(this, m_command_buffer);
@ -224,11 +225,11 @@ void Window::handle_event(SDL_Event & event)
case SDL_MOUSEWHEEL: case SDL_MOUSEWHEEL:
if (event.wheel.y > 0) if (event.wheel.y > 0)
{ {
m_buffer_pane->scroll_window_up(ScrollMode::WHEEL); m_focused_buffer_pane->scroll_window_up(ScrollMode::WHEEL);
} }
else else
{ {
m_buffer_pane->scroll_window_down(ScrollMode::WHEEL); m_focused_buffer_pane->scroll_window_down(ScrollMode::WHEEL);
} }
break; break;
} }
@ -244,39 +245,39 @@ void Window::handle_keyval(uint32_t keyval)
switch (keyval) switch (keyval)
{ {
case SDLK_HOME: case SDLK_HOME:
m_buffer_pane->cursor_move(CursorMovement::SOL); m_focused_buffer_pane->cursor_move(CursorMovement::SOL);
break; break;
case SDLK_END: case SDLK_END:
m_buffer_pane->cursor_move(CursorMovement::EOL); m_focused_buffer_pane->cursor_move(CursorMovement::EOL);
break; break;
case SDLK_RIGHT: case SDLK_RIGHT:
m_buffer_pane->cursor_move(CursorMovement::RIGHT); m_focused_buffer_pane->cursor_move(CursorMovement::RIGHT);
break; break;
case SDLK_LEFT: case SDLK_LEFT:
m_buffer_pane->cursor_move(CursorMovement::LEFT); m_focused_buffer_pane->cursor_move(CursorMovement::LEFT);
break; break;
case SDLK_DOWN: case SDLK_DOWN:
m_buffer_pane->cursor_move(CursorMovement::DOWN); m_focused_buffer_pane->cursor_move(CursorMovement::DOWN);
break; break;
case SDLK_UP: case SDLK_UP:
m_buffer_pane->cursor_move(CursorMovement::UP); m_focused_buffer_pane->cursor_move(CursorMovement::UP);
break; break;
case SDLK_PAGEUP: case SDLK_PAGEUP:
m_buffer_pane->scroll_window_up(ScrollMode::WHOLE_SCREEN); m_focused_buffer_pane->scroll_window_up(ScrollMode::WHOLE_SCREEN);
break; break;
case SDLK_PAGEDOWN: case SDLK_PAGEDOWN:
m_buffer_pane->scroll_window_down(ScrollMode::WHOLE_SCREEN); m_focused_buffer_pane->scroll_window_down(ScrollMode::WHOLE_SCREEN);
break; break;
default: default:
if (m_buffer_pane->insert_mode()) if (m_focused_buffer_pane->insert_mode())
{ {
if (keyval == '\033') if (keyval == '\033')
{ {
m_buffer_pane->exit_insert_mode(); m_focused_buffer_pane->exit_insert_mode();
} }
else if (keyval < 0xFFu) else if (keyval < 0xFFu)
{ {
m_buffer_pane->insert_code_point(keyval); m_focused_buffer_pane->insert_code_point(keyval);
} }
} }
else else
@ -284,76 +285,76 @@ void Window::handle_keyval(uint32_t keyval)
switch (keyval) switch (keyval)
{ {
case '0': case '0':
m_buffer_pane->cursor_move(CursorMovement::SOL); m_focused_buffer_pane->cursor_move(CursorMovement::SOL);
break; break;
case '$': case '$':
m_buffer_pane->cursor_move(CursorMovement::EOL); m_focused_buffer_pane->cursor_move(CursorMovement::EOL);
break; break;
case 'A': case 'A':
m_buffer_pane->enter_insert_mode(EnterInsertModeMode::END_OF_LINE); m_focused_buffer_pane->enter_insert_mode(EnterInsertModeMode::END_OF_LINE);
break; break;
case 'G': case 'G':
m_buffer_pane->cursor_move(CursorMovement::LAST_LINE); m_focused_buffer_pane->cursor_move(CursorMovement::LAST_LINE);
break; break;
case 'I': case 'I':
m_buffer_pane->enter_insert_mode(EnterInsertModeMode::START_OF_LINE); m_focused_buffer_pane->enter_insert_mode(EnterInsertModeMode::START_OF_LINE);
break; break;
case 'O': case 'O':
m_buffer_pane->enter_insert_mode(EnterInsertModeMode::NEW_LINE_BEFORE); m_focused_buffer_pane->enter_insert_mode(EnterInsertModeMode::NEW_LINE_BEFORE);
break; break;
case 'a': case 'a':
m_buffer_pane->enter_insert_mode(EnterInsertModeMode::END_OF_CHAR); m_focused_buffer_pane->enter_insert_mode(EnterInsertModeMode::END_OF_CHAR);
break; break;
case 'g': case 'g':
m_buffer_pane->cursor_move(CursorMovement::FIRST_LINE); m_focused_buffer_pane->cursor_move(CursorMovement::FIRST_LINE);
break; break;
case 'h': case 'h':
m_buffer_pane->cursor_move(CursorMovement::LEFT); m_focused_buffer_pane->cursor_move(CursorMovement::LEFT);
break; break;
case 'i': case 'i':
m_buffer_pane->enter_insert_mode(EnterInsertModeMode::START_OF_CHAR); m_focused_buffer_pane->enter_insert_mode(EnterInsertModeMode::START_OF_CHAR);
break; break;
case 'j': case 'j':
m_buffer_pane->cursor_move(CursorMovement::DOWN); m_focused_buffer_pane->cursor_move(CursorMovement::DOWN);
break; break;
case 'k': case 'k':
m_buffer_pane->cursor_move(CursorMovement::UP); m_focused_buffer_pane->cursor_move(CursorMovement::UP);
break; break;
case 'l': case 'l':
m_buffer_pane->cursor_move(CursorMovement::RIGHT); m_focused_buffer_pane->cursor_move(CursorMovement::RIGHT);
break; break;
case 'o': case 'o':
m_buffer_pane->enter_insert_mode(EnterInsertModeMode::NEW_LINE_AFTER); m_focused_buffer_pane->enter_insert_mode(EnterInsertModeMode::NEW_LINE_AFTER);
break; break;
case 'r': case 'r':
m_buffer_pane->redo(); m_focused_buffer_pane->redo();
break; break;
case 'u': case 'u':
m_buffer_pane->undo(); m_focused_buffer_pane->undo();
break; break;
case 'x': case 'x':
m_buffer_pane->kill_character_at_cursor(); m_focused_buffer_pane->kill_character_at_cursor();
break; break;
case Keymod::CTRL + 'b': case Keymod::CTRL + 'b':
m_buffer_pane->scroll_window_up(ScrollMode::WHOLE_SCREEN); m_focused_buffer_pane->scroll_window_up(ScrollMode::WHOLE_SCREEN);
break; break;
case Keymod::CTRL + 'd': case Keymod::CTRL + 'd':
m_buffer_pane->scroll_window_down(ScrollMode::HALF_SCREEN); m_focused_buffer_pane->scroll_window_down(ScrollMode::HALF_SCREEN);
break; break;
case Keymod::CTRL + 'e': case Keymod::CTRL + 'e':
m_buffer_pane->scroll_window_down(ScrollMode::ONE_LINE); m_focused_buffer_pane->scroll_window_down(ScrollMode::ONE_LINE);
break; break;
case Keymod::CTRL + 'f': case Keymod::CTRL + 'f':
m_buffer_pane->scroll_window_down(ScrollMode::WHOLE_SCREEN); m_focused_buffer_pane->scroll_window_down(ScrollMode::WHOLE_SCREEN);
break; break;
case Keymod::CTRL + 'u': case Keymod::CTRL + 'u':
m_buffer_pane->scroll_window_up(ScrollMode::HALF_SCREEN); m_focused_buffer_pane->scroll_window_up(ScrollMode::HALF_SCREEN);
break; break;
case Keymod::CTRL + 'w': case Keymod::CTRL + 'w':
m_buffer_pane->write_file(); m_focused_buffer_pane->write_file();
break; break;
case Keymod::CTRL + 'y': case Keymod::CTRL + 'y':
m_buffer_pane->scroll_window_up(ScrollMode::ONE_LINE); m_focused_buffer_pane->scroll_window_up(ScrollMode::ONE_LINE);
break; break;
case Keymod::CTRL + 'q': case Keymod::CTRL + 'q':
m_exit_requested = true; m_exit_requested = true;

View File

@ -85,6 +85,7 @@ protected:
std::shared_ptr<GL> m_gl; std::shared_ptr<GL> m_gl;
std::shared_ptr<BufferPane> m_buffer_pane; std::shared_ptr<BufferPane> m_buffer_pane;
std::shared_ptr<BufferPane> m_focused_buffer_pane;
std::shared_ptr<Buffer> m_command_buffer; std::shared_ptr<Buffer> m_command_buffer;
std::shared_ptr<BufferPane> m_command_buffer_pane; std::shared_ptr<BufferPane> m_command_buffer_pane;