add simple preview code without colorize

This commit is contained in:
chatlanin 2023-05-09 12:27:38 +03:00
parent 740cb023a8
commit ea80038121
7 changed files with 133 additions and 99 deletions

View File

@ -50,14 +50,14 @@ namespace rrr
set_history_cursor_position();
f = his.data.at(history_cursor_position);
}
catch(...) { hack::error()("Dont set history"); }
catch(...) {}
break;
case TYPE_WIN::NAVIGATION:
try
{
f = nav.data.at(navigation_cursor_position);
}
catch(...) { hack::error()("Dont set navigation"); }
catch(...) {}
break;
case TYPE_WIN::PREVIEW:
try
@ -65,7 +65,7 @@ namespace rrr
set_preview_cursor_position();
f = prev.data.at(preview_cursor_position);
}
catch(...) { hack::error()("Dont set preview"); }
catch(...) {}
break;
}

View File

@ -255,105 +255,108 @@ namespace rrr::layers::gui
set_delta(MOVE_DIRECTION::UP);
set_scroll();
}
return;
}
if (key.get_keycode() == try_engine::key::J)
else
{
cnt->increment_position(STEP_DOWN);
selected_file = cnt->get_selected_file(TYPE_WIN::NAVIGATION);
em->execute(types::event_type::NAVIGATION_DOWN, nullptr);
set_delta(MOVE_DIRECTION::DOWN);
}
if (key.get_keycode() == try_engine::key::J)
{
cnt->increment_position(STEP_DOWN);
selected_file = cnt->get_selected_file(TYPE_WIN::NAVIGATION);
em->execute(types::event_type::NAVIGATION_DOWN, nullptr);
set_delta(MOVE_DIRECTION::DOWN);
}
if (key.get_keycode() == try_engine::key::K)
{
cnt->increment_position(STEP_UP);
selected_file = cnt->get_selected_file(TYPE_WIN::NAVIGATION);
em->execute(types::event_type::NAVIGATION_UP, nullptr);
set_delta(MOVE_DIRECTION::UP);
}
if (key.get_keycode() == try_engine::key::K)
{
cnt->increment_position(STEP_UP);
selected_file = cnt->get_selected_file(TYPE_WIN::NAVIGATION);
em->execute(types::event_type::NAVIGATION_UP, nullptr);
set_delta(MOVE_DIRECTION::UP);
}
if (key.get_keycode() == try_engine::key::H)
{
cnt->navigation_left();
data = cnt->get(TYPE_WIN::NAVIGATION);
selected_file = cnt->get_selected_file(TYPE_WIN::NAVIGATION);
em->execute(types::event_type::NAVIGATION_LEFT, nullptr);
set_scroll();
}
if (key.get_keycode() == try_engine::key::H)
{
cnt->navigation_left();
data = cnt->get(TYPE_WIN::NAVIGATION);
selected_file = cnt->get_selected_file(TYPE_WIN::NAVIGATION);
em->execute(types::event_type::NAVIGATION_LEFT, nullptr);
set_scroll();
}
if (key.get_keycode() == try_engine::key::L)
{
cnt->navigation_right();
data = cnt->get(TYPE_WIN::NAVIGATION);
selected_file = cnt->get_selected_file(TYPE_WIN::NAVIGATION);
em->execute(types::event_type::NAVIGATION_RIGHT, nullptr);
set_scroll();
}
// HERE начинаем тут
// если дирректория пуста и туда заъодить, то происходит краш приложения
// сотрим тут: void content::navigation_right()
if (key.get_keycode() == try_engine::key::L)
{
cnt->navigation_right();
data = cnt->get(TYPE_WIN::NAVIGATION);
selected_file = cnt->get_selected_file(TYPE_WIN::NAVIGATION);
em->execute(types::event_type::NAVIGATION_RIGHT, nullptr);
set_scroll();
}
// двойное нажатие перемещение в начало списка
if (key.get_keycode() == try_engine::key::G)
{
++g_coutn;
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);
set_delta(MOVE_DIRECTION::UP);
set_scroll();
g_coutn = 0;
}
// двойное нажатие перемещение в начало списка
if (key.get_keycode() == try_engine::key::G)
{
++g_coutn;
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);
set_delta(MOVE_DIRECTION::UP);
set_scroll();
g_coutn = 0;
}
// копирование/добавление в буфер одного файла вместо другого
// когда в буфере что-то есть и мы на томже файле жмем кнопку еще раз
// то происходит очищение буфера
if (key.get_keycode() == try_engine::key::C)
{
// проверяем а может это файл отмечен на вырезание
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
if (selected_file.path == buffers::get_instance().single_copy_buffer[1].path)
buffers::get_instance().single_copy_buffer.clear();
else
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)
// копирование/добавление в буфер одного файла вместо другого
// когда в буфере что-то есть и мы на томже файле жмем кнопку еще раз
// то происходит очищение буфера
if (key.get_keycode() == try_engine::key::C)
{
// проверяем а может это файл отмечен на вырезание
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
if (selected_file.path == buffers::get_instance().single_copy_buffer[1].path)
buffers::get_instance().single_copy_buffer.clear();
else
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)
{
buffers::get_instance().single_copy_buffer.clear();
buffers::get_instance().single_cut_buffer.clear();
}
// помощь
if (key.get_keycode() == try_engine::key::F1)
{
em->execute(types::event_type::SHOW_HELP_DIALOG, nullptr);
freeze = true;
}
}
// очистка
if (key.get_keycode() == try_engine::key::ESCAPE)
{
buffers::get_instance().single_copy_buffer.clear();
buffers::get_instance().single_cut_buffer.clear();
}
// помощь
if (key.get_keycode() == try_engine::key::F1)
{
em->execute(types::event_type::SHOW_HELP_DIALOG, nullptr);
freeze = true;
}
detect_img();
detect_file();
}
void navigation::released(system_event& e)
@ -455,11 +458,15 @@ namespace rrr::layers::gui
selected_file = cnt->get_selected_file(TYPE_WIN::NAVIGATION);
}
void navigation::detect_img()
void navigation::detect_file()
{
if (std::filesystem::is_directory(selected_file.path)) return;
if (selected_file.path.extension() == ".jpg" ||
selected_file.path.extension() == ".jpeg" ||
selected_file.path.extension() == ".png")
em->execute(types::event_type::SHOW_IMG, selected_file.path);
else
em->execute(types::event_type::SHOW_SRC, selected_file.path);
}
}

