一度に開くフォルダ選択ダイアログを1つだけにしたい。ユーザーがフォルダを選択すると、イベントが発生し、選択したフォルダをjavaScriptに通知します。
ダイアログを開くために、FireBreathのプロジェクト DialogManager抽象化に次の要点のコードを含めました
pluginAPI cpp
プラグインへのグローバルポインタを維持しているので、その関数は任意のコンテキストから呼び出すことができます
Q:これが最善の方法ですか?
#include "DialogManagerWin.h"
pluginAPI * g_thePlugin;
pluginAPICTORで設定しました
g_thePlugin = this;
pluginAPI.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 ;
}