Media filter cleanup - First pass

Cinders 2013-12-15 08:08:18 -07:00
parent 10d421e5f0
commit 7ee3beb434
5 changed files with 167 additions and 252 deletions

View File

@ -27,207 +27,151 @@
#include "llviewerprecompiledheaders.h"
#include "floatermedialists.h"
#include "llviewerparcelmedia.h"
#include "lluictrlfactory.h"
#include "llfloaterreg.h"
#include "llnotificationsutil.h"
#include "llscrolllistctrl.h"
#include "lllineeditor.h"
bool FloaterMediaLists::sIsWhitelist;
#include "llviewerparcelmedia.h"
FloaterMediaLists::FloaterMediaLists(const LLSD& key) :
LLFloater(key)
{
}
FloaterMediaLists::~FloaterMediaLists()
{
}
BOOL FloaterMediaLists::postBuild()
{
mWhitelistSLC = getChild<LLScrollListCtrl>("whitelist_list");
mBlacklistSLC = getChild<LLScrollListCtrl>("blacklist_list");
mWhitelistSLC = getChild<LLScrollListCtrl>("whitelist");
mBlacklistSLC = getChild<LLScrollListCtrl>("blacklist");
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);
childSetAction("add_whitelist", boost::bind(&FloaterMediaLists::onWhitelistAdd, this));
childSetAction("remove_whitelist", boost::bind(&FloaterMediaLists::onWhitelistRemove, this));
childSetAction("add_blacklist", boost::bind(&FloaterMediaLists::onBlacklistAdd, this));
childSetAction("remove_blacklist", boost::bind(&FloaterMediaLists::onBlacklistRemove, this));
if (!mWhitelistSLC || !mBlacklistSLC)
{
return true;
return TRUE;
}
for(S32 i = 0;i<(S32)LLViewerParcelMedia::sMediaFilterList.size();i++)
{
LLSD element;
element["columns"][0]["column"] = "list";
element["columns"][0]["value"] = LLViewerParcelMedia::sMediaFilterList[i]["domain"].asString();
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);
mWhitelistSLC->sortByColumn("list", 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);
mBlacklistSLC->sortByColumn("list", TRUE);
}
}
return TRUE;
}
void FloaterMediaLists::draw()
void FloaterMediaLists::onWhitelistAdd()
{
refresh();
LLFloater::draw();
LLSD payload, args;
args["LIST"] = "whitelist";
payload["whitelist"] = true;
LLNotificationsUtil::add("AddToMediaList", args, payload, &FloaterMediaLists::handleAddDomainCallback);
}
void FloaterMediaLists::refresh()
void FloaterMediaLists::onWhitelistRemove()
{
LLScrollListItem* selected = mWhitelistSLC->getFirstSelected();
if (selected)
{
std::string domain = 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;
}
}
mWhitelistSLC->deleteSelectedItems();
}
}
void FloaterMediaLists::onBlacklistAdd()
{
LLSD payload, args;
args["LIST"] = "blacklist";
payload["whitelist"] = false;
LLNotificationsUtil::add("AddToMediaList", args, payload, &FloaterMediaLists::handleAddDomainCallback);
}
void FloaterMediaLists::onBlacklistRemove()
{
LLScrollListItem* selected = mBlacklistSLC->getFirstSelected();
if (selected)
{
std::string domain = 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;
}
}
mBlacklistSLC->deleteSelectedItems();
}
}
//static
void FloaterMediaLists::onWhitelistAdd( void* data )
bool FloaterMediaLists::handleAddDomainCallback(const LLSD& notification, const LLSD& response)
{
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)
S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
if (option == 0)
{
std::string domain = self->mWhitelistSLC->getSelectedItemLabel();
for(S32 i = 0;i<(S32)LLViewerParcelMedia::sMediaFilterList.size();i++)
const std::string domain = LLViewerParcelMedia::extractDomain(response["url"].asString());
if (domain.empty())
{
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;
}
LL_INFOS("MediaFilter") << "No domain specified" << LL_ENDL;
return false;
}
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)
{
bool whitelist = notification["payload"]["whitelist"].asBoolean();
LLSD newmedia;
newmedia["domain"] = domain;
newmedia["action"] = "allow";
newmedia["action"] = (whitelist ? "allow" : "deny");
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);
LLFloater* floater = LLFloaterReg::getInstance("media_lists");
if (floater)
{
LLScrollListCtrl* list = floater->getChild<LLScrollListCtrl>(whitelist ? "whitelist" : "blacklist");
LLSD element;
element["columns"][0]["column"] = "list";
element["columns"][0]["value"] = domain;
list->addElement(element);
list->sortByColumn("list", 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);
return false;
}

View File

