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

View File

@ -85,6 +85,7 @@ protected:
std::shared_ptr<GL> m_gl;
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<BufferPane> m_command_buffer_pane;