add cut
This commit is contained in:
parent
d2816fb157
commit
73a3b29196
@ -34,7 +34,8 @@ namespace rrr
|
|||||||
using single_buffer_t = std::map<int, file>;
|
using single_buffer_t = std::map<int, file>;
|
||||||
using path_buffer_t = std::unordered_map<std::filesystem::path, file, opt_path_hash>;
|
using path_buffer_t = std::unordered_map<std::filesystem::path, file, opt_path_hash>;
|
||||||
|
|
||||||
single_buffer_t single_buffer; // для хранения отмеченный файлов. в моменте может бытьтолько один файл
|
single_buffer_t single_copy_buffer; // для хранения отмеченный файлов. в моменте может быть только один файл
|
||||||
|
single_buffer_t single_cut_buffer; // для хранения отмеченный файлов. в моменте может быть только один файл
|
||||||
path_buffer_t path_buffer; // для хранения истории пути пользователя
|
path_buffer_t path_buffer; // для хранения истории пути пользователя
|
||||||
|
|
||||||
static buffers& get_instance()
|
static buffers& get_instance()
|
||||||
|
@ -258,4 +258,36 @@ namespace rrr
|
|||||||
nav.fill(PWD);
|
nav.fill(PWD);
|
||||||
increment_position(-1);
|
increment_position(-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void content::cut(std::filesystem::path f)
|
||||||
|
{
|
||||||
|
std::filesystem::path target;
|
||||||
|
if (std::filesystem::exists(PWD / f.filename()))
|
||||||
|
{
|
||||||
|
target = f.filename().string() + "_" +
|
||||||
|
std::to_string(
|
||||||
|
std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::system_clock::now().time_since_epoch()).count()
|
||||||
|
);
|
||||||
|
target = f.parent_path() / std::filesystem::path(target);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
target = PWD / f.filename();
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string cmd = "mv ";
|
||||||
|
hack::utils::unix_cmd(cmd + f.string() + " " + target.string());
|
||||||
|
nav.fill(PWD);
|
||||||
|
|
||||||
|
tbb::parallel_for(tbb::blocked_range<int>(0, nav.data.size()), [&](tbb::blocked_range<int> r)
|
||||||
|
{
|
||||||
|
for (int i = r.begin(); i < r.end(); ++i)
|
||||||
|
if (nav.data.at(i).path == target)
|
||||||
|
{
|
||||||
|
navigation_cursor_position = i;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
check_cursor_position();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -34,6 +34,7 @@ namespace rrr
|
|||||||
void create_file(std::string);
|
void create_file(std::string);
|
||||||
void rename_file(std::filesystem::path, std::filesystem::path);
|
void rename_file(std::filesystem::path, std::filesystem::path);
|
||||||
void paste(std::filesystem::path);
|
void paste(std::filesystem::path);
|
||||||
|
void cut(std::filesystem::path);
|
||||||
void delete_file(file);
|
void delete_file(file);
|
||||||
|
|
||||||
file get_selected_file(TYPE_WIN);
|
file get_selected_file(TYPE_WIN);
|
||||||
|
@ -110,10 +110,14 @@ namespace rrr::layers::gui
|
|||||||
{
|
{
|
||||||
auto file_content = f.path.filename().string();
|
auto file_content = f.path.filename().string();
|
||||||
|
|
||||||
if (!buffers::get_instance().single_buffer.empty())
|
if (!buffers::get_instance().single_copy_buffer.empty())
|
||||||
if (f.path == buffers::get_instance().single_buffer[1].path)
|
if (f.path == buffers::get_instance().single_copy_buffer[1].path)
|
||||||
file_content = "* " + file_content;
|
file_content = "* " + file_content;
|
||||||
|
|
||||||
|
if (!buffers::get_instance().single_cut_buffer.empty())
|
||||||
|
if (f.path == buffers::get_instance().single_cut_buffer[1].path)
|
||||||
|
file_content = "** " + file_content;
|
||||||
|
|
||||||
if (f.is_link)
|
if (f.is_link)
|
||||||
file_content += " ->";
|
file_content += " ->";
|
||||||
|
|
||||||
@ -229,9 +233,8 @@ namespace rrr::layers::gui
|
|||||||
// вставка из single_buffer
|
// вставка из single_buffer
|
||||||
if (shift && key.get_keycode() == try_engine::key::P)
|
if (shift && key.get_keycode() == try_engine::key::P)
|
||||||
{
|
{
|
||||||
if (buffers::get_instance().single_buffer.empty()) return;
|
paste_from_copy();
|
||||||
cnt->paste(buffers::get_instance().single_buffer[1].path);
|
paste_from_cut();
|
||||||
buffers::get_instance().single_buffer.clear();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return;
|
return;
|
||||||
@ -285,20 +288,44 @@ namespace rrr::layers::gui
|
|||||||
}
|
}
|
||||||
|
|
||||||
// копирование/добавление в буфер одного файла вместо другого
|
// копирование/добавление в буфер одного файла вместо другого
|
||||||
|
// когда в буфере что-то есть и мы на томже файле жмем кнопку еще раз
|
||||||
|
// то происходит очищение буфера
|
||||||
if (key.get_keycode() == try_engine::key::C)
|
if (key.get_keycode() == try_engine::key::C)
|
||||||
{
|
{
|
||||||
if (buffers::get_instance().single_buffer.empty())
|
// проверяем а может это файл отмечен на вырезание
|
||||||
buffers::get_instance().single_buffer[1] = selected_file;
|
if (!buffers::get_instance().single_cut_buffer.empty())
|
||||||
|
buffers::get_instance().single_cut_buffer.clear();
|
||||||
|
|
||||||
|
if (buffers::get_instance().single_copy_buffer.empty())
|
||||||
|
buffers::get_instance().single_copy_buffer[1] = selected_file;
|
||||||
else
|
else
|
||||||
if (selected_file.path == buffers::get_instance().single_buffer[1].path)
|
if (selected_file.path == buffers::get_instance().single_copy_buffer[1].path)
|
||||||
buffers::get_instance().single_buffer.clear();
|
buffers::get_instance().single_copy_buffer.clear();
|
||||||
else
|
else
|
||||||
buffers::get_instance().single_buffer[1] = selected_file;
|
buffers::get_instance().single_copy_buffer[1] = selected_file;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (key.get_keycode() == try_engine::key::X)
|
||||||
|
{
|
||||||
|
// проверяем а может это файл отмечен на копирование
|
||||||
|
if (!buffers::get_instance().single_copy_buffer.empty())
|
||||||
|
buffers::get_instance().single_copy_buffer.clear();
|
||||||
|
|
||||||
|
if (buffers::get_instance().single_cut_buffer.empty())
|
||||||
|
buffers::get_instance().single_cut_buffer[1] = selected_file;
|
||||||
|
else
|
||||||
|
if (selected_file.path == buffers::get_instance().single_cut_buffer[1].path)
|
||||||
|
buffers::get_instance().single_cut_buffer.clear();
|
||||||
|
else
|
||||||
|
buffers::get_instance().single_cut_buffer[1] = selected_file;
|
||||||
}
|
}
|
||||||
|
|
||||||
// очистка
|
// очистка
|
||||||
if (key.get_keycode() == try_engine::key::ESCAPE)
|
if (key.get_keycode() == try_engine::key::ESCAPE)
|
||||||
buffers::get_instance().single_buffer.clear();
|
{
|
||||||
|
buffers::get_instance().single_copy_buffer.clear();
|
||||||
|
buffers::get_instance().single_cut_buffer.clear();
|
||||||
|
}
|
||||||
|
|
||||||
// помощь
|
// помощь
|
||||||
if (key.get_keycode() == try_engine::key::F1)
|
if (key.get_keycode() == try_engine::key::F1)
|
||||||
@ -306,11 +333,6 @@ namespace rrr::layers::gui
|
|||||||
em->execute(types::event_type::SHOW_HELP_DIALOG, nullptr);
|
em->execute(types::event_type::SHOW_HELP_DIALOG, nullptr);
|
||||||
freeze = true;
|
freeze = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// HERE начинаем тут
|
|
||||||
// сделали помощь и начинаем делать множественное копирование и вырезание
|
|
||||||
// буфер для этого делаем в папке buffers
|
|
||||||
// там уже есть организация такого типа
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void navigation::released(system_event& e)
|
void navigation::released(system_event& e)
|
||||||
@ -396,4 +418,19 @@ namespace rrr::layers::gui
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void navigation::paste_from_copy()
|
||||||
|
{
|
||||||
|
if (buffers::get_instance().single_copy_buffer.empty()) return;
|
||||||
|
cnt->paste(buffers::get_instance().single_copy_buffer[1].path);
|
||||||
|
buffers::get_instance().single_copy_buffer.clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
void navigation::paste_from_cut()
|
||||||
|
{
|
||||||
|
if (buffers::get_instance().single_cut_buffer.empty()) return;
|
||||||
|
cnt->cut(buffers::get_instance().single_cut_buffer[1].path);
|
||||||
|
buffers::get_instance().single_cut_buffer.clear();
|
||||||
|
selected_file = cnt->get_selected_file(TYPE_WIN::NAVIGATION);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -68,6 +68,8 @@ namespace rrr::layers::gui
|
|||||||
std::string get_file_content(file&);
|
std::string get_file_content(file&);
|
||||||
void set_delta(MOVE_DIRECTION);
|
void set_delta(MOVE_DIRECTION);
|
||||||
void set_scroll();
|
void set_scroll();
|
||||||
|
void paste_from_copy(); // вставка после копирования
|
||||||
|
void paste_from_cut(); // вставки после вырезания
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user