summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCho <cho@lindenlab.com>2014-04-24 23:43:54 +0100
committerCho <cho@lindenlab.com>2014-04-24 23:43:54 +0100
commit446a3193b1f2932ed14a16216bcf65dc30889612 (patch)
tree97328bce131aaf4dc0d1ff71ea712f3e38e09a7d
parent2206f97d8efb2683e6c0d759a8549de9de67a054 (diff)
Refactored to share code between experience search floater and panel for ACME-1420
-rw-r--r--indra/newview/llfloaterexperiencepicker.cpp372
-rw-r--r--indra/newview/llfloaterexperiencepicker.h35
-rwxr-xr-xindra/newview/llfloaterregioninfo.cpp8
-rw-r--r--indra/newview/llpanelexperiencepicker.cpp60
-rw-r--r--indra/newview/llpanelexperiencepicker.h5
-rw-r--r--indra/newview/skins/default/xui/en/floater_experience_search.xml156
-rwxr-xr-xindra/newview/skins/default/xui/en/menu_viewer.xml7
-rw-r--r--indra/newview/skins/default/xui/en/panel_experience_search.xml30
8 files changed, 100 insertions, 573 deletions
diff --git a/indra/newview/llfloaterexperiencepicker.cpp b/indra/newview/llfloaterexperiencepicker.cpp
index f68bf7f9a6..4a484463e8 100644
--- a/indra/newview/llfloaterexperiencepicker.cpp
+++ b/indra/newview/llfloaterexperiencepicker.cpp
@@ -42,46 +42,8 @@
#include "llcombobox.h"
#include "llviewercontrol.h"
#include "lldraghandle.h"
+#include "llpanelexperiencepicker.h"
-#define BTN_FIND "find"
-#define BTN_OK "ok_btn"
-#define BTN_CANCEL "cancel_btn"
-#define BTN_PROFILE "profile_btn"
-#define TEXT_EDIT "edit"
-#define TEXT_MATURITY "maturity"
-#define LIST_RESULTS "search_results"
-#define PANEL_SEARCH "search_panel"
-
-const static std::string columnSpace = " ";
-
-class LLExperiencePickerResponder : public LLHTTPClient::Responder
-{
-public:
- LLUUID mQueryID;
- LLHandle<LLFloaterExperiencePicker> mParent;
-
- LLExperiencePickerResponder(const LLUUID& id, const LLHandle<LLFloaterExperiencePicker>& parent) : mQueryID(id), mParent(parent) { }
-
- void completed(U32 status, const std::string& reason, const LLSD& content)
- {
- if (isGoodStatus(status))
- {
- if(mParent.isDead())
- return;
-
- LLFloaterExperiencePicker* floater =mParent.get();
- if (floater)
- {
- floater->processResponse(mQueryID, content);
- }
- }
- else
- {
- llwarns << "avatar picker failed [status:" << status << "]: " << content << llendl;
-
- }
- }
-};
LLFloaterExperiencePicker* LLFloaterExperiencePicker::show( select_callback_t callback, const LLUUID& key, BOOL allow_multiple, BOOL closeOnSelect, LLView * frustumOrigin )
{
LLFloaterExperiencePicker* floater =
@@ -94,7 +56,7 @@ LLFloaterExperiencePicker* LLFloaterExperiencePicker::show( select_callback_t ca
floater->mSelectionCallback = callback;
floater->mCloseOnSelect = closeOnSelect;
- floater->setAllowMultiple(allow_multiple);
+ floater->mAllowMultiple = allow_multiple;
if(frustumOrigin)
{
@@ -104,7 +66,6 @@ LLFloaterExperiencePicker* LLFloaterExperiencePicker::show( select_callback_t ca
return floater;
}
-
void LLFloaterExperiencePicker::drawFrustum()
{
if(mFrustumOrigin.get())
@@ -170,13 +131,12 @@ void LLFloaterExperiencePicker::draw()
LLFloaterExperiencePicker::LLFloaterExperiencePicker( const LLSD& key )
:LLFloater(key)
- ,mContextConeOpacity (0.f)
+ ,mSearchPanel(NULL)
+ ,mContextConeOpacity(0.f)
,mContextConeInAlpha(0.f)
,mContextConeOutAlpha(0.f)
,mContextConeFadeTime(0.f)
{
- setDefaultFilters();
-
mContextConeInAlpha = gSavedSettings.getF32("ContextConeInAlpha");
mContextConeOutAlpha = gSavedSettings.getF32("ContextConeOutAlpha");
mContextConeFadeTime = gSavedSettings.getF32("ContextConeFadeTime");
@@ -187,324 +147,14 @@ LLFloaterExperiencePicker::~LLFloaterExperiencePicker()
gFocusMgr.releaseFocusIfNeeded( this );
}
-
-
BOOL LLFloaterExperiencePicker::postBuild()
{
- getChild<LLLineEditor>(TEXT_EDIT)->setKeystrokeCallback( boost::bind(&LLFloaterExperiencePicker::editKeystroke, this, _1, _2),NULL);
-
- childSetAction(BTN_FIND, boost::bind(&LLFloaterExperiencePicker::onBtnFind, this));
- getChildView(BTN_FIND)->setEnabled(FALSE);
-
- LLScrollListCtrl* searchresults = getChild<LLScrollListCtrl>(LIST_RESULTS);
- searchresults->setDoubleClickCallback( boost::bind(&LLFloaterExperiencePicker::onBtnSelect, this));
- searchresults->setCommitCallback(boost::bind(&LLFloaterExperiencePicker::onList, this));
- getChildView(LIST_RESULTS)->setEnabled(FALSE);
- getChild<LLScrollListCtrl>(LIST_RESULTS)->setCommentText(getString("no_results"));
-
- childSetAction(BTN_OK, boost::bind(&LLFloaterExperiencePicker::onBtnSelect, this));
- getChildView(BTN_OK)->setEnabled(FALSE);
- childSetAction(BTN_CANCEL, boost::bind(&LLFloaterExperiencePicker::onBtnClose, this));
- childSetAction(BTN_PROFILE, boost::bind(&LLFloaterExperiencePicker::onBtnProfile, this));
- getChildView(BTN_PROFILE)->setEnabled(FALSE);
-
- getChild<LLComboBox>(TEXT_MATURITY)->setCurrentByIndex(2);
- getChild<LLComboBox>(TEXT_MATURITY)->setCommitCallback(boost::bind(&LLFloaterExperiencePicker::onMaturity, this));
- getChild<LLUICtrl>(TEXT_EDIT)->setFocus(TRUE);
-
- LLPanel* search_panel = getChild<LLPanel>(PANEL_SEARCH);
- if (search_panel)
- {
- // Start searching when Return is pressed in the line editor.
- search_panel->setDefaultBtn(BTN_FIND);
- }
- return TRUE;
-}
-
-void LLFloaterExperiencePicker::editKeystroke( class LLLineEditor* caller, void* user_data )
-{
- getChildView(BTN_FIND)->setEnabled(caller->getText().size() > 0);
-}
-
-void LLFloaterExperiencePicker::onBtnFind()
-{
- find();
-}
-
-void LLFloaterExperiencePicker::onBtnSelect()
-{
- if(!isSelectButtonEnabled())
- {
- return;
- }
-
- if(mSelectionCallback)
- {
- const LLScrollListCtrl* results = getChild<LLScrollListCtrl>(LIST_RESULTS);
- uuid_vec_t experience_ids;
-
- getSelectedExperienceIds(results, experience_ids);
- mSelectionCallback(experience_ids);
- getChild<LLScrollListCtrl>(LIST_RESULTS)->deselectAllItems(TRUE);
- if(mCloseOnSelect)
- {
- mCloseOnSelect = FALSE;
- closeFloater();
- }
- }
- else
- {
- onBtnProfile();
- }
-}
-
-void LLFloaterExperiencePicker::onList()
-{
- bool enabled = isSelectButtonEnabled();
- getChildView(BTN_OK)->setEnabled(enabled);
-
- enabled = enabled && getChild<LLScrollListCtrl>(LIST_RESULTS)->getNumSelected() == 1;
- getChildView(BTN_PROFILE)->setEnabled(enabled);
-}
-
-
-void LLFloaterExperiencePicker::onBtnClose()
-{
- closeFloater();
-}
-
-
-void LLFloaterExperiencePicker::find()
-{
- std::string text = getChild<LLUICtrl>(TEXT_EDIT)->getValue().asString();
- mQueryID.generate();
- std::string url;
- url.reserve(128+text.size());
-
- LLViewerRegion* region = gAgent.getRegion();
- url = region->getCapability("FindExperienceByName");
- if (!url.empty())
- {
- url+="?query=";
- url+=LLURI::escape(text);
- LLHTTPClient::get(url, new LLExperiencePickerResponder(mQueryID, getDerivedHandle<LLFloaterExperiencePicker>()));
-
- }
-
-
- getChild<LLScrollListCtrl>(LIST_RESULTS)->deleteAllItems();
- getChild<LLScrollListCtrl>(LIST_RESULTS)->setCommentText(getString("searching"));
-
- getChildView(BTN_OK)->setEnabled(FALSE);
- getChildView(BTN_PROFILE)->setEnabled(FALSE);
-}
-
-
-bool LLFloaterExperiencePicker::isSelectButtonEnabled()
-{
- LLScrollListCtrl* list=getChild<LLScrollListCtrl>(LIST_RESULTS);
- return list->getFirstSelectedIndex() >=0;
-}
-
-void LLFloaterExperiencePicker::getSelectedExperienceIds( const LLScrollListCtrl* results, uuid_vec_t &experience_ids )
-{
- std::vector<LLScrollListItem*> items = results->getAllSelected();
- for(std::vector<LLScrollListItem*>::iterator it = items.begin(); it != items.end(); ++it)
- {
- LLScrollListItem* item = *it;
- if (item->getUUID().notNull())
- {
- experience_ids.push_back(item->getUUID());
- }
- }
-}
-
-void LLFloaterExperiencePicker::setAllowMultiple( bool allow_multiple )
-{
- getChild<LLScrollListCtrl>(LIST_RESULTS)->setAllowMultipleSelection(allow_multiple);
-}
-
-
-void name_callback(const LLHandle<LLFloaterExperiencePicker>& floater, const LLUUID& experience_id, const LLUUID& agent_id, const LLAvatarName& av_name)
-{
- if(floater.isDead())
- return;
- LLFloaterExperiencePicker* picker = floater.get();
- LLScrollListCtrl* search_results = picker->getChild<LLScrollListCtrl>(LIST_RESULTS);
-
- LLScrollListItem* item = search_results->getItem(experience_id);
- if(!item)
- return;
-
- item->getColumn(2)->setValue(columnSpace+av_name.getDisplayName());
-
-}
-
-void LLFloaterExperiencePicker::processResponse( const LLUUID& query_id, const LLSD& content )
-{
- if(query_id != mQueryID)
- {
- return;
- }
-
- mResponse = content;
-
- const LLSD& experiences=mResponse["experience_keys"];
- LLSD::array_const_iterator it = experiences.beginArray();
- for ( ; it != experiences.endArray(); ++it)
- {
- LLExperienceCache::insert(*it);
- }
-
- filterContent();
-
-}
-
-void LLFloaterExperiencePicker::onBtnProfile()
-{
- LLScrollListItem* item = getChild<LLScrollListCtrl>(LIST_RESULTS)->getFirstSelected();
- if(item)
- {
- LLFloaterReg::showInstance("experience_profile", item->getUUID(), true);
- }
-}
-
-std::string LLFloaterExperiencePicker::getMaturityString(int maturity)
-{
- if(maturity <= SIM_ACCESS_PG)
- {
- return getString("maturity_icon_general");
- }
- else if(maturity <= SIM_ACCESS_MATURE)
- {
- return getString("maturity_icon_moderate");
- }
- return getString("maturity_icon_adult");
-}
-
-void LLFloaterExperiencePicker::filterContent()
-{
- LLScrollListCtrl* search_results = getChild<LLScrollListCtrl>(LIST_RESULTS);
-
- const LLSD& experiences=mResponse["experience_keys"];
-
- search_results->deleteAllItems();
-
- LLSD item;
- LLSD::array_const_iterator it = experiences.beginArray();
- for ( ; it != experiences.endArray(); ++it)
- {
- const LLSD& experience = *it;
-
- if(isExperienceHidden(experience))
- continue;
-
- item["id"]=experience[LLExperienceCache::EXPERIENCE_ID];
- LLSD& columns = item["columns"];
- columns[0]["column"] = "maturity";
- columns[0]["value"] = getMaturityString(experience[LLExperienceCache::MATURITY].asInteger());
- columns[0]["type"]="icon";
- columns[0]["halign"]="right";
- columns[1]["column"] = "experience_name";
- columns[1]["value"] = columnSpace+experience[LLExperienceCache::NAME].asString();
- columns[2]["column"] = "owner";
- columns[2]["value"] = columnSpace+getString("loading");
- search_results->addElement(item);
- LLAvatarNameCache::get(experience[LLExperienceCache::AGENT_ID], boost::bind(name_callback, getDerivedHandle<LLFloaterExperiencePicker>(), experience[LLExperienceCache::EXPERIENCE_ID], _1, _2));
- }
-
- if (search_results->isEmpty())
- {
- LLStringUtil::format_map_t map;
- std::string search_text = childGetText(TEXT_EDIT);
- map["[TEXT]"] = search_text;
- if (search_text.empty())
- {
- getChild<LLScrollListCtrl>(LIST_RESULTS)->setCommentText(getString("no_results"));
- }
- else
- {
- getChild<LLScrollListCtrl>(LIST_RESULTS)->setCommentText(getString("not_found", map));
- }
- search_results->setEnabled(false);
- getChildView(BTN_OK)->setEnabled(false);
- getChildView(BTN_PROFILE)->setEnabled(false);
- }
- else
- {
- getChildView(BTN_OK)->setEnabled(true);
- search_results->setEnabled(true);
- search_results->sortByColumnIndex(1, TRUE);
- std::string text = getChild<LLUICtrl>(TEXT_EDIT)->getValue().asString();
- if (!search_results->selectItemByLabel(text, TRUE, 1))
- {
- search_results->selectFirstItem();
- }
- onList();
- search_results->setFocus(TRUE);
- }
-}
-
-void LLFloaterExperiencePicker::onMaturity()
-{
- if(mResponse.has("experience_keys") && mResponse["experience_keys"].beginArray() != mResponse["experience_keys"].endArray())
- {
- filterContent();
- }
-}
-
-bool LLFloaterExperiencePicker::isExperienceHidden( const LLSD& experience) const
-{
- bool hide=false;
- filter_list::const_iterator it = mFilters.begin();
- for(/**/;it != mFilters.end(); ++it)
- {
- if((*it)(experience)){
- return true;
- }
- }
-
- return hide;
-}
-
-bool LLFloaterExperiencePicker::FilterOverRating( const LLSD& experience )
-{
- int maturity = getChild<LLComboBox>(TEXT_MATURITY)->getSelectedValue().asInteger();
- return experience[LLExperienceCache::MATURITY].asInteger() > maturity;
-}
+ mSearchPanel = static_cast<LLPanelExperiencePicker*>(getChild<LLUICtrl>("panel_experience_search"));
+
+ mSearchPanel->mSelectionCallback = mSelectionCallback;
+ mSearchPanel->mCloseOnSelect = mCloseOnSelect;
+ mSearchPanel->setAllowMultiple(mAllowMultiple);
+ mSearchPanel->addFilters(mFilters.begin(), mFilters.end());
-bool LLFloaterExperiencePicker::FilterWithProperty( const LLSD& experience, S32 prop)
-{
- return (experience[LLExperienceCache::PROPERTIES].asInteger() & prop) != 0;
+ return LLFloater::postBuild();
}
-
-bool LLFloaterExperiencePicker::FilterWithoutProperty( const LLSD& experience, S32 prop )
-{
- return (experience[LLExperienceCache::PROPERTIES].asInteger() & prop) == 0;
-}
-
-void LLFloaterExperiencePicker::setDefaultFilters()
-{
- mFilters.clear();
- addFilter(boost::bind(&LLFloaterExperiencePicker::FilterOverRating, this, _1));
-}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/indra/newview/llfloaterexperiencepicker.h b/indra/newview/llfloaterexperiencepicker.h
index ea0240d2ac..22bfb64ba7 100644
--- a/indra/newview/llfloaterexperiencepicker.h
+++ b/indra/newview/llfloaterexperiencepicker.h
@@ -31,6 +31,7 @@
class LLScrollListCtrl;
class LLLineEditor;
+class LLPanelExperiencePicker;
class LLFloaterExperiencePicker : public LLFloater
@@ -38,7 +39,6 @@ class LLFloaterExperiencePicker : public LLFloater
public:
friend class LLExperiencePickerResponder;
- // The callback function will be called with an avatar name and UUID.
typedef boost::function<void (const uuid_vec_t&)> select_callback_t;
// filter function for experiences, return true if the experience should be hidden.
typedef boost::function<bool (const LLSD&)> filter_function;
@@ -50,47 +50,20 @@ public:
virtual ~LLFloaterExperiencePicker();
BOOL postBuild();
-
- void addFilter(filter_function func){mFilters.push_back(func);}
+
template <class IT>
void addFilters(IT begin, IT end){mFilters.insert(mFilters.end(), begin, end);}
- void setDefaultFilters();
-
- static bool FilterWithProperty(const LLSD& experience, S32 prop);
- static bool FilterWithoutProperty(const LLSD& experience, S32 prop);
- bool FilterOverRating(const LLSD& experience);
virtual void draw();
private:
- void editKeystroke(LLLineEditor* caller, void* user_data);
-
- void onBtnFind();
- void onBtnSelect();
- void onBtnProfile();
- void onBtnClose();
- void onList();
- void onMaturity();
-
- void getSelectedExperienceIds( const LLScrollListCtrl* results, uuid_vec_t &experience_ids );
- void setAllowMultiple(bool allow_multiple);
-
-
- void find();
- bool isSelectButtonEnabled();
- void processResponse( const LLUUID& query_id, const LLSD& content );
-
- void filterContent();
- bool isExperienceHidden(const LLSD& experience) const ;
- std::string getMaturityString(int maturity);
+ LLPanelExperiencePicker* mSearchPanel;
select_callback_t mSelectionCallback;
filter_list mFilters;
- LLUUID mQueryID;
- LLSD mResponse;
+ bool mAllowMultiple;
bool mCloseOnSelect;
-
void drawFrustum();
LLHandle <LLView> mFrustumOrigin;
F32 mContextConeOpacity;
diff --git a/indra/newview/llfloaterregioninfo.cpp b/indra/newview/llfloaterregioninfo.cpp
index 2522b7bf18..6d8f8f5587 100755
--- a/indra/newview/llfloaterregioninfo.cpp
+++ b/indra/newview/llfloaterregioninfo.cpp
@@ -94,7 +94,7 @@
#include "llfloaterregionrestarting.h"
#include "llpanelexperiencelisteditor.h"
#include <boost/function.hpp>
-#include "llfloaterexperiencepicker.h"
+#include "llpanelexperiencepicker.h"
#include "llexperiencecache.h"
#include "llpanelexperiences.h"
@@ -3634,14 +3634,14 @@ bool LLPanelRegionExperiences::refreshFromRegion(LLViewerRegion* region)
mAllowed->loading();
mAllowed->setReadonly(!allow_modify);
// remove grid-wide experiences
- mAllowed->addFilter(boost::bind(LLFloaterExperiencePicker::FilterWithProperty, _1, LLExperienceCache::PROPERTY_GRID));
+ mAllowed->addFilter(boost::bind(LLPanelExperiencePicker::FilterWithProperty, _1, LLExperienceCache::PROPERTY_GRID));
mBlocked->loading();
mBlocked->setReadonly(!allow_modify);
// only grid-wide experiences
- mBlocked->addFilter(boost::bind(LLFloaterExperiencePicker::FilterWithoutProperty, _1, LLExperienceCache::PROPERTY_GRID));
+ mBlocked->addFilter(boost::bind(LLPanelExperiencePicker::FilterWithoutProperty, _1, LLExperienceCache::PROPERTY_GRID));
// but not privileged ones
- mBlocked->addFilter(boost::bind(LLFloaterExperiencePicker::FilterWithProperty, _1, LLExperienceCache::PROPERTY_PRIVILEGED));
+ mBlocked->addFilter(boost::bind(LLPanelExperiencePicker::FilterWithProperty, _1, LLExperienceCache::PROPERTY_PRIVILEGED));
mTrusted->loading();
mTrusted->setReadonly(!allow_modify);
diff --git a/indra/newview/llpanelexperiencepicker.cpp b/indra/newview/llpanelexperiencepicker.cpp
index 4e2ae585cd..8da41b59dd 100644
--- a/indra/newview/llpanelexperiencepicker.cpp
+++ b/indra/newview/llpanelexperiencepicker.cpp
@@ -38,12 +38,13 @@
#include "llexperiencecache.h"
#include "llslurl.h"
#include "llavatarnamecache.h"
-#include "llfloaterexperienceprofile.h"
#include "llcombobox.h"
#include "llviewercontrol.h"
-#include "lldraghandle.h"
+#include "llfloater.h"
#define BTN_FIND "find"
+#define BTN_OK "ok_btn"
+#define BTN_CANCEL "cancel_btn"
#define BTN_PROFILE "profile_btn"
#define TEXT_EDIT "edit"
#define TEXT_MATURITY "maturity"
@@ -52,6 +53,8 @@
const static std::string columnSpace = " ";
+static LLPanelInjector<LLPanelExperiencePicker> t_panel_status("llpanelexperiencepicker");
+
class LLExperienceSearchResponder : public LLHTTPClient::Responder
{
public:
@@ -75,7 +78,7 @@ public:
}
else
{
- llwarns << "avatar picker failed [status:" << status << "]: " << content << llendl;
+ llwarns << "experience picker failed [status:" << status << "]: " << content << llendl;
}
}
@@ -90,7 +93,6 @@ LLPanelExperiencePicker::LLPanelExperiencePicker()
LLPanelExperiencePicker::~LLPanelExperiencePicker()
{
- gFocusMgr.releaseFocusIfNeeded( this );
}
BOOL LLPanelExperiencePicker::postBuild()
@@ -101,11 +103,14 @@ BOOL LLPanelExperiencePicker::postBuild()
getChildView(BTN_FIND)->setEnabled(FALSE);
LLScrollListCtrl* searchresults = getChild<LLScrollListCtrl>(LIST_RESULTS);
- searchresults->setDoubleClickCallback( boost::bind(&LLPanelExperiencePicker::onBtnProfile, this));
+ searchresults->setDoubleClickCallback( boost::bind(&LLPanelExperiencePicker::onBtnSelect, this));
searchresults->setCommitCallback(boost::bind(&LLPanelExperiencePicker::onList, this));
getChildView(LIST_RESULTS)->setEnabled(FALSE);
getChild<LLScrollListCtrl>(LIST_RESULTS)->setCommentText(getString("no_results"));
+ childSetAction(BTN_OK, boost::bind(&LLPanelExperiencePicker::onBtnSelect, this));
+ getChildView(BTN_OK)->setEnabled(FALSE);
+ childSetAction(BTN_CANCEL, boost::bind(&LLPanelExperiencePicker::onBtnClose, this));
childSetAction(BTN_PROFILE, boost::bind(&LLPanelExperiencePicker::onBtnProfile, this));
getChildView(BTN_PROFILE)->setEnabled(FALSE);
@@ -135,6 +140,7 @@ void LLPanelExperiencePicker::onBtnFind()
void LLPanelExperiencePicker::onList()
{
bool enabled = isSelectButtonEnabled();
+ getChildView(BTN_OK)->setEnabled(enabled);
enabled = enabled && getChild<LLScrollListCtrl>(LIST_RESULTS)->getNumSelected() == 1;
getChildView(BTN_PROFILE)->setEnabled(enabled);
@@ -157,10 +163,10 @@ void LLPanelExperiencePicker::find()
}
-
getChild<LLScrollListCtrl>(LIST_RESULTS)->deleteAllItems();
getChild<LLScrollListCtrl>(LIST_RESULTS)->setCommentText(getString("searching"));
-
+
+ getChildView(BTN_OK)->setEnabled(FALSE);
getChildView(BTN_PROFILE)->setEnabled(FALSE);
}
@@ -225,6 +231,42 @@ void LLPanelExperiencePicker::processResponse( const LLUUID& query_id, const LLS
}
+void LLPanelExperiencePicker::onBtnSelect()
+{
+ if(!isSelectButtonEnabled())
+ {
+ return;
+ }
+
+ if(mSelectionCallback)
+ {
+ const LLScrollListCtrl* results = getChild<LLScrollListCtrl>(LIST_RESULTS);
+ uuid_vec_t experience_ids;
+
+ getSelectedExperienceIds(results, experience_ids);
+ mSelectionCallback(experience_ids);
+ getChild<LLScrollListCtrl>(LIST_RESULTS)->deselectAllItems(TRUE);
+ if(mCloseOnSelect)
+ {
+ mCloseOnSelect = FALSE;
+ onBtnClose();
+ }
+ }
+ else
+ {
+ onBtnProfile();
+ }
+}
+
+void LLPanelExperiencePicker::onBtnClose()
+{
+ LLFloater* floater = getParentByType<LLFloater>();
+ if (floater)
+ {
+ floater->closeFloater();
+ }
+}
+
void LLPanelExperiencePicker::onBtnProfile()
{
LLScrollListItem* item = getChild<LLScrollListCtrl>(LIST_RESULTS)->getFirstSelected();
@@ -277,7 +319,7 @@ void LLPanelExperiencePicker::filterContent()
search_results->addElement(item);
LLAvatarNameCache::get(experience[LLExperienceCache::AGENT_ID], boost::bind(name_callback, getDerivedHandle<LLPanelExperiencePicker>(), experience[LLExperienceCache::EXPERIENCE_ID], _1, _2));
}
-
+
if (search_results->isEmpty())
{
LLStringUtil::format_map_t map;
@@ -292,10 +334,12 @@ void LLPanelExperiencePicker::filterContent()
getChild<LLScrollListCtrl>(LIST_RESULTS)->setCommentText(getString("not_found", map));
}
search_results->setEnabled(false);
+ getChildView(BTN_OK)->setEnabled(false);
getChildView(BTN_PROFILE)->setEnabled(false);
}
else
{
+ getChildView(BTN_OK)->setEnabled(true);
search_results->setEnabled(true);
search_results->sortByColumnIndex(1, TRUE);
std::string text = getChild<LLUICtrl>(TEXT_EDIT)->getValue().asString();
diff --git a/indra/newview/llpanelexperiencepicker.h b/indra/newview/llpanelexperiencepicker.h
index 166639a14e..af0a30ceba 100644
--- a/indra/newview/llpanelexperiencepicker.h
+++ b/indra/newview/llpanelexperiencepicker.h
@@ -37,8 +37,8 @@ class LLPanelExperiencePicker : public LLPanel
{
public:
friend class LLExperienceSearchResponder;
+ friend class LLFloaterExperiencePicker;
- // The callback function will be called with an avatar name and UUID.
typedef boost::function<void (const uuid_vec_t&)> select_callback_t;
// filter function for experiences, return true if the experience should be hidden.
typedef boost::function<bool (const LLSD&)> filter_function;
@@ -62,6 +62,8 @@ private:
void editKeystroke(LLLineEditor* caller, void* user_data);
void onBtnFind();
+ void onBtnSelect();
+ void onBtnClose();
void onBtnProfile();
void onList();
void onMaturity();
@@ -83,6 +85,7 @@ private:
filter_list mFilters;
LLUUID mQueryID;
LLSD mResponse;
+ bool mCloseOnSelect;
};
#endif // LL_LLPANELEXPERIENCEPICKER_H
diff --git a/indra/newview/skins/default/xui/en/floater_experience_search.xml b/indra/newview/skins/default/xui/en/floater_experience_search.xml
index 8b44dada40..7d7e3ba95a 100644
--- a/indra/newview/skins/default/xui/en/floater_experience_search.xml
+++ b/indra/newview/skins/default/xui/en/floater_experience_search.xml
@@ -12,159 +12,9 @@
title="CHOOSE EXPERIENCE"
width="350">
- <floater.string
- name="not_found">
- &apos;[TEXT]&apos; not found
- </floater.string>
- <floater.string
- name="no_results">
- No results
- </floater.string>
- <floater.string
- name="searching">
- Searching...
- </floater.string>
- <floater.string
- name="loading">
- Loading...
- </floater.string>
- <floater.string
- name="maturity_icon_general">
- "Parcel_PG_Light"
- </floater.string>
- <floater.string
- name="maturity_icon_moderate">
- "Parcel_M_Light"
- </floater.string>
- <floater.string
- name="maturity_icon_adult">
- "Parcel_R_Light"
- </floater.string>
<panel
+ filename="panel_experience_search.xml"
+ class="llpanelexperiencepicker"
follows="all"
- left="5"
- right="-3"
- bottom="-2"
- top="18"
- name="search_panel">
- <text
- left="0"
- follows="top|left|right"
- right="-1">
- Enter part of the name:
- </text>
- <line_editor
- left="0"
- follows="left|top|right"
- name="edit"
- height="18"
- right="-60"/>
- <button label="Go"
- follows="top|right"
- top_pad="-18"
- left_pad="2"
- right="-1"
- height="18"
- name="find"/>
- <text
- top_pad="6"
- left="0"
- follows="top|left"
- width="180">
- Max Content Rating:
- </text>
- <icons_combo_box
- follows="left|top"
- height="20"
- label="Moderate"
- layout="topleft"
- name="maturity"
- top_pad="-13"
- left_pad="0"
- right="-1">
- <icons_combo_box.drop_down_button
- image_overlay="Parcel_M_Light"
- image_overlay_alignment="left"
- imgoverlay_label_space="3"
- pad_left="3"/>
- <icons_combo_box.item
- label="Adult"
- name="Adult"
- value="42">
- <item.columns
- halign="center"
- type="icon"
- value="Parcel_R_Light"
- width="20"/>
- </icons_combo_box.item>
- <icons_combo_box.item
- label="Moderate"
- name="Mature"
- value="21">
- <item.columns
- halign="center"
- type="icon"
- value="Parcel_M_Light"
- width="20"/>
- </icons_combo_box.item>
- <icons_combo_box.item
- label="General"
- name="PG"
- value="13">
- <item.columns
- halign="center"
- type="icon"
- value="Parcel_PG_Light"
- width="20"/>
- </icons_combo_box.item>
- </icons_combo_box>
- <scroll_list
- draw_heading="true"
- left="0"
- right="-1"
- height="239"
- top_pad="4"
- follows="all"
- column_padding="5"
- can_resize="true"
- name="search_results">
- <columns
- halign="center"
- width="24"
- name="maturity"
- label=""/>
- <columns
- user_resize="true"
- name="experience_name"
- label="Name"/>
- <columns
- user_resize="true"
- name="owner"
- label="Owner"/>
- </scroll_list>
-
- <button
- follows="left|bottom"
- height="23"
- label="OK"
- label_selected="OK"
- name="ok_btn"
- top_pad="3"
- left="0"
- width="100" />
- <button
- follows="left|bottom"
- height="23"
- label="Cancel"
- name="cancel_btn"
- width="100"
- left_pad="3" />
- <button
- follows="left|bottom"
- height="23"
- label="View Profile"
- name="profile_btn"
- width="100"
- left_pad="3" />
- </panel>
+ name="panel_experience_search"/>
</floater>
diff --git a/indra/newview/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml
index f33acc75b2..a9f83e751a 100755
--- a/indra/newview/skins/default/xui/en/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/en/menu_viewer.xml
@@ -81,13 +81,6 @@
function="Floater.ToggleOrBringToFront"
parameter="experiences"/>
</menu_item_call>
- <menu_item_call
- label="Experience Search..."
- name="Experience Search">
- <menu_item_call.on_click
- function="Floater.ToggleOrBringToFront"
- parameter="experience_search"/>
- </menu_item_call>
<menu_item_separator/>
<menu_item_call
label="Camera Controls..."
diff --git a/indra/newview/skins/default/xui/en/panel_experience_search.xml b/indra/newview/skins/default/xui/en/panel_experience_search.xml
index 5593cef591..5ac7f6b239 100644
--- a/indra/newview/skins/default/xui/en/panel_experience_search.xml
+++ b/indra/newview/skins/default/xui/en/panel_experience_search.xml
@@ -1,12 +1,11 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<panel
layout="topleft"
- top="3"
- left="3"
+ top="18"
+ left="0"
width="350"
- height="350"
+ height="330"
label="SEARCH"
- bg_opaque_color="0 0.5 0 0.3"
follows="all">
<string
@@ -42,7 +41,7 @@
left="5"
right="-3"
bottom="-2"
- top="18"
+ top="0"
name="search_panel">
<text
left="0"
@@ -143,10 +142,25 @@
<button
follows="left|bottom"
height="23"
- label="View Profile"
- name="profile_btn"
+ label="OK"
+ label_selected="OK"
+ name="ok_btn"
top_pad="3"
left="0"
- width="100"/>
+ width="100" />
+ <button
+ follows="left|bottom"
+ height="23"
+ label="Cancel"
+ name="cancel_btn"
+ width="100"
+ left_pad="3" />
+ <button
+ follows="left|bottom"
+ height="23"
+ label="View Profile"
+ name="profile_btn"
+ width="100"
+ left_pad="3" />
</panel>
</panel>