diff options
Diffstat (limited to 'indra/newview/llpanelblockedlist.cpp')
-rw-r--r-- | indra/newview/llpanelblockedlist.cpp | 652 |
1 files changed, 326 insertions, 326 deletions
diff --git a/indra/newview/llpanelblockedlist.cpp b/indra/newview/llpanelblockedlist.cpp index 1b481dde7d..6608b8169d 100644 --- a/indra/newview/llpanelblockedlist.cpp +++ b/indra/newview/llpanelblockedlist.cpp @@ -1,326 +1,326 @@ -/** - * @file llpanelblockedlist.cpp - * @brief Container for blocked Residents & Objects list - * - * $LicenseInfo:firstyear=2001&license=viewerlgpl$ - * Second Life Viewer Source Code - * 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. - * - * 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 - * - * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA - * $/LicenseInfo$ - */ - -#include "llviewerprecompiledheaders.h" - -#include "llpanelblockedlist.h" - -// library include -#include "llavatarname.h" -#include "llfiltereditor.h" -#include "llfloater.h" -#include "llfloaterreg.h" -#include "llnotificationsutil.h" -#include "llscrolllistctrl.h" -#include "llmenubutton.h" - -// project include -#include "llavatarlistitem.h" -#include "llblocklist.h" -#include "llblockedlistitem.h" -#include "llfloateravatarpicker.h" -#include "llfloatersidepanelcontainer.h" -#include "llinventorylistitem.h" -#include "llinventorymodel.h" -#include "llsidetraypanelcontainer.h" -#include "llviewercontrol.h" - -static LLPanelInjector<LLPanelBlockedList> t_panel_blocked_list("panel_block_list_sidetray"); - -// -// Constants -// -const std::string BLOCKED_PARAM_NAME = "blocked_to_select"; - -//----------------------------------------------------------------------------- -// LLPanelBlockedList() -//----------------------------------------------------------------------------- - -LLPanelBlockedList::LLPanelBlockedList() -: LLPanel() -{ - mCommitCallbackRegistrar.add("Block.Action", boost::bind(&LLPanelBlockedList::onCustomAction, this, _2)); - mEnableCallbackRegistrar.add("Block.Check", boost::bind(&LLPanelBlockedList::isActionChecked, this, _2)); -} - -void LLPanelBlockedList::removePicker() -{ - if(mPicker.get()) - { - mPicker.get()->closeFloater(); - } -} - -bool LLPanelBlockedList::postBuild() -{ - mBlockedList = getChild<LLBlockList>("blocked"); - mBlockedList->setCommitOnSelectionChange(true); - this->setVisibleCallback(boost::bind(&LLPanelBlockedList::removePicker, this)); - - switch (gSavedSettings.getU32("BlockPeopleSortOrder")) - { - case E_SORT_BY_NAME: - mBlockedList->sortByName(); - break; - - case E_SORT_BY_TYPE: - mBlockedList->sortByType(); - break; - default: - LL_WARNS() << "Unrecognized sort order for blocked list" << LL_ENDL; - break; - } - - // Use the context menu of the Block list for the Block tab gear menu. - LLToggleableMenu* blocked_gear_menu = mBlockedList->getContextMenu(); - if (blocked_gear_menu) - { - getChild<LLMenuButton>("blocked_gear_btn")->setMenu(blocked_gear_menu, LLMenuButton::MP_BOTTOM_LEFT); - } - - getChild<LLButton>("unblock_btn")->setCommitCallback(boost::bind(&LLPanelBlockedList::unblockItem, this)); - getChild<LLFilterEditor>("blocked_filter_input")->setCommitCallback(boost::bind(&LLPanelBlockedList::onFilterEdit, this, _2)); - - return LLPanel::postBuild(); -} - -void LLPanelBlockedList::draw() -{ - updateButtons(); - LLPanel::draw(); -} - -void LLPanelBlockedList::onOpen(const LLSD& key) -{ - if (key.has(BLOCKED_PARAM_NAME) && key[BLOCKED_PARAM_NAME].asUUID().notNull()) - { - selectBlocked(key[BLOCKED_PARAM_NAME].asUUID()); - } -} - -void LLPanelBlockedList::selectBlocked(const LLUUID& mute_id) -{ - mBlockedList->resetSelection(); - mBlockedList->selectItemByUUID(mute_id); -} - -void LLPanelBlockedList::showPanelAndSelect(const LLUUID& idToSelect) -{ - LLFloaterSidePanelContainer::showPanel("people", "panel_people", - LLSD().with("people_panel_tab_name", "blocked_panel").with(BLOCKED_PARAM_NAME, idToSelect)); -} - - -////////////////////////////////////////////////////////////////////////// -// Private Section -////////////////////////////////////////////////////////////////////////// -void LLPanelBlockedList::updateButtons() -{ - bool hasSelected = NULL != mBlockedList->getSelectedItem(); - getChildView("unblock_btn")->setEnabled(hasSelected); - getChildView("blocked_gear_btn")->setEnabled(hasSelected); - - getChild<LLUICtrl>("block_limit")->setTextArg("[COUNT]", llformat("%d", mBlockedList->getMuteListSize())); - getChild<LLUICtrl>("block_limit")->setTextArg("[LIMIT]", llformat("%d", gSavedSettings.getS32("MuteListLimit"))); -} - -void LLPanelBlockedList::unblockItem() -{ - LLBlockedListItem* item = mBlockedList->getBlockedItem(); - if (item) - { - LLMute mute(item->getUUID(), item->getName()); - LLMuteList::instance().remove(mute); - } -} - -void LLPanelBlockedList::onCustomAction(const LLSD& userdata) -{ - const std::string command_name = userdata.asString(); - - if ("block_obj_by_name" == command_name) - { - blockObjectByName(); - } - else if ("block_res_by_name" == command_name) - { - blockResidentByName(); - } - else if ("sort_by_name" == command_name) - { - mBlockedList->sortByName(); - gSavedSettings.setU32("BlockPeopleSortOrder", E_SORT_BY_NAME); - } - else if ("sort_by_type" == command_name) - { - mBlockedList->sortByType(); - gSavedSettings.setU32("BlockPeopleSortOrder", E_SORT_BY_TYPE); - } -} - -bool LLPanelBlockedList::isActionChecked(const LLSD& userdata) -{ - std::string item = userdata.asString(); - U32 sort_order = gSavedSettings.getU32("BlockPeopleSortOrder"); - - if ("sort_by_name" == item) - { - return E_SORT_BY_NAME == sort_order; - } - else if ("sort_by_type" == item) - { - return E_SORT_BY_TYPE == sort_order; - } - - return false; -} - -void LLPanelBlockedList::blockResidentByName() -{ - const bool allow_multiple = false; - const bool close_on_select = true; - - LLView * button = findChild<LLButton>("plus_btn", true); - LLFloater* root_floater = gFloaterView->getParentFloater(this); - LLFloaterAvatarPicker * picker = LLFloaterAvatarPicker::show(boost::bind(&LLPanelBlockedList::callbackBlockPicked, this, _1, _2), - allow_multiple, close_on_select, false, root_floater->getName(), button); - - if (root_floater) - { - root_floater->addDependentFloater(picker); - } - - mPicker = picker->getHandle(); -} - -void LLPanelBlockedList::blockObjectByName() -{ - LLFloaterGetBlockedObjectName::show(&LLPanelBlockedList::callbackBlockByName); -} - -void LLPanelBlockedList::onFilterEdit(const std::string& search_string) -{ - std::string filter = search_string; - LLStringUtil::trimHead(filter); - - mBlockedList->setNameFilter(filter); -} - -void LLPanelBlockedList::callbackBlockPicked(const uuid_vec_t& ids, const std::vector<LLAvatarName> names) -{ - if (names.empty() || ids.empty()) return; - LLMute mute(ids[0], names[0].getUserName(), LLMute::AGENT); - LLMuteList::getInstance()->add(mute); - showPanelAndSelect(mute.mID); -} - -//static -void LLPanelBlockedList::callbackBlockByName(const std::string& text) -{ - if (text.empty()) return; - - LLMute mute(LLUUID::null, text, LLMute::BY_NAME); - bool success = LLMuteList::getInstance()->add(mute); - if (!success) - { - LLNotificationsUtil::add("MuteByNameFailed"); - } -} - -////////////////////////////////////////////////////////////////////////// -// LLFloaterGetBlockedObjectName -////////////////////////////////////////////////////////////////////////// - -// Constructor/Destructor -LLFloaterGetBlockedObjectName::LLFloaterGetBlockedObjectName(const LLSD& key) -: LLFloater(key) -, mGetObjectNameCallback(NULL) -{ -} - -// Destroys the object -LLFloaterGetBlockedObjectName::~LLFloaterGetBlockedObjectName() -{ - gFocusMgr.releaseFocusIfNeeded( this ); -} - -bool LLFloaterGetBlockedObjectName::postBuild() -{ - getChild<LLButton>("OK")-> setCommitCallback(boost::bind(&LLFloaterGetBlockedObjectName::applyBlocking, this)); - getChild<LLButton>("Cancel")-> setCommitCallback(boost::bind(&LLFloaterGetBlockedObjectName::cancelBlocking, this)); - center(); - - return LLFloater::postBuild(); -} - -bool LLFloaterGetBlockedObjectName::handleKeyHere(KEY key, MASK mask) -{ - if (key == KEY_RETURN && mask == MASK_NONE) - { - applyBlocking(); - return true; - } - else if (key == KEY_ESCAPE && mask == MASK_NONE) - { - cancelBlocking(); - return true; - } - - return LLFloater::handleKeyHere(key, mask); -} - -// static -LLFloaterGetBlockedObjectName* LLFloaterGetBlockedObjectName::show(get_object_name_callback_t callback) -{ - LLFloaterGetBlockedObjectName* floater = LLFloaterReg::showTypedInstance<LLFloaterGetBlockedObjectName>("mute_object_by_name"); - - floater->mGetObjectNameCallback = callback; - - // *TODO: mantipov: should LLFloaterGetBlockedObjectName be closed when panel is closed? - // old Floater dependency is not enable in panel - // addDependentFloater(floater); - - return floater; -} - -////////////////////////////////////////////////////////////////////////// -// Private Section -void LLFloaterGetBlockedObjectName::applyBlocking() -{ - if (mGetObjectNameCallback) - { - const std::string& text = getChild<LLUICtrl>("object_name")->getValue().asString(); - mGetObjectNameCallback(text); - } - closeFloater(); -} - -void LLFloaterGetBlockedObjectName::cancelBlocking() -{ - closeFloater(); -} - -//EOF +/**
+ * @file llpanelblockedlist.cpp
+ * @brief Container for blocked Residents & Objects list
+ *
+ * $LicenseInfo:firstyear=2001&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * 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.
+ *
+ * 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
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+#include "llviewerprecompiledheaders.h"
+
+#include "llpanelblockedlist.h"
+
+// library include
+#include "llavatarname.h"
+#include "llfiltereditor.h"
+#include "llfloater.h"
+#include "llfloaterreg.h"
+#include "llnotificationsutil.h"
+#include "llscrolllistctrl.h"
+#include "llmenubutton.h"
+
+// project include
+#include "llavatarlistitem.h"
+#include "llblocklist.h"
+#include "llblockedlistitem.h"
+#include "llfloateravatarpicker.h"
+#include "llfloatersidepanelcontainer.h"
+#include "llinventorylistitem.h"
+#include "llinventorymodel.h"
+#include "llsidetraypanelcontainer.h"
+#include "llviewercontrol.h"
+
+static LLPanelInjector<LLPanelBlockedList> t_panel_blocked_list("panel_block_list_sidetray");
+
+//
+// Constants
+//
+const std::string BLOCKED_PARAM_NAME = "blocked_to_select";
+
+//-----------------------------------------------------------------------------
+// LLPanelBlockedList()
+//-----------------------------------------------------------------------------
+
+LLPanelBlockedList::LLPanelBlockedList()
+: LLPanel()
+{
+ mCommitCallbackRegistrar.add("Block.Action", boost::bind(&LLPanelBlockedList::onCustomAction, this, _2));
+ mEnableCallbackRegistrar.add("Block.Check", boost::bind(&LLPanelBlockedList::isActionChecked, this, _2));
+}
+
+void LLPanelBlockedList::removePicker()
+{
+ if(mPicker.get())
+ {
+ mPicker.get()->closeFloater();
+ }
+}
+
+bool LLPanelBlockedList::postBuild()
+{
+ mBlockedList = getChild<LLBlockList>("blocked");
+ mBlockedList->setCommitOnSelectionChange(true);
+ this->setVisibleCallback(boost::bind(&LLPanelBlockedList::removePicker, this));
+
+ switch (gSavedSettings.getU32("BlockPeopleSortOrder"))
+ {
+ case E_SORT_BY_NAME:
+ mBlockedList->sortByName();
+ break;
+
+ case E_SORT_BY_TYPE:
+ mBlockedList->sortByType();
+ break;
+ default:
+ LL_WARNS() << "Unrecognized sort order for blocked list" << LL_ENDL;
+ break;
+ }
+
+ // Use the context menu of the Block list for the Block tab gear menu.
+ LLToggleableMenu* blocked_gear_menu = mBlockedList->getContextMenu();
+ if (blocked_gear_menu)
+ {
+ getChild<LLMenuButton>("blocked_gear_btn")->setMenu(blocked_gear_menu, LLMenuButton::MP_BOTTOM_LEFT);
+ }
+
+ getChild<LLButton>("unblock_btn")->setCommitCallback(boost::bind(&LLPanelBlockedList::unblockItem, this));
+ getChild<LLFilterEditor>("blocked_filter_input")->setCommitCallback(boost::bind(&LLPanelBlockedList::onFilterEdit, this, _2));
+
+ return LLPanel::postBuild();
+}
+
+void LLPanelBlockedList::draw()
+{
+ updateButtons();
+ LLPanel::draw();
+}
+
+void LLPanelBlockedList::onOpen(const LLSD& key)
+{
+ if (key.has(BLOCKED_PARAM_NAME) && key[BLOCKED_PARAM_NAME].asUUID().notNull())
+ {
+ selectBlocked(key[BLOCKED_PARAM_NAME].asUUID());
+ }
+}
+
+void LLPanelBlockedList::selectBlocked(const LLUUID& mute_id)
+{
+ mBlockedList->resetSelection();
+ mBlockedList->selectItemByUUID(mute_id);
+}
+
+void LLPanelBlockedList::showPanelAndSelect(const LLUUID& idToSelect)
+{
+ LLFloaterSidePanelContainer::showPanel("people", "panel_people",
+ LLSD().with("people_panel_tab_name", "blocked_panel").with(BLOCKED_PARAM_NAME, idToSelect));
+}
+
+
+//////////////////////////////////////////////////////////////////////////
+// Private Section
+//////////////////////////////////////////////////////////////////////////
+void LLPanelBlockedList::updateButtons()
+{
+ bool hasSelected = NULL != mBlockedList->getSelectedItem();
+ getChildView("unblock_btn")->setEnabled(hasSelected);
+ getChildView("blocked_gear_btn")->setEnabled(hasSelected);
+
+ getChild<LLUICtrl>("block_limit")->setTextArg("[COUNT]", llformat("%d", mBlockedList->getMuteListSize()));
+ getChild<LLUICtrl>("block_limit")->setTextArg("[LIMIT]", llformat("%d", gSavedSettings.getS32("MuteListLimit")));
+}
+
+void LLPanelBlockedList::unblockItem()
+{
+ LLBlockedListItem* item = mBlockedList->getBlockedItem();
+ if (item)
+ {
+ LLMute mute(item->getUUID(), item->getName());
+ LLMuteList::instance().remove(mute);
+ }
+}
+
+void LLPanelBlockedList::onCustomAction(const LLSD& userdata)
+{
+ const std::string command_name = userdata.asString();
+
+ if ("block_obj_by_name" == command_name)
+ {
+ blockObjectByName();
+ }
+ else if ("block_res_by_name" == command_name)
+ {
+ blockResidentByName();
+ }
+ else if ("sort_by_name" == command_name)
+ {
+ mBlockedList->sortByName();
+ gSavedSettings.setU32("BlockPeopleSortOrder", E_SORT_BY_NAME);
+ }
+ else if ("sort_by_type" == command_name)
+ {
+ mBlockedList->sortByType();
+ gSavedSettings.setU32("BlockPeopleSortOrder", E_SORT_BY_TYPE);
+ }
+}
+
+bool LLPanelBlockedList::isActionChecked(const LLSD& userdata)
+{
+ std::string item = userdata.asString();
+ U32 sort_order = gSavedSettings.getU32("BlockPeopleSortOrder");
+
+ if ("sort_by_name" == item)
+ {
+ return E_SORT_BY_NAME == sort_order;
+ }
+ else if ("sort_by_type" == item)
+ {
+ return E_SORT_BY_TYPE == sort_order;
+ }
+
+ return false;
+}
+
+void LLPanelBlockedList::blockResidentByName()
+{
+ const bool allow_multiple = false;
+ const bool close_on_select = true;
+
+ LLView * button = findChild<LLButton>("plus_btn", true);
+ LLFloater* root_floater = gFloaterView->getParentFloater(this);
+ LLFloaterAvatarPicker * picker = LLFloaterAvatarPicker::show(boost::bind(&LLPanelBlockedList::callbackBlockPicked, this, _1, _2),
+ allow_multiple, close_on_select, false, root_floater->getName(), button);
+
+ if (root_floater)
+ {
+ root_floater->addDependentFloater(picker);
+ }
+
+ mPicker = picker->getHandle();
+}
+
+void LLPanelBlockedList::blockObjectByName()
+{
+ LLFloaterGetBlockedObjectName::show(&LLPanelBlockedList::callbackBlockByName);
+}
+
+void LLPanelBlockedList::onFilterEdit(const std::string& search_string)
+{
+ std::string filter = search_string;
+ LLStringUtil::trimHead(filter);
+
+ mBlockedList->setNameFilter(filter);
+}
+
+void LLPanelBlockedList::callbackBlockPicked(const uuid_vec_t& ids, const std::vector<LLAvatarName> names)
+{
+ if (names.empty() || ids.empty()) return;
+ LLMute mute(ids[0], names[0].getUserName(), LLMute::AGENT);
+ LLMuteList::getInstance()->add(mute);
+ showPanelAndSelect(mute.mID);
+}
+
+//static
+void LLPanelBlockedList::callbackBlockByName(const std::string& text)
+{
+ if (text.empty()) return;
+
+ LLMute mute(LLUUID::null, text, LLMute::BY_NAME);
+ bool success = LLMuteList::getInstance()->add(mute);
+ if (!success)
+ {
+ LLNotificationsUtil::add("MuteByNameFailed");
+ }
+}
+
+//////////////////////////////////////////////////////////////////////////
+// LLFloaterGetBlockedObjectName
+//////////////////////////////////////////////////////////////////////////
+
+// Constructor/Destructor
+LLFloaterGetBlockedObjectName::LLFloaterGetBlockedObjectName(const LLSD& key)
+: LLFloater(key)
+, mGetObjectNameCallback(NULL)
+{
+}
+
+// Destroys the object
+LLFloaterGetBlockedObjectName::~LLFloaterGetBlockedObjectName()
+{
+ gFocusMgr.releaseFocusIfNeeded( this );
+}
+
+bool LLFloaterGetBlockedObjectName::postBuild()
+{
+ getChild<LLButton>("OK")-> setCommitCallback(boost::bind(&LLFloaterGetBlockedObjectName::applyBlocking, this));
+ getChild<LLButton>("Cancel")-> setCommitCallback(boost::bind(&LLFloaterGetBlockedObjectName::cancelBlocking, this));
+ center();
+
+ return LLFloater::postBuild();
+}
+
+bool LLFloaterGetBlockedObjectName::handleKeyHere(KEY key, MASK mask)
+{
+ if (key == KEY_RETURN && mask == MASK_NONE)
+ {
+ applyBlocking();
+ return true;
+ }
+ else if (key == KEY_ESCAPE && mask == MASK_NONE)
+ {
+ cancelBlocking();
+ return true;
+ }
+
+ return LLFloater::handleKeyHere(key, mask);
+}
+
+// static
+LLFloaterGetBlockedObjectName* LLFloaterGetBlockedObjectName::show(get_object_name_callback_t callback)
+{
+ LLFloaterGetBlockedObjectName* floater = LLFloaterReg::showTypedInstance<LLFloaterGetBlockedObjectName>("mute_object_by_name");
+
+ floater->mGetObjectNameCallback = callback;
+
+ // *TODO: mantipov: should LLFloaterGetBlockedObjectName be closed when panel is closed?
+ // old Floater dependency is not enable in panel
+ // addDependentFloater(floater);
+
+ return floater;
+}
+
+//////////////////////////////////////////////////////////////////////////
+// Private Section
+void LLFloaterGetBlockedObjectName::applyBlocking()
+{
+ if (mGetObjectNameCallback)
+ {
+ const std::string& text = getChild<LLUICtrl>("object_name")->getValue().asString();
+ mGetObjectNameCallback(text);
+ }
+ closeFloater();
+}
+
+void LLFloaterGetBlockedObjectName::cancelBlocking()
+{
+ closeFloater();
+}
+
+//EOF
|