diff --git a/indra/newview/llfloatervfsexplorer.cpp b/indra/newview/llfloatervfsexplorer.cpp new file mode 100644 index 000000000..395d7c280 --- /dev/null +++ b/indra/newview/llfloatervfsexplorer.cpp @@ -0,0 +1,172 @@ +// +#include "llviewerprecompiledheaders.h" +#include "llfloatervfsexplorer.h" +#include "lluictrlfactory.h" +#include "llscrolllistctrl.h" +#include "llcheckboxctrl.h" +#include "llfilepicker.h" +#include "llvfs.h" +#include "lllocalinventory.h" +#include "llviewerwindow.h" +#include "llassetconverter.h" + +LLFloaterVFSExplorer* LLFloaterVFSExplorer::sInstance; +std::map LLFloaterVFSExplorer::sVFSFileMap; + +LLFloaterVFSExplorer::LLFloaterVFSExplorer() +: LLFloater(), + mEditID(LLUUID::null) +{ + LLUICtrlFactory::getInstance()->buildFloater(this, "floater_vfs_explorer.xml"); +} +LLFloaterVFSExplorer::~LLFloaterVFSExplorer() +{ + sInstance = NULL; +} +// static +void LLFloaterVFSExplorer::show() +{ + if(sInstance) + sInstance->open(); + else + { + sInstance = new LLFloaterVFSExplorer(); + sInstance->open(); + } +} +BOOL LLFloaterVFSExplorer::postBuild() +{ + childSetCommitCallback("file_list", onCommitFileList, this); + childSetAction("remove_btn", onClickRemove, this); + childSetAction("reload_all_btn", onClickReload, this); + childSetAction("copy_uuid_btn", onClickCopyUUID, this); + refresh(); + return TRUE; +} +void LLFloaterVFSExplorer::refresh() +{ + LLScrollListCtrl* list = getChild("file_list"); + list->clearRows(); + sVFSFileMap = gVFS->getFileList(); + std::map::iterator end = sVFSFileMap.end(); + for(std::map::iterator iter = sVFSFileMap.begin(); iter != end; ++iter) + { + LLVFSFileSpecifier file_spec = iter->first; + LLSD element; + element["id"] = file_spec.mFileID; + LLSD& name_column = element["columns"][0]; + name_column["column"] = "name"; + name_column["value"] = file_spec.mFileID.asString(); + LLSD& type_column = element["columns"][1]; + type_column["column"] = "type"; + type_column["value"] = std::string(LLAssetType::lookup(file_spec.mFileType)); + list->addElement(element, ADD_BOTTOM); + } + setEditID(mEditID); +} +void LLFloaterVFSExplorer::reloadAll() +{ + //get our magic from gvfs here + refresh(); +} +void LLFloaterVFSExplorer::setEditID(LLUUID edit_id) +{ + LLScrollListCtrl* list = getChild("file_list"); + bool found_in_list = (list->getItemIndex(edit_id) != -1); + bool found_in_files = false; + LLVFSFileSpecifier file; + std::map::iterator end = sVFSFileMap.end(); + for(std::map::iterator iter = sVFSFileMap.begin(); iter != end; ++iter) + { + if((*iter).first.mFileID == edit_id) + { + found_in_files = true; + file = (*iter).first; + break; + } + } + if(found_in_files && found_in_list) + { + mEditID = edit_id; + list->selectByID(edit_id); + setEditEnabled(true); + childSetText("name_edit", file.mFileID.asString()); + childSetText("id_edit", file.mFileID.asString()); + childSetValue("type_combo", std::string(LLAssetType::lookup(file.mFileType))); + } + else + { + mEditID = LLUUID::null; + list->deselectAllItems(TRUE); + setEditEnabled(false); + childSetText("name_edit", std::string("")); + childSetText("id_edit", std::string("")); + childSetValue("type_combo", std::string("animatn")); + } +} +LLVFSFileSpecifier LLFloaterVFSExplorer::getEditEntry() +{ + LLVFSFileSpecifier file; + std::map::iterator end = sVFSFileMap.end(); + for(std::map::iterator iter = sVFSFileMap.begin(); iter != end; ++iter) + { + if((*iter).first.mFileID == mEditID) + return (*iter).first; + } + file.mFileID = LLUUID::null; + return file; +} + +void LLFloaterVFSExplorer::removeEntry() +{ + std::map::iterator end = sVFSFileMap.end(); + for(std::map::iterator iter = sVFSFileMap.begin(); iter != end; ++iter) + { + if((*iter).first.mFileID == mEditID) + { + gVFS->removeFile((*iter).first.mFileID, (*iter).first.mFileType); + sVFSFileMap.erase(iter); + break; + } + else ++iter; + } + refresh(); +} +void LLFloaterVFSExplorer::setEditEnabled(bool enabled) +{ + childSetEnabled("name_edit", false); + childSetEnabled("id_edit", false); + childSetEnabled("type_combo", false); + childSetEnabled("remove_btn", enabled); + childSetEnabled("copy_uuid_btn", enabled); +} +// static +void LLFloaterVFSExplorer::onCommitFileList(LLUICtrl* ctrl, void* user_data) +{ + LLFloaterVFSExplorer* floaterp = (LLFloaterVFSExplorer*)user_data; + LLScrollListCtrl* list = floaterp->getChild("file_list"); + LLUUID selected_id(LLUUID::null); + if(list->getFirstSelected()) + selected_id = list->getFirstSelected()->getUUID(); + floaterp->setEditID(selected_id); +} +// static +void LLFloaterVFSExplorer::onClickCopyUUID(void* user_data) +{ + LLFloaterVFSExplorer* floaterp = (LLFloaterVFSExplorer*)user_data; + LLVFSFileSpecifier file = floaterp->getEditEntry(); + gViewerWindow->mWindow->copyTextToClipboard(utf8str_to_wstring(file.mFileID.asString())); +} +// static +void LLFloaterVFSExplorer::onClickRemove(void* user_data) +{ + LLFloaterVFSExplorer* floaterp = (LLFloaterVFSExplorer*)user_data; + floaterp->removeEntry(); +} +// static +void LLFloaterVFSExplorer::onClickReload(void* user_data) +{ + LLFloaterVFSExplorer* floaterp = (LLFloaterVFSExplorer*)user_data; + floaterp->reloadAll(); +} +// diff --git a/indra/newview/llfloatervfsexplorer.h b/indra/newview/llfloatervfsexplorer.h new file mode 100644 index 000000000..aa92de7c9 --- /dev/null +++ b/indra/newview/llfloatervfsexplorer.h @@ -0,0 +1,39 @@ +// +#ifndef LL_LLFLOATERVFSEXPLORER_H +#define LL_LLFLOATERVFSEXPLORER_H + +#include "llfloater.h" +#include "llassettype.h" +#include "llvfs.h" + +class LLFloaterVFSExplorer : LLFloater +{ +typedef struct +{ + std::string mFilename; + std::string mName; + LLUUID mID; + LLAssetType::EType mType; +} entry; +public: + LLFloaterVFSExplorer(); + ~LLFloaterVFSExplorer(); + static void show(); + BOOL postBuild(); + void refresh(); + void reloadAll(); + void removeEntry(); + void setEditID(LLUUID edit_id); + LLVFSFileSpecifier getEditEntry(); + static void onCommitFileList(LLUICtrl* ctrl, void* user_data); + static void onClickCopyUUID(void* user_data); + static void onClickRemove(void* user_data); + static void onClickReload(void* user_data); +private: + static LLFloaterVFSExplorer* sInstance; + static std::map sVFSFileMap; + LLUUID mEditID; + void setEditEnabled(bool enabled); +}; +#endif +// diff --git a/indra/newview/skins/default/xui/en-us/floater_vfs_explorer.xml b/indra/newview/skins/default/xui/en-us/floater_vfs_explorer.xml new file mode 100644 index 000000000..5fd408622 --- /dev/null +++ b/indra/newview/skins/default/xui/en-us/floater_vfs_explorer.xml @@ -0,0 +1,88 @@ + + +