add base dialogs

This commit is contained in:
chatlanin
2023-03-13 13:29:59 +03:00
parent 44ed461df9
commit 681327e663
13 changed files with 431 additions and 28 deletions

View File

@@ -1,5 +1,6 @@
#include "navigation.hpp"
#include "try_engine/event/event_classificator.hpp"
#include "utils/types.hpp"
#include "logger/logger.hpp"
@@ -20,11 +21,13 @@ namespace rrr::layers::gui
void navigation::gui_render()
{
if (!show) return;
ImGui::SetNextWindowPos(ImVec2(pos_x, pos_y));
ImGui::SetNextWindowSize(ImVec2(width, height));
ImGuiStyle& st = ImGui::GetStyle();
st.Colors[ImGuiCol_WindowBg] = ImVec4(0.13f, 0.14f, 0.18f, 1.00f);
st.Colors[ImGuiCol_WindowBg] = func::get_IMGUI_color<ImVec4>(33.f, 36.f, 46.f);
BEGIN_IMGUI_WIN();
@@ -46,6 +49,7 @@ namespace rrr::layers::gui
ImGui::PushFont(font);
ImGui::TextUnformatted(">");
ImGui::SameLine(22.f);
current_file = item;
}
else
{
@@ -63,14 +67,6 @@ namespace rrr::layers::gui
END_IMGUI_WIN();
}
// HERE начинаем тут
// нужно сделать навигацию влево и вправо
// в прошлыq раз тут сделали стилизацию по типу файлов (скрыты ссылки и тп)
// и затем все это нужно распространить на другие части (history, preview)
// когда делаем навигацию влево и вправо то не меняется центральный контент
// почему то у нас отличаются данные контента в файле content/navigation от
// content/history и content/preview
// там map<path, string> а у всех других файл. зачем это нужно???
void navigation::push_style(file& f)
{
switch (f.type)
@@ -116,11 +112,42 @@ namespace rrr::layers::gui
resize();
if (e.get_name() == try_engine::system_event::classificator::KEY_PRESSED())
set_selected(e);
pressed(e);
if (e.get_name() == try_engine::system_event::classificator::KEY_RELEASED())
released(e);
}
void navigation::on_event(std::any e, std::any value)
void navigation::on_event(std::any event_type, std::any value)
{
auto et = std::any_cast<types::event_type>(event_type);
switch (et)
{
case types::event_type::FREEZE_BROWSER_ACTION:
freeze = true;
break;
case types::event_type::UNFREEZE_BROWSER_ACTION:
freeze = false;
break;
case types::event_type::DELETE_CURRENT_FILE:
freeze = false;
hack::log()("DELETE FILE");
// HERE
// реализовать удаление после создания
break;
case types::event_type::CREATE_FILE:
{
freeze = false;
auto filename = std::any_cast<std::string>(value);
// HERE начинам тут
// реализовать через контент создание файла или директории
// а затем его уделаение см. HERE то что выше
}
break;
default:
break;
}
}
void navigation::on_update(time t)
@@ -135,30 +162,61 @@ namespace rrr::layers::gui
pos_x = try_engine::application::get()->get_window()->width() / 3.f + padding_between_window / 2.f;
}
void navigation::set_selected(system_event& e)
void navigation::pressed(system_event& e)
{
if (freeze) return;
auto key = static_cast<try_engine::system_event::key_pressed_event&>(e);
if (key.get_keycode() == try_engine::key::LEFTSHIFT || key.get_keycode() == try_engine::key::RIGHTSHIFT)
shift = true;
if (key.get_keycode() == try_engine::key::J)
{
cnt->increment_position(STEP_DOWN);
cursor_position = cnt->get_cursor_position(TYPE_WIN::NAVIGATION);
em->execute(types::event_type::NAVIGATION_DOWN, nullptr);
}
if (key.get_keycode() == try_engine::key::K)
{
cnt->increment_position(STEP_UP);
cursor_position = cnt->get_cursor_position(TYPE_WIN::NAVIGATION);
em->execute(types::event_type::NAVIGATION_UP, nullptr);
}
if (key.get_keycode() == try_engine::key::H)
{
cnt->navigation_left();
data = cnt->get(TYPE_WIN::NAVIGATION);
em->execute(types::event_type::NAVIGATION_LEFT, nullptr);
}
if (key.get_keycode() == try_engine::key::L)
{
cnt->navigation_right();
data = cnt->get(TYPE_WIN::NAVIGATION);
em->execute(types::event_type::NAVIGATION_RIGHT, nullptr);
}
if (shift && key.get_keycode() == try_engine::key::D)
{
em->execute(types::event_type::SHOW_DELETE_ONE_FILE_DIALOG, current_file);
freeze = true;
}
if (shift && key.get_keycode() == try_engine::key::C)
{
em->execute(types::event_type::SHOW_CREATE_FILE_DIALOG, nullptr);
freeze = true;
}
cursor_position = cnt->get_cursor_position(TYPE_WIN::NAVIGATION);
}
void navigation::released(system_event& e)
{
auto key = static_cast<try_engine::system_event::key_pressed_event&>(e);
if (key.get_keycode() == try_engine::key::LEFTSHIFT || key.get_keycode() == try_engine::key::RIGHTSHIFT)
shift = false;
}
}