Skip to content
Snippets Groups Projects
Commit 3040d68c authored by Mike Antipov's avatar Mike Antipov
Browse files

EXT-7104 : WIP : bottomtray refactoring for future changes. Functionality was not changed.

 * updated method related to resize logic to take references to S32 instead of pointer.
 * added doxygen comments for these methods.

Reviewed by Vadim Savchuk at https://codereview.productengine.com/secondlife/r/381/

--HG--
branch : product-engine
parent 93ccf3f2
Branches
Tags
No related merge requests found
...@@ -711,26 +711,26 @@ S32 LLBottomTray::processWidthDecreased(S32 delta_width) ...@@ -711,26 +711,26 @@ S32 LLBottomTray::processWidthDecreased(S32 delta_width)
S32 buttons_freed_width = 0; S32 buttons_freed_width = 0;
if (still_should_be_processed) if (still_should_be_processed)
{ {
processShrinkButtons(&delta_width, &buttons_freed_width); processShrinkButtons(delta_width, buttons_freed_width);
if (delta_width < 0) if (delta_width < 0)
{ {
processHideButton(RS_BUTTON_SNAPSHOT, &delta_width, &buttons_freed_width); processHideButton(RS_BUTTON_SNAPSHOT, delta_width, buttons_freed_width);
} }
if (delta_width < 0) if (delta_width < 0)
{ {
processHideButton(RS_BUTTON_CAMERA, &delta_width, &buttons_freed_width); processHideButton(RS_BUTTON_CAMERA, delta_width, buttons_freed_width);
} }
if (delta_width < 0) if (delta_width < 0)
{ {
processHideButton(RS_BUTTON_MOVEMENT, &delta_width, &buttons_freed_width); processHideButton(RS_BUTTON_MOVEMENT, delta_width, buttons_freed_width);
} }
if (delta_width < 0) if (delta_width < 0)
{ {
processHideButton(RS_BUTTON_GESTURES, &delta_width, &buttons_freed_width); processHideButton(RS_BUTTON_GESTURES, delta_width, buttons_freed_width);
} }
if (delta_width < 0) if (delta_width < 0)
...@@ -778,25 +778,25 @@ void LLBottomTray::processWidthIncreased(S32 delta_width) ...@@ -778,25 +778,25 @@ void LLBottomTray::processWidthIncreased(S32 delta_width)
S32 available_width = total_available_width; S32 available_width = total_available_width;
if (available_width > 0) if (available_width > 0)
{ {
processShowButton(RS_BUTTON_GESTURES, &available_width); processShowButton(RS_BUTTON_GESTURES, available_width);
} }
if (available_width > 0) if (available_width > 0)
{ {
processShowButton(RS_BUTTON_MOVEMENT, &available_width); processShowButton(RS_BUTTON_MOVEMENT, available_width);
} }
if (available_width > 0) if (available_width > 0)
{ {
processShowButton(RS_BUTTON_CAMERA, &available_width); processShowButton(RS_BUTTON_CAMERA, available_width);
} }
if (available_width > 0) if (available_width > 0)
{ {
processShowButton(RS_BUTTON_SNAPSHOT, &available_width); processShowButton(RS_BUTTON_SNAPSHOT, available_width);
} }
processExtendButtons(&available_width); processExtendButtons(available_width);
// if we have to show/extend some buttons but resized delta width is not enough... // if we have to show/extend some buttons but resized delta width is not enough...
S32 processed_width = total_available_width - available_width; S32 processed_width = total_available_width - available_width;
...@@ -853,7 +853,7 @@ void LLBottomTray::processWidthIncreased(S32 delta_width) ...@@ -853,7 +853,7 @@ void LLBottomTray::processWidthIncreased(S32 delta_width)
} }
} }
bool LLBottomTray::processShowButton(EResizeState shown_object_type, S32* available_width) bool LLBottomTray::processShowButton(EResizeState shown_object_type, S32& available_width)
{ {
lldebugs << "Trying to show object type: " << shown_object_type << llendl; lldebugs << "Trying to show object type: " << shown_object_type << llendl;
llassert(mStateProcessedObjectMap[shown_object_type] != NULL); llassert(mStateProcessedObjectMap[shown_object_type] != NULL);
...@@ -869,15 +869,15 @@ bool LLBottomTray::processShowButton(EResizeState shown_object_type, S32* availa ...@@ -869,15 +869,15 @@ bool LLBottomTray::processShowButton(EResizeState shown_object_type, S32* availa
{ {
//validate if we have enough room to show this button //validate if we have enough room to show this button
const S32 required_width = panel->getRect().getWidth(); const S32 required_width = panel->getRect().getWidth();
can_be_shown = *available_width >= required_width; can_be_shown = available_width >= required_width;
if (can_be_shown) if (can_be_shown)
{ {
*available_width -= required_width; available_width -= required_width;
setTrayButtonVisible(shown_object_type, true); setTrayButtonVisible(shown_object_type, true);
lldebugs << "processed object type: " << shown_object_type lldebugs << "processed object type: " << shown_object_type
<< ", rest available width: " << *available_width << ", rest available width: " << available_width
<< llendl; << llendl;
mResizeState &= ~shown_object_type; mResizeState &= ~shown_object_type;
} }
...@@ -885,7 +885,7 @@ bool LLBottomTray::processShowButton(EResizeState shown_object_type, S32* availa ...@@ -885,7 +885,7 @@ bool LLBottomTray::processShowButton(EResizeState shown_object_type, S32* availa
return can_be_shown; return can_be_shown;
} }
void LLBottomTray::processHideButton(EResizeState processed_object_type, S32* required_width, S32* buttons_freed_width) void LLBottomTray::processHideButton(EResizeState processed_object_type, S32& required_width, S32& buttons_freed_width)
{ {
lldebugs << "Trying to hide object type: " << processed_object_type << llendl; lldebugs << "Trying to hide object type: " << processed_object_type << llendl;
llassert(mStateProcessedObjectMap[processed_object_type] != NULL); llassert(mStateProcessedObjectMap[processed_object_type] != NULL);
...@@ -899,11 +899,11 @@ void LLBottomTray::processHideButton(EResizeState processed_object_type, S32* re ...@@ -899,11 +899,11 @@ void LLBottomTray::processHideButton(EResizeState processed_object_type, S32* re
if (panel->getVisible()) if (panel->getVisible())
{ {
*required_width += panel->getRect().getWidth(); required_width += panel->getRect().getWidth();
if (*required_width > 0) if (required_width > 0)
{ {
*buttons_freed_width += *required_width; buttons_freed_width += required_width;
} }
setTrayButtonVisible(processed_object_type, false); setTrayButtonVisible(processed_object_type, false);
...@@ -911,24 +911,24 @@ void LLBottomTray::processHideButton(EResizeState processed_object_type, S32* re ...@@ -911,24 +911,24 @@ void LLBottomTray::processHideButton(EResizeState processed_object_type, S32* re
mResizeState |= processed_object_type; mResizeState |= processed_object_type;
lldebugs << "processing object type: " << processed_object_type lldebugs << "processing object type: " << processed_object_type
<< ", buttons_freed_width: " << *buttons_freed_width << ", buttons_freed_width: " << buttons_freed_width
<< llendl; << llendl;
} }
} }
void LLBottomTray::processShrinkButtons(S32* required_width, S32* buttons_freed_width) void LLBottomTray::processShrinkButtons(S32& required_width, S32& buttons_freed_width)
{ {
processShrinkButton(RS_BUTTON_CAMERA, required_width); processShrinkButton(RS_BUTTON_CAMERA, required_width);
if (*required_width < 0) if (required_width < 0)
{ {
processShrinkButton(RS_BUTTON_MOVEMENT, required_width); processShrinkButton(RS_BUTTON_MOVEMENT, required_width);
} }
if (*required_width < 0) if (required_width < 0)
{ {
processShrinkButton(RS_BUTTON_GESTURES, required_width); processShrinkButton(RS_BUTTON_GESTURES, required_width);
} }
if (*required_width < 0) if (required_width < 0)
{ {
S32 panel_min_width = 0; S32 panel_min_width = 0;
...@@ -948,23 +948,23 @@ void LLBottomTray::processShrinkButtons(S32* required_width, S32* buttons_freed_ ...@@ -948,23 +948,23 @@ void LLBottomTray::processShrinkButtons(S32* required_width, S32* buttons_freed_
mSpeakBtn->setLabelVisible(false); mSpeakBtn->setLabelVisible(false);
mSpeakPanel->reshape(panel_width - possible_shrink_width, mSpeakPanel->getRect().getHeight()); mSpeakPanel->reshape(panel_width - possible_shrink_width, mSpeakPanel->getRect().getHeight());
*required_width += possible_shrink_width; required_width += possible_shrink_width;
if (*required_width > 0) if (required_width > 0)
{ {
*buttons_freed_width += *required_width; buttons_freed_width += required_width;
} }
lldebugs << "Shrunk panel: " << panel_name lldebugs << "Shrunk panel: " << panel_name
<< ", shrunk width: " << possible_shrink_width << ", shrunk width: " << possible_shrink_width
<< ", rest width to process: " << *required_width << ", rest width to process: " << required_width
<< llendl; << llendl;
} }
} }
} }
} }
void LLBottomTray::processShrinkButton(EResizeState processed_object_type, S32* required_width) void LLBottomTray::processShrinkButton(EResizeState processed_object_type, S32& required_width)
{ {
llassert(mStateProcessedObjectMap[processed_object_type] != NULL); llassert(mStateProcessedObjectMap[processed_object_type] != NULL);
LLPanel* panel = mStateProcessedObjectMap[processed_object_type]; LLPanel* panel = mStateProcessedObjectMap[processed_object_type];
...@@ -992,63 +992,63 @@ void LLBottomTray::processShrinkButton(EResizeState processed_object_type, S32* ...@@ -992,63 +992,63 @@ void LLBottomTray::processShrinkButton(EResizeState processed_object_type, S32*
// let calculate real width to shrink // let calculate real width to shrink
// 1. apply all possible width // 1. apply all possible width
*required_width += possible_shrink_width; required_width += possible_shrink_width;
// 2. it it is too much... // 2. it it is too much...
if (*required_width > 0) if (required_width > 0)
{ {
// reduce applied shrunk width to the excessive value. // reduce applied shrunk width to the excessive value.
possible_shrink_width -= *required_width; possible_shrink_width -= required_width;
*required_width = 0; required_width = 0;
} }
panel->reshape(panel_width - possible_shrink_width, panel->getRect().getHeight()); panel->reshape(panel_width - possible_shrink_width, panel->getRect().getHeight());
lldebugs << "Shrunk panel: " << panel_name lldebugs << "Shrunk panel: " << panel_name
<< ", shrunk width: " << possible_shrink_width << ", shrunk width: " << possible_shrink_width
<< ", rest width to process: " << *required_width << ", rest width to process: " << required_width
<< llendl; << llendl;
} }
} }
} }
void LLBottomTray::processExtendButtons(S32* available_width) void LLBottomTray::processExtendButtons(S32& available_width)
{ {
// do not allow extending any buttons if we have some buttons hidden // do not allow extending any buttons if we have some buttons hidden
if (mResizeState & RS_BUTTONS_CAN_BE_HIDDEN) return; if (mResizeState & RS_BUTTONS_CAN_BE_HIDDEN) return;
processExtendButton(RS_BUTTON_GESTURES, available_width); processExtendButton(RS_BUTTON_GESTURES, available_width);
if (*available_width > 0) if (available_width > 0)
{ {
processExtendButton(RS_BUTTON_MOVEMENT, available_width); processExtendButton(RS_BUTTON_MOVEMENT, available_width);
} }
if (*available_width > 0) if (available_width > 0)
{ {
processExtendButton(RS_BUTTON_CAMERA, available_width); processExtendButton(RS_BUTTON_CAMERA, available_width);
} }
if (*available_width > 0) if (available_width > 0)
{ {
S32 panel_max_width = mObjectDefaultWidthMap[RS_BUTTON_SPEAK]; S32 panel_max_width = mObjectDefaultWidthMap[RS_BUTTON_SPEAK];
S32 panel_width = mSpeakPanel->getRect().getWidth(); S32 panel_width = mSpeakPanel->getRect().getWidth();
S32 possible_extend_width = panel_max_width - panel_width; S32 possible_extend_width = panel_max_width - panel_width;
if (possible_extend_width >= 0 && possible_extend_width <= *available_width) // HACK: this button doesn't change size so possible_extend_width will be 0 if (possible_extend_width >= 0 && possible_extend_width <= available_width) // HACK: this button doesn't change size so possible_extend_width will be 0
{ {
mSpeakBtn->setLabelVisible(true); mSpeakBtn->setLabelVisible(true);
mSpeakPanel->reshape(panel_max_width, mSpeakPanel->getRect().getHeight()); mSpeakPanel->reshape(panel_max_width, mSpeakPanel->getRect().getHeight());
log(mSpeakBtn, "speak button is extended"); log(mSpeakBtn, "speak button is extended");
*available_width -= possible_extend_width; available_width -= possible_extend_width;
lldebugs << "Extending panel: " << mSpeakPanel->getName() lldebugs << "Extending panel: " << mSpeakPanel->getName()
<< ", extended width: " << possible_extend_width << ", extended width: " << possible_extend_width
<< ", rest width to process: " << *available_width << ", rest width to process: " << available_width
<< llendl; << llendl;
} }
} }
} }
void LLBottomTray::processExtendButton(EResizeState processed_object_type, S32* available_width) void LLBottomTray::processExtendButton(EResizeState processed_object_type, S32& available_width)
{ {
llassert(mStateProcessedObjectMap[processed_object_type] != NULL); llassert(mStateProcessedObjectMap[processed_object_type] != NULL);
LLPanel* panel = mStateProcessedObjectMap[processed_object_type]; LLPanel* panel = mStateProcessedObjectMap[processed_object_type];
...@@ -1069,20 +1069,20 @@ void LLBottomTray::processExtendButton(EResizeState processed_object_type, S32* ...@@ -1069,20 +1069,20 @@ void LLBottomTray::processExtendButton(EResizeState processed_object_type, S32*
// let calculate real width to extend // let calculate real width to extend
// 1. apply all possible width // 1. apply all possible width
*available_width -= possible_extend_width; available_width -= possible_extend_width;
// 2. it it is too much... // 2. it it is too much...
if (*available_width < 0) if (available_width < 0)
{ {
// reduce applied extended width to the excessive value. // reduce applied extended width to the excessive value.
possible_extend_width += *available_width; possible_extend_width += available_width;
*available_width = 0; available_width = 0;
} }
panel->reshape(panel_width + possible_extend_width, panel->getRect().getHeight()); panel->reshape(panel_width + possible_extend_width, panel->getRect().getHeight());
lldebugs << "Extending panel: " << panel->getName() lldebugs << "Extending panel: " << panel->getName()
<< ", extended width: " << possible_extend_width << ", extended width: " << possible_extend_width
<< ", rest width to process: " << *available_width << ", rest width to process: " << available_width
<< llendl; << llendl;
} }
} }
...@@ -1226,7 +1226,7 @@ bool LLBottomTray::setVisibleAndFitWidths(EResizeState object_type, bool visible ...@@ -1226,7 +1226,7 @@ bool LLBottomTray::setVisibleAndFitWidths(EResizeState object_type, bool visible
current_width = result_width; current_width = result_width;
} }
is_set = processShowButton(object_type, &current_width); is_set = processShowButton(object_type, current_width);
// Shrink buttons if needed // Shrink buttons if needed
if (is_set && decrease_width) if (is_set && decrease_width)
......
...@@ -128,29 +128,103 @@ private: ...@@ -128,29 +128,103 @@ private:
, RS_BUTTONS_CAN_BE_HIDDEN = RS_BUTTON_SNAPSHOT | RS_BUTTON_CAMERA | RS_BUTTON_MOVEMENT | RS_BUTTON_GESTURES , RS_BUTTONS_CAN_BE_HIDDEN = RS_BUTTON_SNAPSHOT | RS_BUTTON_CAMERA | RS_BUTTON_MOVEMENT | RS_BUTTON_GESTURES
}EResizeState; }EResizeState;
/**
* Updates child controls size and visibility when it is necessary to reduce total width.
*
* Process order:
* - reduce chiclet panel to its minimal width;
* - reduce chatbar to its minimal width;
* - reduce visible buttons from right to left to their minimal width;
* - hide visible buttons from right to left;
* When button is hidden chatbar extended to fill released space if it is necessary.
*
* @param[in] delta_width - value by which bottom tray should be shrunk. It is a negative value.
* @return positive value which bottom tray can not process when it reaches its minimal width.
* Zero if there was enough space to process delta_width.
*/
S32 processWidthDecreased(S32 delta_width); S32 processWidthDecreased(S32 delta_width);
/**
* Updates child controls size and visibility when it is necessary to extend total width.
*
* Process order:
* - show invisible buttons should be shown from left to right if possible;
* - extend visible buttons from left to right to their default width;
* - extend chatbar to its maximal width;
* - extend chiclet panel to all available space;
* When chatbar & chiclet panels are wider then their minimal width they can be reduced to allow
* a button gets visible in case if passed delta_width is not enough (chatbar first).
*
* @param[in] delta_width - value by which bottom tray should be extended. It is a positive value.
*/
void processWidthIncreased(S32 delta_width); void processWidthIncreased(S32 delta_width);
/** helper function to log debug messages */
void log(LLView* panel, const std::string& descr); void log(LLView* panel, const std::string& descr);
bool processShowButton(EResizeState shown_object_type, S32* available_width);
void processHideButton(EResizeState processed_object_type, S32* required_width, S32* buttons_freed_width); /**
* Tries to show panel with specified button using available width.
*
* Shows button specified by type if there is enough space. Reduces available_width in this case.
*
* @params[in] shown_object_type - type of button to be shown.
* @params[in, out] available_width - reference to available width to be used to show button.
*
* @return true if button can be shown, false otherwise
*/
bool processShowButton(EResizeState shown_object_type, S32& available_width);
/**
* Hides panel with specified button if it is visible.
*
* When button gets hidden some space is released in bottom tray.
* This space is taken into account for several consecutive calls for several buttons.
*
* @params[in] processed_object_type - type of button to be hide.
* @params[in, out] required_width - reference to required width to be released. This is a negative value.
* Its absolute value is decreased by panel width.
* @params[in, out] buttons_freed_width - reference to value released over required one.
* If panel's width is more than required difference is added to buttons_freed_width.
*/
void processHideButton(EResizeState processed_object_type, S32& required_width, S32& buttons_freed_width);
/** /**
* Shrinks shown buttons to reduce total taken space. * Shrinks shown buttons to reduce total taken space.
* *
* @param - required_width - width which buttons can use to be shrunk. It is a negative value. * @param[in, out] required_width - reference to width value which should be released when buttons are shrunk. It is a negative value.
* It is increased on the value processed by buttons. * It is increased on the value processed by buttons.
* @params[in, out] buttons_freed_width - reference to value released over required one.
* If width of panel with Speak button is more than required that difference is added
* to buttons_freed_width.
* This is because Speak button shrinks discretely unlike other buttons which are changed smoothly.
*/
void processShrinkButtons(S32& required_width, S32& buttons_freed_width);
/**
* Shrinks panel with specified button if it is visible.
*
* @params[in] processed_object_type - type of button to be shrunk.
* @param[in, out] required_width - reference to width value which should be released when button is shrunk. It is a negative value.
* It is increased on the value released by the button.
*/ */
void processShrinkButtons(S32* required_width, S32* buttons_freed_width); void processShrinkButton(EResizeState processed_object_type, S32& required_width);
void processShrinkButton(EResizeState processed_object_type, S32* required_width);
/** /**
* Extends shown buttons to increase total taken space. * Extends shown buttons to increase total taken space.
* *
* @param - available_width - width which buttons can use to be extended. It is a positive value. * @param[in, out] available_width - reference to width value which buttons can use to be extended.
* It is decreased on the value processed by buttons. * It is a positive value. It is decreased on the value processed by buttons.
*/
void processExtendButtons(S32& available_width);
/**
* Extends shown button to increase total taken space.
*
* @params[in] processed_object_type - type of button to be extended.
* @param[in, out] available_width - reference to width value which button can use to be extended.
* It is a positive value. It is decreased on the value processed by buttons.
*/ */
void processExtendButtons(S32* available_width); void processExtendButton(EResizeState processed_object_type, S32& available_width);
void processExtendButton(EResizeState processed_object_type, S32* available_width);
/** /**
* Determines if specified by type object can be shown. It should be hidden by shrink before. * Determines if specified by type object can be shown. It should be hidden by shrink before.
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment