Files
SingularityViewer/indra/newview/llfloaterblacklist.cpp

199 lines
5.4 KiB
C++

// <edit>
#include "llviewerprecompiledheaders.h"
#include "llfloaterblacklist.h"
#include "lluictrlfactory.h"
#include "llsdserialize.h"
#include "llscrolllistctrl.h"
#include "llcheckboxctrl.h"
#include "llfilepicker.h"
#include "llviewerwindow.h"
#include "llviewercontrol.h"
LLFloaterBlacklist* LLFloaterBlacklist::sInstance;
LLFloaterBlacklist::LLFloaterBlacklist()
: LLFloater()
{
LLUICtrlFactory::getInstance()->buildFloater(this, "floater_blacklist.xml");
}
LLFloaterBlacklist::~LLFloaterBlacklist()
{
sInstance = NULL;
}
// static
void LLFloaterBlacklist::show()
{
if(sInstance)
sInstance->open();
else
{
sInstance = new LLFloaterBlacklist();
sInstance->open();
}
}
BOOL LLFloaterBlacklist::postBuild()
{
childSetAction("add_btn", onClickAdd, this);
childSetAction("clear_btn", onClickClear, this);
childSetAction("copy_uuid_btn", onClickCopyUUID, this);
childSetAction("remove_btn", onClickRemove, this);
childSetAction("save_btn", onClickSave, this);
childSetAction("load_btn", onClickLoad, this);
refresh();
return TRUE;
}
void LLFloaterBlacklist::refresh()
{
LLScrollListCtrl* list = getChild<LLScrollListCtrl>("file_list");
list->clearRows();
if(gAssetStorage) // just in case
{
LLSD settings;
for(std::vector<LLUUID>::iterator iter = gAssetStorage->mBlackListedAsset.begin();
iter != gAssetStorage->mBlackListedAsset.end(); ++iter)
{
LLSD element;
element["id"] = (*iter);
LLSD& name_column = element["columns"][0];
name_column["column"] = "asset_id";
name_column["value"] = (*iter).asString();
list->addElement(element, ADD_BOTTOM);
settings.append((*iter));
}
setMassEnabled(!gAssetStorage->mBlackListedAsset.empty());
gSavedSettings.setLLSD("Blacklist.Settings",settings);
}
else
setMassEnabled(FALSE);
setEditID(mSelectID);
}
void LLFloaterBlacklist::add(LLUUID uuid)
{
if(gAssetStorage)
gAssetStorage->mBlackListedAsset.push_back(uuid);
refresh();
}
void LLFloaterBlacklist::clear()
{
if(gAssetStorage) // just in case
{
gAssetStorage->mBlackListedAsset.clear();
}
refresh();
}
void LLFloaterBlacklist::setEditID(LLUUID edit_id)
{
LLScrollListCtrl* list = getChild<LLScrollListCtrl>("file_list");
bool found = false;
if(gAssetStorage)
found = std::find(gAssetStorage->mBlackListedAsset.begin(),
gAssetStorage->mBlackListedAsset.end(),edit_id) != gAssetStorage->mBlackListedAsset.end();
if(found)
{
mSelectID = edit_id;
list->selectByID(edit_id);
setEditEnabled(true);
}
else
{
mSelectID = LLUUID::null;
list->deselectAllItems(TRUE);
setEditEnabled(false);
}
}
void LLFloaterBlacklist::removeEntry()
{
if(gAssetStorage && mSelectID.notNull())
std::remove(gAssetStorage->mBlackListedAsset.begin(),gAssetStorage->mBlackListedAsset.end(),mSelectID);
refresh();
}
void LLFloaterBlacklist::setMassEnabled(bool enabled)
{
childSetEnabled("clear_btn", enabled);
}
void LLFloaterBlacklist::setEditEnabled(bool enabled)
{
childSetEnabled("copy_uuid_btn", enabled);
childSetEnabled("remove_btn", enabled);
}
// static
void LLFloaterBlacklist::onClickAdd(void* user_data)
{
LLFloaterBlacklist* floaterp = (LLFloaterBlacklist*)user_data;
if(!floaterp) return;
floaterp->add(LLUUID(floaterp->childGetValue("id_edit").asString()));
}
// static
void LLFloaterBlacklist::onClickClear(void* user_data)
{
LLFloaterBlacklist* floaterp = (LLFloaterBlacklist*)user_data;
if(!floaterp) return;
floaterp->clear();
}
// static
void LLFloaterBlacklist::onCommitFileList(LLUICtrl* ctrl, void* user_data)
{
LLFloaterBlacklist* floaterp = (LLFloaterBlacklist*)user_data;
LLScrollListCtrl* list = floaterp->getChild<LLScrollListCtrl>("file_list");
LLUUID selected_id;
if(list->getFirstSelected())
selected_id = list->getFirstSelected()->getUUID();
floaterp->setEditID(selected_id);
}
// static
void LLFloaterBlacklist::onClickCopyUUID(void* user_data)
{
LLFloaterBlacklist* floaterp = (LLFloaterBlacklist*)user_data;
gViewerWindow->mWindow->copyTextToClipboard(utf8str_to_wstring(floaterp->mSelectID.asString()));
}
// static
void LLFloaterBlacklist::onClickRemove(void* user_data)
{
LLFloaterBlacklist* floaterp = (LLFloaterBlacklist*)user_data;
floaterp->removeEntry();
}
// static
void LLFloaterBlacklist::loadFromSave()
{
if(!gAssetStorage) return;
LLSD blacklist = gSavedSettings.getLLSD("Blacklist.Settings");
for(LLSD::array_iterator itr = blacklist.beginArray(); itr != blacklist.endArray(); ++itr)
{
gAssetStorage->mBlackListedAsset.push_back(itr->asUUID());
}
}
//static
void LLFloaterBlacklist::onClickSave(void* user_data)
{
LLFilePicker& file_picker = LLFilePicker::instance();
if(file_picker.getSaveFile( LLFilePicker::FFSAVE_BLACKLIST, LLDir::getScrubbedFileName("untitled.blacklist")))
{
std::string file_name = file_picker.getFirstFile();
llofstream export_file(file_name);
LLSDSerialize::toPrettyXML(gSavedSettings.getLLSD("Blacklist.Settings"), export_file);
export_file.close();
}
}
//static
void LLFloaterBlacklist::onClickLoad(void* user_data)
{
LLFloaterBlacklist* floater = (LLFloaterBlacklist*)user_data;
LLFilePicker& file_picker = LLFilePicker::instance();
if(file_picker.getOpenFile(LLFilePicker::FFLOAD_BLACKLIST))
{
std::string file_name = file_picker.getFirstFile();
llifstream xml_file(file_name);
if(!xml_file.is_open()) return;
LLSD data;
if(LLSDSerialize::fromXML(data, xml_file) >= 1)
{
gSavedSettings.setLLSD("Blacklist.Settings", data);
LLFloaterBlacklist::loadFromSave();
floater->refresh();
}
xml_file.close();
}
}
// </edit>