add base dialogs
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user