summaryrefslogtreecommitdiff
path: root/indra/newview/llsidepanelappearance.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'indra/newview/llsidepanelappearance.cpp')
-rwxr-xr-xindra/newview/llsidepanelappearance.cpp130
1 files changed, 126 insertions, 4 deletions
diff --git a/indra/newview/llsidepanelappearance.cpp b/indra/newview/llsidepanelappearance.cpp
index 74fa5a87bb..858ed06544 100755
--- a/indra/newview/llsidepanelappearance.cpp
+++ b/indra/newview/llsidepanelappearance.cpp
@@ -48,6 +48,8 @@
#include "llviewerregion.h"
#include "llvoavatarself.h"
#include "llviewerwearable.h"
+#include "llnotificationsutil.h"
+#include "llfloatersidepanelcontainer.h"
static LLRegisterPanelClassWrapper<LLSidepanelAppearance> t_appearance("sidepanel_appearance");
@@ -70,13 +72,118 @@ private:
LLSidepanelAppearance *mPanel;
};
+bool LLSidepanelAppearance::callBackExitWithoutSaveViaBack(const LLSD& notification, const LLSD& response)
+{
+ S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
+ if ( option == 0 )
+ {
+ LLAppearanceMgr::instance().setOutfitDirty( true );
+ showOutfitsInventoryPanel();
+ LLAppearanceMgr::getInstance()->wearBaseOutfit();
+ return true;
+ }
+ return false;
+}
+
+bool LLSidepanelAppearance::callBackExitWithoutSaveViaClose(const LLSD& notification, const LLSD& response)
+{
+ S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
+ if ( option == 0 )
+ {
+ //revert current edits
+ mEditWearable->revertChanges();
+ //LLAppearanceMgr::getInstance()->wearBaseOutfit();
+ toggleWearableEditPanel(FALSE);
+ LLVOAvatarSelf::onCustomizeEnd( FALSE );
+ mLLFloaterSidePanelContainer->close();
+ return true;
+ }
+ return false;
+}
+
+void LLSidepanelAppearance::onClickConfirmExitWithoutSaveViaClose()
+{
+ if ( LLAppearanceMgr::getInstance()->isOutfitDirty() && !LLAppearanceMgr::getInstance()->isOutfitLocked() )
+ {
+ LLSidepanelAppearance* pSelf = (LLSidepanelAppearance *)this;
+ LLNotificationsUtil::add("ConfirmExitWithoutSave", LLSD(), LLSD(), boost::bind(&LLSidepanelAppearance::callBackExitWithoutSaveViaClose,pSelf,_1,_2) );
+ }
+ else
+ {
+ showOutfitsInventoryPanel();
+ }
+}
+
+
+bool LLSidepanelAppearance::callBackExitWithoutSaveIntoAppearance(const LLSD& notification, const LLSD& response)
+{
+ S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
+ if ( option == 0 )
+ {
+ //revert current edits
+ mEditWearable->revertChanges();
+ toggleWearableEditPanel(FALSE);
+ LLVOAvatarSelf::onCustomizeEnd( FALSE );
+ //mLLFloaterSidePanelContainer->close();
+ showOutfitsInventoryPanel();
+ return true;
+ }
+ return false;
+}
+
+void LLSidepanelAppearance::onClickConfirmExitWithoutSaveIntoAppearance()
+{
+ if ( LLAppearanceMgr::getInstance()->isOutfitDirty() && !LLAppearanceMgr::getInstance()->isOutfitLocked() )
+ {
+ LLSidepanelAppearance* pSelf = (LLSidepanelAppearance *)this;
+ LLNotificationsUtil::add("ConfirmExitWithoutSave", LLSD(), LLSD(), boost::bind(&LLSidepanelAppearance::callBackExitWithoutSaveIntoAppearance,pSelf,_1,_2) );
+ }
+ else
+ {
+ showOutfitsInventoryPanel();
+ }
+}
+void LLSidepanelAppearance::onClickConfirmExitWithoutSaveViaBack()
+{
+ /*
+ if ( LLAppearanceMgr::getInstance()->isOutfitDirty() && !mSidePanelJustOpened && !LLAppearanceMgr::getInstance()->isOutfitLocked() )
+ {
+ LLSidepanelAppearance* pSelf = (LLSidepanelAppearance *)this;
+ LLNotificationsUtil::add("ConfirmExitWithoutSave", LLSD(), LLSD(), boost::bind(&LLSidepanelAppearance::callBackExitWithoutSaveViaBack,pSelf,_1,_2) );
+ }
+ else
+ */
+ {
+ showOutfitsInventoryPanel();
+ }
+}
+
+void LLSidepanelAppearance::onClose(LLFloaterSidePanelContainer* obj)
+{
+ mLLFloaterSidePanelContainer = obj;
+ if ( /*LLAppearanceMgr::getInstance()->isOutfitDirty() && */
+ /*!LLAppearanceMgr::getInstance()->isOutfitLocked() ||*/
+ ( mEditWearable->isAvailable() && mEditWearable->isDirty() ) )
+ {
+ LLSidepanelAppearance* pSelf = (LLSidepanelAppearance *)this;
+ LLNotificationsUtil::add("ConfirmExitWithoutSave", LLSD(), LLSD(), boost::bind(&LLSidepanelAppearance::callBackExitWithoutSaveViaClose,pSelf,_1,_2) );
+ }
+ else
+ {
+ LLVOAvatarSelf::onCustomizeEnd(FALSE);
+ toggleWearableEditPanel(FALSE);
+ mLLFloaterSidePanelContainer->close();
+ }
+}
+
LLSidepanelAppearance::LLSidepanelAppearance() :
LLPanel(),
mFilterSubString(LLStringUtil::null),
mFilterEditor(NULL),
mOutfitEdit(NULL),
mCurrOutfitPanel(NULL),
- mOpened(false)
+ mOpened(false),
+ mSidePanelJustOpened(true)
{
LLOutfitObserver& outfit_observer = LLOutfitObserver::instance();
outfit_observer.addBOFReplacedCallback(boost::bind(&LLSidepanelAppearance::refreshCurrentOutfitName, this, ""));
@@ -85,6 +192,8 @@ LLSidepanelAppearance::LLSidepanelAppearance() :
gAgentWearables.addLoadingStartedCallback(boost::bind(&LLSidepanelAppearance::setWearablesLoading, this, true));
gAgentWearables.addLoadedCallback(boost::bind(&LLSidepanelAppearance::setWearablesLoading, this, false));
+
+
}
LLSidepanelAppearance::~LLSidepanelAppearance()
@@ -119,8 +228,8 @@ BOOL LLSidepanelAppearance::postBuild()
{
LLButton* back_btn = mOutfitEdit->getChild<LLButton>("back_btn");
if (back_btn)
- {
- back_btn->setClickedCallback(boost::bind(&LLSidepanelAppearance::showOutfitsInventoryPanel, this));
+ {
+ back_btn->setClickedCallback(boost::bind(&LLSidepanelAppearance::onClickConfirmExitWithoutSaveViaBack, this));
}
}
@@ -144,6 +253,7 @@ BOOL LLSidepanelAppearance::postBuild()
setVisibleCallback(boost::bind(&LLSidepanelAppearance::onVisibilityChange,this,_2));
+
return TRUE;
}
@@ -183,6 +293,12 @@ void LLSidepanelAppearance::onOpen(const LLSD& key)
void LLSidepanelAppearance::onVisibilityChange(const LLSD &new_visibility)
{
+ //handle leaving and subsequent user verification of discarding any unsaved data
+ if ( mSidePanelJustOpened )
+ {
+ mSidePanelJustOpened = false;
+ }
+
LLSD visibility;
visibility["visible"] = new_visibility.asBoolean();
visibility["reset_accordion"] = false;
@@ -191,8 +307,9 @@ void LLSidepanelAppearance::onVisibilityChange(const LLSD &new_visibility)
void LLSidepanelAppearance::updateToVisibility(const LLSD &new_visibility)
{
- if (new_visibility["visible"].asBoolean())
+ if (new_visibility["visible"].asBoolean() )
{
+
const BOOL is_outfit_edit_visible = mOutfitEdit && mOutfitEdit->getVisible();
const BOOL is_wearable_edit_visible = mEditWearable && mEditWearable->getVisible();
@@ -543,3 +660,8 @@ void LLSidepanelAppearance::updateScrollingPanelList()
mEditWearable->updateScrollingPanelList();
}
}
+
+bool LLSidepanelAppearance::checkForDirtyEdits()
+{
+ return ( mEditWearable->isDirty() ) ? true : false;
+}