add create file and dir
This commit is contained in:
parent
681327e663
commit
8c61772c66
@ -1,6 +1,8 @@
|
||||
#include "content.hpp"
|
||||
|
||||
#include <oneapi/tbb/parallel_for.h>
|
||||
#include "logger/logger.hpp"
|
||||
|
||||
#include "buffer/buffer.hpp"
|
||||
|
||||
namespace rrr
|
||||
@ -71,6 +73,10 @@ namespace rrr
|
||||
int content::get_preview_cursor_position()
|
||||
{
|
||||
int preview_cursor_position = 0;
|
||||
|
||||
if (std::filesystem::is_empty(PWD))
|
||||
return preview_cursor_position;
|
||||
|
||||
auto pwd = nav.store[PWD].at(cursor_position).path;
|
||||
|
||||
if (buffer::state.contains(pwd))
|
||||
@ -103,6 +109,7 @@ namespace rrr
|
||||
{
|
||||
// ставим новый pwd и заполняем навигацию и историю
|
||||
PWD = PWD / nav.store[PWD].at(cursor_position).path.filename();
|
||||
|
||||
nav.fill(PWD);
|
||||
his.fill(PWD);
|
||||
|
||||
@ -125,6 +132,10 @@ namespace rrr
|
||||
}
|
||||
|
||||
// и исходя из позиции курсора заполняем окно предварительного просмотра
|
||||
// в зависимости от того пустаая ли она или неt
|
||||
if (std::filesystem::is_empty(PWD))
|
||||
prev.data.clear();
|
||||
else
|
||||
prev.fill(nav.store[PWD].at(cursor_position).path);
|
||||
}
|
||||
|
||||
@ -151,4 +162,23 @@ namespace rrr
|
||||
cursor_position = i;
|
||||
});
|
||||
}
|
||||
|
||||
void content::create_file(std::string filename)
|
||||
{
|
||||
std::string cmd;
|
||||
|
||||
if (filename.find("/") != std::string::npos)
|
||||
{
|
||||
if (filename.at(filename.size() - 1) == '/') cmd = "mkdir -p " + std::string(PWD / filename);
|
||||
else cmd = "mkdir -p " + std::string(PWD / std::filesystem::path(filename).parent_path())
|
||||
+ " && touch " + std::string(PWD / filename);
|
||||
}
|
||||
else
|
||||
{
|
||||
cmd = "touch " + std::string(PWD / filename);
|
||||
}
|
||||
|
||||
hack::utils::unix_cmd(cmd);
|
||||
nav.fill(PWD);
|
||||
}
|
||||
}
|
||||
|
@ -32,6 +32,7 @@ namespace rrr
|
||||
void increment_position(int);
|
||||
void navigation_right();
|
||||
void navigation_left();
|
||||
void create_file(std::string);
|
||||
|
||||
private:
|
||||
content_type::navigation nav;
|
||||
|
@ -5,6 +5,8 @@
|
||||
#include <vector>
|
||||
#include <algorithm>
|
||||
|
||||
#include "logger/logger.hpp"
|
||||
|
||||
namespace rrr
|
||||
{
|
||||
// NONE - просто выводится текст. когда пупка пуста и нет контента вообще
|
||||
@ -98,6 +100,12 @@ namespace rrr::file_utils
|
||||
inline files fill(std::filesystem::path pwd)
|
||||
{
|
||||
files current_files = get_files_struct(pwd);
|
||||
|
||||
if (current_files.size() == 1 && current_files.at(0).path == pwd / "no permission")
|
||||
{
|
||||
return current_files;
|
||||
}
|
||||
|
||||
files tmp;
|
||||
tmp.reserve(current_files.size());
|
||||
std::sort(current_files.begin(), current_files.end());
|
||||
|
@ -4,12 +4,14 @@ namespace rrr::content_type
|
||||
{
|
||||
void navigation::fill(std::filesystem::path PWD)
|
||||
{
|
||||
if (!store.contains(PWD))
|
||||
// if (!store.contains(PWD))
|
||||
// store[PWD] = file_utils::fill(PWD);
|
||||
|
||||
store[PWD] = file_utils::fill(PWD);
|
||||
}
|
||||
|
||||
void navigation::update(std::filesystem::path PWD)
|
||||
{
|
||||
store[PWD] = file_utils::fill(PWD);
|
||||
}
|
||||
// void navigation::update(std::filesystem::path PWD)
|
||||
// {
|
||||
// store[PWD] = file_utils::fill(PWD);
|
||||
// }
|
||||
}
|
||||
|
@ -14,7 +14,7 @@ namespace rrr::content_type
|
||||
~navigation() = default;
|
||||
|
||||
void fill(std::filesystem::path);
|
||||
void update(std::filesystem::path);
|
||||
// void update(std::filesystem::path);
|
||||
|
||||
std::unordered_map<std::filesystem::path, files> store;
|
||||
};
|
||||
|
@ -133,16 +133,13 @@ namespace rrr::layers::gui
|
||||
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 то что выше
|
||||
cnt->create_file(filename);
|
||||
data = cnt->get(TYPE_WIN::NAVIGATION);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
@ -197,13 +194,15 @@ namespace rrr::layers::gui
|
||||
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)
|
||||
// создание файла/директории
|
||||
if (shift && key.get_keycode() == try_engine::key::A)
|
||||
{
|
||||
em->execute(types::event_type::SHOW_CREATE_FILE_DIALOG, nullptr);
|
||||
freeze = true;
|
||||
|
@ -221,6 +221,7 @@ namespace rrr::layers::gui
|
||||
|
||||
void dialogs::create_file()
|
||||
{
|
||||
if (title.empty()) return;
|
||||
show = false;
|
||||
create_dialog = false;
|
||||
em->execute(types::event_type::CREATE_FILE, title);
|
||||
|
@ -10,8 +10,8 @@ namespace rrr::types
|
||||
NAVIGATION_LEFT,
|
||||
NAVIGATION_RIGHT,
|
||||
SHOW_DELETE_ONE_FILE_DIALOG,
|
||||
FREEZE_BROWSER_ACTION,
|
||||
UNFREEZE_BROWSER_ACTION,
|
||||
FREEZE_BROWSER_ACTION, // замораживает все действия
|
||||
UNFREEZE_BROWSER_ACTION, // размораживает все действия
|
||||
DELETE_CURRENT_FILE,
|
||||
SHOW_CREATE_FILE_DIALOG,
|
||||
CREATE_FILE
|
||||
|
Loading…
Reference in New Issue
Block a user