From 9e69702fe74f8107e6ac2ee800f234f8a956a781 Mon Sep 17 00:00:00 2001 From: "Mark Palange (Mani)" Date: Thu, 5 Nov 2009 08:52:07 -0800 Subject: Added calls to ll_deploy_sharedlibs_command Using viewer_manifest.py for windows dependency deployment during build. Added SHARED_LIBS_REL_PATH var to cmake cache. --- indra/newview/CMakeLists.txt | 153 ++++++++++++++++++++------------------- indra/newview/viewer_manifest.py | 94 ++++++++++++------------ 2 files changed, 125 insertions(+), 122 deletions(-) (limited to 'indra/newview') diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index 0133d2222d..7b69bfc6dd 100644 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -185,7 +185,7 @@ set(viewer_SOURCE_FILES llfloatermediasettings.cpp llfloatermemleak.cpp llfloaternamedesc.cpp - llfloaternearbymedia.cpp + llfloaternearbymedia.cpp llfloaternotificationsconsole.cpp llfloateropenobject.cpp llfloaterparcel.cpp @@ -666,7 +666,7 @@ set(viewer_HEADER_FILES llfloatermediasettings.h llfloatermemleak.h llfloaternamedesc.h - llfloaternearbymedia.h + llfloaternearbymedia.h llfloaternotificationsconsole.h llfloateropenobject.h llfloaterparcel.h @@ -1140,7 +1140,7 @@ if (WINDOWS) if (NOT STANDALONE) list(APPEND viewer_SOURCE_FILES ${viewer_RESOURCE_FILES}) - endif (NOT STANDALONE) + endif (NOT STANDALONE) find_library(DINPUT_LIBRARY dinput8 ${DIRECTX_LIBRARY_DIR}) find_library(DXGUID_LIBRARY dxguid ${DIRECTX_LIBRARY_DIR}) @@ -1322,7 +1322,7 @@ file(GLOB EVENT_HOST_SCRIPT_GLOB_LIST ${CMAKE_CURRENT_SOURCE_DIR}/../viewer_components/*.py) list(APPEND EVENT_HOST_SCRIPTS ${EVENT_HOST_SCRIPT_GLOB_LIST}) -set(PACKAGE OFF CACHE BOOL +set(PACKAGE ON CACHE BOOL "Add a package target that builds an installer package.") if (WINDOWS) @@ -1351,7 +1351,7 @@ if (WINDOWS) ${CMAKE_BINARY_DIR}/${CMAKE_PROJECT_NAME}.sln --workingdir ${VIEWER_BINARY_NAME} - ${CMAKE_CURRENT_SOURCE_DIR} + "./${CMAKE_CFG_INTDIR}" COMMENT "Setting the ${VIEWER_BINARY_NAME} working directory for debugging." ) endif (NOT UNATTENDED) @@ -1368,85 +1368,87 @@ if (WINDOWS) ) add_custom_command( - TARGET ${VIEWER_BINARY_NAME} PRE_BUILD - COMMAND ${CMAKE_COMMAND} - ARGS - -E - copy_if_different - ${CMAKE_CURRENT_SOURCE_DIR}/../../etc/message.xml - ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/app_settings/message.xml - COMMENT "Copying message.xml to the runtime folder." - ) + TARGET ${VIEWER_BINARY_NAME} PRE_BUILD + COMMAND ${CMAKE_COMMAND} + ARGS + -E + copy_if_different + ${CMAKE_CURRENT_SOURCE_DIR}/../../etc/message.xml + ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/app_settings/message.xml + COMMENT "Copying message.xml to the runtime folder." + ) - if(WINDOWS) - # Copy Win Libs... - # This happens at build time, not config time. We can't glob files in this cmake. - # *FIX:Mani Write a sub script to glob the files... - # *FIX:Mani Use actually dependencies rather than bulk copy. - add_custom_command( - TARGET ${VIEWER_BINARY_NAME} PRE_BUILD - COMMAND ${CMAKE_COMMAND} - ARGS - -E - copy_directory - ${SHARED_LIB_STAGING_DIR}/${CMAKE_CFG_INTDIR} - ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR} - COMMENT "Copying staged dlls." - ) + add_custom_command( + TARGET ${VIEWER_BINARY_NAME} POST_BUILD + COMMAND ${PYTHON_EXECUTABLE} + ARGS + ${CMAKE_CURRENT_SOURCE_DIR}/viewer_manifest.py + --actions=copy + --artwork=${ARTWORK_DIR} + --build=${CMAKE_CURRENT_BINARY_DIR} + --configuration=${CMAKE_CFG_INTDIR} + --dest=${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR} + --grid=${GRID} + --source=${CMAKE_CURRENT_SOURCE_DIR} + DEPENDS ${VIEWER_BINARY_NAME} ${CMAKE_CURRENT_SOURCE_DIR}/viewer_manifest.py + COMMENT "Performing viewer_manifest copy" + ) - add_dependencies(${VIEWER_BINARY_NAME} stage_third_party_libs llcommon) - if(LLKDU_LIBRARY) - # kdu may not exist! - add_dependencies(${VIEWER_BINARY_NAME} llkdu) - endif(LLKDU_LIBRARY) - endif(WINDOWS) + add_dependencies(${VIEWER_BINARY_NAME} stage_third_party_libs llcommon) + + if(LLKDU_LIBRARY) + # kdu may not exist! + add_dependencies(${VIEWER_BINARY_NAME} llkdu) + endif(LLKDU_LIBRARY) if (EXISTS ${CMAKE_SOURCE_DIR}/copy_win_scripts) add_dependencies(${VIEWER_BINARY_NAME} copy_win_scripts) endif (EXISTS ${CMAKE_SOURCE_DIR}/copy_win_scripts) - add_custom_command( + add_dependencies(${VIEWER_BINARY_NAME} + SLPlugin + media_plugin_quicktime + media_plugin_webkit + windows-updater + windows-crash-logger + ) + + if (PACKAGE) + add_custom_command( + OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/event_host.tar.bz2 + COMMAND ${PYTHON_EXECUTABLE} + ARGS + ${CMAKE_CURRENT_SOURCE_DIR}/event_host_manifest.py + ${CMAKE_CURRENT_SOURCE_DIR}/.. + ${CMAKE_CURRENT_BINARY_DIR} + ${CMAKE_CFG_INTDIR} + DEPENDS + lleventhost + ${EVENT_HOST_SCRIPTS} + ${CMAKE_CURRENT_SOURCE_DIR}/event_host_manifest.py + ) + + add_custom_command( OUTPUT ${CMAKE_CFG_INTDIR}/touched.bat COMMAND ${PYTHON_EXECUTABLE} ARGS ${CMAKE_CURRENT_SOURCE_DIR}/viewer_manifest.py - --configuration=${CMAKE_CFG_INTDIR} + --artwork=${ARTWORK_DIR} + --build=${CMAKE_CURRENT_BINARY_DIR} --channel=${VIEWER_CHANNEL} - --login_channel=${VIEWER_LOGIN_CHANNEL} + --configuration=${CMAKE_CFG_INTDIR} + --dest=${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR} --grid=${GRID} + --login_channel=${VIEWER_LOGIN_CHANNEL} --source=${CMAKE_CURRENT_SOURCE_DIR} - --artwork=${ARTWORK_DIR} - --build=${CMAKE_CURRENT_BINARY_DIR} - --dest=${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR} - --touch=${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/touched.bat + --touch=${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/touched.bat DEPENDS ${VIEWER_BINARY_NAME} ${CMAKE_CURRENT_SOURCE_DIR}/viewer_manifest.py ) - add_dependencies(${VIEWER_BINARY_NAME} SLPlugin media_plugin_quicktime media_plugin_webkit) - - if (PACKAGE) - add_custom_command( - OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/event_host.tar.bz2 - COMMAND ${PYTHON_EXECUTABLE} - ARGS - ${CMAKE_CURRENT_SOURCE_DIR}/event_host_manifest.py - ${CMAKE_CURRENT_SOURCE_DIR}/.. - ${CMAKE_CURRENT_BINARY_DIR} - ${CMAKE_CFG_INTDIR} - - DEPENDS - lleventhost - ${EVENT_HOST_SCRIPTS} - ${CMAKE_CURRENT_SOURCE_DIR}/event_host_manifest.py) - - add_custom_target(package ALL - DEPENDS - ${CMAKE_CFG_INTDIR}/touched.bat) - # temporarily disable packaging of event_host until hg subrepos get - # sorted out on the parabuild cluster... - #${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/event_host.tar.bz2) - add_dependencies(package windows-updater windows-crash-logger) - + add_custom_target(package ALL DEPENDS ${CMAKE_CFG_INTDIR}/touched.bat) + # temporarily disable packaging of event_host until hg subrepos get + # sorted out on the parabuild cluster... + #${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/event_host.tar.bz2) endif (PACKAGE) endif (WINDOWS) @@ -1509,15 +1511,16 @@ if (LINUX) COMMAND ${PYTHON_EXECUTABLE} ARGS ${CMAKE_CURRENT_SOURCE_DIR}/viewer_manifest.py - --grid=${GRID} - --channel=${VIEWER_CHANNEL} - --login_channel=${VIEWER_LOGIN_CHANNEL} - --installer_name=${product} --arch=${ARCH} - --source=${CMAKE_CURRENT_SOURCE_DIR} --artwork=${ARTWORK_DIR} --build=${CMAKE_CURRENT_BINARY_DIR} + --channel=${VIEWER_CHANNEL} + --configuration=${CMAKE_CFG_INTDIR} --dest=${CMAKE_CURRENT_BINARY_DIR}/packaged + --grid=${GRID} + --installer_name=${product} + --login_channel=${VIEWER_LOGIN_CHANNEL} + --source=${CMAKE_CURRENT_SOURCE_DIR} --touch=${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/.${product}.touched DEPENDS secondlife-stripped ${CMAKE_CURRENT_SOURCE_DIR}/viewer_manifest.py ) @@ -1552,13 +1555,13 @@ if (DARWIN) COMMAND ${PYTHON_EXECUTABLE} ARGS ${CMAKE_CURRENT_SOURCE_DIR}/viewer_manifest.py - --grid=${GRID} --actions=copy - --configuration=${CMAKE_CFG_INTDIR} - --source=${CMAKE_CURRENT_SOURCE_DIR} --artwork=${ARTWORK_DIR} --build=${CMAKE_CURRENT_BINARY_DIR} + --configuration=${CMAKE_CFG_INTDIR} --dest=${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/${product}.app + --grid=${GRID} + --source=${CMAKE_CURRENT_SOURCE_DIR} DEPENDS ${VIEWER_BINARY_NAME} ${CMAKE_CURRENT_SOURCE_DIR}/viewer_manifest.py ) diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py index b85d31d1ac..7e5c30a978 100755 --- a/indra/newview/viewer_manifest.py +++ b/indra/newview/viewer_manifest.py @@ -231,8 +231,21 @@ class WindowsManifest(ViewerManifest): 'llplugin', 'slplugin', self.args['configuration'], "slplugin.exe"), "slplugin.exe") - # need to get the llcommon.dll from the build directory as well - if self.prefix(src=self.args['configuration'], dst=""): + self.disable_manifest_check() + + # Get shared libs from the shared libs staging directory + if self.prefix(src=os.path.join(os.pardir, 'sharedlibs', self.args['configuration']), + dst=""): + + self.enable_crt_manifest_check() + + # Get kdu dll, continue if missing. + try: + self.path('%s/llkdu.dll' % self.args['configuration'], dst='llkdu.dll') + except RuntimeError: + print "Skipping llkdu.dll" + + # Get llcommon and deps. If missing assume static linkage and continue. try: self.path('llcommon.dll') self.path('libapr-1.dll') @@ -242,22 +255,41 @@ class WindowsManifest(ViewerManifest): print err.message print "Skipping llcommon.dll (assuming llcommon was linked statically)" - self.end_prefix() + self.disable_manifest_check() - # need to get the kdu dll from the build directory as well - try: - self.path('%s/llkdu.dll' % self.args['configuration'], dst='llkdu.dll') - except RuntimeError: - print "Skipping llkdu.dll" - - self.disable_manifest_check() - - # For textures - if self.prefix(src=self.args['configuration'], dst=""): - if(self.args['configuration'].lower() == 'debug'): + # For textures + if self.args['configuration'].lower() == 'debug': self.path("openjpegd.dll") else: self.path("openjpeg.dll") + + # These need to be installed as a SxS assembly, currently a 'private' assembly. + # See http://msdn.microsoft.com/en-us/library/ms235291(VS.80).aspx + if self.args['configuration'].lower() == 'debug': + self.path("msvcr80d.dll") + self.path("msvcp80d.dll") + self.path("Microsoft.VC80.DebugCRT.manifest") + else: + self.path("msvcr80.dll") + self.path("msvcp80.dll") + self.path("Microsoft.VC80.CRT.manifest") + + # Vivox runtimes + self.path("SLVoice.exe") + self.path("alut.dll") + self.path("vivoxsdk.dll") + self.path("ortp.dll") + self.path("wrap_oal.dll") + + # For google-perftools tcmalloc allocator. + try: + if self.args['configuration'].lower() == 'debug': + self.path('libtcmalloc_minimal-debug.dll') + else: + self.path('libtcmalloc_minimal.dll') + except: + print "Skipping libtcmalloc_minimal.dll" + self.end_prefix() self.path(src="licenses-win32.txt", dst="licenses.txt") @@ -270,6 +302,7 @@ class WindowsManifest(ViewerManifest): self.path("fmod.dll") self.enable_no_crt_manifest_check() + # Media plugins - QuickTime if self.prefix(src='../media_plugins/quicktime/%s' % self.args['configuration'], dst="llplugin"): self.path("media_plugin_quicktime.dll") @@ -302,28 +335,6 @@ class WindowsManifest(ViewerManifest): self.disable_manifest_check() - # These need to be installed as a SxS assembly, currently a 'private' assembly. - # See http://msdn.microsoft.com/en-us/library/ms235291(VS.80).aspx - if self.prefix(src=self.args['configuration'], dst=""): - if self.args['configuration'] == 'Debug': - self.path("msvcr80d.dll") - self.path("msvcp80d.dll") - self.path("Microsoft.VC80.DebugCRT.manifest") - else: - self.path("msvcr80.dll") - self.path("msvcp80.dll") - self.path("Microsoft.VC80.CRT.manifest") - self.end_prefix() - - # Vivox runtimes - if self.prefix(src=self.args['configuration'], dst=""): - self.path("SLVoice.exe") - self.path("alut.dll") - self.path("vivoxsdk.dll") - self.path("ortp.dll") - self.path("wrap_oal.dll") - self.end_prefix() - # pull in the crash logger and updater from other projects # tag:"crash-logger" here as a cue to the exporter self.path(src='../win_crash_logger/%s/windows-crash-logger.exe' % self.args['configuration'], @@ -331,17 +342,6 @@ class WindowsManifest(ViewerManifest): self.path(src='../win_updater/%s/windows-updater.exe' % self.args['configuration'], dst="updater.exe") - # For google-perftools tcmalloc allocator. - if self.prefix(src=self.args['configuration'], dst=""): - try: - if self.args['configuration'] == 'Debug': - self.path('libtcmalloc_minimal-debug.dll') - else: - self.path('libtcmalloc_minimal.dll') - except: - print "Skipping libtcmalloc_minimal.dll" - self.end_prefix() - def nsi_file_commands(self, install=True): def wpath(path): if path.endswith('/') or path.endswith(os.path.sep): -- cgit v1.2.3 From 0a7290772a6b39555adb966c7a48ef44151c1f05 Mon Sep 17 00:00:00 2001 From: richard Date: Thu, 5 Nov 2009 15:36:11 -0800 Subject: moved scroll_column_header default params to scroll_column_header.xml reviewed by James --- .../skins/default/xui/en/widgets/scroll_column_header.xml | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 indra/newview/skins/default/xui/en/widgets/scroll_column_header.xml (limited to 'indra/newview') diff --git a/indra/newview/skins/default/xui/en/widgets/scroll_column_header.xml b/indra/newview/skins/default/xui/en/widgets/scroll_column_header.xml new file mode 100644 index 0000000000..0794b49a0c --- /dev/null +++ b/indra/newview/skins/default/xui/en/widgets/scroll_column_header.xml @@ -0,0 +1,9 @@ + + -- cgit v1.2.3 From 93e877a5ce9208f37872614a5b4ee2fabc3cbf11 Mon Sep 17 00:00:00 2001 From: richard Date: Thu, 5 Nov 2009 15:36:59 -0800 Subject: LLSpeakButton now cleans up after itself by removing transientfloatermgr references --- indra/newview/llspeakbutton.cpp | 2 ++ 1 file changed, 2 insertions(+) (limited to 'indra/newview') diff --git a/indra/newview/llspeakbutton.cpp b/indra/newview/llspeakbutton.cpp index cd765b0338..0b9c81dcc1 100644 --- a/indra/newview/llspeakbutton.cpp +++ b/indra/newview/llspeakbutton.cpp @@ -120,6 +120,8 @@ LLSpeakButton::LLSpeakButton(const Params& p) LLSpeakButton::~LLSpeakButton() { + LLTransientFloaterMgr::getInstance()->removeControlView(mSpeakBtn); + LLTransientFloaterMgr::getInstance()->removeControlView(mShowBtn); } void LLSpeakButton::setSpeakBtnToggleState(bool state) -- cgit v1.2.3 From 29d8ee76f12e151c0e305933cc7de2daed661430 Mon Sep 17 00:00:00 2001 From: richard Date: Thu, 5 Nov 2009 16:30:11 -0800 Subject: LLChiclet cleans up its connection to LLTransientFloaterMgr now and panel_stand_stop_flying is visible by default while its contents are not --- indra/newview/llchiclet.cpp | 2 ++ indra/newview/skins/default/xui/en/panel_stand_stop_flying.xml | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) (limited to 'indra/newview') diff --git a/indra/newview/llchiclet.cpp b/indra/newview/llchiclet.cpp index 53c4bb32ca..c200a97058 100644 --- a/indra/newview/llchiclet.cpp +++ b/indra/newview/llchiclet.cpp @@ -812,6 +812,8 @@ LLChicletPanel::LLChicletPanel(const Params&p) LLChicletPanel::~LLChicletPanel() { + LLTransientFloaterMgr::getInstance()->removeControlView(mLeftScrollButton); + LLTransientFloaterMgr::getInstance()->removeControlView(mRightScrollButton); } diff --git a/indra/newview/skins/default/xui/en/panel_stand_stop_flying.xml b/indra/newview/skins/default/xui/en/panel_stand_stop_flying.xml index c8703aa895..b48943c699 100644 --- a/indra/newview/skins/default/xui/en/panel_stand_stop_flying.xml +++ b/indra/newview/skins/default/xui/en/panel_stand_stop_flying.xml @@ -5,7 +5,7 @@ layout="topleft" name="panel_stand_stop_flying" mouse_opaque="false" - visible="false" + visible="true" width="115"> + Date: Tue, 10 Nov 2009 15:02:42 +0200 Subject: Work on major sub-task EXT-991 (Update bottom bar behavior on resize) Initial refactoring of functionality: - Re-Fixed bug with visibility of chiclet panel of the min size - updated bottomtray xml to make buttons identical to each other - Imroved logic while resizing of bottom tray (changing width of chiclet & nearby panels, hide/show buttons) --HG-- branch : product-engine --- indra/newview/app_settings/logcontrol.xml | 1 + indra/newview/llbottomtray.cpp | 419 +++++++++++++++++++-- indra/newview/llbottomtray.h | 13 +- indra/newview/llchiclet.cpp | 10 +- indra/newview/llnearbychatbar.cpp | 3 + .../skins/default/xui/en/panel_bottomtray.xml | 21 +- .../skins/default/xui/en/panel_nearby_chat_bar.xml | 2 +- 7 files changed, 423 insertions(+), 46 deletions(-) (limited to 'indra/newview') diff --git a/indra/newview/app_settings/logcontrol.xml b/indra/newview/app_settings/logcontrol.xml index d7bb64ce8a..ec80d2d014 100644 --- a/indra/newview/app_settings/logcontrol.xml +++ b/indra/newview/app_settings/logcontrol.xml @@ -34,6 +34,7 @@ classes + LLBottomTray files diff --git a/indra/newview/llbottomtray.cpp b/indra/newview/llbottomtray.cpp index a17ba79078..d0fdf24403 100644 --- a/indra/newview/llbottomtray.cpp +++ b/indra/newview/llbottomtray.cpp @@ -50,6 +50,8 @@ LLBottomTray::LLBottomTray(const LLSD&) mSpeakBtn(NULL), mNearbyChatBar(NULL), mToolbarStack(NULL) +, mMovementButton(NULL) +// Add more members { mFactoryMap["chat_bar"] = LLCallbackMap(LLBottomTray::createNearbyChatBar, NULL); @@ -253,12 +255,28 @@ void LLBottomTray::showSnapshotButton(BOOL visible) mSnapshotPanel->setVisible(visible); } +typedef enum e_resize_status_type +{ + RS_NORESIZE = 0x0000 + , RS_CHICLET_PANEL = 0x0001 + , RS_CHATBAR_INPUT = 0x0002 + , RS_BUTTON_SNAPSHOT = 0x0004 + , RS_BUTTON_CAMERA = 0x0008 + , RS_BUTTON_MOVEMENT = 0x0010 + , RS_BUTTON_GESTURES = 0x0020 + , RS_BUTTON_SPEAK = 0x0040 + , RS_RESIZABLE_BUTTONS = /*RS_BUTTON_SNAPSHOT | */RS_BUTTON_CAMERA | RS_BUTTON_MOVEMENT | RS_BUTTON_GESTURES +}EResizeState; + + + namespace { - const std::string& PANEL_CHICLET_NAME = "chiclet_list_panel"; - const std::string& PANEL_CHATBAR_NAME = "chat_bar"; - const std::string& PANEL_MOVEMENT_NAME = "movement_panel"; - const std::string& PANEL_CAMERA_NAME = "cam_panel"; + const std::string& PANEL_CHICLET_NAME = "chiclet_list_panel"; + const std::string& PANEL_CHATBAR_NAME = "chat_bar"; + const std::string& PANEL_MOVEMENT_NAME = "movement_panel"; + const std::string& PANEL_CAMERA_NAME = "cam_panel"; + const std::string& PANEL_GESTURE_NAME = "gesture_panel"; } BOOL LLBottomTray::postBuild() @@ -284,63 +302,133 @@ BOOL LLBottomTray::postBuild() return TRUE; } +void LLBottomTray::log(LLView* panel, const std::string& descr) +{ + if (NULL == panel) return; + LLView* layout = panel->getParent(); + llwarns << descr << ": " + << "panel: " << panel->getName() + << ", rect: " << panel->getRect() + + + << "layout: " << layout->getName() + << ", rect: " << layout->getRect() + << llendl + ; +} + void LLBottomTray::verifyChildControlsSizes() { LLRect rect = mChicletPanel->getRect(); if (rect.getWidth() < mChicletPanel->getMinWidth()) { + llwarns << "QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ: chiclet panel less then min" << llendl; mChicletPanel->reshape(mChicletPanel->getMinWidth(), rect.getHeight()); } rect = mNearbyChatBar->getRect(); if (rect.getWidth() < mNearbyChatBar->getMinWidth()) { + llwarns << "WWWWWWWWWWWWWWWWWWWWWWWWWWWWW: near chat panel less then min" << llendl; mNearbyChatBar->reshape(mNearbyChatBar->getMinWidth(), rect.getHeight()); } - else if (rect.getWidth() > mNearbyChatBar->getMaxWidth()) + else + if (rect.getWidth() > mNearbyChatBar->getMaxWidth()) { rect.setLeftTopAndSize(rect.mLeft, rect.mTop, mNearbyChatBar->getMaxWidth(), rect.getHeight()); mNearbyChatBar->reshape(mNearbyChatBar->getMaxWidth(), rect.getHeight()); mNearbyChatBar->setRect(rect); } } - +#define __FEATURE_EXT_991 void LLBottomTray::reshape(S32 width, S32 height, BOOL called_from_parent) { + static S32 depth = 0; +if (0 == depth) lldebugs << "" << llendl; + + lldebugs << "Reshaping: depth: " << ++depth + << ", width: " << width + << ", height: " << height + << ", called_from_parent" << called_from_parent + << ", cur width: " << getRect().getWidth() + << ", cur height: " << getRect().getHeight() + << llendl; + + if (mNearbyChatBar) log(mNearbyChatBar, "before"); + if (mChicletPanel) log(mChicletPanel, "before"); if (mChicletPanel && mToolbarStack && mNearbyChatBar) { -#ifdef __FEATURE_EXT_991__ +// S32 delta_width = width - getRect().getWidth(); BOOL shrink = width < getRect().getWidth(); +#ifdef __FEATURE_EXT_991__ const S32 MIN_RENDERED_CHARS = 3; #endif - verifyChildControlsSizes(); - updateResizeState(width, height); + + + verifyChildControlsSizes(); + updateResizeState(width, height); + if (RS_NORESIZE == mResizeState && !called_from_parent) + { + // this can be in case nearby + lldebugs << "width was not changed & !called_from_parent" << llendl; + + } + + + + + if (RS_NORESIZE != mResizeState) + { + +// mToolbarStack->updatePanelAutoResize(PANEL_CHICLET_NAME, mResizeState & RS_CHICLET_PANEL); + mToolbarStack->updatePanelAutoResize(PANEL_CHICLET_NAME, TRUE); + +// mToolbarStack->updatePanelAutoResize(PANEL_CHATBAR_NAME, mResizeState & RS_CHATBAR_INPUT); + +/* + mToolbarStack->updatePanelAutoResize(PANEL_GESTURE_NAME, mResizeState & RS_BUTTON_GESTURES); + mToolbarStack->updatePanelAutoResize(PANEL_CAMERA_NAME, mResizeState & RS_BUTTON_CAMERA); + mToolbarStack->updatePanelAutoResize(PANEL_MOVEMENT_NAME, mResizeState & RS_BUTTON_MOVEMENT); +*/ + + bool show_button = !shrink; + if (width != getRect().getWidth() && show_button) + { + if (mResizeState & RS_BUTTON_SNAPSHOT) showSnapshotButton(show_button); + if (mResizeState & RS_BUTTON_CAMERA) showCameraButton(show_button); + if (mResizeState & RS_BUTTON_MOVEMENT) showMoveButton(show_button); + if (mResizeState & RS_BUTTON_GESTURES) showGestureButton(show_button); + } switch (mResizeState) { - case STATE_CHICLET_PANEL: + case RS_CHICLET_PANEL: +/* mToolbarStack->updatePanelAutoResize(PANEL_CHICLET_NAME, TRUE); mToolbarStack->updatePanelAutoResize(PANEL_CHATBAR_NAME, FALSE); mToolbarStack->updatePanelAutoResize(PANEL_CAMERA_NAME, FALSE); mToolbarStack->updatePanelAutoResize(PANEL_MOVEMENT_NAME, FALSE); +*/ break; - case STATE_CHATBAR_INPUT: + case RS_CHATBAR_INPUT: +/* mToolbarStack->updatePanelAutoResize(PANEL_CHATBAR_NAME, TRUE); mToolbarStack->updatePanelAutoResize(PANEL_CHICLET_NAME, FALSE); mToolbarStack->updatePanelAutoResize(PANEL_CAMERA_NAME, FALSE); mToolbarStack->updatePanelAutoResize(PANEL_MOVEMENT_NAME, FALSE); +*/ break; #ifdef __FEATURE_EXT_991__ - case STATE_BUTTONS: - mToolbarStack->updatePanelAutoResize(PANEL_CAMERA_NAME, TRUE); + case RS_RESIZABLE_BUTTONS: +// mToolbarStack->updatePanelAutoResize(PANEL_CAMERA_NAME, TRUE); mToolbarStack->updatePanelAutoResize(PANEL_MOVEMENT_NAME, TRUE); mToolbarStack->updatePanelAutoResize(PANEL_CHICLET_NAME, FALSE); @@ -352,6 +440,8 @@ void LLBottomTray::reshape(S32 width, S32 height, BOOL called_from_parent) if (mSnapshotPanel->getVisible()) { showSnapshotButton(FALSE); +// mToolbarStack->updatePanelAutoResize(PANEL_CHICLET_NAME, TRUE); +// mToolbarStack->updatePanelAutoResize(PANEL_MOVEMENT_NAME, FALSE); } if (mCamPanel->getVisible() && mCamButton->getLastDrawCharsCount() < MIN_RENDERED_CHARS) @@ -368,6 +458,12 @@ void LLBottomTray::reshape(S32 width, S32 height, BOOL called_from_parent) else { showMoveButton(TRUE); + S32 button_delta = delta_width / 4; + + LLRect panel_rect = mMovementPanel->getRect(); +// panel_rect.mRight += button_delta; + mMovementPanel->reshape(panel_rect.getWidth() + button_delta, panel_rect.getHeight()/*, FALSE*/); + mMovementPanel->draw(); if (mMovementButton->getLastDrawCharsCount() >= MIN_RENDERED_CHARS) @@ -378,6 +474,7 @@ void LLBottomTray::reshape(S32 width, S32 height, BOOL called_from_parent) { showMoveButton(FALSE); } + mMovementPanel->reshape(panel_rect.getWidth() , panel_rect.getHeight()/*, FALSE*/); } break; #endif @@ -385,58 +482,326 @@ void LLBottomTray::reshape(S32 width, S32 height, BOOL called_from_parent) default: break; } + } + else + { + lldebugs << "Nothing changed" << llendl; + } + } LLPanel::reshape(width, height, called_from_parent); + + // *TODO: ïðîâåðèòü øèðèíó nearby ïîñëå ðåñàéçà íà ïðåäìåò âûõîäà çà ìàêñèìàëüíûé ïðåäåë + +// if (mMovementButton) log(mMovementButton, "after"); + if (mNearbyChatBar) log(mNearbyChatBar, "after"); + if (mChicletPanel) log(mChicletPanel, "after"); + + if (mToolbarStack) + { +/* + mToolbarStack->updatePanelAutoResize(PANEL_CAMERA_NAME, FALSE); + mToolbarStack->updatePanelAutoResize(PANEL_MOVEMENT_NAME, FALSE); +*/ + } + --depth; } void LLBottomTray::updateResizeState(S32 width, S32 height) { - mResizeState = STATE_BUTTONS; + mResizeState = RS_NORESIZE; + static MASK prev_resize_state = mResizeState; + MASK compensative_view_item_mask = RS_CHATBAR_INPUT; + LLPanel* compansative_view = mNearbyChatBar; + S32 compensative_delta_width = 0; - const S32 chiclet_panel_width = mChicletPanel->getRect().getWidth(); + S32 delta_width = width - getRect().getWidth(); +// if (delta_width == 0) return; + + const S32 chiclet_panel_width = mChicletPanel->getParent()->getRect().getWidth(); const S32 chiclet_panel_min_width = mChicletPanel->getMinWidth(); const S32 chatbar_panel_width = mNearbyChatBar->getRect().getWidth(); const S32 chatbar_panel_min_width = mNearbyChatBar->getMinWidth(); const S32 chatbar_panel_max_width = mNearbyChatBar->getMaxWidth(); + lldebugs << "chatbar_panel_width: " << chatbar_panel_width + << llendl; + + bool still_should_be_processed = true; // bottom tray is narrowed if (width < getRect().getWidth()) { if (chiclet_panel_width > chiclet_panel_min_width) { - mResizeState = STATE_CHICLET_PANEL; + // we have some space to decrease chiclet panel + S32 panel_delta_min = chiclet_panel_width - chiclet_panel_min_width; + mResizeState |= RS_CHICLET_PANEL; + + S32 delta_panel = llmin(-delta_width, panel_delta_min); + + lldebugs << "delta_width: " << delta_width + << ", panel_delta_min: " << panel_delta_min + << ", delta_panel: " << delta_panel + << llendl; + + // is chiclet panel width enough to process resizing? + delta_width += panel_delta_min; + + still_should_be_processed = delta_width < 0; + + mChicletPanel->getParent()->reshape(mChicletPanel->getParent()->getRect().getWidth() - delta_panel, mChicletPanel->getParent()->getRect().getHeight()); + log(mChicletPanel, "after processing panel decreasing via chiclet panel"); + + lldebugs << "RS_CHICLET_PANEL" + << ", delta_width: " << delta_width + << llendl; } - else if (chatbar_panel_width > chatbar_panel_min_width) + + if (still_should_be_processed && chatbar_panel_width > chatbar_panel_min_width) { - mResizeState = STATE_CHATBAR_INPUT; + // we have some space to decrease chatbar panel + S32 panel_delta_min = chatbar_panel_width - chatbar_panel_min_width; + mResizeState |= RS_CHATBAR_INPUT; + + S32 delta_panel = llmin(-delta_width, panel_delta_min); + + // is chatbar panel width enough to process resizing? + delta_width += panel_delta_min; + + + still_should_be_processed = delta_width < 0; + + mNearbyChatBar->reshape(mNearbyChatBar->getRect().getWidth() - delta_panel, mNearbyChatBar->getRect().getHeight()); + + lldebugs << "RS_CHATBAR_INPUT" + << ", delta_panel: " << delta_panel + << ", delta_width: " << delta_width + << llendl; + + log(mChicletPanel, "after nearby was processed"); + } - else + if (still_should_be_processed) { - mResizeState = STATE_BUTTONS; + mResizeState |= compensative_view_item_mask; + + if (mSnapshotPanel->getVisible()) + { + mResizeState |= RS_BUTTON_SNAPSHOT; + delta_width += mSnapshotPanel->getRect().getWidth(); + compensative_delta_width += mSnapshotPanel->getRect().getWidth(); + lldebugs << "RS_BUTTON_SNAPSHOT" + << ", compensative_delta_width: " << compensative_delta_width + << ", delta_width: " << delta_width + << llendl; + showSnapshotButton(false); + } + + if (delta_width < 0 && mCamPanel->getVisible()) + { + mResizeState |= RS_BUTTON_CAMERA; + delta_width += mCamPanel->getRect().getWidth(); + compensative_delta_width += mCamPanel->getRect().getWidth(); + lldebugs << "RS_BUTTON_CAMERA" + << ", compensative_delta_width: " << compensative_delta_width + << ", delta_width: " << delta_width + << llendl; + showCameraButton(false); + } + + if (delta_width < 0 && mMovementPanel->getVisible()) + { + mResizeState |= RS_BUTTON_MOVEMENT; + delta_width += mMovementPanel->getRect().getWidth(); + compensative_delta_width += mMovementPanel->getRect().getWidth(); + lldebugs << "RS_BUTTON_MOVEMENT" + << ", compensative_delta_width: " << compensative_delta_width + << ", delta_width: " << delta_width + << llendl; + showMoveButton(false); + } + + if (delta_width < 0 && mGesturePanel->getVisible()) + { + mResizeState |= RS_BUTTON_GESTURES; + delta_width += mGesturePanel->getRect().getWidth(); + compensative_delta_width += mGesturePanel->getRect().getWidth(); + lldebugs << "RS_BUTTON_GESTURES" + << ", compensative_delta_width: " << compensative_delta_width + << ", delta_width: " << delta_width + << llendl; + showGestureButton(false); + } + + if (delta_width < 0) + { + llwarns << "WARNING: there is no enough room for bottom tray, resizing still should be processed" << llendl; + } + + if (compensative_delta_width != 0) + { + if (compansative_view) log(compansative_view, "before applying compensative width: "); + compansative_view->reshape(compansative_view->getRect().getWidth() + compensative_delta_width, compansative_view->getRect().getHeight() ); + if (compansative_view) log(compansative_view, "after applying compensative width: "); + lldebugs << compensative_delta_width << llendl; + + } + +/* + switch (mResizeState) + { + case: + } +*/ + +// mResizeState = RS_RESIZABLE_BUTTONS; } } // bottom tray is widen else { +// const S32 chatbar_panel_width = mNearbyChatBar->getRect().getWidth(); +// const S32 chatbar_panel_min_width = mNearbyChatBar->getMinWidth(); +// // const S32 chatbar_panel_max_width = mNearbyChatBar->getMaxWidth(); + S32 available_width_chat = chatbar_panel_width - chatbar_panel_min_width; + S32 available_width_chiclet = chiclet_panel_width - chiclet_panel_min_width; + S32 available_width = delta_width + available_width_chat + available_width_chiclet; + + if (available_width > 0 && processShowButton(mGesturePanel, &available_width)) + { + mResizeState |= RS_BUTTON_GESTURES | compensative_view_item_mask; + delta_width -= mGesturePanel->getRect().getWidth(); + compensative_delta_width -= mGesturePanel->getRect().getWidth(); + lldebugs << "RS_BUTTON_GESTURES" + << ", compensative_delta_width: " << compensative_delta_width + << ", delta_width: " << delta_width + << llendl; + } + + if (available_width > 0 && processShowButton(mMovementPanel, &available_width)) + { + mResizeState |= RS_BUTTON_MOVEMENT | compensative_view_item_mask; + delta_width -= mMovementPanel->getRect().getWidth(); + compensative_delta_width -= mMovementPanel->getRect().getWidth(); + + lldebugs << "RS_BUTTON_MOVEMENT" + << ", compensative_delta_width: " << compensative_delta_width + << ", delta_width: " << delta_width + << llendl; + } + + if (available_width > 0 && processShowButton(mCamPanel, &available_width)) + { + mResizeState |= RS_BUTTON_CAMERA | compensative_view_item_mask; + delta_width -= mCamPanel->getRect().getWidth(); + compensative_delta_width -= mCamPanel->getRect().getWidth(); + + lldebugs << "RS_BUTTON_CAMERA " + << ", compensative_delta_width: " << compensative_delta_width + << ", delta_width: " << delta_width + << llendl; + } + + if (available_width > 0 && processShowButton(mSnapshotPanel, &available_width)) + { + mResizeState |= RS_BUTTON_SNAPSHOT | compensative_view_item_mask; + delta_width -= mSnapshotPanel->getRect().getWidth(); + compensative_delta_width -= mSnapshotPanel->getRect().getWidth(); + + lldebugs << "RS_BUTTON_SNAPSHOT" + << ", compensative_delta_width: " << compensative_delta_width + << ", delta_width: " << delta_width + << llendl; + } + + if (compensative_delta_width != 0) + { + S32 required_to_process_width = -compensative_delta_width; + S32 total_delta_width = width - getRect().getWidth(); + + // 1. use delta width of resizing + required_to_process_width -= total_delta_width; + + // 2. use delta width of chatbar + + + S32 chatbar_compensative_delta_width = required_to_process_width; + if (available_width_chat < chatbar_compensative_delta_width) + { + chatbar_compensative_delta_width = available_width_chat; + } + + log(compansative_view, "increase width: before applying compensative width: "); + compansative_view->reshape(compansative_view->getRect().getWidth() - chatbar_compensative_delta_width, compansative_view->getRect().getHeight() ); + if (compansative_view) log(compansative_view, "after applying compensative width: "); + lldebugs << chatbar_compensative_delta_width << llendl; + + // 3. use delta width of chiclet panel + required_to_process_width -= chatbar_compensative_delta_width; + + mChicletPanel->getParent()->reshape(mChicletPanel->getParent()->getRect().getWidth() - required_to_process_width, mChicletPanel->getParent()->getRect().getHeight()); + log(mChicletPanel, "after applying compensative width for chiclets: "); + lldebugs << required_to_process_width << llendl; + + } + + #ifdef __FEATURE_EXT_991__ - if (!mMovementPanel->getVisible()) + //S32 LLFontGL::maxDrawableChars(const llwchar* wchars, F32 max_pixels, S32 max_chars, BOOL end_on_word_boundary) const + static S32 DEFAULT_BUTTON_WIDTH = 80; + if (!mMovementPanel->getVisible() || mMovementPanel->getRect().getWidth() < DEFAULT_BUTTON_WIDTH) { - mResizeState = STATE_BUTTONS; + mResizeState = RS_RESIZABLE_BUTTONS; } else #endif - if (chatbar_panel_width < chatbar_panel_max_width) + if (delta_width > 0 && chatbar_panel_width < chatbar_panel_max_width) { - mResizeState = STATE_CHATBAR_INPUT; + mResizeState |= RS_CHATBAR_INPUT; + // how many space can nearby chat take? + S32 chatbar_panel_width_ = mNearbyChatBar->getRect().getWidth(); + S32 delta_panel_max = chatbar_panel_max_width - chatbar_panel_width_; + S32 delta_panel = llmin(delta_width, delta_panel_max); + delta_width -= delta_panel_max; + mNearbyChatBar->reshape(chatbar_panel_width_ + delta_panel, mNearbyChatBar->getRect().getHeight()); } - else + + if (delta_width > 0) { - mResizeState = STATE_CHICLET_PANEL; + mResizeState |= RS_CHICLET_PANEL; } } + prev_resize_state = mResizeState; + lldebugs << "New resize state: " << mResizeState << llendl; +} - // TODO: finish implementation +bool LLBottomTray::processShowButton(LLPanel* panel, S32* available_width) +{ + bool can_be_shown = canButtonBeShown(panel); + if (can_be_shown) + { + //validate if we have enough room to show this button + const S32 required_width = panel->getRect().getWidth(); + can_be_shown = *available_width >= required_width; + if (can_be_shown) + { + *available_width -= required_width; + } + + } + return can_be_shown; +} + +bool LLBottomTray::canButtonBeShown(LLPanel* panel) const +{ + bool can_be_shown = !panel->getVisible(); + if (can_be_shown) + { + // *TODO: mantipov: synchronize with situation when button was hidden via context menu; + } + return can_be_shown; } +//EOF diff --git a/indra/newview/llbottomtray.h b/indra/newview/llbottomtray.h index 02588a1975..4a763e6c7c 100644 --- a/indra/newview/llbottomtray.h +++ b/indra/newview/llbottomtray.h @@ -52,6 +52,7 @@ class LLBottomTray , public LLPanel , public LLIMSessionObserver { + LOG_CLASS(LLBottomTray); friend class LLSingleton; public: ~LLBottomTray(); @@ -83,17 +84,13 @@ public: private: - enum EResizeState - { - STATE_CHICLET_PANEL = 1, - STATE_CHATBAR_INPUT, - STATE_BUTTONS - }; - void updateResizeState(S32 width, S32 height); void verifyChildControlsSizes(); + void log(LLView* panel, const std::string& descr); + bool processShowButton(LLPanel* panel, S32* available_width); + bool canButtonBeShown(LLPanel* panel) const; - EResizeState mResizeState; + MASK mResizeState; protected: diff --git a/indra/newview/llchiclet.cpp b/indra/newview/llchiclet.cpp index 97447a85c6..16ee9a0007 100644 --- a/indra/newview/llchiclet.cpp +++ b/indra/newview/llchiclet.cpp @@ -787,11 +787,13 @@ LLChicletPanel::Params::Params() chiclet_padding = 3; scrolling_offset = 40; +/* if (!min_width.isProvided()) { // min_width = 4 chiclets + 3 paddings - min_width = 179 + 3*chiclet_padding; + min_width = 180 + 3*chiclet_padding; } +*/ }; LLChicletPanel::LLChicletPanel(const Params&p) @@ -805,6 +807,10 @@ LLChicletPanel::LLChicletPanel(const Params&p) , mShowControls(true) { LLPanel::Params panel_params; +// *TODO: remove color settings +panel_params.background_visible(true); +panel_params.bg_alpha_color(LLColor4::red); + panel_params.follows.flags(FOLLOWS_LEFT | FOLLOWS_RIGHT); mScrollArea = LLUICtrlFactory::create(panel_params,this); // important for Show/Hide Camera and Move controls menu in bottom tray to work properly @@ -1051,7 +1057,7 @@ void LLChicletPanel::reshape(S32 width, S32 height, BOOL called_from_parent ) width, scroll_button_rect.mBottom)); mScrollArea->setRect(LLRect(scroll_button_rect.getWidth() + SCROLL_BUTTON_PAD, height, width - scroll_button_rect.getWidth() - SCROLL_BUTTON_PAD, 0)); - mShowControls = width > mMinWidth; + mShowControls = width >= mMinWidth; mScrollArea->setVisible(mShowControls); trimChiclets(); diff --git a/indra/newview/llnearbychatbar.cpp b/indra/newview/llnearbychatbar.cpp index bcb4edd7c1..47441191f5 100644 --- a/indra/newview/llnearbychatbar.cpp +++ b/indra/newview/llnearbychatbar.cpp @@ -260,6 +260,8 @@ bool LLNearbyChatBar::instanceExists() void LLNearbyChatBar::draw() { +// TODO: mantipov: remove +/* LLRect rect = getRect(); S32 max_width = getMaxWidth(); @@ -269,6 +271,7 @@ void LLNearbyChatBar::draw() reshape(rect.getWidth(), rect.getHeight(), FALSE); setRect(rect); } +*/ displaySpeakingIndicator(); LLPanel::draw(); diff --git a/indra/newview/skins/default/xui/en/panel_bottomtray.xml b/indra/newview/skins/default/xui/en/panel_bottomtray.xml index ef91c6cd6e..1c1065bc11 100644 --- a/indra/newview/skins/default/xui/en/panel_bottomtray.xml +++ b/indra/newview/skins/default/xui/en/panel_bottomtray.xml @@ -44,7 +44,7 @@ min_height="23" width="310" top="0" - min_width="300" + min_width="192" name="chat_bar" user_resize="false" filename="panel_nearby_chat_bar.xml" /> @@ -57,7 +57,7 @@ min_height="28" width="100" top_delta="0" - min_width="96" + min_width="100" name="speak_panel" user_resize="false">