summaryrefslogtreecommitdiff
path: root/indra/newview/llfloatertopobjects.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'indra/newview/llfloatertopobjects.cpp')
-rw-r--r--indra/newview/llfloatertopobjects.cpp214
1 files changed, 103 insertions, 111 deletions
diff --git a/indra/newview/llfloatertopobjects.cpp b/indra/newview/llfloatertopobjects.cpp
index 29ac0c66f8..a984dd1d51 100644
--- a/indra/newview/llfloatertopobjects.cpp
+++ b/indra/newview/llfloatertopobjects.cpp
@@ -2,31 +2,25 @@
* @file llfloatertopobjects.cpp
* @brief Shows top colliders, top scripts, etc.
*
- * $LicenseInfo:firstyear=2005&license=viewergpl$
- *
- * Copyright (c) 2005-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2005&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. Terms of
- * the GPL can be found in doc/GPL-license.txt in this distribution, or
- * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ * Copyright (C) 2010, Linden Research, 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.
*
- * There are special exceptions to the terms and conditions of the GPL as
- * it is applied to this Source Code. View the full text of the exception
- * in the file doc/FLOSS-exception.txt in this software distribution, or
- * online at
- * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ * 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.
*
- * By copying, modifying or distributing this software, you acknowledge
- * that you have read and understood your obligations described above,
- * and agree to abide by those obligations.
+ * 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
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
@@ -40,6 +34,8 @@
#include "llagent.h"
#include "llbutton.h"
#include "llfloatergodtools.h"
+#include "llfloaterreg.h"
+#include "llnotificationsutil.h"
#include "llparcel.h"
#include "llscrolllistctrl.h"
#include "llscrolllistitem.h"
@@ -53,11 +49,11 @@
#include "lluictrlfactory.h"
#include "llviewerwindow.h"
-LLFloaterTopObjects* LLFloaterTopObjects::sInstance = NULL;
+//LLFloaterTopObjects* LLFloaterTopObjects::sInstance = NULL;
// Globals
// const U32 TIME_STR_LENGTH = 30;
-
+/*
// static
void LLFloaterTopObjects::show()
{
@@ -68,46 +64,40 @@ void LLFloaterTopObjects::show()
}
sInstance = new LLFloaterTopObjects();
- LLUICtrlFactory::getInstance()->buildFloater(sInstance, "floater_top_objects.xml");
+// LLUICtrlFactory::getInstance()->buildFloater(sInstance, "floater_top_objects.xml");
sInstance->center();
}
-
-LLFloaterTopObjects::LLFloaterTopObjects()
-: LLFloater(),
+*/
+LLFloaterTopObjects::LLFloaterTopObjects(const LLSD& key)
+: LLFloater(key),
mInitialized(FALSE),
mtotalScore(0.f)
{
- sInstance = this;
+ mCommitCallbackRegistrar.add("TopObjects.ShowBeacon", boost::bind(&LLFloaterTopObjects::onClickShowBeacon, this));
+ mCommitCallbackRegistrar.add("TopObjects.ReturnSelected", boost::bind(&LLFloaterTopObjects::onReturnSelected, this));
+ mCommitCallbackRegistrar.add("TopObjects.ReturnAll", boost::bind(&LLFloaterTopObjects::onReturnAll, this));
+ mCommitCallbackRegistrar.add("TopObjects.DisableSelected", boost::bind(&LLFloaterTopObjects::onDisableSelected, this));
+ mCommitCallbackRegistrar.add("TopObjects.DisableAll", boost::bind(&LLFloaterTopObjects::onDisableAll, this));
+ mCommitCallbackRegistrar.add("TopObjects.Refresh", boost::bind(&LLFloaterTopObjects::onRefresh, this));
+ mCommitCallbackRegistrar.add("TopObjects.GetByObjectName", boost::bind(&LLFloaterTopObjects::onGetByObjectName, this));
+ mCommitCallbackRegistrar.add("TopObjects.GetByOwnerName", boost::bind(&LLFloaterTopObjects::onGetByOwnerName, this));
+ mCommitCallbackRegistrar.add("TopObjects.CommitObjectsList",boost::bind(&LLFloaterTopObjects::onCommitObjectsList, this));
}
LLFloaterTopObjects::~LLFloaterTopObjects()
{
- sInstance = NULL;
}
// virtual
BOOL LLFloaterTopObjects::postBuild()
{
LLScrollListCtrl *objects_list = getChild<LLScrollListCtrl>("objects_list");
- childSetFocus("objects_list");
- childSetCommitCallback("objects_list", onCommitObjectsList, this);
+ getChild<LLUICtrl>("objects_list")->setFocus(TRUE);
objects_list->setDoubleClickCallback(onDoubleClickObjectsList, this);
objects_list->setCommitOnSelectionChange(TRUE);
- childSetAction("show_beacon_btn", onClickShowBeacon, this);
setDefaultBtn("show_beacon_btn");
- childSetAction("return_selected_btn", onReturnSelected, this);
- childSetAction("return_all_btn", onReturnAll, this);
- childSetAction("disable_selected_btn", onDisableSelected, this);
- childSetAction("disable_all_btn", onDisableAll, this);
- childSetAction("refresh_btn", onRefresh, this);
-
-
- childSetAction("filter_object_btn", onGetByObjectNameClicked, this);
- childSetAction("filter_owner_btn", onGetByOwnerNameClicked, this);
-
-
/*
LLLineEditor* line_editor = getChild<LLLineEditor>("owner_name_editor");
if (line_editor)
@@ -129,19 +119,29 @@ BOOL LLFloaterTopObjects::postBuild()
return TRUE;
}
+// static
+void LLFloaterTopObjects::setMode(U32 mode)
+{
+ LLFloaterTopObjects* instance = LLFloaterReg::getTypedInstance<LLFloaterTopObjects>("top_objects");
+ if(!instance) return;
+ instance->mCurrentMode = mode;
+}
+// static
void LLFloaterTopObjects::handle_land_reply(LLMessageSystem* msg, void** data)
{
+ LLFloaterTopObjects* instance = LLFloaterReg::getTypedInstance<LLFloaterTopObjects>("top_objects");
+ if(!instance) return;
// Make sure dialog is on screen
- show();
- sInstance->handleReply(msg, data);
+ LLFloaterReg::showInstance("top_objects");
+ instance->handleReply(msg, data);
//HACK: for some reason sometimes top scripts originally comes back
//with no results even though they're there
- if (!sInstance->mObjectListIDs.size() && !sInstance->mInitialized)
+ if (!instance->mObjectListIDs.size() && !instance->mInitialized)
{
- sInstance->onRefresh(NULL);
- sInstance->mInitialized = TRUE;
+ instance->onRefresh();
+ instance->mInitialized = TRUE;
}
}
@@ -156,7 +156,7 @@ void LLFloaterTopObjects::handleReply(LLMessageSystem *msg, void** data)
msg->getU32Fast(_PREHASH_RequestData, _PREHASH_ReportType, mCurrentMode);
LLScrollListCtrl *list = getChild<LLScrollListCtrl>("objects_list");
-
+
S32 block_count = msg->getNumberOfBlocks("ReportData");
for (S32 block = 0; block < block_count; ++block)
{
@@ -247,7 +247,7 @@ void LLFloaterTopObjects::handleReply(LLMessageSystem *msg, void** data)
LLUIString format = getString("top_scripts_text");
format.setArg("[COUNT]", llformat("%d", total_count));
format.setArg("[TIME]", llformat("%0.1f", mtotalScore));
- childSetValue("title_text", LLSD(format));
+ getChild<LLUICtrl>("title_text")->setValue(LLSD(format));
}
else
{
@@ -256,16 +256,13 @@ void LLFloaterTopObjects::handleReply(LLMessageSystem *msg, void** data)
list->setColumnLabel("mono_time", "");
LLUIString format = getString("top_colliders_text");
format.setArg("[COUNT]", llformat("%d", total_count));
- childSetValue("title_text", LLSD(format));
+ getChild<LLUICtrl>("title_text")->setValue(LLSD(format));
}
}
-// static
-void LLFloaterTopObjects::onCommitObjectsList(LLUICtrl* ctrl, void* data)
+void LLFloaterTopObjects::onCommitObjectsList()
{
- LLFloaterTopObjects* self = (LLFloaterTopObjects*)data;
-
- self->updateSelectionInfo();
+ updateSelectionInfo();
}
void LLFloaterTopObjects::updateSelectionInfo()
@@ -279,9 +276,14 @@ void LLFloaterTopObjects::updateSelectionInfo()
std::string object_id_string = object_id.asString();
- childSetValue("id_editor", LLSD(object_id_string));
- childSetValue("object_name_editor", list->getFirstSelected()->getColumn(1)->getValue().asString());
- childSetValue("owner_name_editor", list->getFirstSelected()->getColumn(2)->getValue().asString());
+ getChild<LLUICtrl>("id_editor")->setValue(LLSD(object_id_string));
+ LLScrollListItem* sli = list->getFirstSelected();
+ llassert(sli);
+ if (sli)
+ {
+ getChild<LLUICtrl>("object_name_editor")->setValue(sli->getColumn(1)->getValue().asString());
+ getChild<LLUICtrl>("owner_name_editor")->setValue(sli->getColumn(2)->getValue().asString());
+ }
}
// static
@@ -292,11 +294,9 @@ void LLFloaterTopObjects::onDoubleClickObjectsList(void* data)
}
// static
-void LLFloaterTopObjects::onClickShowBeacon(void* data)
+void LLFloaterTopObjects::onClickShowBeacon()
{
- LLFloaterTopObjects* self = (LLFloaterTopObjects*)data;
- if (!self) return;
- self->showBeacon();
+ showBeacon();
}
void LLFloaterTopObjects::doToObjects(int action, bool all)
@@ -306,10 +306,10 @@ void LLFloaterTopObjects::doToObjects(int action, bool all)
LLViewerRegion* region = gAgent.getRegion();
if (!region) return;
- LLCtrlListInterface *list = childGetListInterface("objects_list");
+ LLCtrlListInterface *list = getChild<LLUICtrl>("objects_list")->getListInterface();
if (!list || list->getItemCount() == 0) return;
- std::vector<LLUUID>::iterator id_itor;
+ uuid_vec_t::iterator id_itor;
bool start_message = true;
@@ -359,76 +359,77 @@ void LLFloaterTopObjects::doToObjects(int action, bool all)
//static
bool LLFloaterTopObjects::callbackReturnAll(const LLSD& notification, const LLSD& response)
{
- S32 option = LLNotification::getSelectedOption(notification, response);
+ S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
+ LLFloaterTopObjects* instance = LLFloaterReg::getTypedInstance<LLFloaterTopObjects>("top_objects");
+ if(!instance) return false;
if (option == 0)
{
- sInstance->doToObjects(ACTION_RETURN, true);
+ instance->doToObjects(ACTION_RETURN, true);
}
return false;
}
-void LLFloaterTopObjects::onReturnAll(void* data)
+void LLFloaterTopObjects::onReturnAll()
{
- LLNotifications::instance().add("ReturnAllTopObjects", LLSD(), LLSD(), &callbackReturnAll);
+ LLNotificationsUtil::add("ReturnAllTopObjects", LLSD(), LLSD(), &callbackReturnAll);
}
-void LLFloaterTopObjects::onReturnSelected(void* data)
+void LLFloaterTopObjects::onReturnSelected()
{
- sInstance->doToObjects(ACTION_RETURN, false);
+ doToObjects(ACTION_RETURN, false);
}
//static
bool LLFloaterTopObjects::callbackDisableAll(const LLSD& notification, const LLSD& response)
{
- S32 option = LLNotification::getSelectedOption(notification, response);
+ S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
+ LLFloaterTopObjects* instance = LLFloaterReg::getTypedInstance<LLFloaterTopObjects>("top_objects");
+ if(!instance) return false;
if (option == 0)
{
- sInstance->doToObjects(ACTION_DISABLE, true);
+ instance->doToObjects(ACTION_DISABLE, true);
}
return false;
}
-void LLFloaterTopObjects::onDisableAll(void* data)
+void LLFloaterTopObjects::onDisableAll()
{
- LLNotifications::instance().add("DisableAllTopObjects", LLSD(), LLSD(), callbackDisableAll);
+ LLNotificationsUtil::add("DisableAllTopObjects", LLSD(), LLSD(), callbackDisableAll);
}
-void LLFloaterTopObjects::onDisableSelected(void* data)
+void LLFloaterTopObjects::onDisableSelected()
{
- sInstance->doToObjects(ACTION_DISABLE, false);
+ doToObjects(ACTION_DISABLE, false);
}
-//static
+
void LLFloaterTopObjects::clearList()
{
- LLCtrlListInterface *list = sInstance->childGetListInterface("objects_list");
+ LLCtrlListInterface *list = childGetListInterface("objects_list");
if (list)
{
list->operateOnAll(LLCtrlListInterface::OP_DELETE);
}
- sInstance->mObjectListData.clear();
- sInstance->mObjectListIDs.clear();
- sInstance->mtotalScore = 0.f;
+ mObjectListData.clear();
+ mObjectListIDs.clear();
+ mtotalScore = 0.f;
}
-//static
-void LLFloaterTopObjects::onRefresh(void* data)
+
+void LLFloaterTopObjects::onRefresh()
{
U32 mode = STAT_REPORT_TOP_SCRIPTS;
U32 flags = 0;
std::string filter = "";
- if (sInstance)
- {
- mode = sInstance->mCurrentMode;
- flags = sInstance->mFlags;
- filter = sInstance->mFilter;
- sInstance->clearList();
- }
+ mode = mCurrentMode;
+ flags = mFlags;
+ filter = mFilter;
+ clearList();
LLMessageSystem *msg = gMessageSystem;
msg->newMessageFast(_PREHASH_LandStatRequest);
@@ -443,35 +444,26 @@ void LLFloaterTopObjects::onRefresh(void* data)
msg->sendReliable(gAgent.getRegionHost());
- if (sInstance)
- {
- sInstance->mFilter.clear();
- sInstance->mFlags = 0;
- }
+ mFilter.clear();
+ mFlags = 0;
}
-void LLFloaterTopObjects::onGetByObjectName(LLUICtrl* ctrl, void* data)
+void LLFloaterTopObjects::onGetByObjectName()
{
- if (sInstance)
- {
- sInstance->mFlags = STAT_FILTER_BY_OBJECT;
- sInstance->mFilter = sInstance->childGetText("object_name_editor");
- onRefresh(NULL);
- }
+ mFlags = STAT_FILTER_BY_OBJECT;
+ mFilter = getChild<LLUICtrl>("object_name_editor")->getValue().asString();
+ onRefresh();
}
-void LLFloaterTopObjects::onGetByOwnerName(LLUICtrl* ctrl, void* data)
+void LLFloaterTopObjects::onGetByOwnerName()
{
- if (sInstance)
- {
- sInstance->mFlags = STAT_FILTER_BY_OWNER;
- sInstance->mFilter = sInstance->childGetText("owner_name_editor");
- onRefresh(NULL);
- }
+ mFlags = STAT_FILTER_BY_OWNER;
+ mFilter = getChild<LLUICtrl>("owner_name_editor")->getValue().asString();
+ onRefresh();
}
void LLFloaterTopObjects::showBeacon()
-{
+{
LLScrollListCtrl* list = getChild<LLScrollListCtrl>("objects_list");
if (!list) return;