add fast navigation

This commit is contained in:
chatlanin 2023-05-09 10:49:21 +03:00
parent b9cb5315dc
commit 740cb023a8
2 changed files with 35 additions and 11 deletions

View File

@ -59,9 +59,8 @@ namespace rrr::layers::gui
ImGui::TextUnformatted(">"); ImGui::TextUnformatted(">");
ImGui::SameLine(22.f); ImGui::SameLine(22.f);
// HERE
// нужно использовать std::distance current_position = std::distance(it, data->begin());
current_position = it - data->begin();
} }
else else
{ {
@ -200,28 +199,28 @@ namespace rrr::layers::gui
if (shift) if (shift)
{ {
// удаление // удаление
if (shift && key.get_keycode() == try_engine::key::D) if (key.get_keycode() == try_engine::key::D)
{ {
em->execute(types::event_type::SHOW_DELETE_ONE_FILE_DIALOG, selected_file); em->execute(types::event_type::SHOW_DELETE_ONE_FILE_DIALOG, selected_file);
freeze = true; freeze = true;
} }
// создание файла/директории // создание файла/директории
if (shift && key.get_keycode() == try_engine::key::A) if (key.get_keycode() == try_engine::key::A)
{ {
em->execute(types::event_type::SHOW_CREATE_FILE_DIALOG, nullptr); em->execute(types::event_type::SHOW_CREATE_FILE_DIALOG, nullptr);
freeze = true; freeze = true;
} }
// переименование файла/директории // переименование файла/директории
if (shift && key.get_keycode() == try_engine::key::R) if (key.get_keycode() == try_engine::key::R)
{ {
em->execute(types::event_type::SHOW_RENAME_FILE_DIALOG, selected_file); em->execute(types::event_type::SHOW_RENAME_FILE_DIALOG, selected_file);
freeze = true; freeze = true;
} }
// перемещение в конец списка // перемещение в конец списка
if (shift && key.get_keycode() == try_engine::key::G) if (key.get_keycode() == try_engine::key::G)
{ {
cnt->increment_position(data->size()); cnt->increment_position(data->size());
selected_file = cnt->get_selected_file(TYPE_WIN::NAVIGATION); selected_file = cnt->get_selected_file(TYPE_WIN::NAVIGATION);
@ -231,12 +230,32 @@ namespace rrr::layers::gui
} }
// вставка из single_buffer // вставка из single_buffer
if (shift && key.get_keycode() == try_engine::key::P) if (key.get_keycode() == try_engine::key::P)
{ {
paste_from_copy(); paste_from_copy();
paste_from_cut(); paste_from_cut();
} }
// перемещение на несколько позиций вниз
if (key.get_keycode() == try_engine::key::J)
{
cnt->increment_position((data->size() - current_position) / 4);
selected_file = cnt->get_selected_file(TYPE_WIN::NAVIGATION);
em->execute(types::event_type::NAVIGATION_DOWN, nullptr);
set_delta(MOVE_DIRECTION::DOWN);
set_scroll();
}
// перемещение на несколько позиций вверх
if (key.get_keycode() == try_engine::key::K)
{
cnt->increment_position(current_position - current_position / 4);
selected_file = cnt->get_selected_file(TYPE_WIN::NAVIGATION);
em->execute(types::event_type::NAVIGATION_UP, nullptr);
set_delta(MOVE_DIRECTION::UP);
set_scroll();
}
return; return;
} }

View File

@ -16,9 +16,14 @@ namespace rrr
public: public:
rrr_impl(std::string app_name) : try_engine::application{ app_name } rrr_impl(std::string app_name) : try_engine::application{ app_name }
{ {
// HERE std::string pwd = hack::utils::unix_cmd("pwd");
// убрать это в релизе
cnt.set_pwd("/mnt/develop/projects/cpp/rrr/dir_for_tests"); // перемещаем все знаки перевода строки в конец строки
// т.к. там это есть и это вызывает ошибку
auto it = std::remove(pwd.begin(), pwd.end(), '\n');
pwd.erase(it, pwd.end());
cnt.set_pwd(std::filesystem::path(pwd));
cnt.fill(); cnt.fill();
}; };
~rrr_impl() = default; ~rrr_impl() = default;