summaryrefslogtreecommitdiff
path: root/indra/newview/llpanelplaces.cpp
diff options
context:
space:
mode:
authorSteven Bennetts <steve@lindenlab.com>2009-09-29 19:37:05 +0000
committerSteven Bennetts <steve@lindenlab.com>2009-09-29 19:37:05 +0000
commit606b381c9fbc43c214afd26fb2e2598eec656b66 (patch)
tree422a6d5d94d50bd97ac5bcbdb52f0f6de083c6e7 /indra/newview/llpanelplaces.cpp
parent751cc7cf68bb4d766e8ecaaf76af054dcfbbe9dc (diff)
merge https://svn.aws.productengine.com/secondlife/export-from-ll/viewer-2-0@1830 https://svn.aws.productengine.com/secondlife/pe/stable-2@1839 -> viewer-2.0.0-3
JIRAS: EXT-96 EXT-204 EXT-312 EXT-334 EXT-479 EXT-498 EXT-514 EXT-637 EXT-647 EXT-746 EXT-748 EXT-749 EXT-757 EXT-789 EXT-794 EXT-808 EXT-817 EXT-823 EXT-831 EXT-834 EXT-837 EXT-844 EXT-848 EXT-862 EXT-876 EXT-896 EXT-897 EXT-898 EXT-899 EXT-910 EXT-912 EXT-918 EXT-921 EXT-925 EXT-926 EXT-928 EXT-930 EXT-931 EXT-935 EXT-938 EXT-939 EXT-952 EXT-985 EXT-986 EXT-992 EXT-994 EXT-995 EXT-996 EXT-997 EXT-998 EXT-1001 EXT-1004 EXT-1010 EXT-1012 EXT-1016 EXT-1018 EXT-1020 EXT-1028 EXT-1041 EXT-1044 EXT-1051 EXT-1052 EXT-1061 EXT-1069 EXT-1071 EXT-1074 EXT-1075 EXT-1076 EXT-1078 EXT-1080 EXT-1081 EXT-1082 EXT-1083 EXT-1085 EXT-1092 EXT-1093 EXT-1099 EXT-1100 EXT-1101 EXT-1104 EXT-1106 EXT-1111 EXT-1113 EXT-1114 EXT-1115 EXT-1116 EXT-1118 EXT-1119 EXT-1129 EXT-1132 EXT-1135 EXT-1138 EXT-1142 EXT-1161 EXT-1162 EXT-1178 EXT-1180 * NEW DEVELOPMENT: * EXT-898 - Add dock/undock support for camera and movement controls * Avatar list changes * Bottom bar changes: menu, docking, visibility * Camera changes * Camera & Movement Floaters * Dockable Floaters (LLDockableFloater) * Removed LLListCtrl * Toast / Notification changes: signal / destruction changes, ordering * Nearby chat input should display active voice indicator QA NOTES: * Message Well Window is ready to be tested for regression & matching the spec. * Verify Group List Item L&F * Verify All tabs in People Panel * Verify that Picks behavior is not changed
Diffstat (limited to 'indra/newview/llpanelplaces.cpp')
-rw-r--r--indra/newview/llpanelplaces.cpp91
1 files changed, 78 insertions, 13 deletions
diff --git a/indra/newview/llpanelplaces.cpp b/indra/newview/llpanelplaces.cpp
index 11ddc3dd9a..4e070df7eb 100644
--- a/indra/newview/llpanelplaces.cpp
+++ b/indra/newview/llpanelplaces.cpp
@@ -48,14 +48,15 @@
#include "lluictrlfactory.h"
#include "llagent.h"
+#include "llavatarpropertiesprocessor.h"
#include "llfloaterworldmap.h"
#include "llinventorymodel.h"
#include "lllandmarkactions.h"
#include "lllandmarklist.h"
#include "llpanelplaceinfo.h"
#include "llpanellandmarks.h"
+#include "llpanelpick.h"
#include "llpanelteleporthistory.h"
-#include "llsidetray.h"
#include "llteleporthistorystorage.h"
#include "lltoggleablemenu.h"
#include "llviewerinventory.h"
@@ -72,10 +73,12 @@ static const std::string REMOTE_PLACE_INFO_TYPE = "remote_place";
static const std::string TELEPORT_HISTORY_INFO_TYPE = "teleport_history";
// Helper functions
+static bool is_agent_in_selected_parcel(LLParcel* parcel);
static bool cmp_folders(const folder_pair_t& left, const folder_pair_t& right);
static std::string getFullFolderName(const LLViewerInventoryCategory* cat);
static void collectLandmarkFolders(LLInventoryModel::cat_array_t& cats);
static void onSLURLBuilt(std::string& slurl);
+static void setAllChildrenVisible(LLView* view, BOOL visible);
//Observer classes
class LLPlacesParcelObserver : public LLParcelObserver
@@ -118,6 +121,7 @@ LLPanelPlaces::LLPanelPlaces()
mActivePanel(NULL),
mFilterEditor(NULL),
mPlaceInfo(NULL),
+ mPickPanel(NULL),
mItem(NULL),
mPlaceMenu(NULL),
mLandmarkMenu(NULL),
@@ -332,6 +336,7 @@ void LLPanelPlaces::onFilterEdit(const std::string& search_string)
LLStringUtil::toUpper(mFilterSubString);
LLStringUtil::trimHead(mFilterSubString);
+ if (mActivePanel)
mActivePanel->onSearchEdit(mFilterSubString);
}
}
@@ -380,6 +385,7 @@ void LLPanelPlaces::onTeleportButtonClicked()
}
else
{
+ if (mActivePanel)
mActivePanel->onTeleport();
}
}
@@ -425,6 +431,7 @@ void LLPanelPlaces::onShowOnMapButtonClicked()
}
else
{
+ if (mActivePanel)
mActivePanel->onShowOnMap();
}
}
@@ -496,10 +503,23 @@ void LLPanelPlaces::onOverflowMenuItemClicked(const LLSD& param)
{
if (!mPlaceInfo)
return;
-
- mPlaceInfo->createPick(mPosGlobal);
- onBackButtonClicked();
+ if (mPickPanel == NULL)
+ {
+ mPickPanel = new LLPanelPick();
+ addChild(mPickPanel);
+
+ mPickPanel->setExitCallback(boost::bind(&LLPanelPlaces::togglePickPanel, this, FALSE));
+ }
+
+ togglePickPanel(TRUE);
+
+ LLRect rect = getRect();
+ mPickPanel->reshape(rect.getWidth(), rect.getHeight());
+ mPickPanel->setRect(rect);
+ mPickPanel->setEditMode(TRUE);
+
+ mPlaceInfo->createPick(mPosGlobal, mPickPanel);
}
}
@@ -508,6 +528,12 @@ void LLPanelPlaces::onCreateLandmarkButtonClicked(const LLUUID& folder_id)
if (!mPlaceInfo)
return;
+ // To prevent creating duplicate landmarks
+ // disable landmark creating buttons until
+ // the information on existing landmarks is reloaded.
+ mCreateLandmarkBtn->setEnabled(FALSE);
+ mFolderMenuBtn->setEnabled(FALSE);
+
mPlaceInfo->createLandmark(folder_id);
}
@@ -544,6 +570,14 @@ void LLPanelPlaces::toggleMediaPanel()
onOpen(LLSD().insert("type", AGENT_INFO_TYPE));
}
+void LLPanelPlaces::togglePickPanel(BOOL visible)
+{
+ setAllChildrenVisible(this, !visible);
+
+ if (mPickPanel)
+ mPickPanel->setVisible(visible);
+}
+
void LLPanelPlaces::togglePlaceInfoPanel(BOOL visible)
{
if (!mPlaceInfo)
@@ -568,16 +602,16 @@ void LLPanelPlaces::changedParcelSelection()
if (!mPlaceInfo)
return;
- mParcel = LLViewerParcelMgr::getInstance()->getFloatingParcelSelection();
+ LLViewerParcelMgr* parcel_mgr = LLViewerParcelMgr::getInstance();
+ mParcel = parcel_mgr->getFloatingParcelSelection();
LLParcel* parcel = mParcel->getParcel();
- LLViewerRegion* region = LLViewerParcelMgr::getInstance()->getSelectionRegion();
+ LLViewerRegion* region = parcel_mgr->getSelectionRegion();
if (!region || !parcel)
return;
// If agent is inside the selected parcel show agent's region<X, Y, Z>,
// otherwise show region<X, Y, Z> of agent's selection point.
- if (region == gAgent.getRegion() &&
- parcel->getLocalID() == LLViewerParcelMgr::getInstance()->getAgentParcel()->getLocalID())
+ if (is_agent_in_selected_parcel(parcel))
{
mPosGlobal = gAgent.getPositionGlobal();
}
@@ -629,6 +663,10 @@ void LLPanelPlaces::changedInventory(U32 mask)
mActivePanel = dynamic_cast<LLPanelPlacesTab*>(mTabContainer->getCurrentPanel());
+ // Filter applied to show all items.
+ if (mActivePanel)
+ mActivePanel->onSearchEdit(mFilterSubString);
+
// we don't need to monitor inventory changes anymore,
// so remove the observer
gInventory.removeObserver(mInventoryObserver);
@@ -658,7 +696,7 @@ void LLPanelPlaces::updateVerbs()
bool is_agent_place_info_visible = mPlaceInfoType == AGENT_INFO_TYPE;
bool is_create_landmark_visible = mPlaceInfoType == CREATE_LANDMARK_INFO_TYPE;
bool is_media_panel_visible = mPlaceInfo->isMediaPanelVisible();
-
+
mTeleportBtn->setVisible(!is_create_landmark_visible);
mShareBtn->setVisible(!is_create_landmark_visible);
mCreateLandmarkBtn->setVisible(is_create_landmark_visible);
@@ -679,10 +717,11 @@ void LLPanelPlaces::updateVerbs()
else if (is_create_landmark_visible)
{
// Enable "Create Landmark" only if there is no landmark
- // for the current parcel.
- bool no_landmark = !LLLandmarkActions::landmarkAlreadyExists();
- mCreateLandmarkBtn->setEnabled(no_landmark);
- mFolderMenuBtn->setEnabled(no_landmark);
+ // for the current parcel and agent is inside it.
+ bool enable = !LLLandmarkActions::landmarkAlreadyExists() &&
+ is_agent_in_selected_parcel(mParcel->getParcel());
+ mCreateLandmarkBtn->setEnabled(enable);
+ mFolderMenuBtn->setEnabled(enable);
}
else if (mPlaceInfoType == LANDMARK_INFO_TYPE || mPlaceInfoType == REMOTE_PLACE_INFO_TYPE)
{
@@ -693,6 +732,7 @@ void LLPanelPlaces::updateVerbs()
}
else
{
+ if (mActivePanel)
mActivePanel->updateVerbs();
}
}
@@ -822,6 +862,18 @@ void LLPanelPlaces::showLandmarkFoldersMenu()
LLMenuGL::showPopup(this, menu, btn_rect.mRight, btn_rect.mTop);
}
+static bool is_agent_in_selected_parcel(LLParcel* parcel)
+{
+ LLViewerParcelMgr* parcel_mgr = LLViewerParcelMgr::getInstance();
+
+ LLViewerRegion* region = parcel_mgr->getSelectionRegion();
+ if (!region || !parcel)
+ return false;
+
+ return region == gAgent.getRegion() &&
+ parcel->getLocalID() == parcel_mgr->getAgentParcel()->getLocalID();
+}
+
static bool cmp_folders(const folder_pair_t& left, const folder_pair_t& right)
{
return left.second < right.second;
@@ -895,3 +947,16 @@ static void onSLURLBuilt(std::string& slurl)
LLNotifications::instance().add("CopySLURL", args);
}
+
+static void setAllChildrenVisible(LLView* view, BOOL visible)
+{
+ const LLView::child_list_t* children = view->getChildList();
+ for (LLView::child_list_const_iter_t child_it = children->begin(); child_it != children->end(); ++child_it)
+ {
+ LLView* child = *child_it;
+ if (child->getParent() == view)
+ {
+ child->setVisible(visible);
+ }
+ }
+}