phoenix-firestorm/indra/newview/floatermedialists.cpp

233 lines
7.6 KiB
C++

/**
* @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<LLScrollListCtrl>("whitelist_list");
mBlacklistSLC = getChild<LLScrollListCtrl>("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<LLUICtrl>("add_text")->
setValue(self->getString("EnterUrlAllow"));
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();
//HACK: should really see if the URL being deleted
// is the same as the saved one
LLViewerParcelMedia::sMediaLastURL = "";
LLViewerParcelMedia::sAudioLastURL = "";
LLViewerParcelMedia::sMediaReFilter = true;
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<LLUICtrl>("add_text")->
setValue(self->getString("EnterUrlDeny"));
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();
//HACK: should really see if the URL being deleted
// is the same as the saved one
LLViewerParcelMedia::sMediaLastURL = "";
LLViewerParcelMedia::sAudioLastURL = "";
LLViewerParcelMedia::sMediaReFilter = true;
break;
}
}
self->mBlacklistSLC->deleteSelectedItems();
}
}
void FloaterMediaLists::onCommitDomain( void* data )
{
FloaterMediaLists* self = (FloaterMediaLists*)data;
std::string domain =
self->getChild<LLLineEditor>("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);
}