summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrad Payne (Vir Linden) <vir@lindenlab.com>2013-05-14 12:53:55 -0400
committerBrad Payne (Vir Linden) <vir@lindenlab.com>2013-05-14 12:53:55 -0400
commit749b5ba3bd7e38a23f373d15b8a74df7dede6a93 (patch)
treead0900d65f5e35108b13da6fa4c441c5c0b809a1
parentb1998cabc487c434555276a389ed19847b98f998 (diff)
parentb7161fcd58853fb60900e51a4ac221b02941905e (diff)
merge
-rw-r--r--indra/newview/llfloatersidepanelcontainer.cpp83
-rw-r--r--indra/newview/llfloatersidepanelcontainer.h5
-rw-r--r--indra/newview/llsidepanelappearance.cpp38
-rw-r--r--indra/newview/llsidepanelappearance.h4
4 files changed, 90 insertions, 40 deletions
diff --git a/indra/newview/llfloatersidepanelcontainer.cpp b/indra/newview/llfloatersidepanelcontainer.cpp
index 43ee54ecd2..3ea39cf196 100644
--- a/indra/newview/llfloatersidepanelcontainer.cpp
+++ b/indra/newview/llfloatersidepanelcontainer.cpp
@@ -56,30 +56,11 @@ BOOL LLFloaterSidePanelContainer::postBuild()
}
void LLFloaterSidePanelContainer::onConfirmationClose( const LLSD &confirm )
-{
- /*
- LLPanelOutfitEdit* panel_outfit_edit = dynamic_cast<LLPanelOutfitEdit*>(LLFloaterSidePanelContainer::getPanel("appearance", "panel_outfit_edit"));
- if (panel_outfit_edit)
- {
- LLFloater *parent = gFloaterView->getParentFloater(panel_outfit_edit);
- if (parent == this )
- {
- LLSidepanelAppearance* panel_appearance = dynamic_cast<LLSidepanelAppearance*>(getPanel("appearance"));
- panel_appearance->onClose(this);
- }
- else
- {
- LLFloater::onClickCloseBtn();
- }
- }
- else
- {
- LLFloater::onClickCloseBtn();
- }
- */
+{
onClickCloseBtn();
}
+
LLFloaterSidePanelContainer::~LLFloaterSidePanelContainer()
{
LLTransientFloaterMgr::getInstance()->removeControlView(LLTransientFloaterMgr::GLOBAL, this);
@@ -92,20 +73,10 @@ void LLFloaterSidePanelContainer::onOpen(const LLSD& key)
void LLFloaterSidePanelContainer::onClickCloseBtn()
{
- LLPanelOutfitEdit* panel_outfit_edit =
- dynamic_cast<LLPanelOutfitEdit*>(LLFloaterSidePanelContainer::getPanel("appearance", "panel_outfit_edit"));
- if (panel_outfit_edit)
+ LLSidepanelAppearance* panel = getSidePanelAppearance();
+ if ( panel )
{
- LLFloater *parent = gFloaterView->getParentFloater(panel_outfit_edit);
- if (parent == this )
- {
- LLSidepanelAppearance* panel_appearance = dynamic_cast<LLSidepanelAppearance*>(getPanel("appearance"));
- panel_appearance->onClose(this);
- }
- else
- {
- LLFloater::onClickCloseBtn();
- }
+ panel->onClose( this );
}
else
{
@@ -114,7 +85,7 @@ void LLFloaterSidePanelContainer::onClickCloseBtn()
}
void LLFloaterSidePanelContainer::close()
{
- LLFloater::onClickCloseBtn();
+ LLFloater::onClickCloseBtn();
}
LLPanel* LLFloaterSidePanelContainer::openChildPanel(const std::string& panel_name, const LLSD& params)
@@ -124,7 +95,7 @@ LLPanel* LLFloaterSidePanelContainer::openChildPanel(const std::string& panel_na
if (!getVisible())
{
- openFloater();
+ openFloater();
}
LLPanel* panel = NULL;
@@ -145,10 +116,30 @@ LLPanel* LLFloaterSidePanelContainer::openChildPanel(const std::string& panel_na
void LLFloaterSidePanelContainer::showPanel(const std::string& floater_name, const LLSD& key)
{
- LLFloaterSidePanelContainer* floaterp = LLFloaterReg::getTypedInstance<LLFloaterSidePanelContainer>(floater_name);
+ //If we're already open then check whether anything is dirty
+ LLFloaterSidePanelContainer* floaterp = LLFloaterReg::getTypedInstance<LLFloaterSidePanelContainer>(floater_name);
if (floaterp)
{
- floaterp->openChildPanel(sMainPanelName, key);
+ if ( floaterp->getVisible() )
+ {
+ LLSidepanelAppearance* panel = floaterp->getSidePanelAppearance();
+ if ( panel )
+ {
+ if ( panel->checkForDirtyEdits() )
+ {
+ panel->onClickConfirmExitWithoutSaveIntoAppearance();
+ }
+ else
+ {
+ //or a call into some new f() that just shows inv panel?
+ floaterp->openChildPanel(sMainPanelName, key);
+ }
+ }
+ }
+ else
+ {
+ floaterp->openChildPanel(sMainPanelName, key);
+ }
}
}
@@ -172,3 +163,19 @@ LLPanel* LLFloaterSidePanelContainer::getPanel(const std::string& floater_name,
return NULL;
}
+
+LLSidepanelAppearance* LLFloaterSidePanelContainer::getSidePanelAppearance()
+{
+ LLSidepanelAppearance* panel_appearance = NULL;
+ LLPanelOutfitEdit* panel_outfit_edit = dynamic_cast<LLPanelOutfitEdit*>(LLFloaterSidePanelContainer::getPanel("appearance", "panel_outfit_edit"));
+ if (panel_outfit_edit)
+ {
+ LLFloater *parent = gFloaterView->getParentFloater(panel_outfit_edit);
+ if (parent == this )
+ {
+ panel_appearance = dynamic_cast<LLSidepanelAppearance*>(getPanel("appearance"));
+ }
+ }
+ return panel_appearance;
+
+} \ No newline at end of file
diff --git a/indra/newview/llfloatersidepanelcontainer.h b/indra/newview/llfloatersidepanelcontainer.h
index 26fc092200..974934b48f 100644
--- a/indra/newview/llfloatersidepanelcontainer.h
+++ b/indra/newview/llfloatersidepanelcontainer.h
@@ -30,6 +30,8 @@
#include "llfloater.h"
+class LLSidepanelAppearance;
+
/**
* Class LLFloaterSidePanelContainer
*
@@ -81,6 +83,9 @@ public:
}
return panel;
}
+
+private:
+ LLSidepanelAppearance* getSidePanelAppearance();
};
#endif // LL_LLFLOATERSIDEPANELCONTAINER_H
diff --git a/indra/newview/llsidepanelappearance.cpp b/indra/newview/llsidepanelappearance.cpp
index f77275fd1c..1b56aff3b6 100644
--- a/indra/newview/llsidepanelappearance.cpp
+++ b/indra/newview/llsidepanelappearance.cpp
@@ -114,14 +114,45 @@ void LLSidepanelAppearance::onClickConfirmExitWithoutSaveViaClose()
}
}
+
+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()*/ )
+ /*
+ 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();
}
@@ -629,3 +660,8 @@ void LLSidepanelAppearance::updateScrollingPanelList()
mEditWearable->updateScrollingPanelList();
}
}
+
+bool LLSidepanelAppearance::checkForDirtyEdits()
+{
+ return ( mEditWearable->isDirty() ) ? true : false;
+} \ No newline at end of file
diff --git a/indra/newview/llsidepanelappearance.h b/indra/newview/llsidepanelappearance.h
index 85e7734567..caf5be62e9 100644
--- a/indra/newview/llsidepanelappearance.h
+++ b/indra/newview/llsidepanelappearance.h
@@ -73,7 +73,9 @@ public:
void onClickConfirmExitWithoutSaveViaBack();
bool callBackExitWithoutSaveViaClose(const LLSD& notification, const LLSD& response);
void onClickConfirmExitWithoutSaveViaClose();
-
+ bool checkForDirtyEdits();
+ bool callBackExitWithoutSaveIntoAppearance(const LLSD& notification, const LLSD& response);
+ void onClickConfirmExitWithoutSaveIntoAppearance();
private:
void onFilterEdit(const std::string& search_string);