From d74119ec2bf5d98adce52291a2f82c1fed0aee30 Mon Sep 17 00:00:00 2001 From: dolphin Date: Tue, 4 Feb 2014 15:54:41 -0800 Subject: Added an experience tab to the region floater --- indra/newview/llpanelexperiencelisteditor.cpp | 213 ++++++++++++++++++++++++++ 1 file changed, 213 insertions(+) create mode 100644 indra/newview/llpanelexperiencelisteditor.cpp (limited to 'indra/newview/llpanelexperiencelisteditor.cpp') diff --git a/indra/newview/llpanelexperiencelisteditor.cpp b/indra/newview/llpanelexperiencelisteditor.cpp new file mode 100644 index 0000000000..374f89afad --- /dev/null +++ b/indra/newview/llpanelexperiencelisteditor.cpp @@ -0,0 +1,213 @@ +/** + * @file llpanelexperiencelisteditor.cpp + * @brief Editor for building a list of experiences + * + * $LicenseInfo:firstyear=2014&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 "llpanelexperiencelisteditor.h" + +#include "llbutton.h" +#include "llexperiencecache.h" +#include "llfloaterexperiencepicker.h" +#include "llfloaterreg.h" +#include "llhandle.h" +#include "llscrolllistctrl.h" +#include "llviewerregion.h" +#include "llagent.h" + + +static LLRegisterPanelClassWrapper t_panel_experience_list_editor("panel_experience_list_editor"); + + +LLPanelExperienceListEditor::LLPanelExperienceListEditor() + :mItems(NULL) + ,mProfile(NULL) + ,mRemove(NULL) + ,mChangedCallback(NULL) + ,mReadonly(false) +{ +} + +BOOL LLPanelExperienceListEditor::postBuild() +{ + mItems = getChild("experience_list"); + mAdd = getChild("btn_add"); + mRemove = getChild("btn_remove"); + mProfile = getChild("btn_profile"); + + childSetAction("btn_add", boost::bind(&LLPanelExperienceListEditor::onAdd, this)); + childSetAction("btn_remove", boost::bind(&LLPanelExperienceListEditor::onRemove, this)); + childSetAction("btn_profile", boost::bind(&LLPanelExperienceListEditor::onProfile, this)); + + mItems->setCommitCallback(boost::bind(&LLPanelExperienceListEditor::checkButtonsEnabled, this)); + + checkButtonsEnabled(); + return TRUE; +} + +const uuid_list_t& LLPanelExperienceListEditor::getExperienceIds() const +{ + return mExperienceIds; +} + +void LLPanelExperienceListEditor::addExperienceIds( const uuid_vec_t& experience_ids ) +{ + mExperienceIds.insert(experience_ids.begin(), experience_ids.end()); + onItems(); +} + + +void LLPanelExperienceListEditor::setExperienceIds( const LLSD& experience_ids ) +{ + mExperienceIds.clear(); + mExperienceIds.insert(experience_ids.beginArray(), experience_ids.endArray()); + onItems(); +} + +void LLPanelExperienceListEditor::addExperience( const LLUUID& id ) +{ + mExperienceIds.insert(id); + onItems(); +} +void LLPanelExperienceListEditor::onAdd() +{ + if(!mPicker.isDead()) + { + mPicker.get()->setFrontmost(TRUE); + } + else + { + mKey.generateNewID(); + + LLFloaterExperiencePicker* picker=LLFloaterExperiencePicker::show(boost::bind(&LLPanelExperienceListEditor::addExperienceIds, this, _1), mKey, FALSE, TRUE, mAdd); + picker->addFilters(mFilters.begin(), mFilters.end()); + + mPicker = picker->getDerivedHandle(); + } +} + + +void LLPanelExperienceListEditor::onRemove() +{ + std::vector items= mItems->getAllSelected(); + std::vector::iterator it = items.begin(); + for(/**/; it != items.end(); ++it) + { + if((*it) != NULL) + { + mExperienceIds.erase((*it)->getValue()); + } + } + onItems(); +} + +void LLPanelExperienceListEditor::onProfile() +{ + LLScrollListItem* item = mItems->getFirstSelected(); + if(item) + { + LLFloaterReg::showInstance("experience_profile", item->getUUID(), true); + } +} + +void LLPanelExperienceListEditor::checkButtonsEnabled() +{ + mAdd->setEnabled(!mReadonly); + int selected = mItems->getNumSelected(); + mRemove->setEnabled(!mReadonly && selected>0); + mProfile->setEnabled(selected==1); +} + +void LLPanelExperienceListEditor::onItems() +{ + mItems->deleteAllItems(); + + LLSD item; + uuid_list_t::iterator it = mExperienceIds.begin(); + for(/**/; it != mExperienceIds.end(); ++it) + { + const LLUUID& experience = *it; + item["id"]=experience; + LLSD& columns = item["columns"]; + columns[0]["column"] = "experience_name"; + columns[0]["value"] = getString("loading"); + mItems->addElement(item); + + LLExperienceCache::get(experience, boost::bind(&LLPanelExperienceListEditor::experienceDetailsCallback, + getDerivedHandle(), _1)); + } + + + if(mItems->getItemCount() == 0) + { + mItems->setCommentText(getString("no_results")); + } + + + checkButtonsEnabled(); + if(mChangedCallback) + { + (*mChangedCallback)(); + } +} + +void LLPanelExperienceListEditor::experienceDetailsCallback( LLHandle panel, const LLSD& experience ) +{ + if(!panel.isDead()) + { + panel.get()->onExperienceDetails(experience); + } +} + +void LLPanelExperienceListEditor::onExperienceDetails( const LLSD& experience ) +{ + LLScrollListItem* item = mItems->getItem(experience[LLExperienceCache::EXPERIENCE_ID]); + if(!item) + return; + + item->getColumn(0)->setValue(experience[LLExperienceCache::NAME]); +} + +LLPanelExperienceListEditor::~LLPanelExperienceListEditor() +{ + if(!mPicker.isDead()) + { + mPicker.get()->closeFloater(); + } + delete mChangedCallback; +} + +void LLPanelExperienceListEditor::loading() +{ + mItems->clear(); + mItems->setCommentText( getString("loading")); +} + +void LLPanelExperienceListEditor::setReadonly( bool val ) +{ + mReadonly = val; + setCtrlsEnabled(!mReadonly); + checkButtonsEnabled(); +} -- cgit v1.2.3 From 9fe5728b4385ead4a4c74eed7917d93060510cdb Mon Sep 17 00:00:00 2001 From: dolphin Date: Wed, 12 Mar 2014 09:50:08 -0700 Subject: Show ignored items when updating an experience profile --- indra/newview/llpanelexperiencelisteditor.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'indra/newview/llpanelexperiencelisteditor.cpp') diff --git a/indra/newview/llpanelexperiencelisteditor.cpp b/indra/newview/llpanelexperiencelisteditor.cpp index 374f89afad..37394936ee 100644 --- a/indra/newview/llpanelexperiencelisteditor.cpp +++ b/indra/newview/llpanelexperiencelisteditor.cpp @@ -38,7 +38,7 @@ #include "llagent.h" -static LLRegisterPanelClassWrapper t_panel_experience_list_editor("panel_experience_list_editor"); +static LLPanelInjector t_panel_experience_list_editor("panel_experience_list_editor"); LLPanelExperienceListEditor::LLPanelExperienceListEditor() -- cgit v1.2.3 From a8a0506b35667b76bf7bdbea6984909588cb7bbc Mon Sep 17 00:00:00 2001 From: dolphin Date: Fri, 4 Apr 2014 16:30:04 -0700 Subject: Changed estate experience editing to use sendEstateOwnerMessage --- indra/newview/llpanelexperiencelisteditor.cpp | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) (limited to 'indra/newview/llpanelexperiencelisteditor.cpp') diff --git a/indra/newview/llpanelexperiencelisteditor.cpp b/indra/newview/llpanelexperiencelisteditor.cpp index 37394936ee..a4ceb3830c 100644 --- a/indra/newview/llpanelexperiencelisteditor.cpp +++ b/indra/newview/llpanelexperiencelisteditor.cpp @@ -45,7 +45,6 @@ LLPanelExperienceListEditor::LLPanelExperienceListEditor() :mItems(NULL) ,mProfile(NULL) ,mRemove(NULL) - ,mChangedCallback(NULL) ,mReadonly(false) { } @@ -76,6 +75,13 @@ void LLPanelExperienceListEditor::addExperienceIds( const uuid_vec_t& experience { mExperienceIds.insert(experience_ids.begin(), experience_ids.end()); onItems(); + if(!mAddedCallback.empty()) + { + for(uuid_vec_t::const_iterator it = experience_ids.begin(); it != experience_ids.end(); ++it) + { + mAddedCallback(*it); + } + } } @@ -118,6 +124,7 @@ void LLPanelExperienceListEditor::onRemove() if((*it) != NULL) { mExperienceIds.erase((*it)->getValue()); + mRemovedCallback((*it)->getValue()); } } onItems(); @@ -167,10 +174,6 @@ void LLPanelExperienceListEditor::onItems() checkButtonsEnabled(); - if(mChangedCallback) - { - (*mChangedCallback)(); - } } void LLPanelExperienceListEditor::experienceDetailsCallback( LLHandle panel, const LLSD& experience ) @@ -196,7 +199,6 @@ LLPanelExperienceListEditor::~LLPanelExperienceListEditor() { mPicker.get()->closeFloater(); } - delete mChangedCallback; } void LLPanelExperienceListEditor::loading() @@ -211,3 +213,13 @@ void LLPanelExperienceListEditor::setReadonly( bool val ) setCtrlsEnabled(!mReadonly); checkButtonsEnabled(); } + +boost::signals2::connection LLPanelExperienceListEditor::setAddedCallback( list_changed_signal_t::slot_type cb ) +{ + return mAddedCallback.connect(cb); +} + +boost::signals2::connection LLPanelExperienceListEditor::setRemovedCallback( list_changed_signal_t::slot_type cb ) +{ + return mRemovedCallback.connect(cb); +} -- cgit v1.2.3 From bd3ef14552886b30b3cfafa7e7a89553492af8c3 Mon Sep 17 00:00:00 2001 From: Cho Date: Tue, 29 Apr 2014 00:08:06 +0100 Subject: Got experience picker working again for ACME-1420 --- indra/newview/llpanelexperiencelisteditor.cpp | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) (limited to 'indra/newview/llpanelexperiencelisteditor.cpp') diff --git a/indra/newview/llpanelexperiencelisteditor.cpp b/indra/newview/llpanelexperiencelisteditor.cpp index a4ceb3830c..7a7be32b96 100644 --- a/indra/newview/llpanelexperiencelisteditor.cpp +++ b/indra/newview/llpanelexperiencelisteditor.cpp @@ -107,9 +107,7 @@ void LLPanelExperienceListEditor::onAdd() { mKey.generateNewID(); - LLFloaterExperiencePicker* picker=LLFloaterExperiencePicker::show(boost::bind(&LLPanelExperienceListEditor::addExperienceIds, this, _1), mKey, FALSE, TRUE, mAdd); - picker->addFilters(mFilters.begin(), mFilters.end()); - + LLFloaterExperiencePicker* picker=LLFloaterExperiencePicker::show(boost::bind(&LLPanelExperienceListEditor::addExperienceIds, this, _1), mKey, FALSE, TRUE, mFilters, mAdd); mPicker = picker->getDerivedHandle(); } } -- cgit v1.2.3 From 7d08e72b4de54977f3fd3f0c3224c9d28cdbacbd Mon Sep 17 00:00:00 2001 From: Cho Date: Thu, 1 May 2014 21:17:31 +0100 Subject: Made experiences selectable in Region/Estate floater for ACME-1466 --- indra/newview/llpanelexperiencelisteditor.cpp | 1 - 1 file changed, 1 deletion(-) (limited to 'indra/newview/llpanelexperiencelisteditor.cpp') diff --git a/indra/newview/llpanelexperiencelisteditor.cpp b/indra/newview/llpanelexperiencelisteditor.cpp index 7a7be32b96..6d47673849 100644 --- a/indra/newview/llpanelexperiencelisteditor.cpp +++ b/indra/newview/llpanelexperiencelisteditor.cpp @@ -208,7 +208,6 @@ void LLPanelExperienceListEditor::loading() void LLPanelExperienceListEditor::setReadonly( bool val ) { mReadonly = val; - setCtrlsEnabled(!mReadonly); checkButtonsEnabled(); } -- cgit v1.2.3 From f45218ff32a20d1bd490fb9dc3951c4986bdd5ca Mon Sep 17 00:00:00 2001 From: Cho Date: Thu, 1 May 2014 22:57:04 +0100 Subject: Added counter of experiences in trusted/allowed/blocked lists in Region/Estate floater for ACME-1435 --- indra/newview/llpanelexperiencelisteditor.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'indra/newview/llpanelexperiencelisteditor.cpp') diff --git a/indra/newview/llpanelexperiencelisteditor.cpp b/indra/newview/llpanelexperiencelisteditor.cpp index 6d47673849..f01438b34e 100644 --- a/indra/newview/llpanelexperiencelisteditor.cpp +++ b/indra/newview/llpanelexperiencelisteditor.cpp @@ -36,6 +36,8 @@ #include "llscrolllistctrl.h" #include "llviewerregion.h" #include "llagent.h" +#include "lltextbox.h" +#include "lltrans.h" static LLPanelInjector t_panel_experience_list_editor("panel_experience_list_editor"); @@ -211,6 +213,14 @@ void LLPanelExperienceListEditor::setReadonly( bool val ) checkButtonsEnabled(); } +void LLPanelExperienceListEditor::refreshExperienceCounter(std::string string_name) +{ + LLStringUtil::format_map_t args; + args["[EXPERIENCES]"] = llformat("%d", mItems->getItemCount()); + args["[MAXEXPERIENCES]"] = llformat("%d", ESTATE_MAX_EXPERIENCE_IDS); + getChild("text_name")->setText(LLTrans::getString(string_name, args)); +} + boost::signals2::connection LLPanelExperienceListEditor::setAddedCallback( list_changed_signal_t::slot_type cb ) { return mAddedCallback.connect(cb); -- cgit v1.2.3 From 6766ef06d44b1991bd6ef3f699354f98651679b4 Mon Sep 17 00:00:00 2001 From: dolphin Date: Tue, 13 May 2014 14:52:10 -0700 Subject: ACME-1474: Prevent the viewer from trying to add or remove the default experience. --- indra/newview/llpanelexperiencelisteditor.cpp | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) (limited to 'indra/newview/llpanelexperiencelisteditor.cpp') diff --git a/indra/newview/llpanelexperiencelisteditor.cpp b/indra/newview/llpanelexperiencelisteditor.cpp index f01438b34e..323adbe2b7 100644 --- a/indra/newview/llpanelexperiencelisteditor.cpp +++ b/indra/newview/llpanelexperiencelisteditor.cpp @@ -143,7 +143,23 @@ void LLPanelExperienceListEditor::checkButtonsEnabled() { mAdd->setEnabled(!mReadonly); int selected = mItems->getNumSelected(); - mRemove->setEnabled(!mReadonly && selected>0); + + bool remove_enabled = !mReadonly && selected>0; + if(remove_enabled && mSticky) + { + std::vector items= mItems->getAllSelected(); + std::vector::iterator it = items.begin(); + for(/**/; it != items.end() && remove_enabled; ++it) + { + if((*it) != NULL) + { + remove_enabled = !mSticky((*it)->getValue()); + } + } + + + } + mRemove->setEnabled(remove_enabled); mProfile->setEnabled(selected==1); } -- cgit v1.2.3 From 4c7b0cb528f61bc20866c2f7c43049ef7bc49bf2 Mon Sep 17 00:00:00 2001 From: dolphin Date: Fri, 16 May 2014 15:52:39 -0700 Subject: ACME-1459: Experience tab added to the about land tab for editing parcel Experiences --- indra/newview/llpanelexperiencelisteditor.cpp | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) (limited to 'indra/newview/llpanelexperiencelisteditor.cpp') diff --git a/indra/newview/llpanelexperiencelisteditor.cpp b/indra/newview/llpanelexperiencelisteditor.cpp index 323adbe2b7..6641483054 100644 --- a/indra/newview/llpanelexperiencelisteditor.cpp +++ b/indra/newview/llpanelexperiencelisteditor.cpp @@ -48,6 +48,7 @@ LLPanelExperienceListEditor::LLPanelExperienceListEditor() ,mProfile(NULL) ,mRemove(NULL) ,mReadonly(false) + ,mMaxExperienceIDs(0) { } @@ -229,12 +230,15 @@ void LLPanelExperienceListEditor::setReadonly( bool val ) checkButtonsEnabled(); } -void LLPanelExperienceListEditor::refreshExperienceCounter(std::string string_name) +void LLPanelExperienceListEditor::refreshExperienceCounter() { - LLStringUtil::format_map_t args; - args["[EXPERIENCES]"] = llformat("%d", mItems->getItemCount()); - args["[MAXEXPERIENCES]"] = llformat("%d", ESTATE_MAX_EXPERIENCE_IDS); - getChild("text_name")->setText(LLTrans::getString(string_name, args)); + if(mMaxExperienceIDs > 0) + { + LLStringUtil::format_map_t args; + args["[EXPERIENCES]"] = llformat("%d", mItems->getItemCount()); + args["[MAXEXPERIENCES]"] = llformat("%d", mMaxExperienceIDs); + getChild("text_count")->setText(LLTrans::getString("ExperiencesCounter", args)); + } } boost::signals2::connection LLPanelExperienceListEditor::setAddedCallback( list_changed_signal_t::slot_type cb ) -- cgit v1.2.3 From 961418a42c10527f1dca4ec05d943d6f1772cd82 Mon Sep 17 00:00:00 2001 From: Cho Date: Fri, 6 Jun 2014 00:14:14 +0100 Subject: Fixed ACME-1502 --- indra/newview/llpanelexperiencelisteditor.cpp | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) (limited to 'indra/newview/llpanelexperiencelisteditor.cpp') diff --git a/indra/newview/llpanelexperiencelisteditor.cpp b/indra/newview/llpanelexperiencelisteditor.cpp index 6641483054..cc44b7a339 100644 --- a/indra/newview/llpanelexperiencelisteditor.cpp +++ b/indra/newview/llpanelexperiencelisteditor.cpp @@ -76,8 +76,10 @@ const uuid_list_t& LLPanelExperienceListEditor::getExperienceIds() const void LLPanelExperienceListEditor::addExperienceIds( const uuid_vec_t& experience_ids ) { - mExperienceIds.insert(experience_ids.begin(), experience_ids.end()); - onItems(); + // the commented out code in this function is handled by the callback and no longer necessary! + + //mExperienceIds.insert(experience_ids.begin(), experience_ids.end()); + //onItems(); if(!mAddedCallback.empty()) { for(uuid_vec_t::const_iterator it = experience_ids.begin(); it != experience_ids.end(); ++it) @@ -118,17 +120,19 @@ void LLPanelExperienceListEditor::onAdd() void LLPanelExperienceListEditor::onRemove() { + // the commented out code in this function is handled by the callback and no longer necessary! + std::vector items= mItems->getAllSelected(); std::vector::iterator it = items.begin(); for(/**/; it != items.end(); ++it) { if((*it) != NULL) { - mExperienceIds.erase((*it)->getValue()); + //mExperienceIds.erase((*it)->getValue()); mRemovedCallback((*it)->getValue()); } } - onItems(); + //onItems(); } void LLPanelExperienceListEditor::onProfile() -- cgit v1.2.3 From 89ea1cbc7acee8878c36a5795dd3df12a913c513 Mon Sep 17 00:00:00 2001 From: Cho Date: Tue, 17 Jun 2014 18:00:25 +0100 Subject: Made experience picker be created fresh every time the Add button is clicked, for ACME-1526 --- indra/newview/llpanelexperiencelisteditor.cpp | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) (limited to 'indra/newview/llpanelexperiencelisteditor.cpp') diff --git a/indra/newview/llpanelexperiencelisteditor.cpp b/indra/newview/llpanelexperiencelisteditor.cpp index cc44b7a339..3561268063 100644 --- a/indra/newview/llpanelexperiencelisteditor.cpp +++ b/indra/newview/llpanelexperiencelisteditor.cpp @@ -106,15 +106,13 @@ void LLPanelExperienceListEditor::onAdd() { if(!mPicker.isDead()) { - mPicker.get()->setFrontmost(TRUE); + mPicker.markDead(); } - else - { - mKey.generateNewID(); - LLFloaterExperiencePicker* picker=LLFloaterExperiencePicker::show(boost::bind(&LLPanelExperienceListEditor::addExperienceIds, this, _1), mKey, FALSE, TRUE, mFilters, mAdd); - mPicker = picker->getDerivedHandle(); - } + mKey.generateNewID(); + + LLFloaterExperiencePicker* picker=LLFloaterExperiencePicker::show(boost::bind(&LLPanelExperienceListEditor::addExperienceIds, this, _1), mKey, FALSE, TRUE, mFilters, mAdd); + mPicker = picker->getDerivedHandle(); } -- cgit v1.2.3 From da639d1c9817c7333b959638e9a33b6ae7c664c0 Mon Sep 17 00:00:00 2001 From: Cho Date: Thu, 21 Aug 2014 19:43:50 +0100 Subject: Show experiences with blank names as (untitled experience) in experience search, script editor, and allowed/trusted/blocked lists for ACME-1585 --- indra/newview/llpanelexperiencelisteditor.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) (limited to 'indra/newview/llpanelexperiencelisteditor.cpp') diff --git a/indra/newview/llpanelexperiencelisteditor.cpp b/indra/newview/llpanelexperiencelisteditor.cpp index 3561268063..69fc4f458f 100644 --- a/indra/newview/llpanelexperiencelisteditor.cpp +++ b/indra/newview/llpanelexperiencelisteditor.cpp @@ -208,8 +208,14 @@ void LLPanelExperienceListEditor::onExperienceDetails( const LLSD& experience ) LLScrollListItem* item = mItems->getItem(experience[LLExperienceCache::EXPERIENCE_ID]); if(!item) return; + + std::string experience_name_string = experience[LLExperienceCache::NAME].asString(); + if (experience_name_string.empty()) + { + experience_name_string = LLTrans::getString("ExperienceNameUntitled"); + } - item->getColumn(0)->setValue(experience[LLExperienceCache::NAME]); + item->getColumn(0)->setValue(experience_name_string); } LLPanelExperienceListEditor::~LLPanelExperienceListEditor() -- cgit v1.2.3 From e574bf4889b94d12abdf7078bebab39ddcda103c Mon Sep 17 00:00:00 2001 From: Mnikolenko ProductEngine Date: Tue, 11 Nov 2014 12:00:52 +0200 Subject: ACME-1597 FIXED Reselect first item in the list and refresh buttons after removing --- indra/newview/llpanelexperiencelisteditor.cpp | 2 ++ 1 file changed, 2 insertions(+) (limited to 'indra/newview/llpanelexperiencelisteditor.cpp') diff --git a/indra/newview/llpanelexperiencelisteditor.cpp b/indra/newview/llpanelexperiencelisteditor.cpp index 69fc4f458f..fc4ee9862e 100644 --- a/indra/newview/llpanelexperiencelisteditor.cpp +++ b/indra/newview/llpanelexperiencelisteditor.cpp @@ -130,6 +130,8 @@ void LLPanelExperienceListEditor::onRemove() mRemovedCallback((*it)->getValue()); } } + mItems->selectFirstItem(); + checkButtonsEnabled(); //onItems(); } -- cgit v1.2.3