View File

@ -70,7 +70,8 @@ namespace rrr::layers::gui
void set_scroll();
void paste_from_copy(); // вставка после копирования
void paste_from_cut(); // вставки после вырезания
void detect_img();
void detect_file(); // определяем не кортинка ли это или определяем не является ли
// это что-то типа кода, который можно вывести на просмотр
};
}

View File

@ -43,7 +43,7 @@ namespace rrr::layers::gui
{
make_media = false;
tx.make();
frame = cv::imread(media_path);
frame = cv::imread(src_path);
cv::cvtColor(frame, frame, cv::COLOR_BGR2RGBA);
tx.bind(frame);
media_show = true;
@ -53,6 +53,13 @@ namespace rrr::layers::gui
if (media_show)
tx.draw(ImVec2(pos.x + 830.f, pos.y), ImVec2(width + 850.f, frame.rows / 1.6f));
if (src_show)
{
TR_PUSH_FONT(MEDIUM, 18);
ImGui::TextUnformatted(src_data.data());
TR_POP_FONT();
}
for (files::iterator it = begin; it != end; ++it)
{
auto item = *it;
@ -114,7 +121,9 @@ namespace rrr::layers::gui
case types::event_type::NAVIGATION_DOWN:
case types::event_type::NAVIGATION_LEFT:
case types::event_type::NAVIGATION_RIGHT:
media_path.clear();
src_path.clear();
src_data.clear();
src_show = false;
media_show = false;
selected_file = cnt->get_selected_file(TYPE_WIN::PREVIEW);
cursor_position = 0;
@ -123,9 +132,21 @@ namespace rrr::layers::gui
set_scroll();
break;
case types::event_type::SHOW_IMG:
media_path = std::any_cast<std::filesystem::path>(value);
src_path = std::any_cast<std::filesystem::path>(value);
make_media = true;
break;
case types::event_type::SHOW_SRC:
src_path = std::any_cast<std::filesystem::path>(value);
// HERE
// пока не подсвечиваем, для этого нужно видимо написать свой токенайзер
// и разбирать всю баш строку на наличие цветов
// буз этого пока поживешь, не сломаешься!
// src_data = hack::utils::unix_cmd("bat --style=plain --color=always " + src_path.string());
if (std::filesystem::is_empty(src_path)) src_data = "no data";
else
src_data = hack::utils::unix_cmd("cat " + src_path.string());
src_show = true;
break;
default:
break;
}

View File

@ -42,12 +42,14 @@ namespace rrr::layers::gui
int delta = 0;
enum class MOVE_DIRECTION { UP, DOWN };
std::filesystem::path media_path;
try_engine::texture tx;
cv::Mat frame;
cv::VideoCapture cap;
std::filesystem::path src_path;
bool media_show = false;
bool make_media = false;
bool src_show = false;
std::string src_data; // данные для показа кода из файла
private:
const ImVec4 dir_color = func::get_IMGUI_color<ImVec4>(91.f, 128.f, 191.f);

View File

@ -284,7 +284,7 @@ namespace rrr::layers::gui
void dialogs::draw_help_dialog()
{
height = try_engine::application::get()->get_window()->height() / 2.7f;
height = try_engine::application::get()->get_window()->height() / 2.5f;
TR_PUSH_FONT(MEDIUM, 16);
@ -300,7 +300,7 @@ namespace rrr::layers::gui
ImGui::TextUnformatted(label.data());
ImGui::Separator();
ImGui::TextUnformatted("Копирование: С / backspace");
ImGui::TextUnformatted("Копирование: c / backspace");
ImGui::TextUnformatted("Вставка: P");
ImGui::TextUnformatted("Удаление: D");
ImGui::TextUnformatted("Переименование: R");
@ -309,6 +309,8 @@ namespace rrr::layers::gui
ImGui::Separator();
ImGui::TextUnformatted("Перемещение в начало: gg");
ImGui::TextUnformatted("Перемещение в конец: G");
ImGui::TextUnformatted("Быстрое перемещение вверх: J");
ImGui::TextUnformatted("Быстрое перемещение вниз: K");
ImGui::Separator();
ImGui::TextUnformatted("Выход из помощи: F1");

View File

@ -18,7 +18,8 @@ namespace rrr::types
SHOW_RENAME_FILE_DIALOG,
RENAME_FILE,
SHOW_HELP_DIALOG,
SHOW_IMG
SHOW_IMG,
SHOW_SRC // показываем содержимое файла если это код
};
}