@ -36,21 +36,18 @@ class LLButton;
class FloaterMediaLists : public LLFloater
{
public:
FloaterMediaLists(const LLSD &);
FloaterMediaLists(const LLSD& key);
BOOL postBuild();
virtual ~FloaterMediaLists();
virtual void draw();
void refresh();
static void onWhitelistAdd(void*);
static void onWhitelistRemove(void*);
static void onBlacklistAdd(void*);
static void onBlacklistRemove(void*);
static void onCommitDomain(void*);
static bool handleAddDomainCallback(const LLSD& notification, const LLSD& response);
private:
static bool sIsWhitelist;
~FloaterMediaLists() {};
void onWhitelistAdd();
void onWhitelistRemove();
void onBlacklistAdd();
void onBlacklistRemove();
LLScrollListCtrl* mWhitelistSLC;
LLScrollListCtrl* mBlacklistSLC;
};

View File

@ -900,8 +900,8 @@ void LLViewerParcelMedia::filterMediaUrl(LLParcel* parcel)
else if (domain.length() >= listed_domain.length())
{
size_t pos = domain.rfind(listed_domain);
if ((pos != std::string::npos) &&
(pos == domain.length()-listed_domain.length()))
if ((pos != std::string::npos)
&& (pos == domain.length()-listed_domain.length()))
{
found = true;
}
@ -912,9 +912,9 @@ void LLViewerParcelMedia::filterMediaUrl(LLParcel* parcel)
break;
}
}
if (media_action=="allow")
if (media_action == "allow")
{
llinfos << "Media filter: URL allowed by whitelist: "+parcel->getMediaURL() << llendl;
LL_INFOS("MediaFilter") << "Media filter: URL allowed by whitelist: "+parcel->getMediaURL() << LL_ENDL;
sCurrentMedia = *parcel;
if (parcel->getName() == currentparcel->getName())
{
@ -922,7 +922,7 @@ void LLViewerParcelMedia::filterMediaUrl(LLParcel* parcel)
}
sMediaLastActionPlay = true;
}
else if (media_action=="deny")
else if (media_action == "deny")
{
LLStringUtil::format_map_t format_args;
format_args["[DOMAIN]"] = domain;
@ -1334,16 +1334,16 @@ void LLViewerParcelMedia::filterAudioUrl(std::string media_url)
break;
}
}
if (media_action=="allow")
if (media_action == "allow")
{
if (gAudiop != NULL)
{
llinfos << "Audio filter: URL allowed by whitelist" << llendl;
LL_INFOS("MediaFilter") << "Audio filter: URL allowed by whitelist" << LL_ENDL;
LLViewerAudio::getInstance()->startInternetStreamWithAutoFade(media_url);
}
sAudioLastActionPlay = true;
}
else if (media_action=="deny")
else if (media_action == "deny")
{
LLStringUtil::format_map_t format_args;
format_args["[DOMAIN]"] = domain;
@ -1403,7 +1403,7 @@ void callback_audio_alert2(const LLSD &notification, const LLSD &response, std::
S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
std::string domain = LLViewerParcelMedia::extractDomain(media_url);
if ((option== 0) && allow) // allow now
if ((option == 0) && allow) // allow now
{
if (gAudiop != NULL)
{
@ -1412,7 +1412,7 @@ void callback_audio_alert2(const LLSD &notification, const LLSD &response, std::
}
LLViewerParcelMedia::sAudioLastActionPlay = true;
}
else if ((option==0) && !allow) //deny now
else if ((option == 0) && !allow) //deny now
{
if (gAudiop != NULL)
{
@ -1421,7 +1421,7 @@ void callback_audio_alert2(const LLSD &notification, const LLSD &response, std::
}
LLViewerParcelMedia::sAudioLastActionPlay = false;
}
else if ((option== 1) && allow) // Whitelist domain
else if ((option == 1) && allow) // Whitelist domain
{
LLSD newmedia;
newmedia["domain"] = domain;
@ -1438,7 +1438,7 @@ void callback_audio_alert2(const LLSD &notification, const LLSD &response, std::
}
LLViewerParcelMedia::sAudioLastActionPlay = true;
}
else if ((option== 1) && !allow) //Blacklist domain
else if ((option == 1) && !allow) //Blacklist domain
{
LLSD newmedia;
newmedia["domain"] = domain;
@ -1455,7 +1455,7 @@ void callback_audio_alert2(const LLSD &notification, const LLSD &response, std::
}
LLViewerParcelMedia::sAudioLastActionPlay = false;
}
else if ((option== 2) && allow) // Whitelist URL
else if ((option == 2) && allow) // Whitelist URL
{
LLSD newmedia;
newmedia["domain"] = media_url;
@ -1472,7 +1472,7 @@ void callback_audio_alert2(const LLSD &notification, const LLSD &response, std::
}
LLViewerParcelMedia::sAudioLastActionPlay = true;
}
else if ((option== 2) && !allow) //Blacklist URL
else if ((option == 2) && !allow) //Blacklist URL
{
LLSD newmedia;
newmedia["domain"] = media_url;
@ -1540,7 +1540,7 @@ void callback_audio_alert_single(const LLSD &notification, const LLSD &response,
S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
std::string domain = LLViewerParcelMedia::extractDomain(media_url);
if (option== 0) // allow now
if (option == 0) // allow now
{
if (gAudiop != NULL)
{
@ -1549,7 +1549,7 @@ void callback_audio_alert_single(const LLSD &notification, const LLSD &response,
}
LLViewerParcelMedia::sAudioLastActionPlay = true;
}
else if (option==1) //deny now
else if (option == 1) //deny now
{
if (gAudiop != NULL)
{
@ -1558,7 +1558,7 @@ void callback_audio_alert_single(const LLSD &notification, const LLSD &response,
}
LLViewerParcelMedia::sAudioLastActionPlay = false;
}
else if (option== 3) // Whitelist domain
else if (option == 3) // Whitelist domain
{
LLSD newmedia;
newmedia["domain"] = domain;
@ -1575,7 +1575,7 @@ void callback_audio_alert_single(const LLSD &notification, const LLSD &response,
}
LLViewerParcelMedia::sAudioLastActionPlay = true;
}
else if (option== 4) //Blacklist domain
else if (option == 4) //Blacklist domain
{
LLSD newmedia;
newmedia["domain"] = domain;
@ -1669,7 +1669,7 @@ void LLViewerParcelMedia::filterMOAPUrl(LLMediaDataClientObject *object, LLObjec
{
if ((media_url == sCurrentMOAP) && (!sMediaReFilter))
{
llinfos << "MOAP URL filter: no active alert, same URL as previous: " + media_url << llendl;
LL_INFOS("MediaFilter") << "MOAP URL filter: no active alert, same URL as previous: " << media_url << LL_ENDL;
// The media hasn't changed, so keep playing if we were.
if (sMOAPLastActionPlay)
{
@ -1679,7 +1679,7 @@ void LLViewerParcelMedia::filterMOAPUrl(LLMediaDataClientObject *object, LLObjec
return;
}
// New MOAP, so flag the queue empty and filter it.
llinfos << "MOAP URL filter: no active alert, filtering new URL: " + media_url << llendl;
LL_INFOS("MediaFilter") << "MOAP URL filter: no active alert, filtering new URL: " << media_url << LL_ENDL;
sMOAPQueueEmpty = true;
}
// If an alert is active, place the media url in the MOAP queue
@ -1690,7 +1690,7 @@ void LLViewerParcelMedia::filterMOAPUrl(LLMediaDataClientObject *object, LLObjec
{
if (media_url != sQueuedMOAPUrl)
{
llinfos << "MOAP URL filter: active alert, replacing existing queue with: " + media_url << llendl;
LL_INFOS("MediaFilter") << "MOAP URL filter: active alert, replacing existing queue with: " << media_url << LL_ENDL;
sQueuedMOAPUrl = media_url;
sQueuedMOAPObject = object;
sQueuedMOAPNavObject = nav_object;
@ -1704,7 +1704,7 @@ void LLViewerParcelMedia::filterMOAPUrl(LLMediaDataClientObject *object, LLObjec
{
if (media_url != sCurrentMOAP)
{
llinfos << "MOAP URL filter: active alert, nothing queued, adding queue with: " + media_url << llendl;
LL_INFOS("MediaFilter") << "MOAP URL filter: active alert, nothing queued, adding queue with: " << media_url << LL_ENDL;
sQueuedMOAPUrl = media_url;
sQueuedMOAPObject = object;
sQueuedMOAPNavObject = nav_object;
@ -1765,13 +1765,13 @@ void LLViewerParcelMedia::filterMOAPUrl(LLMediaDataClientObject *object, LLObjec
break;
}
}
if (media_action=="allow")
if (media_action == "allow")
{
llinfos << "MOAP filter: URL allowed by whitelist" << llendl;
LL_INFOS("MediaFilter") << "MOAP filter: URL allowed by whitelist" << LL_ENDL;
nav_object->doNavigate(object, texture_index, media_url);
sMOAPLastActionPlay = true;
}
else if (media_action=="deny")
else if (media_action == "deny")
{
LLStringUtil::format_map_t format_args;
format_args["[DOMAIN]"] = domain;
@ -1829,18 +1829,18 @@ void callback_MOAP_alert2(const LLSD &notification, const LLSD &response, LLMedi
S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
std::string domain = LLViewerParcelMedia::extractDomain(media_url);
if ((option== 0) && allow) // allow now
if ((option == 0) && allow) // allow now
{
nav_object->doNavigate(object, texture_index, media_url);
LLViewerParcelMedia::sCurrentMOAP = media_url;
LLViewerParcelMedia::sMOAPLastActionPlay = true;
}
else if ((option==0) && !allow) //deny now
else if ((option == 0) && !allow) //deny now
{
LLViewerParcelMedia::sCurrentMOAP = "";
LLViewerParcelMedia::sMOAPLastActionPlay = false;
}
else if ((option== 1) && allow) // Whitelist domain
else if ((option == 1) && allow) // Whitelist domain
{
LLSD newmedia;
newmedia["domain"] = domain;
@ -1854,7 +1854,7 @@ void callback_MOAP_alert2(const LLSD &notification, const LLSD &response, LLMedi
LLViewerParcelMedia::sCurrentMOAP = media_url;
LLViewerParcelMedia::sMOAPLastActionPlay = true;
}
else if ((option== 1) && !allow) //Blacklist domain
else if ((option == 1) && !allow) //Blacklist domain
{
LLSD newmedia;
newmedia["domain"] = domain;
@ -1867,7 +1867,7 @@ void callback_MOAP_alert2(const LLSD &notification, const LLSD &response, LLMedi
LLViewerParcelMedia::sCurrentMOAP = "";
LLViewerParcelMedia::sMOAPLastActionPlay = false;
}
else if ((option== 2) && allow) // Whitelist URL
else if ((option == 2) && allow) // Whitelist URL
{
LLSD newmedia;
newmedia["domain"] = media_url;
@ -1881,7 +1881,7 @@ void callback_MOAP_alert2(const LLSD &notification, const LLSD &response, LLMedi
LLViewerParcelMedia::sCurrentMOAP = media_url;
LLViewerParcelMedia::sMOAPLastActionPlay = true;
}
else if ((option== 2) && !allow) //Blacklist URL
else if ((option == 2) && !allow) //Blacklist URL
{
LLSD newmedia;
newmedia["domain"] = media_url;

View File

@ -4,14 +4,12 @@
can_drag_on_left="false"
can_minimize="true"
can_resize="true"
enabled="true"
height="300"
height="254"
name="floatermedialists"
title="Media Lists"
width="460"
min_height="300"
min_width="460"
rect_control="MediaListRect">
min_width="460">
<floater.string name="EnterUrlAllow">
Enter domain or URL to always allow:
</floater.string>
@ -62,8 +60,8 @@
draw_heading="false"
mouse_opaque="true"
multi_select="false"
name="whitelist_list">
<column label="Whitelist" name="whitelist_col" width="195" />
name="whitelist">
<column label="Whitelist" name="list" width="195" />
</scroll_list>
<layout_stack
@ -159,8 +157,8 @@
draw_heading="false"
mouse_opaque="true"
multi_select="false"
name="blacklist_list">
<column label="Blacklist" name="blacklist_col" width="195" />
name="blacklist">
<column label="Blacklist" name="list" width="195" />
</scroll_list>
<layout_stack
@ -224,48 +222,4 @@
</layout_panel>
</layout_stack>
<!-- This text will be replaced accordingly to ast for a URL/Domain to add to white-/blacklist -->
<text
bottom="250"
enabled="true"
follows="left|right|bottom"
font="SansSerifSmall"
height="16"
initial_value="Enter URL here:"
top_pad="8"
mouse_opaque="true"
name="add_text"
visible="false" />
<line_editor
visible="false"
bevel_style="in"
border_style="line"
border_thickness="1"
top_pad="4"
follows="left|bottom|right"
font="SansSerifSmall"
height="20"
name="input_domain"
right="-94"
select_all_on_focus_received="true"
select_on_focus="true"/>
<button
visible="false"
enabled="true"
follows="bottom|right"
font="SansSerifSmall"
halign="center"
height="20"
left_pad="4"
label="Add"
label_selected="Add"
left_delta="326"
mouse_opaque="true"
name="commit_domain"
scale_image="true"
width="80" />
</floater>

View File

@ -11688,4 +11688,24 @@ There was a problem importing [FILENAME]. Please see the log for more details.
Shape import failed. Are you sure [FILENAME] is an avatar file?
</notification>
<notification
icon="alertmodal.tga"
name="AddToMediaList"
type="alertmodal">
Enter a domain name to be added to the [LIST]:
<tag>confirm</tag>
<form name="form">
<input name="url" type="text" default="true" />
<button
default="true"
index="0"
name="Add"
text="Add"/>
<button
index="1"
name="Cancel"
text="Cancel"/>
</form>
</notification>
</notifications>