diff options
| author | Rider Linden <rider@lindenlab.com> | 2018-08-24 16:46:07 -0700 | 
|---|---|---|
| committer | Rider Linden <rider@lindenlab.com> | 2018-08-24 16:46:07 -0700 | 
| commit | 06a77dd5fe228a3bbf4c57ae3b0c51937871d6a2 (patch) | |
| tree | 4df4e1301ff1ed28bce8e9e63e37a2f85f61ebee | |
| parent | 185915aeede50dec00822c336537a335404252ed (diff) | |
is dirty code in day cycle editor.  When environment panel closes disconnect commit hook for crash.
| -rw-r--r-- | indra/newview/llfloatereditextdaycycle.cpp | 102 | ||||
| -rw-r--r-- | indra/newview/llfloatereditextdaycycle.h | 15 | ||||
| -rw-r--r-- | indra/newview/llfloaterfixedenvironment.cpp | 1 | ||||
| -rw-r--r-- | indra/newview/llpanelenvironment.cpp | 20 | ||||
| -rw-r--r-- | indra/newview/llpanelenvironment.h | 6 | ||||
| -rw-r--r-- | indra/newview/llviewernetwork.cpp | 2 | ||||
| -rw-r--r-- | indra/newview/tests/llviewernetwork_test.cpp | 4 | 
7 files changed, 131 insertions, 19 deletions
| diff --git a/indra/newview/llfloatereditextdaycycle.cpp b/indra/newview/llfloatereditextdaycycle.cpp index 6a328b2e85..6abb698785 100644 --- a/indra/newview/llfloatereditextdaycycle.cpp +++ b/indra/newview/llfloatereditextdaycycle.cpp @@ -137,7 +137,8 @@ LLFloaterEditExtDayCycle::LLFloaterEditExtDayCycle(const LLSD &key) :      mWaterBlender(),      mScratchSky(),      mScratchWater(), -    mIsPlaying(false) +    mIsPlaying(false), +    mIsDirty(false)  {      mCommitCallbackRegistrar.add(EVNT_DAYTRACK, [this](LLUICtrl *ctrl, const LLSD &data) { onTrackSelectionCallback(data); }); @@ -175,7 +176,7 @@ BOOL LLFloaterEditExtDayCycle::postBuild()      mFlyoutControl = new LLFlyoutComboBtnCtrl(this, BTN_SAVE, BTN_FLYOUT, XML_FLYOUTMENU_FILE);      mFlyoutControl->setAction([this](LLUICtrl *ctrl, const LLSD &data) { onButtonApply(ctrl, data); }); -    getChild<LLButton>(BTN_CANCEL, true)->setCommitCallback([this](LLUICtrl *ctrl, const LLSD &data) { onBtnCancel(); }); +    getChild<LLButton>(BTN_CANCEL, true)->setCommitCallback([this](LLUICtrl *ctrl, const LLSD &data) { onClickCloseBtn(); });      mTimeSlider->setCommitCallback([this](LLUICtrl *ctrl, const LLSD &data) { onTimeSliderMoved(); });      mAddFrameButton->setCommitCallback([this](LLUICtrl *ctrl, const LLSD &data) { onAddTrack(); });      mDeleteFrameButton->setCommitCallback([this](LLUICtrl *ctrl, const LLSD &data) { onRemoveTrack(); }); @@ -189,6 +190,26 @@ BOOL LLFloaterEditExtDayCycle::postBuild()      mTimeSlider->addSlider(0); +    LLTabContainer* tab_container = mSkyTabLayoutContainer->getChild<LLTabContainer>("sky_tabs");  +    S32 tab_count = tab_container->getTabCount(); + +    for (S32 idx = 0; idx < tab_count; ++idx) +    { +        LLSettingsEditPanel *panel = static_cast<LLSettingsEditPanel *>(tab_container->getPanelByIndex(idx)); +        if (panel) +            panel->setOnDirtyFlagChanged([this](LLPanel *, bool val) { onPanelDirtyFlagChanged(val); }); +    } + +    tab_container = mWaterTabLayoutContainer->getChild<LLTabContainer>("water_tabs"); +    tab_count = tab_container->getTabCount(); + +    for (S32 idx = 0; idx < tab_count; ++idx) +    { +        LLSettingsEditPanel *panel = static_cast<LLSettingsEditPanel *>(tab_container->getPanelByIndex(idx)); +        if (panel) +            panel->setOnDirtyFlagChanged([this](LLPanel *, bool val) { onPanelDirtyFlagChanged(val); }); +    } +      //getChild<LLButton>("sky1_track", true)->setToggleState(true);  	return TRUE; @@ -312,12 +333,12 @@ void LLFloaterEditExtDayCycle::onClose(bool app_quitting)      doCloseInventoryFloater(app_quitting);      // there's no point to change environment if we're quitting      // or if we already restored environment -    if (!app_quitting && LLEnvironment::instance().getSelectedEnvironment() == LLEnvironment::ENV_EDIT) +    stopPlay(); +    if (!app_quitting)      { -        LLEnvironment::instance().setSelectedEnvironment(LLEnvironment::ENV_LOCAL); +        LLEnvironment::instance().setSelectedEnvironment(LLEnvironment::ENV_LOCAL, LLEnvironment::TRANSITION_FAST);          LLEnvironment::instance().clearEnvironment(LLEnvironment::ENV_EDIT);      } -    stopPlay();  }  void LLFloaterEditExtDayCycle::onFocusReceived() @@ -355,7 +376,7 @@ void LLFloaterEditExtDayCycle::refresh()      mFlyoutControl->setMenuItemVisible(ACTION_APPLY_PARCEL, show_apply);      mFlyoutControl->setMenuItemVisible(ACTION_APPLY_REGION, show_apply); -    mFlyoutControl->setMenuItemEnabled(ACTION_COMMIT, show_commit); +    mFlyoutControl->setMenuItemEnabled(ACTION_COMMIT, show_commit && !mCommitSignal.empty());      mFlyoutControl->setMenuItemEnabled(ACTION_SAVE, is_inventory_avail);      mFlyoutControl->setMenuItemEnabled(ACTION_SAVEAS, is_inventory_avail);      mFlyoutControl->setMenuItemEnabled(ACTION_APPLY_LOCAL, true); @@ -445,14 +466,18 @@ void LLFloaterEditExtDayCycle::onButtonApply(LLUICtrl *ctrl, const LLSD &data)      }  } -void LLFloaterEditExtDayCycle::onBtnCancel() + +void LLFloaterEditExtDayCycle::onClickCloseBtn(bool app_quitting /*= false*/)  { -    closeFloater(); // will restore env +    if (!app_quitting) +        checkAndConfirmSettingsLoss([this](){ closeFloater(); }); +    else +        closeFloater();  }  void LLFloaterEditExtDayCycle::onButtonImport()  { -    doImportFromDisk(); +    checkAndConfirmSettingsLoss([this]() { doImportFromDisk(); });  }  void LLFloaterEditExtDayCycle::onButtonLoadFrame() @@ -657,6 +682,35 @@ void LLFloaterEditExtDayCycle::onFrameSliderMouseUp(S32 x, S32 y, MASK mask)      selectFrame(sliderpos, LLSettingsDay::DEFAULT_FRAME_SLOP_FACTOR);  } + +void LLFloaterEditExtDayCycle::onPanelDirtyFlagChanged(bool value) +{ +    if (value) +        setDirtyFlag(); +} + +void LLFloaterEditExtDayCycle::checkAndConfirmSettingsLoss(on_confirm_fn cb) +{ +    if (isDirty()) +    { +        LLSD args(LLSDMap("TYPE", mEditDay->getSettingsType()) +            ("NAME", mEditDay->getName())); + +        // create and show confirmation textbox +        LLNotificationsUtil::add("SettingsConfirmLoss", args, LLSD(), +            [this, cb](const LLSD¬if, const LLSD&resp) +            { +                S32 opt = LLNotificationsUtil::getSelectedOption(notif, resp); +                if (opt == 0) +                    cb(); +            }); +    } +    else if (cb) +    { +        cb(); +    } +} +  void LLFloaterEditExtDayCycle::onTimeSliderMoved()  {      selectFrame(mTimeSlider->getCurSliderValue(), LLSettingsDay::DEFAULT_FRAME_SLOP_FACTOR); @@ -1165,6 +1219,7 @@ void LLFloaterEditExtDayCycle::onInventoryCreated(LLUUID asset_id, LLUUID invent          return;      } +    clearDirtyFlag();      setFocus(TRUE);                 // Call back the focus...      loadInventoryItem(inventory_id);  } @@ -1173,6 +1228,7 @@ void LLFloaterEditExtDayCycle::onInventoryUpdated(LLUUID asset_id, LLUUID invent  {      LL_WARNS("ENVDAYEDIT") << "Inventory item " << inventory_id << " has been updated with asset " << asset_id << " results are:" << results << LL_ENDL; +    clearDirtyFlag();      if (inventory_id != mInventoryId)      {          loadInventoryItem(inventory_id); @@ -1198,6 +1254,7 @@ void LLFloaterEditExtDayCycle::doImportFromDisk()          }          mCurrentTrack = 1; +        setDirtyFlag();          setEditDayCycle(legacyday);      }  } @@ -1274,6 +1331,33 @@ void LLFloaterEditExtDayCycle::onIdlePlay(void* user_data)  } + +void LLFloaterEditExtDayCycle::clearDirtyFlag() +{ +    mIsDirty = false; + +    LLTabContainer* tab_container = mSkyTabLayoutContainer->getChild<LLTabContainer>("sky_tabs"); +    S32 tab_count = tab_container->getTabCount(); + +    for (S32 idx = 0; idx < tab_count; ++idx) +    { +        LLSettingsEditPanel *panel = static_cast<LLSettingsEditPanel *>(tab_container->getPanelByIndex(idx)); +        if (panel) +            panel->clearIsDirty(); +    } + +    tab_container = mWaterTabLayoutContainer->getChild<LLTabContainer>("water_tabs"); +    tab_count = tab_container->getTabCount(); + +    for (S32 idx = 0; idx < tab_count; ++idx) +    { +        LLSettingsEditPanel *panel = static_cast<LLSettingsEditPanel *>(tab_container->getPanelByIndex(idx)); +        if (panel) +            panel->clearIsDirty(); +    } + +} +  void LLFloaterEditExtDayCycle::doOpenInventoryFloater(LLSettingsType::type_e type, LLUUID currasset)  {  //  LLUI::sWindow->setCursor(UI_CURSOR_WAIT); diff --git a/indra/newview/llfloatereditextdaycycle.h b/indra/newview/llfloatereditextdaycycle.h index 7d0489f0bc..ba269dd538 100644 --- a/indra/newview/llfloatereditextdaycycle.h +++ b/indra/newview/llfloatereditextdaycycle.h @@ -91,13 +91,15 @@ public:      BOOL			            handleKeyUp(KEY key, MASK mask, BOOL called_from_parent) override; -private: +    BOOL                        isDirty() const override { return getIsDirty(); }  +private: +    typedef std::function<void()> on_confirm_fn;      F32 getCurrentFrame() const;  	// flyout response/click  	void                        onButtonApply(LLUICtrl *ctrl, const LLSD &data); -	void                        onBtnCancel(); +    virtual void                onClickCloseBtn(bool app_quitting = false) override;      void                        onButtonImport();      void                        onButtonLoadFrame();      void                        onAddTrack(); @@ -113,6 +115,10 @@ private:      void                        onFrameSliderMouseDown(S32 x, S32 y, MASK mask);      void                        onFrameSliderMouseUp(S32 x, S32 y, MASK mask); +    void                        onPanelDirtyFlagChanged(bool); + +    void                        checkAndConfirmSettingsLoss(on_confirm_fn cb); +  	void                        selectTrack(U32 track_index, bool force = false);  	void                        selectFrame(F32 frame, F32 slop_factor);  	void                        clearTabs(); @@ -158,6 +164,10 @@ private:      void                        stopPlay();      static void                 onIdlePlay(void *); +    bool                        getIsDirty() const  { return mIsDirty; } +    void                        setDirtyFlag()      { mIsDirty = true; } +    virtual void                clearDirtyFlag(); +      LLSettingsDay::ptr_t        mEditDay; // edited copy      LLSettingsDay::Seconds      mDayLength;      U32                         mCurrentTrack; @@ -190,6 +200,7 @@ private:      LLFrameTimer                mPlayTimer;      F32                         mPlayStartFrame; // an env frame      bool                        mIsPlaying; +    bool                        mIsDirty;      edit_commit_signal_t        mCommitSignal; diff --git a/indra/newview/llfloaterfixedenvironment.cpp b/indra/newview/llfloaterfixedenvironment.cpp index cbc41f724e..ece4898935 100644 --- a/indra/newview/llfloaterfixedenvironment.cpp +++ b/indra/newview/llfloaterfixedenvironment.cpp @@ -273,7 +273,6 @@ void LLFloaterFixedEnvironment::checkAndConfirmSettingsLoss(LLFloaterFixedEnviro      {          cb();      } -  }  void LLFloaterFixedEnvironment::onPickerCommitSetting(LLUUID asset_id) diff --git a/indra/newview/llpanelenvironment.cpp b/indra/newview/llpanelenvironment.cpp index d91f9110e0..51b2fa380f 100644 --- a/indra/newview/llpanelenvironment.cpp +++ b/indra/newview/llpanelenvironment.cpp @@ -119,7 +119,19 @@ void LLPanelEnvironmentInfo::onVisibilityChange(BOOL new_visibility)      if (new_visibility)          gIdleCallbacks.addFunction(onIdlePlay, this);      else +    {          gIdleCallbacks.deleteFunction(onIdlePlay, this); +        LLFloaterEditExtDayCycle *dayeditor = getEditFloater(); +        if (mCommitConnection.connected()) +            mCommitConnection.disconnect(); +        if (dayeditor) +        { +            if (dayeditor->isDirty()) +                dayeditor->refresh(); +            else +                dayeditor->closeFloater(); +        } +    }  } @@ -213,13 +225,13 @@ LLFloaterSettingsPicker *LLPanelEnvironmentInfo::getSettingsPicker()      return picker;  } -LLFloaterEditExtDayCycle * LLPanelEnvironmentInfo::getEditFloater() +LLFloaterEditExtDayCycle * LLPanelEnvironmentInfo::getEditFloater(bool create)  {      static const S32 FOURHOURS(4 * 60 * 60);      LLFloaterEditExtDayCycle *editor = static_cast<LLFloaterEditExtDayCycle *>(mEditFloater.get());      // Show the dialog -    if (!editor) +    if (!editor && create)      {          LLSD params(LLSDMap(LLFloaterEditExtDayCycle::KEY_EDIT_CONTEXT, (mCurrentParcelId == INVALID_PARCEL_ID) ? LLFloaterEditExtDayCycle::CONTEXT_REGION : LLFloaterEditExtDayCycle::CONTEXT_PARCEL)              (LLFloaterEditExtDayCycle::KEY_DAY_LENGTH, mCurrentEnvironment ? (S32)(mCurrentEnvironment->mDayLength.value()) : FOURHOURS)); @@ -228,9 +240,11 @@ LLFloaterEditExtDayCycle * LLPanelEnvironmentInfo::getEditFloater()          if (!editor)              return nullptr; -        editor->setEditCommitSignal([this](LLSettingsDay::ptr_t pday) { onEditCommited(pday); });      } +    if (editor && !mCommitConnection.connected()) +        mCommitConnection = editor->setEditCommitSignal([this](LLSettingsDay::ptr_t pday) { onEditCommited(pday); }); +      return editor;  } diff --git a/indra/newview/llpanelenvironment.h b/indra/newview/llpanelenvironment.h index 6a0c784708..b867a7b61d 100644 --- a/indra/newview/llpanelenvironment.h +++ b/indra/newview/llpanelenvironment.h @@ -120,15 +120,19 @@ protected:      std::string                 getInventoryNameForAssetId(LLUUID asset_id);      LLFloaterSettingsPicker *   getSettingsPicker(); -    LLFloaterEditExtDayCycle *  getEditFloater(); +    LLFloaterEditExtDayCycle *  getEditFloater(bool create = true);      LLEnvironment::EnvironmentInfo::ptr_t   mCurrentEnvironment;      S32                                     mCurrentParcelId; +  private:      static void                 onIdlePlay(void *); +    typedef boost::signals2::connection connection_t; + +    connection_t                mCommitConnection;      LLHandle<LLFloater>         mSettingsFloater;      LLHandle<LLFloater>         mEditFloater;      S32                         mDirtyFlag; diff --git a/indra/newview/llviewernetwork.cpp b/indra/newview/llviewernetwork.cpp index 84c640fcf9..374322ac10 100644 --- a/indra/newview/llviewernetwork.cpp +++ b/indra/newview/llviewernetwork.cpp @@ -133,7 +133,7 @@ void LLGridManager::initialize(const std::string& grid_file)  	addSystemGrid(LLTrans::getString("AditiGridLabel"),  				  "util.aditi.lindenlab.com",  				  "https://login.aditi.lindenlab.com/cgi-bin/login.cgi", -				  "https://aditi-secondlife.webdev.lindenlab.com/helpers/", +				  "https://secondlife.aditi.lindenlab.com/helpers/",  				  DEFAULT_LOGIN_PAGE,  				  SL_UPDATE_QUERY_URL,  				  "https://my.aditi.lindenlab.com/", diff --git a/indra/newview/tests/llviewernetwork_test.cpp b/indra/newview/tests/llviewernetwork_test.cpp index 22b576eb22..fe81fd63ea 100644 --- a/indra/newview/tests/llviewernetwork_test.cpp +++ b/indra/newview/tests/llviewernetwork_test.cpp @@ -258,7 +258,7 @@ namespace tut  					  std::string("https://login.aditi.lindenlab.com/cgi-bin/login.cgi"));  		ensure_equals("Aditi helper uri",  					  LLGridManager::getInstance()->getHelperURI("util.aditi.lindenlab.com"), -					  std::string("https://aditi-secondlife.webdev.lindenlab.com/helpers/")); +                      std::string("https://secondlife.aditi.lindenlab.com/helpers/"));  		ensure_equals("Aditi login page",  					  LLGridManager::getInstance()->getLoginPage("util.aditi.lindenlab.com"),  					  std::string("https://viewer-splash.secondlife.com/")); @@ -330,7 +330,7 @@ namespace tut  					  std::string("https://login.aditi.lindenlab.com/cgi-bin/login.cgi"));  		ensure_equals("Aditi helper uri",  					  LLGridManager::getInstance()->getHelperURI("util.aditi.lindenlab.com"), -					  std::string("https://aditi-secondlife.webdev.lindenlab.com/helpers/")); +                      std::string("https://secondlife.aditi.lindenlab.com/helpers/"));  		ensure_equals("Aditi login page",  					  LLGridManager::getInstance()->getLoginPage("util.aditi.lindenlab.com"),  					  std::string("https://viewer-splash.secondlife.com/")); | 
