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