refactor file and assets search
This commit is contained in:
@@ -273,6 +273,7 @@ void App::initLayout()
|
|||||||
for (auto& i : canvas->m_canvas->m_order)
|
for (auto& i : canvas->m_canvas->m_order)
|
||||||
layers->add_layer(canvas->m_canvas->m_layers[i].m_name.c_str());
|
layers->add_layer(canvas->m_canvas->m_layers[i].m_name.c_str());
|
||||||
open_dialog->destroy();
|
open_dialog->destroy();
|
||||||
|
ActionManager::clear();
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -10,6 +10,73 @@
|
|||||||
AAssetManager* Asset::m_am;
|
AAssetManager* Asset::m_am;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
std::vector<std::string> Asset::list_files(std::string folder, bool is_asset, const std::string& filter_regex)
|
||||||
|
{
|
||||||
|
std::vector<std::string> names;
|
||||||
|
#ifdef _WIN32
|
||||||
|
WIN32_FIND_DATAA fd;
|
||||||
|
HANDLE hFind = ::FindFirstFileA((folder + "*").c_str(), &fd);
|
||||||
|
if (hFind != INVALID_HANDLE_VALUE)
|
||||||
|
{
|
||||||
|
do
|
||||||
|
{
|
||||||
|
// read all (real) files in current folder
|
||||||
|
// , delete '!' read other 2 default folder . and ..
|
||||||
|
if (!(fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
|
||||||
|
{
|
||||||
|
names.push_back(fd.cFileName);
|
||||||
|
}
|
||||||
|
} while (::FindNextFileA(hFind, &fd));
|
||||||
|
::FindClose(hFind);
|
||||||
|
}
|
||||||
|
#elif __ANDROID__
|
||||||
|
if (is_asset)
|
||||||
|
{
|
||||||
|
AAssetDir* dir = AAssetManager_openDir(Asset::m_am, folder.c_str());
|
||||||
|
while (const char* name = AAssetDir_getNextFileName(dir))
|
||||||
|
{
|
||||||
|
//LOG("asset: %s", name);
|
||||||
|
names.push_back(name);
|
||||||
|
}
|
||||||
|
AAssetDir_close(dir);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
if (is_asset)
|
||||||
|
{
|
||||||
|
NSString* bundle_path = [[NSBundle mainBundle] resourcePath];
|
||||||
|
std::string base = [bundle_path cStringUsingEncoding : 1];
|
||||||
|
std::string abs_path = base + "/" + folder;
|
||||||
|
}
|
||||||
|
|
||||||
|
DIR *dp;
|
||||||
|
struct dirent *ep;
|
||||||
|
dp = opendir(abs_path.c_str());
|
||||||
|
|
||||||
|
if (dp != NULL)
|
||||||
|
{
|
||||||
|
while ((ep = readdir(dp)))
|
||||||
|
if (ep->d_type != DT_DIR)
|
||||||
|
names.push_back(ep->d_name);
|
||||||
|
closedir(dp);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
LOG("Couldn't open the directory: %s", folder.c_str());
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if (!filter_regex.empty())
|
||||||
|
{
|
||||||
|
std::regex r(filter_regex);
|
||||||
|
names.erase(std::remove_if(names.begin(), names.end(),
|
||||||
|
[&r](const std::string& s) { return !std::regex_match(s, r); }), names.end());
|
||||||
|
}
|
||||||
|
|
||||||
|
return names;
|
||||||
|
}
|
||||||
|
|
||||||
bool Asset::open(const char* path)
|
bool Asset::open(const char* path)
|
||||||
{
|
{
|
||||||
LOG("Asset::open %s", path);
|
LOG("Asset::open %s", path);
|
||||||
|
|||||||
@@ -7,6 +7,8 @@ public:
|
|||||||
static AAssetManager* m_am;
|
static AAssetManager* m_am;
|
||||||
AAsset* m_asset = nullptr;
|
AAsset* m_asset = nullptr;
|
||||||
#endif
|
#endif
|
||||||
|
static std::vector<std::string> Asset::list_files(std::string folder, bool is_asset, const std::string& filter_regex);
|
||||||
|
|
||||||
std::string m_current_path;
|
std::string m_current_path;
|
||||||
FILE* m_fp = nullptr;
|
FILE* m_fp = nullptr;
|
||||||
int m_len = 0;
|
int m_len = 0;
|
||||||
|
|||||||
@@ -44,7 +44,8 @@ void NodePanelBrush::init()
|
|||||||
{
|
{
|
||||||
init_template("tpl-panel-brushes");
|
init_template("tpl-panel-brushes");
|
||||||
//m_layers_container = find<NodeBorder>("layers-container");
|
//m_layers_container = find<NodeBorder>("layers-container");
|
||||||
static auto icons = FindAllBrushes("data/Icons/");
|
static auto icons = Asset::list_files("data/Icons/", true, ".*\\.png$");
|
||||||
|
|
||||||
if ((m_container = find<NodeBorder>("brushes")))
|
if ((m_container = find<NodeBorder>("brushes")))
|
||||||
{
|
{
|
||||||
int count = 0;
|
int count = 0;
|
||||||
@@ -76,54 +77,6 @@ void NodePanelBrush::handle_click(Node* target)
|
|||||||
on_brush_changed(this, m_current->m_brushID);
|
on_brush_changed(this, m_current->m_brushID);
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<std::string> NodePanelBrush::FindAllBrushes(std::string folder)
|
|
||||||
{
|
|
||||||
std::vector<std::string> names;
|
|
||||||
std::string search_path = folder + "*.png";
|
|
||||||
#ifdef _WIN32
|
|
||||||
WIN32_FIND_DATAA fd;
|
|
||||||
HANDLE hFind = ::FindFirstFileA(search_path.c_str(), &fd);
|
|
||||||
if (hFind != INVALID_HANDLE_VALUE) {
|
|
||||||
do {
|
|
||||||
// read all (real) files in current folder
|
|
||||||
// , delete '!' read other 2 default folder . and ..
|
|
||||||
if (!(fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) {
|
|
||||||
names.push_back(fd.cFileName);
|
|
||||||
}
|
|
||||||
} while (::FindNextFileA(hFind, &fd));
|
|
||||||
::FindClose(hFind);
|
|
||||||
}
|
|
||||||
#elif __ANDROID__
|
|
||||||
//LOG("listing brushes");
|
|
||||||
AAssetDir* dir = AAssetManager_openDir(Asset::m_am, "data/Icons");
|
|
||||||
while (const char* name = AAssetDir_getNextFileName(dir))
|
|
||||||
{
|
|
||||||
//LOG("asset: %s", name);
|
|
||||||
names.push_back(name);
|
|
||||||
}
|
|
||||||
AAssetDir_close(dir);
|
|
||||||
#else
|
|
||||||
NSString* bundle_path = [[NSBundle mainBundle] resourcePath];
|
|
||||||
std::string base = [bundle_path cStringUsingEncoding:1];
|
|
||||||
std::string abs_path = base + "/" + folder;
|
|
||||||
|
|
||||||
DIR *dp;
|
|
||||||
struct dirent *ep;
|
|
||||||
dp = opendir(abs_path.c_str());
|
|
||||||
|
|
||||||
if (dp != NULL)
|
|
||||||
{
|
|
||||||
while ((ep = readdir(dp)))
|
|
||||||
if (ep->d_type != DT_DIR)
|
|
||||||
names.push_back(ep->d_name);
|
|
||||||
closedir(dp);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
LOG("Couldn't open the directory: %s", folder.c_str());
|
|
||||||
#endif
|
|
||||||
return names;
|
|
||||||
}
|
|
||||||
|
|
||||||
uint16_t NodePanelBrush::get_texture_id(int index) const
|
uint16_t NodePanelBrush::get_texture_id(int index) const
|
||||||
{
|
{
|
||||||
return m_brushes[index]->img->m_tex_id;
|
return m_brushes[index]->img->m_tex_id;
|
||||||
|
|||||||
@@ -25,6 +25,6 @@ public:
|
|||||||
virtual Node* clone_instantiate() const override;
|
virtual Node* clone_instantiate() const override;
|
||||||
virtual void init() override;
|
virtual void init() override;
|
||||||
void handle_click(Node* target);
|
void handle_click(Node* target);
|
||||||
std::vector<std::string> FindAllBrushes(std::string folder);
|
std::vector<std::string> FindAllBrushes(const std::string& folder);
|
||||||
uint16_t get_texture_id(int index) const;
|
uint16_t get_texture_id(int index) const;
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user