fix set cursor position after back navigation
This commit is contained in:
parent
d82d6a63a3
commit
84fc7a1976
@ -74,6 +74,7 @@ namespace rrr
|
|||||||
|
|
||||||
void content::set_history_cursor_position()
|
void content::set_history_cursor_position()
|
||||||
{
|
{
|
||||||
|
history_cursor_position = 0;
|
||||||
tbb::parallel_for(tbb::blocked_range<int>(0, his.data.size()), [&](tbb::blocked_range<int> r)
|
tbb::parallel_for(tbb::blocked_range<int>(0, his.data.size()), [&](tbb::blocked_range<int> r)
|
||||||
{
|
{
|
||||||
for (int i = r.begin(); i < r.end(); ++i)
|
for (int i = r.begin(); i < r.end(); ++i)
|
||||||
@ -88,6 +89,7 @@ namespace rrr
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
auto pwd = nav.data.at(navigation_cursor_position).path;
|
auto pwd = nav.data.at(navigation_cursor_position).path;
|
||||||
|
preview_cursor_position = 0;
|
||||||
|
|
||||||
if (buffer::state.contains(pwd))
|
if (buffer::state.contains(pwd))
|
||||||
{
|
{
|
||||||
@ -115,9 +117,8 @@ namespace rrr
|
|||||||
|
|
||||||
void content::check_cursor_position()
|
void content::check_cursor_position()
|
||||||
{
|
{
|
||||||
if (navigation_cursor_position == (int)nav.data.size()) navigation_cursor_position = (int)nav.data.size() - 1;
|
if (navigation_cursor_position >= (int)nav.data.size()) navigation_cursor_position = (int)nav.data.size() - 1;
|
||||||
else if (navigation_cursor_position < 0) navigation_cursor_position = 0;
|
else if (navigation_cursor_position < 0) navigation_cursor_position = 0;
|
||||||
else if (navigation_cursor_position > (int)nav.data.size()) navigation_cursor_position = 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void content::navigation_right()
|
void content::navigation_right()
|
||||||
|
@ -178,6 +178,36 @@ namespace rrr::layers::gui
|
|||||||
if (key.get_keycode() == try_engine::key::LEFTSHIFT || key.get_keycode() == try_engine::key::RIGHTSHIFT)
|
if (key.get_keycode() == try_engine::key::LEFTSHIFT || key.get_keycode() == try_engine::key::RIGHTSHIFT)
|
||||||
shift = true;
|
shift = true;
|
||||||
|
|
||||||
|
if (shift)
|
||||||
|
{
|
||||||
|
// удаление
|
||||||
|
if (shift && 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)
|
||||||
|
{
|
||||||
|
em->execute(types::event_type::SHOW_CREATE_FILE_DIALOG, nullptr);
|
||||||
|
freeze = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// перемещение в конец списка
|
||||||
|
if (shift && key.get_keycode() == try_engine::key::G)
|
||||||
|
{
|
||||||
|
cnt->increment_position(data->size());
|
||||||
|
selected_file = cnt->get_selected_file(TYPE_WIN::NAVIGATION);
|
||||||
|
em->execute(types::event_type::NAVIGATION_DOWN, nullptr);
|
||||||
|
set_delta(MOVE_DIRECTION::DOWN);
|
||||||
|
set_scroll();
|
||||||
|
}
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
if (key.get_keycode() == try_engine::key::J)
|
if (key.get_keycode() == try_engine::key::J)
|
||||||
{
|
{
|
||||||
cnt->increment_position(STEP_DOWN);
|
cnt->increment_position(STEP_DOWN);
|
||||||
@ -212,18 +242,17 @@ namespace rrr::layers::gui
|
|||||||
set_scroll();
|
set_scroll();
|
||||||
}
|
}
|
||||||
|
|
||||||
// удаление
|
// двойное нажатие перемещение в начало списка
|
||||||
if (shift && key.get_keycode() == try_engine::key::D)
|
if (key.get_keycode() == try_engine::key::G)
|
||||||
{
|
{
|
||||||
em->execute(types::event_type::SHOW_DELETE_ONE_FILE_DIALOG, selected_file);
|
++g_coutn;
|
||||||
freeze = true;
|
if (g_coutn != 2) return;
|
||||||
}
|
cnt->increment_position(-data->size());
|
||||||
|
selected_file = cnt->get_selected_file(TYPE_WIN::NAVIGATION);
|
||||||
// создание файла/директории
|
em->execute(types::event_type::NAVIGATION_UP, nullptr);
|
||||||
if (shift && key.get_keycode() == try_engine::key::A)
|
set_delta(MOVE_DIRECTION::UP);
|
||||||
{
|
set_scroll();
|
||||||
em->execute(types::event_type::SHOW_CREATE_FILE_DIALOG, nullptr);
|
g_coutn = 0;
|
||||||
freeze = true;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -295,6 +324,7 @@ namespace rrr::layers::gui
|
|||||||
|
|
||||||
if (big_content)
|
if (big_content)
|
||||||
{
|
{
|
||||||
|
// как бы прокручиваем с начала списка
|
||||||
for (const auto& f : *data)
|
for (const auto& f : *data)
|
||||||
{
|
{
|
||||||
if (f.path != selected_file.path)
|
if (f.path != selected_file.path)
|
||||||
|
@ -42,7 +42,10 @@ namespace rrr::layers::gui
|
|||||||
const int STEP_UP = -1;
|
const int STEP_UP = -1;
|
||||||
const int STEP_DOWN = 1;
|
const int STEP_DOWN = 1;
|
||||||
file selected_file;
|
file selected_file;
|
||||||
|
|
||||||
|
// key options
|
||||||
bool shift = false;
|
bool shift = false;
|
||||||
|
int g_coutn = 0;
|
||||||
|
|
||||||
// все что нужно для установки курсора при длинных списках
|
// все что нужно для установки курсора при длинных списках
|
||||||
int current_position = 0; // позиция курсора относительно списка
|
int current_position = 0; // позиция курсора относительно списка
|
||||||
|
@ -52,6 +52,7 @@ namespace rrr::layers::gui
|
|||||||
TR_PUSH_FONT(SEMI_BOLD, 18);
|
TR_PUSH_FONT(SEMI_BOLD, 18);
|
||||||
ImGui::TextUnformatted(">");
|
ImGui::TextUnformatted(">");
|
||||||
ImGui::SameLine(22.f);
|
ImGui::SameLine(22.f);
|
||||||
|
current_position = it - data->begin();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -98,6 +99,9 @@ namespace rrr::layers::gui
|
|||||||
case types::event_type::NAVIGATION_LEFT:
|
case types::event_type::NAVIGATION_LEFT:
|
||||||
case types::event_type::NAVIGATION_RIGHT:
|
case types::event_type::NAVIGATION_RIGHT:
|
||||||
selected_file = cnt->get_selected_file(TYPE_WIN::PREVIEW);
|
selected_file = cnt->get_selected_file(TYPE_WIN::PREVIEW);
|
||||||
|
cursor_position = 0;
|
||||||
|
current_position = 0;
|
||||||
|
delta = 0;
|
||||||
set_scroll();
|
set_scroll();
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
Loading…
Reference in New Issue
Block a user