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::SameLine(22.f);
// HERE
// нужно использовать std::distance
current_position = it - data->begin();
current_position = std::distance(it, data->begin());
}
else
{
@ -200,28 +199,28 @@ namespace rrr::layers::gui
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);
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);
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);
freeze = true;
}
// перемещение в конец списка
if (shift && key.get_keycode() == try_engine::key::G)
if (key.get_keycode() == try_engine::key::G)
{
cnt->increment_position(data->size());
selected_file = cnt->get_selected_file(TYPE_WIN::NAVIGATION);
@ -231,12 +230,32 @@ namespace rrr::layers::gui
}
// вставка из single_buffer
if (shift && key.get_keycode() == try_engine::key::P)
if (key.get_keycode() == try_engine::key::P)
{
paste_from_copy();
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;
}

View File

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