diff --git a/indra/newview/ao.cpp b/indra/newview/ao.cpp index cea9031dc8..addaddd168 100644 --- a/indra/newview/ao.cpp +++ b/indra/newview/ao.cpp @@ -35,6 +35,7 @@ #include "llcombobox.h" #include "llnotificationsutil.h" #include "llspinctrl.h" +#include "llviewercontrol.h" #include "llviewerinventory.h" FloaterAO::FloaterAO(const LLSD& key) @@ -43,7 +44,8 @@ FloaterAO::FloaterAO(const LLSD& key) mSelectedSet(0), mSelectedState(0), mCanDragAndDrop(FALSE), - mImportRunning(FALSE) + mImportRunning(FALSE), + mMore(TRUE) { } @@ -61,6 +63,7 @@ void FloaterAO::reloading(BOOL yes) void FloaterAO::updateSetParameters() { mOverrideSitsCheckBox->setValue(mSelectedSet->getSitOverride()); + mOverrideSitsCheckBoxSmall->setValue(mSelectedSet->getSitOverride()); mSmartCheckBox->setValue(mSelectedSet->getSmart()); mDisableMouselookCheckBox->setValue(mSelectedSet->getMouselookDisable()); BOOL isDefault=(mSelectedSet==AOEngine::instance().getDefaultSet()) ? TRUE : FALSE; @@ -111,8 +114,12 @@ void FloaterAO::updateList() mSetList=AOEngine::instance().getSetList(); mSetSelector->removeall(); + mSetSelectorSmall->removeall(); mSetSelector->clear(); + mSetSelectorSmall->clear(); + mAnimationList->deleteAllItems(); + reloading(FALSE); if(mSetList.empty()) { @@ -125,46 +132,55 @@ void FloaterAO::updateList() { std::string setName=mSetList[index]->getName(); mSetSelector->add(setName,&mSetList[index],ADD_BOTTOM,TRUE); + mSetSelectorSmall->add(setName,&mSetList[index],ADD_BOTTOM,TRUE); if(setName.compare(currentSetName)==0) { mSelectedSet=AOEngine::instance().selectSetByName(currentSetName); mSetSelector->selectNthItem(index); + mSetSelectorSmall->selectNthItem(index); updateSetParameters(); updateAnimationList(); } } enableSetControls(TRUE); - reloading(FALSE); } BOOL FloaterAO::postBuild() { - LLPanel* aoPanel=getChild("animation_overrider_panel"); - + LLPanel* aoPanel=getChild("animation_overrider_outer_panel"); + mMainInterfacePanel=aoPanel->getChild("animation_overrider_panel"); + mSmallInterfacePanel=aoPanel->getChild("animation_overrider_panel_small"); mReloadCoverPanel=aoPanel->getChild("ao_reload_cover"); - mSetSelector=aoPanel->getChild("ao_set_selection_combo"); - mActivateSetButton=aoPanel->getChild("ao_activate"); - mAddButton=aoPanel->getChild("ao_add"); - mRemoveButton=aoPanel->getChild("ao_remove"); - mDefaultCheckBox=aoPanel->getChild("ao_default"); - mOverrideSitsCheckBox=aoPanel->getChild("ao_sit_override"); - mSmartCheckBox=aoPanel->getChild("ao_smart"); - mDisableMouselookCheckBox=aoPanel->getChild("ao_disable_stands_in_mouselook"); + mSetSelector=mMainInterfacePanel->getChild("ao_set_selection_combo"); + mActivateSetButton=mMainInterfacePanel->getChild("ao_activate"); + mAddButton=mMainInterfacePanel->getChild("ao_add"); + mRemoveButton=mMainInterfacePanel->getChild("ao_remove"); + mDefaultCheckBox=mMainInterfacePanel->getChild("ao_default"); + mOverrideSitsCheckBox=mMainInterfacePanel->getChild("ao_sit_override"); + mSmartCheckBox=mMainInterfacePanel->getChild("ao_smart"); + mDisableMouselookCheckBox=mMainInterfacePanel->getChild("ao_disable_stands_in_mouselook"); - mStateSelector=aoPanel->getChild("ao_state_selection_combo"); - mAnimationList=aoPanel->getChild("ao_state_animation_list"); - mMoveUpButton=aoPanel->getChild("ao_move_up"); - mMoveDownButton=aoPanel->getChild("ao_move_down"); - mTrashButton=aoPanel->getChild("ao_trash"); - mCycleCheckBox=aoPanel->getChild("ao_cycle"); - mRandomizeCheckBox=aoPanel->getChild("ao_randomize"); - mCycleTimeTextLabel=aoPanel->getChild("ao_cycle_time_seconds_label"); - mCycleTimeSpinner=aoPanel->getChild("ao_cycle_time"); + mStateSelector=mMainInterfacePanel->getChild("ao_state_selection_combo"); + mAnimationList=mMainInterfacePanel->getChild("ao_state_animation_list"); + mMoveUpButton=mMainInterfacePanel->getChild("ao_move_up"); + mMoveDownButton=mMainInterfacePanel->getChild("ao_move_down"); + mTrashButton=mMainInterfacePanel->getChild("ao_trash"); + mCycleCheckBox=mMainInterfacePanel->getChild("ao_cycle"); + mRandomizeCheckBox=mMainInterfacePanel->getChild("ao_randomize"); + mCycleTimeTextLabel=mMainInterfacePanel->getChild("ao_cycle_time_seconds_label"); + mCycleTimeSpinner=mMainInterfacePanel->getChild("ao_cycle_time"); - mPreviousButton=aoPanel->getChild("ao_previous"); - mNextButton=aoPanel->getChild("ao_next"); - mReloadButton=aoPanel->getChild("ao_reload"); + mReloadButton=mMainInterfacePanel->getChild("ao_reload"); + mPreviousButton=mMainInterfacePanel->getChild("ao_previous"); + mNextButton=mMainInterfacePanel->getChild("ao_next"); + mLessButton=mMainInterfacePanel->getChild("ao_less"); + + mSetSelectorSmall=mSmallInterfacePanel->getChild("ao_set_selection_combo_small"); + mMoreButton=mSmallInterfacePanel->getChild("ao_more"); + mPreviousButtonSmall=mSmallInterfacePanel->getChild("ao_previous_small"); + mNextButtonSmall=mSmallInterfacePanel->getChild("ao_next_small"); + mOverrideSitsCheckBoxSmall=mSmallInterfacePanel->getChild("ao_sit_override_small"); mSetSelector->setCommitCallback(boost::bind(&FloaterAO::onSelectSet,this)); mActivateSetButton->setCommitCallback(boost::bind(&FloaterAO::onClickActivate,this)); @@ -175,9 +191,6 @@ BOOL FloaterAO::postBuild() mSmartCheckBox->setCommitCallback(boost::bind(&FloaterAO::onCheckSmart,this)); mDisableMouselookCheckBox->setCommitCallback(boost::bind(&FloaterAO::onCheckDisableStands,this)); - mPreviousButton->setCommitCallback(boost::bind(&FloaterAO::onClickPrevious,this)); - mNextButton->setCommitCallback(boost::bind(&FloaterAO::onClickNext,this)); - mAnimationList->setCommitOnSelectionChange(TRUE); mStateSelector->setCommitCallback(boost::bind(&FloaterAO::onSelectState,this)); @@ -189,16 +202,28 @@ BOOL FloaterAO::postBuild() mRandomizeCheckBox->setCommitCallback(boost::bind(&FloaterAO::onCheckRandomize,this)); mCycleTimeSpinner->setCommitCallback(boost::bind(&FloaterAO::onChangeCycleTime,this)); - updateSmart(); - mReloadButton->setCommitCallback(boost::bind(&FloaterAO::onClickReload,this)); + mPreviousButton->setCommitCallback(boost::bind(&FloaterAO::onClickPrevious,this)); + mNextButton->setCommitCallback(boost::bind(&FloaterAO::onClickNext,this)); + mLessButton->setCommitCallback(boost::bind(&FloaterAO::onClickLess,this)); + mOverrideSitsCheckBoxSmall->setCommitCallback(boost::bind(&FloaterAO::onCheckOverrideSitsSmall,this)); + + mSetSelectorSmall->setCommitCallback(boost::bind(&FloaterAO::onSelectSetSmall,this)); + mMoreButton->setCommitCallback(boost::bind(&FloaterAO::onClickMore,this)); + mPreviousButtonSmall->setCommitCallback(boost::bind(&FloaterAO::onClickPrevious,this)); + mNextButtonSmall->setCommitCallback(boost::bind(&FloaterAO::onClickNext,this)); + + updateSmart(); AOEngine::instance().setReloadCallback(boost::bind(&FloaterAO::updateList,this)); - enableSetControls(FALSE); onChangeAnimationSelection(); + mMainInterfacePanel->setVisible(TRUE); + mSmallInterfacePanel->setVisible(FALSE); + reloading(TRUE); updateList(); + return LLDockableFloater::postBuild(); } @@ -249,6 +274,16 @@ void FloaterAO::onSelectSet() } } +void FloaterAO::onSelectSetSmall() +{ + mSelectedSet=AOEngine::instance().getSetByName(mSetSelectorSmall->getSelectedItemLabel()); + if(mSelectedSet) + { + updateSetParameters(); + updateAnimationList(); + } +} + void FloaterAO::onClickActivate() { lldebugs << "Set activated: " << mSetSelector->getSelectedItemLabel() << llendl; @@ -373,8 +408,10 @@ BOOL FloaterAO::removeSetCallback(const LLSD& notification,const LLSD& response) reloading(TRUE); // to prevent snapping back to deleted set mSetSelector->removeall(); + mSetSelectorSmall->removeall(); // visually indicate there are no items left mSetSelector->clear(); + mSetSelectorSmall->clear(); mAnimationList->deleteAllItems(); return TRUE; } @@ -390,11 +427,18 @@ void FloaterAO::onCheckDefault() void FloaterAO::onCheckOverrideSits() { + mOverrideSitsCheckBoxSmall->setValue(mOverrideSitsCheckBox->getValue()); if(mSelectedSet) AOEngine::instance().setOverrideSits(mSelectedSet,mOverrideSitsCheckBox->getValue().asBoolean()); updateSmart(); } +void FloaterAO::onCheckOverrideSitsSmall() +{ + mOverrideSitsCheckBox->setValue(mOverrideSitsCheckBoxSmall->getValue()); + onCheckOverrideSits(); +} + void FloaterAO::updateSmart() { mSmartCheckBox->setEnabled(mOverrideSitsCheckBox->getValue()); @@ -529,10 +573,50 @@ void FloaterAO::onClickNext() AOEngine::instance().cycle(AOEngine::CycleNext); } +void FloaterAO::onClickMore() +{ + LLRect fullSize=gSavedPerAccountSettings.getRect("floater_rect_animation_overrider"); + LLRect smallSize=getRect(); + + mMore=TRUE; + + mSmallInterfacePanel->setVisible(FALSE); + mMainInterfacePanel->setVisible(TRUE); + setCanResize(TRUE); + + reshape(getRect().getWidth(),fullSize.getHeight()); +} + +void FloaterAO::onClickLess() +{ + LLRect fullSize=getRect(); + LLRect smallSize=mSmallInterfacePanel->getRect(); + smallSize.setLeftTopAndSize(0,0,smallSize.getWidth(),smallSize.getHeight()+getHeaderHeight()); + + mMore=FALSE; + + mSmallInterfacePanel->setVisible(TRUE); + mMainInterfacePanel->setVisible(FALSE); + setCanResize(FALSE); + + reshape(getRect().getWidth(),smallSize.getHeight()); + + // save current size and position + gSavedPerAccountSettings.setRect("floater_rect_animation_overrider",fullSize); +} + // virtual BOOL FloaterAO::handleDragAndDrop(S32 x,S32 y,MASK mask,BOOL drop,EDragAndDropType type,void* data, EAcceptance* accept,std::string& tooltipMsg) { + // no drag & drop on small interface + if(!mMore) + { + tooltipMsg="ao_dnd_only_on_full_interface"; + *accept=ACCEPT_NO; + return TRUE; + } + LLInventoryItem* item=(LLInventoryItem*) data; if(type==DAD_NOTECARD) diff --git a/indra/newview/ao.h b/indra/newview/ao.h index f9dbaa6320..ef898817a6 100644 --- a/indra/newview/ao.h +++ b/indra/newview/ao.h @@ -62,6 +62,7 @@ class FloaterAO LLScrollListItem* addAnimation(const std::string name); void onSelectSet(); + void onSelectSetSmall(); void onSelectState(); void onChangeAnimationSelection(); void onClickReload(); @@ -70,6 +71,7 @@ class FloaterAO void onClickActivate(); void onCheckDefault(); void onCheckOverrideSits(); + void onCheckOverrideSitsSmall(); void onCheckSmart(); void onCheckDisableStands(); void onClickMoveUp(); @@ -81,6 +83,9 @@ class FloaterAO void onClickPrevious(); void onClickNext(); + void onClickMore(); + void onClickLess(); + void reloading(BOOL yes); void updateSmart(); @@ -97,6 +102,11 @@ class FloaterAO AOSet::AOState* mSelectedState; LLPanel* mReloadCoverPanel; + + // Full interface + + LLPanel* mMainInterfacePanel; + LLComboBox* mSetSelector; LLButton* mActivateSetButton; LLButton* mAddButton; @@ -120,9 +130,21 @@ class FloaterAO LLButton* mPreviousButton; LLButton* mNextButton; + LLButton* mLessButton; + + // Small interface + + LLPanel* mSmallInterfacePanel; + + LLComboBox* mSetSelectorSmall; + LLButton* mMoreButton; + LLButton* mPreviousButtonSmall; + LLButton* mNextButtonSmall; + LLCheckBoxCtrl* mOverrideSitsCheckBoxSmall; BOOL mCanDragAndDrop; BOOL mImportRunning; + BOOL mMore; }; #endif // AO_H diff --git a/indra/newview/skins/default/xui/en/floater_ao.xml b/indra/newview/skins/default/xui/en/floater_ao.xml index cab1721b71..7732ed57a6 100644 --- a/indra/newview/skins/default/xui/en/floater_ao.xml +++ b/indra/newview/skins/default/xui/en/floater_ao.xml @@ -28,7 +28,7 @@ + + - + -