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

View File

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

View File

@ -43,7 +43,7 @@ namespace rrr::layers::gui
{ {
make_media = false; make_media = false;
tx.make(); tx.make();
frame = cv::imread(media_path); frame = cv::imread(src_path);
cv::cvtColor(frame, frame, cv::COLOR_BGR2RGBA); cv::cvtColor(frame, frame, cv::COLOR_BGR2RGBA);
tx.bind(frame); tx.bind(frame);
media_show = true; media_show = true;
@ -53,6 +53,13 @@ namespace rrr::layers::gui
if (media_show) if (media_show)
tx.draw(ImVec2(pos.x + 830.f, pos.y), ImVec2(width + 850.f, frame.rows / 1.6f)); 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) for (files::iterator it = begin; it != end; ++it)
{ {
auto item = *it; auto item = *it;
@ -114,7 +121,9 @@ namespace rrr::layers::gui
case types::event_type::NAVIGATION_DOWN: case types::event_type::NAVIGATION_DOWN:
case types::event_type::NAVIGATION_LEFT: case types::event_type::NAVIGATION_LEFT:
case types::event_type::NAVIGATION_RIGHT: case types::event_type::NAVIGATION_RIGHT:
media_path.clear(); src_path.clear();
src_data.clear();
src_show = false;
media_show = false; media_show = false;
selected_file = cnt->get_selected_file(TYPE_WIN::PREVIEW); selected_file = cnt->get_selected_file(TYPE_WIN::PREVIEW);
cursor_position = 0; cursor_position = 0;
@ -123,9 +132,21 @@ namespace rrr::layers::gui
set_scroll(); set_scroll();
break; break;
case types::event_type::SHOW_IMG: 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; make_media = true;
break; 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: default:
break; break;
} }

View File

@ -42,12 +42,14 @@ namespace rrr::layers::gui
int delta = 0; int delta = 0;
enum class MOVE_DIRECTION { UP, DOWN }; enum class MOVE_DIRECTION { UP, DOWN };
std::filesystem::path media_path;
try_engine::texture tx; try_engine::texture tx;
cv::Mat frame; cv::Mat frame;
cv::VideoCapture cap; cv::VideoCapture cap;
std::filesystem::path src_path;
bool media_show = false; bool media_show = false;
bool make_media = false; bool make_media = false;
bool src_show = false;
std::string src_data; // данные для показа кода из файла
private: private:
const ImVec4 dir_color = func::get_IMGUI_color<ImVec4>(91.f, 128.f, 191.f); 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() 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); TR_PUSH_FONT(MEDIUM, 16);
@ -300,7 +300,7 @@ namespace rrr::layers::gui
ImGui::TextUnformatted(label.data()); ImGui::TextUnformatted(label.data());
ImGui::Separator(); ImGui::Separator();
ImGui::TextUnformatted("Копирование: С / backspace"); ImGui::TextUnformatted("Копирование: c / backspace");
ImGui::TextUnformatted("Вставка: P"); ImGui::TextUnformatted("Вставка: P");
ImGui::TextUnformatted("Удаление: D"); ImGui::TextUnformatted("Удаление: D");
ImGui::TextUnformatted("Переименование: R"); ImGui::TextUnformatted("Переименование: R");
@ -309,6 +309,8 @@ namespace rrr::layers::gui
ImGui::Separator(); ImGui::Separator();
ImGui::TextUnformatted("Перемещение в начало: gg"); ImGui::TextUnformatted("Перемещение в начало: gg");
ImGui::TextUnformatted("Перемещение в конец: G"); ImGui::TextUnformatted("Перемещение в конец: G");
ImGui::TextUnformatted("Быстрое перемещение вверх: J");
ImGui::TextUnformatted("Быстрое перемещение вниз: K");
ImGui::Separator(); ImGui::Separator();
ImGui::TextUnformatted("Выход из помощи: F1"); ImGui::TextUnformatted("Выход из помощи: F1");

View File

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