diff options
| -rw-r--r-- | indra/llui/llmultislider.cpp | 12 | ||||
| -rw-r--r-- | indra/newview/llfloaterland.cpp | 1 | ||||
| -rw-r--r-- | indra/newview/llfloaterregioninfo.cpp | 3 | ||||
| -rw-r--r-- | indra/newview/llpanelenvironment.cpp | 122 | ||||
| -rw-r--r-- | indra/newview/llpanelenvironment.h | 23 | ||||
| -rw-r--r-- | indra/newview/skins/default/xui/en/panel_region_environment.xml | 155 | 
6 files changed, 295 insertions, 21 deletions
diff --git a/indra/llui/llmultislider.cpp b/indra/llui/llmultislider.cpp index 6d6b6c4e90..b5e3032626 100644 --- a/indra/llui/llmultislider.cpp +++ b/indra/llui/llmultislider.cpp @@ -74,7 +74,6 @@ LLMultiSlider::Params::Params()  LLMultiSlider::LLMultiSlider(const LLMultiSlider::Params& p)  :	LLF32UICtrl(p),  	mMouseOffset( 0 ), -	mDragStartThumbRect( 0, getRect().getHeight(), p.thumb_width, 0 ),  	mMaxNumSliders(p.max_sliders),  	mAllowOverlap(p.allow_overlap),  	mLoopOverlap(p.loop_overlap), @@ -93,7 +92,16 @@ LLMultiSlider::LLMultiSlider(const LLMultiSlider::Params& p)  {  	mValue.emptyMap();  	mCurSlider = LLStringUtil::null; -	 + +	if (mOrientation == HORIZONTAL) +	{ +		mDragStartThumbRect = LLRect(0, getRect().getHeight(), p.thumb_width, 0); +	} +	else +	{ +		mDragStartThumbRect = LLRect(0, p.thumb_width, getRect().getWidth(), 0); +	} +  	if (p.mouse_down_callback.isProvided())  	{  		setMouseDownCallback(initCommitCallback(p.mouse_down_callback)); diff --git a/indra/newview/llfloaterland.cpp b/indra/newview/llfloaterland.cpp index 3e50700377..a2886d5010 100644 --- a/indra/newview/llfloaterland.cpp +++ b/indra/newview/llfloaterland.cpp @@ -3261,6 +3261,7 @@ BOOL LLPanelLandEnvironment::postBuild()      getChild<LLUICtrl>(RDO_USEDEFAULT)->setLabelArg("[USEDEFAULT]", getString(STR_LABEL_USEREGION));      getChild<LLUICtrl>(CHK_ALLOWOVERRIDE)->setVisible(FALSE); +    getChild<LLUICtrl>(PNL_ENVIRONMENT_ALTITUDES)->setVisible(FALSE);      return TRUE;  } diff --git a/indra/newview/llfloaterregioninfo.cpp b/indra/newview/llfloaterregioninfo.cpp index 11bbd2c6fa..d13190254f 100644 --- a/indra/newview/llfloaterregioninfo.cpp +++ b/indra/newview/llfloaterregioninfo.cpp @@ -3376,7 +3376,7 @@ void LLPanelRegionExperiences::itemChanged( U32 event_type, const LLUUID& id )  }  //========================================================================= -const U32 LLPanelRegionEnvironment::DIRTY_FLAG_OVERRIDE(0x01 << 3); +const U32 LLPanelRegionEnvironment::DIRTY_FLAG_OVERRIDE(0x01 << 4);  LLPanelRegionEnvironment::LLPanelRegionEnvironment():      LLPanelEnvironmentInfo(), @@ -3395,6 +3395,7 @@ BOOL LLPanelRegionEnvironment::postBuild()      getChild<LLUICtrl>(RDO_USEDEFAULT)->setLabelArg("[USEDEFAULT]", getString(STR_LABEL_USEDEFAULT));      getChild<LLUICtrl>(CHK_ALLOWOVERRIDE)->setVisible(TRUE); +    getChild<LLUICtrl>(PNL_ENVIRONMENT_ALTITUDES)->setVisible(TRUE);      getChild<LLUICtrl>(CHK_ALLOWOVERRIDE)->setCommitCallback([this](LLUICtrl *, const LLSD &value){ onChkAllowOverride(value.asBoolean()); });      return TRUE; diff --git a/indra/newview/llpanelenvironment.cpp b/indra/newview/llpanelenvironment.cpp index 3edfd4156c..825a38e8b2 100644 --- a/indra/newview/llpanelenvironment.cpp +++ b/indra/newview/llpanelenvironment.cpp @@ -41,6 +41,7 @@  #include "llfloater.h"  #include "llfloaterreg.h"  #include "llfloatereditextdaycycle.h" +#include "llmultisliderctrl.h"  #include "llsettingsvo.h"  #include "llappviewer.h" @@ -62,26 +63,45 @@ const std::string LLPanelEnvironmentInfo::BTN_SELECTINV("btn_select_inventory");  const std::string LLPanelEnvironmentInfo::BTN_EDIT("btn_edit");  const std::string LLPanelEnvironmentInfo::SLD_DAYLENGTH("sld_day_length");  const std::string LLPanelEnvironmentInfo::SLD_DAYOFFSET("sld_day_offset"); +const std::string LLPanelEnvironmentInfo::SLD_ALTITUDES("sld_altitudes");  const std::string LLPanelEnvironmentInfo::CHK_ALLOWOVERRIDE("chk_allow_override");  const std::string LLPanelEnvironmentInfo::BTN_APPLY("btn_apply");  const std::string LLPanelEnvironmentInfo::BTN_CANCEL("btn_cancel");  const std::string LLPanelEnvironmentInfo::LBL_TIMEOFDAY("lbl_apparent_time");  const std::string LLPanelEnvironmentInfo::PNL_SETTINGS("pnl_environment_config"); +const std::string LLPanelEnvironmentInfo::PNL_ENVIRONMENT_ALTITUDES("pnl_environment_altitudes");  const std::string LLPanelEnvironmentInfo::PNL_BUTTONS("pnl_environment_buttons");  const std::string LLPanelEnvironmentInfo::PNL_DISABLED("pnl_environment_disabled");  const std::string LLPanelEnvironmentInfo::STR_LABEL_USEDEFAULT("str_label_use_default");  const std::string LLPanelEnvironmentInfo::STR_LABEL_USEREGION("str_label_use_region");  const std::string LLPanelEnvironmentInfo::STR_LABEL_UNKNOWNINV("str_unknow_inventory"); +const std::string LLPanelEnvironmentInfo::STR_ALTITUDE_DESCRIPTION("str_altitude_desription");  const U32 LLPanelEnvironmentInfo::DIRTY_FLAG_DAYCYCLE(0x01 << 0);  const U32 LLPanelEnvironmentInfo::DIRTY_FLAG_DAYLENGTH(0x01 << 1);  const U32 LLPanelEnvironmentInfo::DIRTY_FLAG_DAYOFFSET(0x01 << 2); +const U32 LLPanelEnvironmentInfo::DIRTY_FLAG_ALTITUDES(0x01 << 3);  const U32 LLPanelEnvironmentInfo::DIRTY_FLAG_MASK(          LLPanelEnvironmentInfo::DIRTY_FLAG_DAYCYCLE |           LLPanelEnvironmentInfo::DIRTY_FLAG_DAYLENGTH |  -        LLPanelEnvironmentInfo::DIRTY_FLAG_DAYOFFSET ); +        LLPanelEnvironmentInfo::DIRTY_FLAG_DAYOFFSET | +        LLPanelEnvironmentInfo::DIRTY_FLAG_ALTITUDES); + +const U32 ALTITUDE_SLIDER_COUNT = 3; +const std::string alt_sliders[] = { +    "sld1", +    "sld2", +    "sld3", +}; + +const std::string alt_labels[] = { +    "alt1", +    "alt2", +    "alt3", +    "ground", +};  //=========================================================================  LLPanelEnvironmentInfo::LLPanelEnvironmentInfo():  @@ -104,6 +124,8 @@ BOOL LLPanelEnvironmentInfo::postBuild()      getChild<LLUICtrl>(SLD_DAYLENGTH)->setCommitCallback([this](LLUICtrl *, const LLSD &value) { onSldDayLengthChanged(value.asReal()); });      getChild<LLUICtrl>(SLD_DAYOFFSET)->setCommitCallback([this](LLUICtrl *, const LLSD &value) { onSldDayOffsetChanged(value.asReal()); }); +    getChild<LLMultiSliderCtrl>(SLD_ALTITUDES)->setCommitCallback([this](LLUICtrl *cntrl, const LLSD &value) { onAltSliderCallback(cntrl, value); }); +      return TRUE;  } @@ -183,6 +205,18 @@ void LLPanelEnvironmentInfo::refresh()      udpateApparentTimeOfDay(); +    LLEnvironment::altitude_list_t altitudes = LLEnvironment::instance().getRegionAltitudes(); +    if (altitudes.size() > 0) +    { +        for (S32 idx = 0; idx < ALTITUDE_SLIDER_COUNT; ++idx) +        { +            LLMultiSliderCtrl *sld = getChild<LLMultiSliderCtrl>(SLD_ALTITUDES); +            sld->setSliderValue(alt_sliders[idx], altitudes[idx+1], FALSE); +            updateAltLabel(alt_labels[idx], idx + 2, altitudes[idx+1]); +            mAltitudes[alt_sliders[idx]] = AltitudeData(idx+1, idx, altitudes[idx+1]); +        } +    } +  }  void LLPanelEnvironmentInfo::refreshFromSource() @@ -333,6 +367,37 @@ void LLPanelEnvironmentInfo::clearDirtyFlag(U32 flag)      getChildView(BTN_CANCEL)->setEnabled((mDirtyFlag != 0) && can_edit);  } +void LLPanelEnvironmentInfo::updateAltLabel(const std::string &alt_name, U32 sky_index, F32 alt_value) +{ +    LLMultiSliderCtrl *sld = getChild<LLMultiSliderCtrl>(SLD_ALTITUDES); +    LLRect sld_rect = sld->getRect(); +    U32 sld_range = sld_rect.getHeight(); +    U32 sld_bottom = sld_rect.mBottom; +    U32 sld_offset = 8 + 1; // Default slider-thumb width plus stretch. Placeholder until images are implemented. +    U32 pos = (sld_range - sld_offset) * ((alt_value - 100) / (4000 - 100)); + +    // get related text box +    LLTextBox* text = getChild<LLTextBox>(alt_name); +    if (text) +    { +        // move related text box +        LLRect rect = text->getRect(); +        U32 height = rect.getHeight(); +        rect.mBottom = sld_bottom + sld_offset + pos - (height / 2); +        rect.mTop = rect.mBottom + height; +        text->setRect(rect); + +        // update text +        std::ostringstream convert; +        convert << alt_value; +        text->setTextArg("[ALTITUDE]", convert.str()); +        convert.str(""); +        convert.clear(); +        convert << sky_index; +        text->setTextArg("[INDEX]", convert.str()); +    } +} +  void LLPanelEnvironmentInfo::onSwitchDefaultSelection()  {      bool can_edit = canEdit(); @@ -366,6 +431,59 @@ void LLPanelEnvironmentInfo::onSldDayOffsetChanged(F32 value)      udpateApparentTimeOfDay();  } +void LLPanelEnvironmentInfo::onAltSliderCallback(LLUICtrl *cntrl, const LLSD &data) +{ +    LLMultiSliderCtrl *sld = (LLMultiSliderCtrl *)cntrl; +    std::string sld_name = sld->getCurSlider(); +    F32 sld_value = sld->getCurSliderValue(); +    U32 alt_index = 1; + +    mAltitudes[sld_name].mAltitude = sld_value; + +    // find index of sky layer/altitude +    altitudes_data_t::iterator iter = mAltitudes.begin(); +    altitudes_data_t::iterator end = mAltitudes.end(); +    while (iter!=end) +    { +        if (sld_value > iter->second.mAltitude) +        { +            alt_index++; +        } +        iter++; +    } + +    if (mAltitudes[sld_name].mAltitudeIndex != alt_index) +    { +        // update all labels since we could have jumped multiple +        // (or sort by altitude, too little elements, so I didn't bother with efficiency) +        altitudes_data_t::iterator iter = mAltitudes.begin(); +        altitudes_data_t::iterator iter2; +        U32 new_index; +        while (iter != end) +        { +            iter2 = mAltitudes.begin(); +            new_index = 1; +            while (iter2 != end) +            { +                if (iter->second.mAltitude > iter2->second.mAltitude) +                { +                    new_index++; +                } +                iter2++; +            } +            iter->second.mAltitudeIndex = new_index; +            updateAltLabel(alt_labels[iter->second.mLabelIndex], iter->second.mAltitudeIndex + 1, iter->second.mAltitude); +            iter++; +        } +    } +    else +    { +        updateAltLabel(alt_labels[mAltitudes[sld_name].mLabelIndex], alt_index + 1, sld_value); +    } + +    setDirtyFlag(DIRTY_FLAG_ALTITUDES); +} +  void LLPanelEnvironmentInfo::onBtnApply()  {      doApply(); @@ -431,6 +549,8 @@ void LLPanelEnvironmentInfo::doApply()                  [this](S32 parcel_id, LLEnvironment::EnvironmentInfo::ptr_t envifo) {onEnvironmentReceived(parcel_id, envifo); });          } +        // Todo: save altitudes once LLEnvironment::setRegionAltitudes() gets implemented +          setControlsEnabled(false);      }  } diff --git a/indra/newview/llpanelenvironment.h b/indra/newview/llpanelenvironment.h index a8a1f018cf..7469da9c05 100644 --- a/indra/newview/llpanelenvironment.h +++ b/indra/newview/llpanelenvironment.h @@ -71,11 +71,13 @@ protected:      static const std::string    BTN_EDIT;      static const std::string    SLD_DAYLENGTH;      static const std::string    SLD_DAYOFFSET; +    static const std::string    SLD_ALTITUDES;      static const std::string    CHK_ALLOWOVERRIDE;      static const std::string    BTN_APPLY;      static const std::string    BTN_CANCEL;      static const std::string    LBL_TIMEOFDAY;      static const std::string    PNL_SETTINGS; +    static const std::string    PNL_ENVIRONMENT_ALTITUDES;      static const std::string    PNL_BUTTONS;      static const std::string    PNL_DISABLED; @@ -83,10 +85,12 @@ protected:      static const std::string    STR_LABEL_USEDEFAULT;      static const std::string    STR_LABEL_USEREGION;      static const std::string    STR_LABEL_UNKNOWNINV; +    static const std::string    STR_ALTITUDE_DESCRIPTION;      static const U32            DIRTY_FLAG_DAYCYCLE;      static const U32            DIRTY_FLAG_DAYLENGTH;      static const U32            DIRTY_FLAG_DAYOFFSET; +    static const U32            DIRTY_FLAG_ALTITUDES;      static const U32            DIRTY_FLAG_MASK; @@ -97,10 +101,12 @@ protected:      bool                        getIsDirty() const                  { return (mDirtyFlag != 0); }      bool                        getIsDirtyFlag(U32 flag) const      { return ((mDirtyFlag & flag) != 0); }      U32                         getDirtyFlag() const                { return mDirtyFlag; } +    void                        updateAltLabel(const std::string &alt_name, U32 sky_index, F32 alt_value);      void                        onSwitchDefaultSelection();      void                        onSldDayLengthChanged(F32 value);      void                        onSldDayOffsetChanged(F32 value); +    void                        onAltSliderCallback(LLUICtrl *cntrl, const LLSD &data);      void                        onBtnApply();      void                        onBtnReset();      void                        onBtnEdit(); @@ -126,6 +132,23 @@ protected:      LLEnvironment::EnvironmentInfo::ptr_t   mCurrentEnvironment;      S32                                     mCurrentParcelId; +    class AltitudeData +    { +    public: +        AltitudeData() : +            mAltitudeIndex(0), mLabelIndex(0), mAltitude(0) +        {} +        AltitudeData(U32 altitude_index, U32 label_index, F32 altitude) : +            mAltitudeIndex(altitude_index), mLabelIndex(label_index), mAltitude(altitude) +        {} + +        U32 mAltitudeIndex; +        U32 mLabelIndex; +        F32 mAltitude; +    }; +    typedef std::map<std::string, AltitudeData>      altitudes_data_t; +    altitudes_data_t                        mAltitudes; +  private: diff --git a/indra/newview/skins/default/xui/en/panel_region_environment.xml b/indra/newview/skins/default/xui/en/panel_region_environment.xml index 557e093f51..8229dcb91d 100644 --- a/indra/newview/skins/default/xui/en/panel_region_environment.xml +++ b/indra/newview/skins/default/xui/en/panel_region_environment.xml @@ -3,20 +3,22 @@  <panel          border="true"          follows="top|left" -        height="300" +        height="375"          label="Environment"          layout="topleft"          help_topic="panel_region_environment_tab"          name="panel_env_info" -        width="420">  +        width="530">       <string name="str_label_use_default">Use Default Settings</string>      <string name="str_label_use_region">Use Region Settings</string>      <string name="str_unknow_inventory">Unknown</string> +    <string name="str_altitude_desription">Sky [INDEX]([ALTITUDE]m)</string>      <layout_stack  -            width="420" -            height="450" -            follows="left|right|top|bottom" +            width="530" +            height="367" +            follows="all" +            layout="topleft"              orientation="vertical">          <layout_panel                  auto_resize="true" @@ -34,15 +36,19 @@ settings are disabled.              </text>          </layout_panel>          <layout_panel  -                auto_resize="true" +                auto_resize="false"                  user_resize="false" +                height="155" +                min_height="0"                  name="pnl_environment_config"                  visible="true">              <layout_stack                       left="5" -                    top="5" +                    top="0"                      right="-5" -                    follows="left|right|top|bottom" +                    bottom="-1" +                    layout="topleft" +                    follows="all"                      orientation="horizontal">                  <layout_panel                           background_visible="true" @@ -51,11 +57,13 @@ settings are disabled.                          auto_resize="true"                          user_resize="false"                          width="260" -                        min_width="260"> +                        min_width="260" +                        name="pnl_environment_current">                      <text follows="top|left"                              font="SansSerif"                              halign="left" -                            text_color="white">Current Environment</text> +                            text_color="white" +                            top="2">Current Environment</text>                      <radio_group                              height="90"                              layout="topleft" @@ -117,12 +125,16 @@ settings are disabled.                          bevel_style="in"                          auto_resize="true"                          user_resize="false" -                        background_visible="true"> +                        width="260" +                        min_width="260" +                        background_visible="true" +                        name="pnl_environment_length">                      <text                               font="SansSerif"                              follows="top|left|right"                              halign="left" -                            text_color="white">Day Settings</text> +                            text_color="white" +                            top="2">Day Settings</text>                      <text                              type="string"                              length="1" @@ -180,7 +192,7 @@ settings are disabled.                              height="12"                              layout="topleft"                              left_delta="0" -                            top_pad="20" +                            top_pad="10"                              width="200">                          Apparent Time of Day:                      </text> @@ -200,25 +212,134 @@ settings are disabled.                  </layout_panel>              </layout_stack>          </layout_panel> -        <layout_panel  +        <layout_panel +                auto_resize="false" +                user_resize="false" +                height="155" +                min_height="0" +                name="pnl_environment_altitudes" +                visible="true"> +            <panel +                left="5" +                top="0" +                bottom="-1" +                width="260" +                follows="left|top|bottom" +                background_visible="true" +                border="true" +                bevel_style="in" +                name="cnt_panel"> +                <text follows="top|left" +                    font="SansSerif" +                    halign="left" +                    text_color="white" +                    top="2">Sky Altitudes</text> +                <multi_slider +                    decimal_digits="0" +                    follows="bottom" +                    height="120" +                    width="10" +                    orientation="vertical" +                    increment="10" +                    initial_value="100" +                    max_val="4000" +                    layout="topleft" +                    left="15" +                    top="20" +                    max_sliders="20" +                    name="sld_altitudes" +                    show_text="false"> +                    <slider name="sld1" value="200"/> +                    <slider name="sld2" value="400"/> +                    <slider name="sld3" value="600"/> +                </multi_slider> +                <icon +                    follows="left|top" +                    height="10" +                    width="10" +                    image_name="Rounded_Square" +                    layout="topleft" +                    name="camera_icon" +                    mouse_opaque="false" +                    visible="true" +                    left_delta="0" +                    top_pad="-3"/> +                <text +                        type="string" +                        length="1" +                        follows="left|top" +                        height="12" +                        layout="topleft" +                        left_pad="3" +                        top_delta="0" +                        width="200" +                        name="ground"> +                    Ground +                </text> +                <text +                        type="string" +                        length="1" +                        follows="left" +                        height="12" +                        layout="topleft" +                        left="25" +                        top="30" +                        width="200" +                        name="alt1"> +                    Sky [INDEX]([ALTITUDE]m) +                </text> +                <text +                        type="string" +                        length="1" +                        follows="left|top" +                        height="12" +                        layout="topleft" +                        left="25" +                        top="40" +                        width="200" +                        name="alt2"> +                    Sky [INDEX]([ALTITUDE]m) +                </text> +                <text +                        type="string" +                        length="1" +                        follows="left|top" +                        height="12" +                        layout="topleft" +                        left="25" +                        top="50" +                        width="200" +                        name="alt3"> +                    Sky [INDEX]([ALTITUDE]m) +                </text> +            </panel> +        </layout_panel> +        <layout_panel                  auto_resize="true"                  user_resize="false" -                height="21" +                height="0"                  min_height="0" +                name="pnl_auto_adjust" +                visible="true"/> +        <layout_panel +                auto_resize="false" +                user_resize="false" +                height="59" +                min_height="59"                  name="pnl_environment_buttons">              <check_box                      height="20"                      label="Parcel Owners May Override Environment"                      layout="topleft"                      left="10" -                    top="10" +                    top="0"                      name="chk_allow_override"                      width="200" />              <button                      follows="top|left"                      height="23"                      label="Apply" -                    top_pad="10" +                    top_pad="5"                      name="btn_apply"                      width="100" />              <button  | 
