我只想在任何时候打开一个文件夹选择对话框。一旦用户选择了文件夹,就会触发一个事件,通知所选文件夹的 JavaScript。
为了打开对话框,我在我的项目 DialogManager 抽象中包含了以下要点的代码 FireBreath
插件API cpp
我维护了一个指向插件的全局指针,因此可以从任何上下文调用它的函数
问:这是最好的方法吗?
#include "DialogManagerWin.h"
pluginAPI * g_thePlugin;
我在pluginAPI CTOR中设置它
g_thePlugin = this;
插件API.h
这转到 pluginAPI
这是我想为 javascript 提供所选文件夹的事件
FB_JSAPI_EVENT(folderselected, 1, (const std::string&));
从 javaScript 调用的 API:
从要点调用代码以在另一个线程中打开文件夹选择,以避免阻塞并导致浏览器冻结。
void pluginAPI::SelectFolder(std::string initialFolderPath)
{
FB::PluginWindow* pluginWindow = pluginAPI::getPlugin()->GetWindow();
DialogManager* dlg_mgr = DialogManager::get();
dlg_mgr->OpenFolderDialog(m_host, pluginWindow, folderSelectorCallback);
return;
}
回调
一旦用户选择了一个文件夹,这个回调就会被调用
void folderSelectorCallback(const std::string& folderSelected)
{
g_thePlugin->fire_folderselected(folderSelected);
return ;
}