/** * @file floatermedialists.cpp * @brief Floater to edit media white/blacklists - implementation * * $LicenseInfo:firstyear=2011&license=fsviewerlgpl$ * Phoenix Firestorm Viewer Source Code * Copyright (C) 2011, Sione Lomu * Copyright (C) 2011, The Phoenix Viewer Project, Inc. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; * version 2.1 of the License only. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * * The Phoenix Viewer Project, Inc., 1831 Oakwood Drive, Fairmont, Minnesota 56031-3225 USA * $/LicenseInfo$ */ #include "llviewerprecompiledheaders.h" #include "floatermedialists.h" #include "llviewerparcelmedia.h" #include "lluictrlfactory.h" #include "llscrolllistctrl.h" #include "lllineeditor.h" bool FloaterMediaLists::sIsWhitelist; FloaterMediaLists::FloaterMediaLists(const LLSD& key) : LLFloater(key) { } FloaterMediaLists::~FloaterMediaLists() { } BOOL FloaterMediaLists::postBuild() { mWhitelistSLC = getChild("whitelist_list"); mBlacklistSLC = getChild("blacklist_list"); childSetAction("add_whitelist", onWhitelistAdd,this); childSetAction("remove_whitelist", onWhitelistRemove,this); childSetAction("add_blacklist", onBlacklistAdd,this); childSetAction("remove_blacklist", onBlacklistRemove,this); childSetAction("commit_domain", onCommitDomain,this); if (!mWhitelistSLC || !mBlacklistSLC) { return true; } for(S32 i = 0;i<(S32)LLViewerParcelMedia::sMediaFilterList.size();i++) { if (LLViewerParcelMedia::sMediaFilterList[i]["action"].asString() == "allow") { LLSD element; element["columns"][0]["column"] = "whitelist_col"; element["columns"][0]["value"] = LLViewerParcelMedia::sMediaFilterList[i]["domain"].asString(); element["columns"][0]["font"] = "SANSSERIF"; mWhitelistSLC->addElement(element); mWhitelistSLC->sortByColumn("whitelist_col",TRUE); } else if (LLViewerParcelMedia::sMediaFilterList[i]["action"].asString() == "deny") { LLSD element; element["columns"][0]["column"] = "blacklist_col"; element["columns"][0]["value"] = LLViewerParcelMedia::sMediaFilterList[i]["domain"].asString(); element["columns"][0]["font"] = "SANSSERIF"; mBlacklistSLC->addElement(element); mBlacklistSLC->sortByColumn("blacklist_col",TRUE); } } return TRUE; } void FloaterMediaLists::draw() { refresh(); LLFloater::draw(); } void FloaterMediaLists::refresh() { } //static void FloaterMediaLists::onWhitelistAdd( void* data ) { FloaterMediaLists* self = (FloaterMediaLists*)data; self->getChildView("blacklist_list")->setEnabled(false); self->getChildView("whitelist_list")->setEnabled(false); self->getChildView("remove_whitelist")->setEnabled(false); self->getChildView("add_whitelist")->setEnabled(false); self->getChildView("remove_blacklist")->setEnabled(false); self->getChildView("add_blacklist")->setEnabled(false); self->getChildView("input_domain")->setVisible(true); self->getChildView("commit_domain")->setVisible(true); self->getChild("add_text")-> setValue(std::string("Enter domain/url to add to domain whitelist:")); self->getChildView("add_text")->setVisible(true); sIsWhitelist = true; } void FloaterMediaLists::onWhitelistRemove( void* data ) { FloaterMediaLists* self = (FloaterMediaLists*)data; LLScrollListItem* selected = self->mWhitelistSLC->getFirstSelected(); if (selected) { std::string domain = self->mWhitelistSLC->getSelectedItemLabel(); for(S32 i = 0;i<(S32)LLViewerParcelMedia::sMediaFilterList.size();i++) { if (LLViewerParcelMedia::sMediaFilterList[i]["domain"].asString() == domain) { LLViewerParcelMedia::sMediaFilterList.erase(i); LLViewerParcelMedia::saveDomainFilterList(); break; } } self->mWhitelistSLC->deleteSelectedItems(); } } void FloaterMediaLists::onBlacklistAdd( void* data ) { FloaterMediaLists* self = (FloaterMediaLists*)data; self->getChildView("blacklist_list")->setEnabled(false); self->getChildView("whitelist_list")->setEnabled(false); self->getChildView("remove_whitelist")->setEnabled(false); self->getChildView("add_whitelist")->setEnabled(false); self->getChildView("remove_blacklist")->setEnabled(false); self->getChildView("add_blacklist")->setEnabled(false); self->getChildView("input_domain")->setVisible(true); self->getChildView("commit_domain")->setVisible(true); self->getChild("add_text")-> setValue(std::string("Enter domain/url to add to domain blacklist:")); self->getChildView("add_text")->setVisible(true); self->sIsWhitelist = false; } void FloaterMediaLists::onBlacklistRemove( void* data ) { FloaterMediaLists* self = (FloaterMediaLists*)data; LLScrollListItem* selected = self->mBlacklistSLC->getFirstSelected(); if (selected) { std::string domain = self->mBlacklistSLC->getSelectedItemLabel(); for(S32 i = 0;i<(S32)LLViewerParcelMedia::sMediaFilterList.size();i++) { if (LLViewerParcelMedia::sMediaFilterList[i]["domain"].asString() == domain) { LLViewerParcelMedia::sMediaFilterList.erase(i); LLViewerParcelMedia::saveDomainFilterList(); break; } } self->mBlacklistSLC->deleteSelectedItems(); } } void FloaterMediaLists::onCommitDomain( void* data ) { FloaterMediaLists* self = (FloaterMediaLists*)data; std::string domain = self->getChild("input_domain")->getText(); domain = LLViewerParcelMedia::extractDomain(domain); if (sIsWhitelist) { LLSD newmedia; newmedia["domain"] = domain; newmedia["action"] = "allow"; LLViewerParcelMedia::sMediaFilterList.append(newmedia); LLViewerParcelMedia::saveDomainFilterList(); LLSD element; element["columns"][0]["column"] = "whitelist_col"; element["columns"][0]["value"] = domain; element["columns"][0]["font"] = "SANSSERIF"; self->mWhitelistSLC->addElement(element); self->mWhitelistSLC->sortByColumn("whitelist_col",TRUE); } else { LLSD newmedia; newmedia["domain"] = domain; newmedia["action"] = "deny"; LLViewerParcelMedia::sMediaFilterList.append(newmedia); LLViewerParcelMedia::saveDomainFilterList(); LLSD element; element["columns"][0]["column"] = "blacklist_col"; element["columns"][0]["value"] = domain; element["columns"][0]["font"] = "SANSSERIF"; self->mBlacklistSLC->addElement(element); self->mBlacklistSLC->sortByColumn("blacklist_col",TRUE); } self->getChildView("blacklist_list")->setEnabled(true); self->getChildView("whitelist_list")->setEnabled(true); self->getChildView("remove_whitelist")->setEnabled(true); self->getChildView("add_whitelist")->setEnabled(true); self->getChildView("remove_blacklist")->setEnabled(true); self->getChildView("add_blacklist")->setEnabled(true); self->getChildView("input_domain")->setVisible(false); self->getChildView("commit_domain")->setVisible(false); self->getChildView("add_text")->setVisible(false); }