diff --git a/indra/newview/llbottomtray.cpp b/indra/newview/llbottomtray.cpp index 1603ff0a541bc7b64c81ed79300ae68a7f9fe953..a0574211355421e20c8cff34c4ccc875a5946270 100644 --- a/indra/newview/llbottomtray.cpp +++ b/indra/newview/llbottomtray.cpp @@ -168,7 +168,7 @@ LLBottomTray::LLBottomTray(const LLSD&) LLUICtrlFactory::getInstance()->buildPanel(this,"panel_bottomtray.xml"); - LLUICtrl::CommitCallbackRegistry::defaultRegistrar().add("CameraPresets.ChangeView", boost::bind(&LLFloaterCamera::onClickCameraPresets, _2)); + LLUICtrl::CommitCallbackRegistry::defaultRegistrar().add("CameraPresets.ChangeView", boost::bind(&LLFloaterCamera::onClickCameraItem, _2)); //this is to fix a crash that occurs because LLBottomTray is a singleton //and thus is deleted at the end of the viewers lifetime, but to be cleanly diff --git a/indra/newview/llfloatercamera.cpp b/indra/newview/llfloatercamera.cpp index d84ebef1ddfe839609ad2a8e89d34a11a091e9bc..ca346138fb5e2ec518af5c4910cd79fe2aaf77b8 100644 --- a/indra/newview/llfloatercamera.cpp +++ b/indra/newview/llfloatercamera.cpp @@ -47,15 +47,19 @@ #include "lltoolfocus.h" #include "llslider.h" +static LLDefaultChildRegistry::Register<LLPanelCameraItem> r("panel_camera_item"); + // Constants const F32 CAMERA_BUTTON_DELAY = 0.0f; #define ORBIT "cam_rotate_stick" #define PAN "cam_track_stick" #define ZOOM "zoom" -#define PRESETS "camera_presets" +#define PRESETS "preset_views_list" #define CONTROLS "controls" +bool LLFloaterCamera::sFreeCamera = false; + // Zoom the camera in and out class LLPanelCameraZoom : public LLPanel @@ -78,6 +82,68 @@ class LLPanelCameraZoom LLSlider* mSlider; }; +LLPanelCameraItem::Params::Params() +: icon_over("icon_over"), + icon_selected("icon_selected"), + picture("picture"), + text("text"), + selected_picture("selected_picture"), + mousedown_callback("mousedown_callback") +{ +} + +LLPanelCameraItem::LLPanelCameraItem(const LLPanelCameraItem::Params& p) +: LLPanel(p) +{ + LLIconCtrl::Params icon_params = p.picture; + mPicture = LLUICtrlFactory::create<LLIconCtrl>(icon_params); + addChild(mPicture); + + icon_params = p.icon_over; + mIconOver = LLUICtrlFactory::create<LLIconCtrl>(icon_params); + addChild(mIconOver); + + icon_params = p.icon_selected; + mIconSelected = LLUICtrlFactory::create<LLIconCtrl>(icon_params); + addChild(mIconSelected); + + icon_params = p.selected_picture; + mPictureSelected = LLUICtrlFactory::create<LLIconCtrl>(icon_params); + addChild(mPictureSelected); + + LLTextBox::Params text_params = p.text; + mText = LLUICtrlFactory::create<LLTextBox>(text_params); + addChild(mText); + + if (p.mousedown_callback.isProvided()) + { + setCommitCallback(initCommitCallback(p.mousedown_callback)); + } +} + +BOOL LLPanelCameraItem::postBuild() +{ + setMouseEnterCallback(boost::bind(&LLPanelCameraItem::childSetVisible, this, "hovered_icon", true)); + setMouseLeaveCallback(boost::bind(&LLPanelCameraItem::childSetVisible, this, "hovered_icon", false)); + setMouseDownCallback(boost::bind(&LLPanelCameraItem::onAnyMouseClick, this)); + setRightMouseDownCallback(boost::bind(&LLPanelCameraItem::onAnyMouseClick, this)); + return TRUE; +} + +void LLPanelCameraItem::onAnyMouseClick() +{ + if (mCommitSignal) (*mCommitSignal)(this, LLSD()); +} + +void LLPanelCameraItem::setValue(const LLSD& value) +{ + if (!value.isMap()) return;; + if (!value.has("selected")) return; + childSetVisible("selected_icon", value["selected"]); + childSetVisible("picture", !value["selected"]); + childSetVisible("selected_picture", value["selected"]); +} + static LLRegisterPanelClassWrapper<LLPanelCameraZoom> t_camera_zoom_panel("camera_zoom_panel"); //------------------------------------------------------------------------------- @@ -153,16 +219,11 @@ void activate_camera_tool() return false; } -bool LLFloaterCamera::inAvatarViewMode() -{ - return mCurrMode == CAMERA_CTRL_MODE_AVATAR_VIEW; -} - void LLFloaterCamera::resetCameraMode() { LLFloaterCamera* floater_camera = LLFloaterCamera::findInstance(); if (!floater_camera) return; - floater_camera->switchMode(CAMERA_CTRL_MODE_ORBIT); + floater_camera->switchMode(CAMERA_CTRL_MODE_PAN); } void LLFloaterCamera::update() @@ -180,9 +241,13 @@ void LLFloaterCamera::toPrevMode() /*static*/ void LLFloaterCamera::onLeavingMouseLook() { LLFloaterCamera* floater_camera = LLFloaterCamera::findInstance(); - if (floater_camera && floater_camera->inFreeCameraMode()) + if (floater_camera) { - activate_camera_tool(); + floater_camera->updateItemsSelection(); + if(floater_camera->inFreeCameraMode()) + { + activate_camera_tool(); + } } } @@ -216,24 +281,24 @@ void LLFloaterCamera::onClose(bool app_quitting) //We don't care of camera mode if app is quitting if(app_quitting) return; - // When mCurrMode is in CAMERA_CTRL_MODE_ORBIT + // When mCurrMode is in CAMERA_CTRL_MODE_PAN // switchMode won't modify mPrevMode, so force it here. // It is needed to correctly return to previous mode on open, see EXT-2727. - if (mCurrMode == CAMERA_CTRL_MODE_ORBIT) - mPrevMode = CAMERA_CTRL_MODE_ORBIT; + if (mCurrMode == CAMERA_CTRL_MODE_PAN) + mPrevMode = CAMERA_CTRL_MODE_PAN; // HACK: Should always close as docked to prevent toggleInstance without calling onOpen. if ( !isDocked() ) setDocked(true); - switchMode(CAMERA_CTRL_MODE_ORBIT); + switchMode(CAMERA_CTRL_MODE_PAN); mClosed = TRUE; } LLFloaterCamera::LLFloaterCamera(const LLSD& val) : LLTransientDockableFloater(NULL, true, val), mClosed(FALSE), - mCurrMode(CAMERA_CTRL_MODE_ORBIT), - mPrevMode(CAMERA_CTRL_MODE_ORBIT) + mCurrMode(CAMERA_CTRL_MODE_PAN), + mPrevMode(CAMERA_CTRL_MODE_PAN) { } @@ -247,16 +312,32 @@ BOOL LLFloaterCamera::postBuild() mZoom = getChild<LLPanelCameraZoom>(ZOOM); mTrack = getChild<LLJoystickCameraTrack>(PAN); - assignButton2Mode(CAMERA_CTRL_MODE_ORBIT, "orbit_btn"); + assignButton2Mode(CAMERA_CTRL_MODE_MODES, "avatarview_btn"); assignButton2Mode(CAMERA_CTRL_MODE_PAN, "pan_btn"); - assignButton2Mode(CAMERA_CTRL_MODE_FREE_CAMERA, "freecamera_btn"); - assignButton2Mode(CAMERA_CTRL_MODE_AVATAR_VIEW, "avatarview_btn"); + assignButton2Mode(CAMERA_CTRL_MODE_PRESETS, "presets_btn"); update(); return LLDockableFloater::postBuild(); } +void LLFloaterCamera::fillFlatlistFromPanel (LLFlatListView* list, LLPanel* panel) +{ + // copying child list and then iterating over a copy, because list itself + // is changed in process + const child_list_t child_list = *panel->getChildList(); + child_list_t::const_reverse_iterator iter = child_list.rbegin(); + child_list_t::const_reverse_iterator end = child_list.rend(); + for ( ; iter != end; ++iter) + { + LLView* view = *iter; + LLPanel* item = dynamic_cast<LLPanel*>(view); + if (panel) + list->addItem(item); + } + +} + ECameraControlMode LLFloaterCamera::determineMode() { LLTool* curr_tool = LLToolMgr::getInstance()->getCurrentTool(); @@ -267,10 +348,10 @@ ECameraControlMode LLFloaterCamera::determineMode() if (gAgentCamera.getCameraMode() == CAMERA_MODE_MOUSELOOK) { - return CAMERA_CTRL_MODE_AVATAR_VIEW; + return CAMERA_CTRL_MODE_PRESETS; } - return CAMERA_CTRL_MODE_ORBIT; + return CAMERA_CTRL_MODE_PAN; } @@ -301,21 +382,16 @@ void LLFloaterCamera::setModeTitle(const ECameraControlMode mode) std::string title; switch(mode) { - case CAMERA_CTRL_MODE_ORBIT: - title = getString("orbit_mode_title"); + case CAMERA_CTRL_MODE_MODES: + title = getString("camera_modes_title"); break; case CAMERA_CTRL_MODE_PAN: title = getString("pan_mode_title"); break; - case CAMERA_CTRL_MODE_AVATAR_VIEW: - title = getString("avatar_view_mode_title"); - break; - case CAMERA_CTRL_MODE_FREE_CAMERA: - title = getString("free_mode_title"); + case CAMERA_CTRL_MODE_PRESETS: + title = getString("presets_mode_title"); break; default: - // title should be provided for all modes - llassert(false); break; } setTitle(title); @@ -327,19 +403,28 @@ void LLFloaterCamera::switchMode(ECameraControlMode mode) switch (mode) { - case CAMERA_CTRL_MODE_ORBIT: - clear_camera_tool(); + case CAMERA_CTRL_MODE_MODES: + if(sFreeCamera) + { + switchMode(CAMERA_CTRL_MODE_FREE_CAMERA); + } break; case CAMERA_CTRL_MODE_PAN: + sFreeCamera = false; clear_camera_tool(); break; case CAMERA_CTRL_MODE_FREE_CAMERA: + sFreeCamera = true; activate_camera_tool(); break; - case CAMERA_CTRL_MODE_AVATAR_VIEW: + case CAMERA_CTRL_MODE_PRESETS: + if(sFreeCamera) + { + switchMode(CAMERA_CTRL_MODE_FREE_CAMERA); + } break; default: @@ -368,66 +453,80 @@ void LLFloaterCamera::assignButton2Mode(ECameraControlMode mode, const std::stri void LLFloaterCamera::updateState() { + childSetVisible(ZOOM, CAMERA_CTRL_MODE_PAN == mCurrMode); + + bool show_presets = (CAMERA_CTRL_MODE_PRESETS == mCurrMode) || (CAMERA_CTRL_MODE_FREE_CAMERA == mCurrMode + && CAMERA_CTRL_MODE_PRESETS == mPrevMode); + childSetVisible(PRESETS, show_presets); + + bool show_camera_modes = CAMERA_CTRL_MODE_MODES == mCurrMode || (CAMERA_CTRL_MODE_FREE_CAMERA == mCurrMode + && CAMERA_CTRL_MODE_MODES == mPrevMode); + childSetVisible("camera_modes_list", show_camera_modes); + + updateItemsSelection(); + + if (CAMERA_CTRL_MODE_FREE_CAMERA == mCurrMode) + { + return; + } + //updating buttons std::map<ECameraControlMode, LLButton*>::const_iterator iter = mMode2Button.begin(); for (; iter != mMode2Button.end(); ++iter) { iter->second->setToggleState(iter->first == mCurrMode); } - - childSetVisible(ORBIT, CAMERA_CTRL_MODE_ORBIT == mCurrMode); - childSetVisible(PAN, CAMERA_CTRL_MODE_PAN == mCurrMode); - childSetVisible(ZOOM, CAMERA_CTRL_MODE_AVATAR_VIEW != mCurrMode); - childSetVisible(PRESETS, CAMERA_CTRL_MODE_AVATAR_VIEW == mCurrMode); - - updateCameraPresetButtons(); setModeTitle(mCurrMode); - - - //hiding or showing the panel with controls by reshaping the floater - bool showControls = CAMERA_CTRL_MODE_FREE_CAMERA != mCurrMode; - if (showControls == childIsVisible(CONTROLS)) return; - - childSetVisible(CONTROLS, showControls); - - LLRect rect = getRect(); - LLRect controls_rect; - if (childGetRect(CONTROLS, controls_rect)) - { - S32 floater_header_size = getHeaderHeight(); - S32 height = controls_rect.getHeight() - floater_header_size; - S32 newHeight = rect.getHeight(); - - if (showControls) - { - newHeight += height; - } - else - { - newHeight -= height; - } - - rect.setOriginAndSize(rect.mLeft, rect.mBottom, rect.getWidth(), newHeight); - reshape(rect.getWidth(), rect.getHeight()); - setRect(rect); - - } } -void LLFloaterCamera::updateCameraPresetButtons() +void LLFloaterCamera::updateItemsSelection() { ECameraPreset preset = (ECameraPreset) gSavedSettings.getU32("CameraPreset"); - - childSetValue("rear_view", preset == CAMERA_PRESET_REAR_VIEW); - childSetValue("group_view", preset == CAMERA_PRESET_GROUP_VIEW); - childSetValue("front_view", preset == CAMERA_PRESET_FRONT_VIEW); - childSetValue("mouselook_view", gAgentCamera.cameraMouselook()); + LLSD argument; + argument["selected"] = preset == CAMERA_PRESET_REAR_VIEW; + getChild<LLPanelCameraItem>("rear_view")->setValue(argument); + argument["selected"] = preset == CAMERA_PRESET_GROUP_VIEW; + getChild<LLPanelCameraItem>("group_view")->setValue(argument); + argument["selected"] = preset == CAMERA_PRESET_FRONT_VIEW; + getChild<LLPanelCameraItem>("front_view")->setValue(argument); + argument["selected"] = gAgentCamera.getCameraMode() == CAMERA_MODE_MOUSELOOK; + getChild<LLPanelCameraItem>("mouselook_view")->setValue(argument); + argument["selected"] = mCurrMode == CAMERA_CTRL_MODE_FREE_CAMERA; + getChild<LLPanelCameraItem>("object_view")->setValue(argument); } -void LLFloaterCamera::onClickCameraPresets(const LLSD& param) +void LLFloaterCamera::onClickCameraItem(const LLSD& param) { std::string name = param.asString(); + if ("mouselook_view" == name) + { + gAgentCamera.changeCameraToMouselook(); + } + else if ("object_view" == name) + { + LLFloaterCamera* camera_floater = LLFloaterCamera::findInstance(); + if (camera_floater) + camera_floater->switchMode(CAMERA_CTRL_MODE_FREE_CAMERA); + } + else + { + switchToPreset(name); + } + + LLFloaterCamera* camera_floater = LLFloaterCamera::findInstance(); + if (camera_floater) + { + camera_floater->updateItemsSelection(); + camera_floater->fromFreeToPresets(); + } +} + +/*static*/ +void LLFloaterCamera::switchToPreset(const std::string& name) +{ + sFreeCamera = false; + clear_camera_tool(); if ("rear_view" == name) { gAgentCamera.switchCameraPreset(CAMERA_PRESET_REAR_VIEW); @@ -440,12 +539,12 @@ void LLFloaterCamera::onClickCameraPresets(const LLSD& param) { gAgentCamera.switchCameraPreset(CAMERA_PRESET_FRONT_VIEW); } - else if ("mouselook_view" == name) +} + +void LLFloaterCamera::fromFreeToPresets() +{ + if (!sFreeCamera && mCurrMode == CAMERA_CTRL_MODE_FREE_CAMERA && mPrevMode == CAMERA_CTRL_MODE_PRESETS) { - gAgentCamera.changeCameraToMouselook(); + switchMode(CAMERA_CTRL_MODE_PRESETS); } - - LLFloaterCamera* camera_floater = LLFloaterCamera::findInstance(); - if (camera_floater) - camera_floater->updateCameraPresetButtons(); } diff --git a/indra/newview/llfloatercamera.h b/indra/newview/llfloatercamera.h index b268839165d6f3ec161b433c3a9af3a0dad3024f..8fa7a539968a9a7c395132c93ca2d42afaef32c5 100644 --- a/indra/newview/llfloatercamera.h +++ b/indra/newview/llfloatercamera.h @@ -34,6 +34,9 @@ #define LLFLOATERCAMERA_H #include "lltransientdockablefloater.h" +#include "lliconctrl.h" +#include "lltextbox.h" +#include "llflatlistview.h" class LLJoystickCameraRotate; class LLJoystickCameraZoom; @@ -43,10 +46,10 @@ class LLPanelCameraZoom; enum ECameraControlMode { - CAMERA_CTRL_MODE_ORBIT, + CAMERA_CTRL_MODE_MODES, CAMERA_CTRL_MODE_PAN, CAMERA_CTRL_MODE_FREE_CAMERA, - CAMERA_CTRL_MODE_AVATAR_VIEW + CAMERA_CTRL_MODE_PRESETS }; class LLFloaterCamera @@ -58,8 +61,8 @@ class LLFloaterCamera /* whether in free camera mode */ static bool inFreeCameraMode(); - /* callback for camera presets changing */ - static void onClickCameraPresets(const LLSD& param); + /* callback for camera items selection changing */ + static void onClickCameraItem(const LLSD& param); static void onLeavingMouseLook(); @@ -68,7 +71,14 @@ class LLFloaterCamera /* determines actual mode and updates ui */ void update(); - + + /*switch to one of the camera presets (front, rear, side)*/ + static void switchToPreset(const std::string& name); + + /* move to CAMERA_CTRL_MODE_PRESETS from CAMERA_CTRL_MODE_FREE_CAMERA if we are on presets panel and + are not in free camera mode*/ + void fromFreeToPresets(); + virtual void onOpen(const LLSD& key); virtual void onClose(bool app_quitting); @@ -88,9 +98,6 @@ class LLFloaterCamera ECameraControlMode determineMode(); - /* whether in avatar view (first person) mode */ - bool inAvatarViewMode(); - /* resets to the previous mode */ void toPrevMode(); @@ -106,18 +113,59 @@ class LLFloaterCamera /* updates the state (UI) according to the current mode */ void updateState(); - /* update camera preset buttons toggle state according to the currently selected preset */ - void updateCameraPresetButtons(); + /* update camera modes items selection and camera preset items selection according to the currently selected preset */ + void updateItemsSelection(); void onClickBtn(ECameraControlMode mode); void assignButton2Mode(ECameraControlMode mode, const std::string& button_name); + // fills flatlist with items from given panel + void fillFlatlistFromPanel (LLFlatListView* list, LLPanel* panel); + // set to true when free camera mode is selected in modes list + // remains true until preset camera mode is chosen, or pan button is clicked, or escape pressed + static bool sFreeCamera; BOOL mClosed; ECameraControlMode mPrevMode; ECameraControlMode mCurrMode; std::map<ECameraControlMode, LLButton*> mMode2Button; +}; +/** + * Class used to represent widgets from panel_camera_item.xml- + * panels that contain pictures and text. Pictures are different + * for selected and unselected state (this state is nor stored- icons + * are changed in setValue()). This class doesn't implement selection logic- + * it's items are used inside of flatlist. + */ +class LLPanelCameraItem + : public LLPanel +{ +public: + struct Params : public LLInitParam::Block<Params, LLPanel::Params> + { + Optional<LLIconCtrl::Params> icon_over; + Optional<LLIconCtrl::Params> icon_selected; + Optional<LLIconCtrl::Params> picture; + Optional<LLIconCtrl::Params> selected_picture; + + Optional<LLTextBox::Params> text; + Optional<CommitCallbackParam> mousedown_callback; + Params(); + }; + /*virtual*/ BOOL postBuild(); + /** setting on/off background icon to indicate selected state */ + /*virtual*/ void setValue(const LLSD& value); + // sends commit signal + void onAnyMouseClick(); +protected: + friend class LLUICtrlFactory; + LLPanelCameraItem(const Params&); + LLIconCtrl* mIconOver; + LLIconCtrl* mIconSelected; + LLIconCtrl* mPicture; + LLIconCtrl* mPictureSelected; + LLTextBox* mText; }; #endif diff --git a/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Back_Off.png b/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Back_Off.png index 3cfe2e850e614f131b343dec26aa23b3542720c0..00158a7bc2fe1161f878c54bc416764e8621a9b7 100644 Binary files a/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Back_Off.png and b/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Back_Off.png differ diff --git a/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Back_On.png b/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Back_On.png index bb5d85e4100c3865a7c0f0afa1f49e622defa49d..3748f5e190eacb6dbf8808690349c6828e6df380 100644 Binary files a/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Back_On.png and b/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Back_On.png differ diff --git a/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Front_Off.png b/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Front_Off.png index 9876aa456cf1282e74a459ba3ec0173a9c1fc75b..c49b8f9a270236d9b70aaf875888b024aa5c9f99 100644 Binary files a/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Front_Off.png and b/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Front_Off.png differ diff --git a/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Front_On.png b/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Front_On.png index f481fed88cbcf322624217a3aa058806cb4846db..bc8c4db04df3a265a78a6d12b1f58af77cedae5f 100644 Binary files a/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Front_On.png and b/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Front_On.png differ diff --git a/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Side_Off.png b/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Side_Off.png index d58b4ff9904f774cad3344fecbf79b06e5350fb9..b919a0a1521f45f60ebdece329d2468d3aab4ef0 100644 Binary files a/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Side_Off.png and b/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Side_Off.png differ diff --git a/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Side_On.png b/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Side_On.png index 6e7389899218710977c298873d66ecfbff197989..de9da359a0a5716b09a49f5b4c48866a9317268f 100644 Binary files a/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Side_On.png and b/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Side_On.png differ diff --git a/indra/newview/skins/default/textures/bottomtray/Mouselook_View_Off.png b/indra/newview/skins/default/textures/bottomtray/Mouselook_View_Off.png new file mode 100644 index 0000000000000000000000000000000000000000..8d32cad95fb939c6bce8ba436fce064f022259dc Binary files /dev/null and b/indra/newview/skins/default/textures/bottomtray/Mouselook_View_Off.png differ diff --git a/indra/newview/skins/default/textures/bottomtray/Mouselook_View_On.png b/indra/newview/skins/default/textures/bottomtray/Mouselook_View_On.png new file mode 100644 index 0000000000000000000000000000000000000000..4c98e35868434bc7e3176d5c9c93fadbdd77e396 Binary files /dev/null and b/indra/newview/skins/default/textures/bottomtray/Mouselook_View_On.png differ diff --git a/indra/newview/skins/default/textures/bottomtray/Object_View_Off.png b/indra/newview/skins/default/textures/bottomtray/Object_View_Off.png new file mode 100644 index 0000000000000000000000000000000000000000..e9dea7e17e1e497897822c479520f517e3dc2bae Binary files /dev/null and b/indra/newview/skins/default/textures/bottomtray/Object_View_Off.png differ diff --git a/indra/newview/skins/default/textures/bottomtray/Object_View_On.png b/indra/newview/skins/default/textures/bottomtray/Object_View_On.png new file mode 100644 index 0000000000000000000000000000000000000000..7a348ba22e3d89d134df3a5c3cdedf0ef6a945c9 Binary files /dev/null and b/indra/newview/skins/default/textures/bottomtray/Object_View_On.png differ diff --git a/indra/newview/skins/default/textures/bottomtray/PanOrbit_Disabled.png b/indra/newview/skins/default/textures/bottomtray/PanOrbit_Disabled.png new file mode 100644 index 0000000000000000000000000000000000000000..20fa40e12757211edd6057663737e7e243e15087 Binary files /dev/null and b/indra/newview/skins/default/textures/bottomtray/PanOrbit_Disabled.png differ diff --git a/indra/newview/skins/default/textures/bottomtray/PanOrbit_Off.png b/indra/newview/skins/default/textures/bottomtray/PanOrbit_Off.png new file mode 100644 index 0000000000000000000000000000000000000000..53efa3a9a94ba314db32a0637c75e9b06cca2c1e Binary files /dev/null and b/indra/newview/skins/default/textures/bottomtray/PanOrbit_Off.png differ diff --git a/indra/newview/skins/default/textures/bottomtray/PanOrbit_Over.png b/indra/newview/skins/default/textures/bottomtray/PanOrbit_Over.png new file mode 100644 index 0000000000000000000000000000000000000000..f1420e00027de1e0cdc32df8f91cae73373dba1f Binary files /dev/null and b/indra/newview/skins/default/textures/bottomtray/PanOrbit_Over.png differ diff --git a/indra/newview/skins/default/textures/bottomtray/PanOrbit_Press.png b/indra/newview/skins/default/textures/bottomtray/PanOrbit_Press.png new file mode 100644 index 0000000000000000000000000000000000000000..89a6269edc1c70ed6a526853ff3fe444c708a69f Binary files /dev/null and b/indra/newview/skins/default/textures/bottomtray/PanOrbit_Press.png differ diff --git a/indra/newview/skins/default/textures/textures.xml b/indra/newview/skins/default/textures/textures.xml index 91890009f443e738f91f8f9253a9dc475d22cf11..57f23c7e76136b0b6c436573db8794fb82fa7c39 100644 --- a/indra/newview/skins/default/textures/textures.xml +++ b/indra/newview/skins/default/textures/textures.xml @@ -278,6 +278,9 @@ with the same filename but different name <texture name="menu_separator" file_name="navbar/FileMenu_Divider.png" scale.left="4" scale.top="166" scale.right="0" scale.bottom="0" /> + <texture name="MouseLook_View_Off" file_name="bottomtray/MouseLook_view_off.png" preload="false" /> + <texture name="MouseLook_View_On" file_name="bottomtray/MouseLook_view_on.png" preload="false" /> + <texture name="Move_Fly_Off" file_name="bottomtray/Move_Fly_Off.png" preload="false" /> <texture name="Move_Run_Off" file_name="bottomtray/Move_Run_Off.png" preload="false" /> <texture name="Move_Walk_Off" file_name="bottomtray/Move_Walk_Off.png" preload="false" /> @@ -338,10 +341,14 @@ with the same filename but different name <texture name="Object_Tube" file_name="build/Object_Tube.png" preload="false" /> <texture name="Object_Tube_Selected" file_name="build/Object_Tube_Selected.png" preload="false" /> + <texture name="Object_View_Off" file_name="bottomtray/Object_View_Off.png" preload="false" /> + <texture name="Object_View_On" file_name="bottomtray/Object_View_On.png" preload="false" /> + <texture name="OptionsMenu_Disabled" file_name="icons/OptionsMenu_Disabled.png" preload="false" /> <texture name="OptionsMenu_Off" file_name="icons/OptionsMenu_Off.png" preload="false" /> <texture name="OptionsMenu_Press" file_name="icons/OptionsMenu_Press.png" preload="false" /> + <texture name="PanOrbit_Off" file_name="bottomtray/PanOrbit_Off.png" preload="false" /> <texture name="Parcel_Exp_Color" file_name="icons/Parcel_Exp_Color.png" preload="false" /> diff --git a/indra/newview/skins/default/xui/en/floater_camera.xml b/indra/newview/skins/default/xui/en/floater_camera.xml index 999cb9ed970f78b0305bb005eb1f29afe8d5928f..75b0457c90979b01bf0d14afb8ea2a9fa83aa4e2 100644 --- a/indra/newview/skins/default/xui/en/floater_camera.xml +++ b/indra/newview/skins/default/xui/en/floater_camera.xml @@ -1,267 +1,282 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater - legacy_header_height="18" - can_dock="true" - can_minimize="true" - can_close="false" - follows="bottom" - height="152" - layout="topleft" - name="camera_floater" - help_topic="camera_floater" - save_rect="true" - save_visibility="true" - save_dock_state="true" - single_instance="true" - width="150"> - <floater.string - name="rotate_tooltip"> - Rotate Camera Around Focus - </floater.string> - <floater.string - name="zoom_tooltip"> - Zoom Camera Towards Focus - </floater.string> - <floater.string - name="move_tooltip"> - Move Camera Up and Down, Left and Right - </floater.string> - <floater.string - name="orbit_mode_title"> - Orbit - </floater.string> - <floater.string - name="pan_mode_title"> - Pan - </floater.string> - <floater.string - name="avatar_view_mode_title"> - Presets - </floater.string> - <floater.string - name="free_mode_title"> - View Object - </floater.string> - <panel - border="false" - height="110" - layout="topleft" - left="2" - top="0" - mouse_opaque="false" - name="controls" - width="148"> - <joystick_track - follows="top|left" - height="78" - image_selected="Cam_Tracking_In" - image_unselected="Cam_Tracking_Out" - layout="topleft" - left="45" - name="cam_track_stick" - quadrant="left" - scale_image="false" - sound_flags="3" - tool_tip="Move camera up and down, left and right" - top="22" - visible="false" - width="78" /> - <!--TODO: replace + - images --> - <panel - border="false" - class="camera_zoom_panel" - height="94" - layout="topleft" - left="7" - mouse_opaque="false" - name="zoom" - top="22" - width="18"> - <button - follows="top|left" - height="18" - image_disabled="AddItem_Disabled" - image_selected="AddItem_Press" - image_unselected="AddItem_Off" - layout="topleft" - name="zoom_plus_btn" - width="18"> - <commit_callback - function="Zoom.plus" /> - <mouse_held_callback - function="Zoom.plus" /> - </button> - <slider_bar - height="48" - layout="topleft" - name="zoom_slider" - orientation="vertical" - tool_tip="Zoom camera toward focus" - top_pad="0" - min_val="0" - max_val="1" - width="18"> - <commit_callback function="Slider.value_changed"/> - </slider_bar> - <button - follows="top|left" - height="18" - image_disabled="MinusItem_Disabled" - image_selected="MinusItem_Press" - image_unselected="MinusItem_Off" - layout="topleft" - name="zoom_minus_btn" - top_pad="0" - width="18"> - <commit_callback - function="Zoom.minus" /> - <mouse_held_callback - function="Zoom.minus" /> - </button> - </panel> - <joystick_rotate - follows="top|left" - height="78" - image_selected="Cam_Rotate_In" - image_unselected="Cam_Rotate_Out" - layout="topleft" - left="45" - mouse_opaque="false" - name="cam_rotate_stick" - quadrant="left" - scale_image="false" - sound_flags="3" - visible="true" - tool_tip="Orbit camera around focus" - top="22" - width="78" /> - <panel - height="78" - layout="topleft" - left="36" - name="camera_presets" - top="20" - visible="false" - width="78"> - <button - height="40" - image_selected="Cam_Preset_Back_On" - image_unselected="Cam_Preset_Back_Off" - is_toggle="true" - layout="topleft" - left="0" - name="rear_view" - tool_tip="Rear View" - top="2" - width="40"> - <click_callback - function="CameraPresets.ChangeView" - parameter="rear_view" /> - </button> - <button - height="40" - image_selected="Cam_Preset_Side_On" - image_unselected="Cam_Preset_Side_Off" - is_toggle="true" - layout="topleft" - left_pad="5" - name="group_view" - tool_tip="Group View" - top="2" - width="40"> - <click_callback - function="CameraPresets.ChangeView" - parameter="group_view" /> - </button> - <button - height="40" - image_selected="Cam_Preset_Front_On" - image_unselected="Cam_Preset_Front_Off" - is_toggle="true" - layout="topleft" - left="0" - name="front_view" - tool_tip="Front View" - top_pad="5" - width="40"> - <click_callback - function="CameraPresets.ChangeView" - parameter="front_view" /> - </button> - <button - height="40" - image_selected="Cam_Preset_Eye_Off" - image_unselected="Cam_Preset_Eye_Off" - is_toggle="true" - layout="topleft" - left_pad="5" - name="mouselook_view" - tool_tip="Mouselook View" - width="40"> - <click_callback - function="CameraPresets.ChangeView" - parameter="mouselook_view" /> - </button> - </panel> - </panel> - <panel - border="false" - height="42" - layout="topleft" - left="2" - top_pad="0" - name="buttons" - width="148"> - <button - height="23" - label="" - layout="topleft" - left="23" - is_toggle="true" - image_overlay="Cam_Orbit_Off" - image_selected="PushButton_Selected_Press" - name="orbit_btn" - tab_stop="false" - tool_tip="Orbit camera" - width="25"> - </button> - <button - height="23" - label="" - layout="topleft" - left_pad="0" - is_toggle="true" - image_overlay="Cam_Pan_Off" - image_selected="PushButton_Selected_Press" - name="pan_btn" - tab_stop="false" - tool_tip="Pan camera" - width="25"> - </button> - <button - height="23" - label="" - layout="topleft" - left_pad="0" - image_overlay="Cam_Avatar_Off" - image_selected="PushButton_Selected_Press" - name="avatarview_btn" - tab_stop="false" - tool_tip="Presets" - width="25"> - </button> - <button - height="23" - label="" - layout="topleft" - left_pad="0" - is_toggle="true" - image_overlay="Cam_FreeCam_Off" - image_selected="PushButton_Selected_Press" - name="freecamera_btn" - tab_stop="false" - tool_tip="View object" - width="25"> - </button> - </panel> -</floater> +<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<floater + legacy_header_height="18" + can_dock="true" + can_minimize="true" + can_close="false" + follows="bottom" + height="164" + layout="topleft" + name="camera_floater" + help_topic="camera_floater" + save_rect="true" + save_visibility="true" + save_dock_state="true" + single_instance="true" + width="228"> + <floater.string + name="rotate_tooltip"> + Rotate Camera Around Focus + </floater.string> + <floater.string + name="zoom_tooltip"> + Zoom Camera Towards Focus + </floater.string> + <floater.string + name="move_tooltip"> + Move Camera Up and Down, Left and Right + </floater.string> + <floater.string + name="camera_modes_title"> + Camera modes + </floater.string> + <floater.string + name="pan_mode_title"> + Orbit Zoom Pan + </floater.string> + <floater.string + name="presets_mode_title"> + Preset Views + </floater.string> + <floater.string + name="free_mode_title"> + View Object + </floater.string> + <panel + border="false" + height="123" + layout="topleft" + left="2" + top="0" + mouse_opaque="false" + name="controls" + width="226"> + <panel + color="Transparent" + follows="all" + height="102" + layout="topleft" + left="8" + name="preset_views_list" + opaque="true" + top="24" + width="212" + visible="false"> + <panel_camera_item + name="front_view"> + <panel_camera_item.mousedown_callback + function="CameraPresets.ChangeView" + parameter="front_view" /> + <panel_camera_item.picture + image_name="Cam_Preset_Front_Off" /> + <panel_camera_item.selected_picture + image_name="Cam_Preset_Front_On" /> + <panel_camera_item.text> + Front View + </panel_camera_item.text> + </panel_camera_item> + <panel_camera_item + name="group_view" + top_pad="4"> + <panel_camera_item.mousedown_callback + function="CameraPresets.ChangeView" + parameter="group_view" /> + <panel_camera_item.picture + image_name="Cam_Preset_Side_Off" /> + <panel_camera_item.selected_picture + image_name="Cam_Preset_Side_On" /> + <panel_camera_item.text> + Side View + </panel_camera_item.text> + </panel_camera_item> + <panel_camera_item + name="rear_view" + layout="topleft" + top_pad="4"> + <panel_camera_item.mousedown_callback + function="CameraPresets.ChangeView" + parameter="rear_view" /> + <panel_camera_item.picture + image_name="Cam_Preset_Back_Off" /> + <panel_camera_item.selected_picture + image_name="Cam_Preset_Back_On" /> + <panel_camera_item.text> + Rear View + </panel_camera_item.text> + </panel_camera_item> + </panel> + <panel + color="Transparent" + follows="all" + height="68" + item_pad="4" + layout="topleft" + left="8" + name="camera_modes_list" + opaque="true" + top="24" + width="212" + visible="false"> + <panel_camera_item + name="object_view"> + <panel_camera_item.mousedown_callback + function="CameraPresets.ChangeView" + parameter="object_view" /> + <panel_camera_item.text> + Object View + </panel_camera_item.text> + <panel_camera_item.picture + image_name="Object_View_Off" /> + <panel_camera_item.selected_picture + image_name="Object_View_On" /> + </panel_camera_item> + <panel_camera_item + name="mouselook_view" + layout="topleft"> + <panel_camera_item.mousedown_callback + function="CameraPresets.ChangeView" + parameter="mouselook_view" /> + <panel_camera_item.text> + Mouselook View + </panel_camera_item.text> + <panel_camera_item.picture + image_name="MouseLook_View_Off" /> + <panel_camera_item.selected_picture + image_name="MouseLook_View_On" /> + </panel_camera_item> + </panel> + <!--TODO: replace + - images --> + <panel + border="false" + class="camera_zoom_panel" + height="114" + layout="topleft" + left="0" + mouse_opaque="false" + name="zoom" + top="20" + width="226"> + <joystick_rotate + follows="top|left" + height="78" + image_selected="Cam_Rotate_In" + image_unselected="Cam_Rotate_Out" + layout="topleft" + left="7" + mouse_opaque="false" + name="cam_rotate_stick" + quadrant="left" + scale_image="false" + sound_flags="3" + visible="true" + tool_tip="Orbit camera around focus" + top="20" + width="78" /> + <button + follows="top|left" + height="18" + image_disabled="AddItem_Disabled" + image_selected="AddItem_Press" + image_unselected="AddItem_Off" + layout="topleft" + left_pad="14" + name="zoom_plus_btn" + width="18" + top="18"> + <commit_callback + function="Zoom.plus" /> + <mouse_held_callback + function="Zoom.plus" /> + </button> + <slider_bar + height="50" + layout="topleft" + name="zoom_slider" + orientation="vertical" + tool_tip="Zoom camera toward focus" + top_pad="0" + min_val="0" + max_val="1" + width="18"> + <commit_callback function="Slider.value_changed"/> + </slider_bar> + <button + follows="top|left" + height="18" + image_disabled="MinusItem_Disabled" + image_selected="MinusItem_Press" + image_unselected="MinusItem_Off" + layout="topleft" + name="zoom_minus_btn" + top_pad="0" + width="18"> + <commit_callback + function="Zoom.minus" /> + <mouse_held_callback + function="Zoom.minus" /> + </button> + <joystick_track + follows="top|left" + height="78" + image_selected="Cam_Tracking_In" + image_unselected="Cam_Tracking_Out" + layout="topleft" + left="133" + name="cam_track_stick" + quadrant="left" + scale_image="false" + sound_flags="3" + tool_tip="Move camera up and down, left and right" + top="20" + width="78"/> + </panel> + </panel> + <panel + border="false" + height="42" + layout="topleft" + left="2" + top_pad="0" + name="buttons" + width="226"> + <button + height="23" + label="" + layout="topleft" + left="70" + is_toggle="true" + image_overlay="Cam_Avatar_Off" + image_selected="PushButton_Selected_Press" + name="presets_btn" + tab_stop="false" + tool_tip="Preset Views" + top="13" + width="25"> + </button> + <button + height="23" + label="" + layout="topleft" + left_pad="1" + is_toggle="true" + image_overlay="PanOrbit_Off" + image_selected="PushButton_Selected_Press" + name="pan_btn" + tab_stop="false" + tool_tip="Orbit Zoom Pan" + width="25"> + </button> + <button + height="23" + label="" + layout="topleft" + left_pad="1" + image_overlay="Cam_FreeCam_Off" + image_selected="PushButton_Selected_Press" + name="avatarview_btn" + tab_stop="false" + tool_tip="Camera modes" + width="25"> + </button> + </panel> +</floater>