summaryrefslogtreecommitdiff
path: root/indra/llui/llfloater.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'indra/llui/llfloater.cpp')
-rw-r--r--indra/llui/llfloater.cpp466
1 files changed, 151 insertions, 315 deletions
diff --git a/indra/llui/llfloater.cpp b/indra/llui/llfloater.cpp
index 0754d0eda9..5c1f8429d1 100644
--- a/indra/llui/llfloater.cpp
+++ b/indra/llui/llfloater.cpp
@@ -142,20 +142,18 @@ LLFloater::LLFloater() :
mButtons[i] = NULL;
}
mDragHandle = NULL;
+ mHandle.bind(this);
}
LLFloater::LLFloater(const LLString& name)
-: LLPanel(name)
+: LLPanel(name), mAutoFocus(TRUE) // automatically take focus when opened
{
for (S32 i = 0; i < BUTTON_COUNT; i++)
{
mButtonsEnabled[i] = FALSE;
mButtons[i] = NULL;
}
-
LLString title; // null string
- // automatically take focus when opened
- mAutoFocus = TRUE;
init(title, FALSE, DEFAULT_MIN_WIDTH, DEFAULT_MIN_HEIGHT, FALSE, TRUE, TRUE); // defaults
}
@@ -168,15 +166,13 @@ LLFloater::LLFloater(const LLString& name, const LLRect& rect, const LLString& t
BOOL minimizable,
BOOL close_btn,
BOOL bordered)
-: LLPanel(name, rect, bordered)
+: LLPanel(name, rect, bordered), mAutoFocus(TRUE) // automatically take focus when opened
{
for (S32 i = 0; i < BUTTON_COUNT; i++)
{
mButtonsEnabled[i] = FALSE;
mButtons[i] = NULL;
}
- // automatically take focus when opened
- mAutoFocus = TRUE;
init( title, resizable, min_width, min_height, drag_on_left, minimizable, close_btn);
}
@@ -188,15 +184,13 @@ LLFloater::LLFloater(const LLString& name, const LLString& rect_control, const L
BOOL minimizable,
BOOL close_btn,
BOOL bordered)
-: LLPanel(name, rect_control, bordered)
+: LLPanel(name, rect_control, bordered), mAutoFocus(TRUE) // automatically take focus when opened
{
for (S32 i = 0; i < BUTTON_COUNT; i++)
{
mButtonsEnabled[i] = FALSE;
mButtons[i] = NULL;
}
- // automatically take focus when opened
- mAutoFocus = TRUE;
init( title, resizable, min_width, min_height, drag_on_left, minimizable, close_btn);
}
@@ -206,6 +200,8 @@ void LLFloater::init(const LLString& title,
BOOL resizable, S32 min_width, S32 min_height,
BOOL drag_on_left, BOOL minimizable, BOOL close_btn)
{
+ mHandle.bind(this);
+
// Init function can be called more than once, so clear out old data.
for (S32 i = 0; i < BUTTON_COUNT; i++)
{
@@ -219,20 +215,20 @@ void LLFloater::init(const LLString& title,
}
mButtonScale = 1.f;
- BOOL need_border = mBorder != NULL;
-
+ //sjb: Thia is a bit of a hack:
+ BOOL need_border = hasBorder();
+ // remove the border since deleteAllChildren() will also delete the border (but not clear mBorder)
+ removeBorder();
// this will delete mBorder too
deleteAllChildren();
- // make sure we don't have a pointer to an old, deleted border
- mBorder = NULL;
- //sjb: HACK! we had a border which was just deleted, so re-create it
+ // add the border back if we want it
if (need_border)
{
- addBorder();
+ addBorder();
}
// chrome floaters don't take focus at all
- mIsFocusRoot = !getIsChrome();
+ setFocusRoot(!getIsChrome());
// Reset cached pointers
mDragHandle = NULL;
@@ -257,7 +253,7 @@ void LLFloater::init(const LLString& title,
// Floaters start not minimized. When minimized, they save their
// prior rectangle to be used on restore.
mMinimized = FALSE;
- mPreviousRect.set(0,0,0,0);
+ mExpandedRect.set(0,0,0,0);
S32 close_pad; // space to the right of close box
S32 close_box_size; // For layout purposes, how big is the close box?
@@ -288,31 +284,20 @@ void LLFloater::init(const LLString& title,
// Drag Handle
// Add first so it's in the background.
// const S32 drag_pad = 2;
- LLRect drag_handle_rect;
- if (!drag_on_left)
- {
- drag_handle_rect.set( 0, mRect.getHeight(), mRect.getWidth(), 0 );
-
- /*
- drag_handle_rect.setLeftTopAndSize(
- 0, mRect.getHeight(),
- mRect.getWidth()
- - LLPANEL_BORDER_WIDTH
- - drag_pad
- - minimize_box_size - minimize_pad
- - close_box_size - close_pad,
- DRAG_HANDLE_HEIGHT);
- */
- mDragHandle = new LLDragHandleTop( "Drag Handle", drag_handle_rect, title );
- }
- else
+ if (drag_on_left)
{
+ LLRect drag_handle_rect;
drag_handle_rect.setOriginAndSize(
0, 0,
DRAG_HANDLE_WIDTH,
- mRect.getHeight() - LLPANEL_BORDER_WIDTH - close_box_size);
+ getRect().getHeight() - LLPANEL_BORDER_WIDTH - close_box_size);
mDragHandle = new LLDragHandleLeft("drag", drag_handle_rect, title );
}
+ else // drag on top
+ {
+ LLRect drag_handle_rect( 0, getRect().getHeight(), getRect().getWidth(), 0 );
+ mDragHandle = new LLDragHandleTop( "Drag Handle", drag_handle_rect, title );
+ }
addChild(mDragHandle);
// Resize Handle
@@ -327,28 +312,28 @@ void LLFloater::init(const LLString& title,
mResizeBar[LLResizeBar::LEFT] = new LLResizeBar(
"resizebar_left",
this,
- LLRect( 0, mRect.getHeight(), RESIZE_BAR_THICKNESS, 0),
+ LLRect( 0, getRect().getHeight(), RESIZE_BAR_THICKNESS, 0),
min_width, S32_MAX, LLResizeBar::LEFT );
addChild( mResizeBar[0] );
mResizeBar[LLResizeBar::TOP] = new LLResizeBar(
"resizebar_top",
this,
- LLRect( 0, mRect.getHeight(), mRect.getWidth(), mRect.getHeight() - RESIZE_BAR_THICKNESS),
+ LLRect( 0, getRect().getHeight(), getRect().getWidth(), getRect().getHeight() - RESIZE_BAR_THICKNESS),
min_height, S32_MAX, LLResizeBar::TOP );
addChild( mResizeBar[1] );
mResizeBar[LLResizeBar::RIGHT] = new LLResizeBar(
"resizebar_right",
this,
- LLRect( mRect.getWidth() - RESIZE_BAR_THICKNESS, mRect.getHeight(), mRect.getWidth(), 0),
+ LLRect( getRect().getWidth() - RESIZE_BAR_THICKNESS, getRect().getHeight(), getRect().getWidth(), 0),
min_width, S32_MAX, LLResizeBar::RIGHT );
addChild( mResizeBar[2] );
mResizeBar[LLResizeBar::BOTTOM] = new LLResizeBar(
"resizebar_bottom",
this,
- LLRect( 0, RESIZE_BAR_THICKNESS, mRect.getWidth(), 0),
+ LLRect( 0, RESIZE_BAR_THICKNESS, getRect().getWidth(), 0),
min_height, S32_MAX, LLResizeBar::BOTTOM );
addChild( mResizeBar[3] );
@@ -356,14 +341,14 @@ void LLFloater::init(const LLString& title,
// Resize handles (corners)
mResizeHandle[0] = new LLResizeHandle(
"Resize Handle",
- LLRect( mRect.getWidth() - RESIZE_HANDLE_WIDTH, RESIZE_HANDLE_HEIGHT, mRect.getWidth(), 0),
+ LLRect( getRect().getWidth() - RESIZE_HANDLE_WIDTH, RESIZE_HANDLE_HEIGHT, getRect().getWidth(), 0),
min_width,
min_height,
LLResizeHandle::RIGHT_BOTTOM);
addChild(mResizeHandle[0]);
mResizeHandle[1] = new LLResizeHandle( "resize",
- LLRect( mRect.getWidth() - RESIZE_HANDLE_WIDTH, mRect.getHeight(), mRect.getWidth(), mRect.getHeight() - RESIZE_HANDLE_HEIGHT),
+ LLRect( getRect().getWidth() - RESIZE_HANDLE_WIDTH, getRect().getHeight(), getRect().getWidth(), getRect().getHeight() - RESIZE_HANDLE_HEIGHT),
min_width,
min_height,
LLResizeHandle::RIGHT_TOP );
@@ -377,7 +362,7 @@ void LLFloater::init(const LLString& title,
addChild(mResizeHandle[2]);
mResizeHandle[3] = new LLResizeHandle( "resize",
- LLRect( 0, mRect.getHeight(), RESIZE_HANDLE_WIDTH, mRect.getHeight() - RESIZE_HANDLE_HEIGHT ),
+ LLRect( 0, getRect().getHeight(), RESIZE_HANDLE_WIDTH, getRect().getHeight() - RESIZE_HANDLE_HEIGHT ),
min_width,
min_height,
LLResizeHandle::LEFT_TOP );
@@ -413,7 +398,7 @@ void LLFloater::init(const LLString& title,
setVisible(FALSE);
// add self to handle->floater map
- sFloaterMap[mViewHandle] = this;
+ sFloaterMap[mHandle] = this;
if (!getParent())
{
@@ -450,7 +435,7 @@ LLFloater::~LLFloater()
// correct, non-minimized positions.
setMinimized( FALSE );
- sFloaterMap.erase(mViewHandle);
+ sFloaterMap.erase(mHandle);
delete mDragHandle;
for (S32 i = 0; i < 4; i++)
@@ -460,22 +445,6 @@ LLFloater::~LLFloater()
}
}
-// virtual
-EWidgetType LLFloater::getWidgetType() const
-{
- return WIDGET_TYPE_FLOATER;
-}
-
-// virtual
-LLString LLFloater::getWidgetTag() const
-{
- return LL_FLOATER_TAG;
-}
-
-void LLFloater::destroy()
-{
- die();
-}
void LLFloater::setVisible( BOOL visible )
{
@@ -501,7 +470,7 @@ void LLFloater::setVisible( BOOL visible )
for(handle_set_iter_t dependent_it = mDependents.begin();
dependent_it != mDependents.end(); )
{
- LLFloater* floaterp = LLFloater::getFloaterByHandle(*dependent_it);
+ LLFloater* floaterp = dependent_it->get();
if (floaterp)
{
@@ -513,10 +482,10 @@ void LLFloater::setVisible( BOOL visible )
void LLFloater::open() /* Flawfinder: ignore */
{
- if (mSoundFlags != SILENT
+ if (getSoundFlags() != SILENT
// don't play open sound for hosted (tabbed) windows
&& !getHost()
- && !sHostp
+ && !getFloaterHost()
&& (!getVisible() || isMinimized()))
{
make_ui_sound("UISndWindowOpen");
@@ -524,17 +493,16 @@ void LLFloater::open() /* Flawfinder: ignore */
//RN: for now, we don't allow rehosting from one multifloater to another
// just need to fix the bugs
- LLMultiFloater* hostp = getHost();
- if (sHostp != NULL && hostp == NULL)
+ if (getFloaterHost() != NULL && getHost() == NULL)
{
// needs a host
// only select tabs if window they are hosted in is visible
- sHostp->addFloater(this, sHostp->getVisible());
+ getFloaterHost()->addFloater(this, getFloaterHost()->getVisible());
}
- else if (hostp != NULL)
+ else if (getHost() != NULL)
{
// already hosted
- hostp->showFloater(this);
+ getHost()->showFloater(this);
}
else
{
@@ -558,7 +526,7 @@ void LLFloater::close(bool app_quitting)
((LLMultiFloater*)getHost())->removeFloater(this);
}
- if (mSoundFlags != SILENT
+ if (getSoundFlags() != SILENT
&& getVisible()
&& !getHost()
&& !app_quitting)
@@ -571,7 +539,7 @@ void LLFloater::close(bool app_quitting)
dependent_it != mDependents.end(); )
{
- LLFloater* floaterp = LLFloater::getFloaterByHandle(*dependent_it);
+ LLFloater* floaterp = dependent_it->get();
if (floaterp)
{
++dependent_it;
@@ -595,7 +563,7 @@ void LLFloater::close(bool app_quitting)
// give focus to dependee floater if it exists, and we had focus first
if (isDependent())
{
- LLFloater* dependee = LLFloater::getFloaterByHandle(mDependeeHandle);
+ LLFloater* dependee = mDependeeHandle.get();
if (dependee && !dependee->isDead())
{
dependee->setFocus(TRUE);
@@ -661,20 +629,15 @@ void LLFloater::center()
// hosted floaters can't move
return;
}
- const LLRect &window = gFloaterView->getRect();
-
- S32 left = window.mLeft + (window.getWidth() - mRect.getWidth()) / 2;
- S32 bottom = window.mBottom + (window.getHeight() - mRect.getHeight()) / 2;
-
- translate( left - mRect.mLeft, bottom - mRect.mBottom );
+ centerWithin(gFloaterView->getRect());
}
void LLFloater::applyRectControl()
{
- if (!mRectControl.empty())
+ if (!getRectControl().empty())
{
- const LLRect& rect = LLUI::sConfigGroup->getRect(mRectControl);
- translate( rect.mLeft - mRect.mLeft, rect.mBottom - mRect.mBottom);
+ const LLRect& rect = LLUI::sConfigGroup->getRect(getRectControl());
+ translate( rect.mLeft - getRect().mLeft, rect.mBottom - getRect().mBottom);
if (mResizable)
{
reshape(llmax(mMinWidth, rect.getWidth()), llmax(mMinHeight, rect.getHeight()));
@@ -715,7 +678,7 @@ LLString LLFloater::getShortTitle()
-BOOL LLFloater::canSnapTo(LLView* other_view)
+BOOL LLFloater::canSnapTo(const LLView* other_view)
{
if (NULL == other_view)
{
@@ -727,7 +690,7 @@ BOOL LLFloater::canSnapTo(LLView* other_view)
{
LLFloater* other_floaterp = (LLFloater*)other_view;
- if (other_floaterp->getSnapTarget() == mViewHandle && mDependents.find(other_floaterp->getHandle()) != mDependents.end())
+ if (other_floaterp->getSnapTarget() == getHandle() && mDependents.find(other_floaterp->getHandle()) != mDependents.end())
{
// this is a dependent that is already snapped to us, so don't snap back to it
return FALSE;
@@ -737,7 +700,7 @@ BOOL LLFloater::canSnapTo(LLView* other_view)
return LLPanel::canSnapTo(other_view);
}
-void LLFloater::snappedTo(LLView* snap_view)
+void LLFloater::snappedTo(const LLView* snap_view)
{
if (!snap_view || snap_view == getParent())
{
@@ -754,7 +717,7 @@ void LLFloater::snappedTo(LLView* snap_view)
void LLFloater::userSetShape(const LLRect& new_rect)
{
- LLRect old_rect = mRect;
+ const LLRect& old_rect = getRect();
LLView::userSetShape(new_rect);
// if not minimized, adjust all snapped dependents to new shape
@@ -764,22 +727,22 @@ void LLFloater::userSetShape(const LLRect& new_rect)
for(handle_set_iter_t dependent_it = mDependents.begin();
dependent_it != mDependents.end(); ++dependent_it)
{
- LLFloater* floaterp = LLFloater::getFloaterByHandle(*dependent_it);
+ LLFloater* floaterp = dependent_it->get();
// is a dependent snapped to us?
- if (floaterp && floaterp->getSnapTarget() == mViewHandle)
+ if (floaterp && floaterp->getSnapTarget() == getHandle())
{
S32 delta_x = 0;
S32 delta_y = 0;
// check to see if it snapped to right or top, and move if dependee floater is resizing
LLRect dependent_rect = floaterp->getRect();
- if (dependent_rect.mLeft - mRect.mLeft >= old_rect.getWidth() || // dependent on my right?
- dependent_rect.mRight == mRect.mLeft + old_rect.getWidth()) // dependent aligned with my right
+ if (dependent_rect.mLeft - getRect().mLeft >= old_rect.getWidth() || // dependent on my right?
+ dependent_rect.mRight == getRect().mLeft + old_rect.getWidth()) // dependent aligned with my right
{
// was snapped directly onto right side or aligned with it
delta_x += new_rect.getWidth() - old_rect.getWidth();
}
- if (dependent_rect.mBottom - mRect.mBottom >= old_rect.getHeight() ||
- dependent_rect.mTop == mRect.mBottom + old_rect.getHeight())
+ if (dependent_rect.mBottom - getRect().mBottom >= old_rect.getHeight() ||
+ dependent_rect.mTop == getRect().mBottom + old_rect.getHeight())
{
// was snapped directly onto top side or aligned with it
delta_y += new_rect.getHeight() - old_rect.getHeight();
@@ -812,7 +775,7 @@ void LLFloater::setMinimized(BOOL minimize)
if (minimize)
{
- mPreviousRect = mRect;
+ mExpandedRect = getRect();
reshape( MINIMIZED_WIDTH, LLFLOATER_HEADER_SIZE, TRUE);
@@ -843,7 +806,7 @@ void LLFloater::setMinimized(BOOL minimize)
LLView* viewp = *child_it;
if (!viewp->getVisible())
{
- mMinimizedHiddenChildren.push_back(viewp->mViewHandle);
+ mMinimizedHiddenChildren.push_back(viewp->getHandle());
}
viewp->setVisible(FALSE);
}
@@ -860,7 +823,7 @@ void LLFloater::setMinimized(BOOL minimize)
dependent_it != mDependents.end();
++dependent_it)
{
- LLFloater* floaterp = LLFloater::getFloaterByHandle(*dependent_it);
+ LLFloater* floaterp = dependent_it->get();
if (floaterp)
{
if (floaterp->isMinimizeable())
@@ -890,8 +853,8 @@ void LLFloater::setMinimized(BOOL minimize)
mPreviousMinimizedBottom = currentRect.mBottom;
}
- reshape( mPreviousRect.getWidth(), mPreviousRect.getHeight(), TRUE );
- setOrigin( mPreviousRect.mLeft, mPreviousRect.mBottom );
+ reshape( mExpandedRect.getWidth(), mExpandedRect.getHeight(), TRUE );
+ setOrigin( mExpandedRect.mLeft, mExpandedRect.mBottom );
if (mButtonsEnabled[BUTTON_RESTORE])
{
@@ -906,10 +869,10 @@ void LLFloater::setMinimized(BOOL minimize)
viewp->setVisible(TRUE);
}
- std::vector<LLViewHandle>::iterator itor = mMinimizedHiddenChildren.begin();
+ std::vector<LLHandle<LLView> >::iterator itor = mMinimizedHiddenChildren.begin();
for ( ; itor != mMinimizedHiddenChildren.end(); ++itor)
{
- LLView* viewp = LLView::getViewByHandle(*itor);
+ LLView* viewp = itor->get();
if(viewp)
{
viewp->setVisible(FALSE);
@@ -922,7 +885,7 @@ void LLFloater::setMinimized(BOOL minimize)
dependent_it != mDependents.end();
++dependent_it)
{
- LLFloater* floaterp = LLFloater::getFloaterByHandle(*dependent_it);
+ LLFloater* floaterp = dependent_it->get();
if (floaterp)
{
floaterp->setMinimized(FALSE);
@@ -979,7 +942,7 @@ void LLFloater::setIsChrome(BOOL is_chrome)
// remove focus if we're changing to chrome
setFocus(FALSE);
// can't Ctrl-Tab to "chrome" floaters
- mIsFocusRoot = FALSE;
+ setFocusRoot(FALSE);
}
// no titles displayed on "chrome" floaters
@@ -1011,7 +974,7 @@ void LLFloater::cleanupHandles()
for(handle_set_iter_t dependent_it = mDependents.begin();
dependent_it != mDependents.end(); )
{
- LLFloater* floaterp = LLFloater::getFloaterByHandle(*dependent_it);
+ LLFloater* floaterp = dependent_it->get();
if (!floaterp)
{
mDependents.erase(dependent_it++);
@@ -1085,7 +1048,7 @@ void LLFloater::addDependentFloater(LLFloater* floaterp, BOOL reposition)
if (reposition)
{
floaterp->setRect(gFloaterView->findNeighboringPosition(this, floaterp));
- floaterp->setSnapTarget(mViewHandle);
+ floaterp->setSnapTarget(getHandle());
}
gFloaterView->adjustToFitScreen(floaterp, FALSE);
if (floaterp->isFrontmost())
@@ -1095,9 +1058,9 @@ void LLFloater::addDependentFloater(LLFloater* floaterp, BOOL reposition)
}
}
-void LLFloater::addDependentFloater(LLViewHandle dependent, BOOL reposition)
+void LLFloater::addDependentFloater(LLHandle<LLFloater> dependent, BOOL reposition)
{
- LLFloater* dependent_floaterp = LLFloater::getFloaterByHandle(dependent);
+ LLFloater* dependent_floaterp = dependent.get();
if(dependent_floaterp)
{
addDependentFloater(dependent_floaterp, reposition);
@@ -1107,7 +1070,7 @@ void LLFloater::addDependentFloater(LLViewHandle dependent, BOOL reposition)
void LLFloater::removeDependentFloater(LLFloater* floaterp)
{
mDependents.erase(floaterp->getHandle());
- floaterp->mDependeeHandle = LLViewHandle::sDeadHandle;
+ floaterp->mDependeeHandle = LLHandle<LLFloater>();
}
// virtual
@@ -1215,32 +1178,13 @@ void LLFloater::setFrontmost(BOOL take_focus)
}
}
-// static
-LLFloater* LLFloater::getFloaterByHandle(LLViewHandle handle)
-{
- LLFloater* floater = NULL;
- if (sFloaterMap.count(handle))
- {
- floater = sFloaterMap[handle];
- }
- if (floater && !floater->isDead())
- {
- return floater;
- }
- else
- {
- return NULL;
- }
-}
-
//static
void LLFloater::setEditModeEnabled(BOOL enable)
{
if (enable != sEditModeEnabled)
{
S32 count = 0;
- std::map<LLViewHandle, LLFloater*>::iterator iter;
- for(iter = sFloaterMap.begin(); iter != sFloaterMap.end(); ++iter)
+ for(handle_map_iter_t iter = sFloaterMap.begin(); iter != sFloaterMap.end(); ++iter)
{
LLFloater* floater = iter->second;
if (!floater->isDead())
@@ -1255,41 +1199,6 @@ void LLFloater::setEditModeEnabled(BOOL enable)
sEditModeEnabled = enable;
}
-//static
-BOOL LLFloater::getEditModeEnabled()
-{
- return sEditModeEnabled;
-}
-
-//static
-void LLFloater::show(LLFloater* floaterp)
-{
- if (floaterp)
- {
- gFocusMgr.triggerFocusFlash();
- floaterp->open();
- if (floaterp->getHost())
- {
- floaterp->getHost()->open();
- }
- }
-}
-
-//static
-void LLFloater::hide(LLFloater* floaterp)
-{
- if (floaterp) floaterp->close();
-}
-
-//static
-BOOL LLFloater::visible(LLFloater* floaterp)
-{
- if (floaterp)
- {
- return !floaterp->isMinimized() && floaterp->isInVisibleChain();
- }
- return FALSE;
-}
// static
void LLFloater::onClickMinimize(void *userdata)
@@ -1316,9 +1225,9 @@ void LLFloater::onClickTearOff(void *userdata)
self->open(); /* Flawfinder: ignore */
// only force position for floaters that don't have that data saved
- if (self->mRectControl.empty())
+ if (self->getRectControl().empty())
{
- new_rect.setLeftTopAndSize(host_floater->getRect().mLeft + 5, host_floater->getRect().mTop - LLFLOATER_HEADER_SIZE - 5, self->mRect.getWidth(), self->mRect.getHeight());
+ new_rect.setLeftTopAndSize(host_floater->getRect().mLeft + 5, host_floater->getRect().mTop - LLFLOATER_HEADER_SIZE - 5, self->getRect().getWidth(), self->getRect().getHeight());
self->setRect(new_rect);
}
gFloaterView->adjustToFitScreen(self, FALSE);
@@ -1327,7 +1236,7 @@ void LLFloater::onClickTearOff(void *userdata)
}
else //Attach to parent.
{
- LLMultiFloater* new_host = (LLMultiFloater*)LLFloater::getFloaterByHandle(self->mLastHostHandle);
+ LLMultiFloater* new_host = (LLMultiFloater*)self->mLastHostHandle.get();
if (new_host)
{
new_host->showFloater(self);
@@ -1351,7 +1260,7 @@ void LLFloater::closeFocusedFloater()
{
LLFloater* focused_floater = NULL;
- std::map<LLViewHandle, LLFloater*>::iterator iter;
+ handle_map_iter_t iter;
for(iter = sFloaterMap.begin(); iter != sFloaterMap.end(); ++iter)
{
focused_floater = iter->second;
@@ -1396,16 +1305,16 @@ void LLFloater::draw()
if( getVisible() )
{
// draw background
- if( mBgVisible )
+ if( isBackgroundVisible() )
{
S32 left = LLPANEL_BORDER_WIDTH;
- S32 top = mRect.getHeight() - LLPANEL_BORDER_WIDTH;
- S32 right = mRect.getWidth() - LLPANEL_BORDER_WIDTH;
+ S32 top = getRect().getHeight() - LLPANEL_BORDER_WIDTH;
+ S32 right = getRect().getWidth() - LLPANEL_BORDER_WIDTH;
S32 bottom = LLPANEL_BORDER_WIDTH;
LLColor4 shadow_color = LLUI::sColorsGroup->getColor("ColorDropShadow");
F32 shadow_offset = (F32)LLUI::sConfigGroup->getS32("DropShadowFloater");
- if (!mBgOpaque)
+ if (!isBackgroundOpaque())
{
shadow_offset *= 0.2f;
shadow_color.mV[VALPHA] *= 0.5f;
@@ -1415,13 +1324,13 @@ void LLFloater::draw()
llround(shadow_offset));
// No transparent windows in simple UI
- if (mBgOpaque)
+ if (isBackgroundOpaque())
{
- gl_rect_2d( left, top, right, bottom, mBgColorOpaque );
+ gl_rect_2d( left, top, right, bottom, getBackgroundColor() );
}
else
{
- gl_rect_2d( left, top, right, bottom, mBgColorAlpha );
+ gl_rect_2d( left, top, right, bottom, getTransparentColor() );
}
if(gFocusMgr.childHasKeyboardFocus(this) && !getIsChrome() && !getTitle().empty())
@@ -1434,19 +1343,19 @@ void LLFloater::draw()
}
}
- if( mDefaultBtn)
+ if( getDefaultButton() )
{
- if (gFocusMgr.childHasKeyboardFocus( this ) && mDefaultBtn->getEnabled())
+ if (gFocusMgr.childHasKeyboardFocus( this ) && getDefaultButton()->getEnabled())
{
LLUICtrl* focus_ctrl = gFocusMgr.getKeyboardFocus();
// is this button a direct descendent and not a nested widget (e.g. checkbox)?
BOOL focus_is_child_button = focus_ctrl->getWidgetType() == WIDGET_TYPE_BUTTON && focus_ctrl->getParent() == this;
// only enable default button when current focus is not a button
- mDefaultBtn->setBorderEnabled(!focus_is_child_button);
+ getDefaultButton()->setBorderEnabled(!focus_is_child_button);
}
else
{
- mDefaultBtn->setBorderEnabled(FALSE);
+ getDefaultButton()->setBorderEnabled(FALSE);
}
}
@@ -1461,13 +1370,13 @@ void LLFloater::draw()
LLView::draw();
- if( mBgVisible )
+ if( isBackgroundVisible() )
{
// add in a border to improve spacialized visual aclarity ;)
// use lines instead of gl_rect_2d so we can round the edges as per james' recommendation
LLUI::setLineWidth(1.5f);
LLColor4 outlineColor = gFocusMgr.childHasKeyboardFocus(this) ? LLUI::sColorsGroup->getColor("FloaterFocusBorderColor") : LLUI::sColorsGroup->getColor("FloaterUnfocusBorderColor");
- gl_rect_2d_offset_local(0, mRect.getHeight() + 1, mRect.getWidth() + 1, 0, outlineColor, -LLPANEL_BORDER_WIDTH, FALSE);
+ gl_rect_2d_offset_local(0, getRect().getHeight() + 1, getRect().getWidth() + 1, 0, outlineColor, -LLPANEL_BORDER_WIDTH, FALSE);
LLUI::setLineWidth(1.f);
}
@@ -1481,7 +1390,7 @@ void LLFloater::draw()
// when last host goes away
if (mCanTearOff && !getHost())
{
- LLFloater* old_host = gFloaterView->getFloaterByHandle(mLastHostHandle);
+ LLFloater* old_host = mLastHostHandle.get();
if (!old_host)
{
setCanTearOff(FALSE);
@@ -1490,33 +1399,6 @@ void LLFloater::draw()
}
}
-// virtual
-void LLFloater::onOpen()
-{
-}
-
-// virtual
-void LLFloater::onClose(bool app_quitting)
-{
- destroy();
-}
-
-// virtual
-BOOL LLFloater::canClose()
-{
- return TRUE;
-}
-
-// virtual
-BOOL LLFloater::canSaveAs()
-{
- return FALSE;
-}
-
-// virtual
-void LLFloater::saveAs()
-{
-}
void LLFloater::setCanMinimize(BOOL can_minimize)
{
@@ -1585,28 +1467,28 @@ void LLFloater::setCanResize(BOOL can_resize)
mResizeBar[0] = new LLResizeBar(
"resizebar_left",
this,
- LLRect( 0, mRect.getHeight(), RESIZE_BAR_THICKNESS, 0),
+ LLRect( 0, getRect().getHeight(), RESIZE_BAR_THICKNESS, 0),
mMinWidth, S32_MAX, LLResizeBar::LEFT );
addChild( mResizeBar[0] );
mResizeBar[1] = new LLResizeBar(
"resizebar_top",
this,
- LLRect( 0, mRect.getHeight(), mRect.getWidth(), mRect.getHeight() - RESIZE_BAR_THICKNESS),
+ LLRect( 0, getRect().getHeight(), getRect().getWidth(), getRect().getHeight() - RESIZE_BAR_THICKNESS),
mMinHeight, S32_MAX, LLResizeBar::TOP );
addChild( mResizeBar[1] );
mResizeBar[2] = new LLResizeBar(
"resizebar_right",
this,
- LLRect( mRect.getWidth() - RESIZE_BAR_THICKNESS, mRect.getHeight(), mRect.getWidth(), 0),
+ LLRect( getRect().getWidth() - RESIZE_BAR_THICKNESS, getRect().getHeight(), getRect().getWidth(), 0),
mMinWidth, S32_MAX, LLResizeBar::RIGHT );
addChild( mResizeBar[2] );
mResizeBar[3] = new LLResizeBar(
"resizebar_bottom",
this,
- LLRect( 0, RESIZE_BAR_THICKNESS, mRect.getWidth(), 0),
+ LLRect( 0, RESIZE_BAR_THICKNESS, getRect().getWidth(), 0),
mMinHeight, S32_MAX, LLResizeBar::BOTTOM );
addChild( mResizeBar[3] );
@@ -1614,14 +1496,14 @@ void LLFloater::setCanResize(BOOL can_resize)
// Resize handles (corners)
mResizeHandle[0] = new LLResizeHandle(
"Resize Handle",
- LLRect( mRect.getWidth() - RESIZE_HANDLE_WIDTH, RESIZE_HANDLE_HEIGHT, mRect.getWidth(), 0),
+ LLRect( getRect().getWidth() - RESIZE_HANDLE_WIDTH, RESIZE_HANDLE_HEIGHT, getRect().getWidth(), 0),
mMinWidth,
mMinHeight,
LLResizeHandle::RIGHT_BOTTOM);
addChild(mResizeHandle[0]);
mResizeHandle[1] = new LLResizeHandle( "resize",
- LLRect( mRect.getWidth() - RESIZE_HANDLE_WIDTH, mRect.getHeight(), mRect.getWidth(), mRect.getHeight() - RESIZE_HANDLE_HEIGHT),
+ LLRect( getRect().getWidth() - RESIZE_HANDLE_WIDTH, getRect().getHeight(), getRect().getWidth(), getRect().getHeight() - RESIZE_HANDLE_HEIGHT),
mMinWidth,
mMinHeight,
LLResizeHandle::RIGHT_TOP );
@@ -1635,7 +1517,7 @@ void LLFloater::setCanResize(BOOL can_resize)
addChild(mResizeHandle[2]);
mResizeHandle[3] = new LLResizeHandle( "resize",
- LLRect( 0, mRect.getHeight(), RESIZE_HANDLE_WIDTH, mRect.getHeight() - RESIZE_HANDLE_HEIGHT ),
+ LLRect( 0, getRect().getHeight(), RESIZE_HANDLE_WIDTH, getRect().getHeight() - RESIZE_HANDLE_HEIGHT ),
mMinWidth,
mMinHeight,
LLResizeHandle::LEFT_TOP );
@@ -1672,15 +1554,15 @@ void LLFloater::updateButtons()
{
btn_rect.setLeftTopAndSize(
LLPANEL_BORDER_WIDTH,
- mRect.getHeight() - CLOSE_BOX_FROM_TOP - (LLFLOATER_CLOSE_BOX_SIZE + 1) * button_count,
+ getRect().getHeight() - CLOSE_BOX_FROM_TOP - (LLFLOATER_CLOSE_BOX_SIZE + 1) * button_count,
llround((F32)LLFLOATER_CLOSE_BOX_SIZE * mButtonScale),
llround((F32)LLFLOATER_CLOSE_BOX_SIZE * mButtonScale));
}
else
{
btn_rect.setLeftTopAndSize(
- mRect.getWidth() - LLPANEL_BORDER_WIDTH - (LLFLOATER_CLOSE_BOX_SIZE + 1) * button_count,
- mRect.getHeight() - CLOSE_BOX_FROM_TOP,
+ getRect().getWidth() - LLPANEL_BORDER_WIDTH - (LLFLOATER_CLOSE_BOX_SIZE + 1) * button_count,
+ getRect().getHeight() - CLOSE_BOX_FROM_TOP,
llround((F32)LLFLOATER_CLOSE_BOX_SIZE * mButtonScale),
llround((F32)LLFLOATER_CLOSE_BOX_SIZE * mButtonScale));
}
@@ -1698,7 +1580,7 @@ void LLFloater::updateButtons()
}
}
- mDragHandle->setMaxTitleWidth(mRect.getWidth() - (button_count * (LLFLOATER_CLOSE_BOX_SIZE + 1)));
+ mDragHandle->setMaxTitleWidth(getRect().getWidth() - (button_count * (LLFLOATER_CLOSE_BOX_SIZE + 1)));
}
void LLFloater::buildButtons()
@@ -1710,15 +1592,15 @@ void LLFloater::buildButtons()
{
btn_rect.setLeftTopAndSize(
LLPANEL_BORDER_WIDTH,
- mRect.getHeight() - CLOSE_BOX_FROM_TOP - (LLFLOATER_CLOSE_BOX_SIZE + 1) * (i + 1),
+ getRect().getHeight() - CLOSE_BOX_FROM_TOP - (LLFLOATER_CLOSE_BOX_SIZE + 1) * (i + 1),
llround(LLFLOATER_CLOSE_BOX_SIZE * mButtonScale),
llround(LLFLOATER_CLOSE_BOX_SIZE * mButtonScale));
}
else
{
btn_rect.setLeftTopAndSize(
- mRect.getWidth() - LLPANEL_BORDER_WIDTH - (LLFLOATER_CLOSE_BOX_SIZE + 1) * (i + 1),
- mRect.getHeight() - CLOSE_BOX_FROM_TOP,
+ getRect().getWidth() - LLPANEL_BORDER_WIDTH - (LLFLOATER_CLOSE_BOX_SIZE + 1) * (i + 1),
+ getRect().getHeight() - CLOSE_BOX_FROM_TOP,
llround(LLFLOATER_CLOSE_BOX_SIZE * mButtonScale),
llround(LLFLOATER_CLOSE_BOX_SIZE * mButtonScale));
}
@@ -1761,16 +1643,6 @@ LLFloaterView::LLFloaterView( const LLString& name, const LLRect& rect )
resetStartingFloaterPosition();
}
-EWidgetType LLFloaterView::getWidgetType() const
-{
- return WIDGET_TYPE_FLOATER_VIEW;
-}
-
-LLString LLFloaterView::getWidgetTag() const
-{
- return LL_FLOATER_VIEW_TAG;
-}
-
// By default, adjust vertical.
void LLFloaterView::reshape(S32 width, S32 height, BOOL called_from_parent)
{
@@ -1780,8 +1652,8 @@ void LLFloaterView::reshape(S32 width, S32 height, BOOL called_from_parent)
// When reshaping this view, make the floaters follow their closest edge.
void LLFloaterView::reshape(S32 width, S32 height, BOOL called_from_parent, BOOL adjust_vertical)
{
- S32 old_width = mRect.getWidth();
- S32 old_height = mRect.getHeight();
+ S32 old_width = getRect().getWidth();
+ S32 old_height = getRect().getHeight();
for ( child_list_const_iter_t child_it = getChildList()->begin(); child_it != getChildList()->end(); ++child_it)
{
@@ -1835,7 +1707,7 @@ void LLFloaterView::reshape(S32 width, S32 height, BOOL called_from_parent, BOOL
for(LLFloater::handle_set_iter_t dependent_it = floaterp->mDependents.begin();
dependent_it != floaterp->mDependents.end(); ++dependent_it)
{
- LLFloater* dependent_floaterp = getFloaterByHandle(*dependent_it);
+ LLFloater* dependent_floaterp = dependent_it->get();
if (dependent_floaterp)
{
dependent_floaterp->setFollows(follow_flags);
@@ -1937,7 +1809,7 @@ LLRect LLFloaterView::findNeighboringPosition( LLFloater* reference_floater, LLF
for(LLFloater::handle_set_iter_t dependent_it = reference_floater->mDependents.begin();
dependent_it != reference_floater->mDependents.end(); ++dependent_it)
{
- LLFloater* sibling = LLFloater::getFloaterByHandle(*dependent_it);
+ LLFloater* sibling = dependent_it->get();
// check for dependents within 10 pixels of base floater
if (sibling &&
sibling != neighbor &&
@@ -1949,8 +1821,8 @@ LLRect LLFloaterView::findNeighboringPosition( LLFloater* reference_floater, LLF
}
S32 left_margin = llmax(0, base_rect.mLeft);
- S32 right_margin = llmax(0, mRect.getWidth() - base_rect.mRight);
- S32 top_margin = llmax(0, mRect.getHeight() - base_rect.mTop);
+ S32 right_margin = llmax(0, getRect().getWidth() - base_rect.mRight);
+ S32 top_margin = llmax(0, getRect().getHeight() - base_rect.mTop);
S32 bottom_margin = llmax(0, base_rect.mBottom);
// find position for floater in following order
@@ -1959,22 +1831,22 @@ LLRect LLFloaterView::findNeighboringPosition( LLFloater* reference_floater, LLF
{
if (right_margin > width)
{
- new_rect.translate(base_rect.mRight - neighbor->mRect.mLeft, base_rect.mTop - neighbor->mRect.mTop);
+ new_rect.translate(base_rect.mRight - neighbor->getRect().mLeft, base_rect.mTop - neighbor->getRect().mTop);
return new_rect;
}
else if (left_margin > width)
{
- new_rect.translate(base_rect.mLeft - neighbor->mRect.mRight, base_rect.mTop - neighbor->mRect.mTop);
+ new_rect.translate(base_rect.mLeft - neighbor->getRect().mRight, base_rect.mTop - neighbor->getRect().mTop);
return new_rect;
}
else if (bottom_margin > height)
{
- new_rect.translate(base_rect.mLeft - neighbor->mRect.mLeft, base_rect.mBottom - neighbor->mRect.mTop);
+ new_rect.translate(base_rect.mLeft - neighbor->getRect().mLeft, base_rect.mBottom - neighbor->getRect().mTop);
return new_rect;
}
else if (top_margin > height)
{
- new_rect.translate(base_rect.mLeft - neighbor->mRect.mLeft, base_rect.mTop - neighbor->mRect.mBottom);
+ new_rect.translate(base_rect.mLeft - neighbor->getRect().mLeft, base_rect.mTop - neighbor->getRect().mBottom);
return new_rect;
}
@@ -1989,15 +1861,6 @@ LLRect LLFloaterView::findNeighboringPosition( LLFloater* reference_floater, LLF
return new_rect;
}
-void LLFloaterView::setCycleMode(BOOL mode)
-{
- mFocusCycleMode = mode;
-}
-
-BOOL LLFloaterView::getCycleMode()
-{
- return mFocusCycleMode;
-}
void LLFloaterView::bringToFront(LLFloater* child, BOOL give_focus)
{
@@ -2027,7 +1890,7 @@ void LLFloaterView::bringToFront(LLFloater* child, BOOL give_focus)
for(LLFloater::handle_set_iter_t dependent_it = floater->mDependents.begin();
dependent_it != floater->mDependents.end(); )
{
- LLFloater* sibling = LLFloater::getFloaterByHandle(*dependent_it);
+ LLFloater* sibling = dependent_it->get();
if (sibling)
{
floaters_to_move.push_back(sibling);
@@ -2058,7 +1921,7 @@ void LLFloaterView::bringToFront(LLFloater* child, BOOL give_focus)
for(LLFloater::handle_set_iter_t dependent_it = child->mDependents.begin();
dependent_it != child->mDependents.end(); )
{
- LLFloater* dependent = getFloaterByHandle(*dependent_it);
+ LLFloater* dependent = dependent_it->get();
if (dependent)
{
sendChildToFront(dependent);
@@ -2099,7 +1962,7 @@ void LLFloaterView::highlightFocusedFloater()
dependent_it != floater->mDependents.end();
++dependent_it)
{
- LLFloater* dependent_floaterp = getFloaterByHandle(*dependent_it);
+ LLFloater* dependent_floaterp = dependent_it->get();
if (dependent_floaterp && gFocusMgr.childHasKeyboardFocus(dependent_floaterp))
{
floater_or_dependent_has_focus = TRUE;
@@ -2112,7 +1975,7 @@ void LLFloaterView::highlightFocusedFloater()
for(LLFloater::handle_set_iter_t dependent_it = floater->mDependents.begin();
dependent_it != floater->mDependents.end(); )
{
- LLFloater* dependent_floaterp = getFloaterByHandle(*dependent_it);
+ LLFloater* dependent_floaterp = dependent_it->get();
if (dependent_floaterp)
{
dependent_floaterp->setForeground(floater_or_dependent_has_focus);
@@ -2341,9 +2204,9 @@ void LLFloaterView::draw()
}
}
-const LLRect LLFloaterView::getSnapRect() const
+LLRect LLFloaterView::getSnapRect() const
{
- LLRect snap_rect = mRect;
+ LLRect snap_rect = getRect();
snap_rect.mBottom += mSnapOffsetBottom;
return snap_rect;
@@ -2410,23 +2273,6 @@ void LLFloaterView::syncFloaterTabOrder()
}
}
-LLFloater* LLFloaterView::getFloaterByHandle(LLViewHandle handle)
-{
- if (handle == LLViewHandle::sDeadHandle)
- {
- return NULL;
- }
- for ( child_list_const_iter_t child_it = getChildList()->begin(); child_it != getChildList()->end(); ++child_it)
- {
- LLView* viewp = *child_it;
- if (((LLFloater*)viewp)->getHandle() == handle)
- {
- return (LLFloater*)viewp;
- }
- }
- return NULL;
-}
-
LLFloater* LLFloaterView::getParentFloater(LLView* viewp)
{
LLView* parentp = viewp->getParent();
@@ -2492,13 +2338,13 @@ void LLFloaterView::popVisibleAll(const skip_list_t& skip_list)
LLMultiFloater::LLMultiFloater() :
mTabContainer(NULL),
- mTabPos(LLTabContainerCommon::TOP),
+ mTabPos(LLTabContainer::TOP),
mAutoResize(TRUE)
{
}
-LLMultiFloater::LLMultiFloater(LLTabContainerCommon::TabPosition tab_pos) :
+LLMultiFloater::LLMultiFloater(LLTabContainer::TabPosition tab_pos) :
mTabContainer(NULL),
mTabPos(tab_pos),
mAutoResize(TRUE)
@@ -2509,7 +2355,7 @@ LLMultiFloater::LLMultiFloater(LLTabContainerCommon::TabPosition tab_pos) :
LLMultiFloater::LLMultiFloater(const LLString &name) :
LLFloater(name),
mTabContainer(NULL),
- mTabPos(LLTabContainerCommon::TOP),
+ mTabPos(LLTabContainer::TOP),
mAutoResize(FALSE)
{
}
@@ -2521,16 +2367,16 @@ LLMultiFloater::LLMultiFloater(
BOOL auto_resize) :
LLFloater(name, rect, name),
mTabContainer(NULL),
- mTabPos(LLTabContainerCommon::TOP),
+ mTabPos(LLTabContainer::TOP),
mAutoResize(auto_resize)
{
mTabContainer = new LLTabContainer("Preview Tabs",
- LLRect(LLPANEL_BORDER_WIDTH, mRect.getHeight() - LLFLOATER_HEADER_SIZE, mRect.getWidth() - LLPANEL_BORDER_WIDTH, 0),
+ LLRect(LLPANEL_BORDER_WIDTH, getRect().getHeight() - LLFLOATER_HEADER_SIZE, getRect().getWidth() - LLPANEL_BORDER_WIDTH, 0),
mTabPos,
- NULL,
- NULL);
+ FALSE,
+ FALSE);
mTabContainer->setFollowsAll();
- if (mResizable)
+ if (isResizable())
{
mTabContainer->setRightTabBtnOffset(RESIZE_HANDLE_WIDTH);
}
@@ -2549,12 +2395,12 @@ LLMultiFloater::LLMultiFloater(
mAutoResize(auto_resize)
{
mTabContainer = new LLTabContainer("Preview Tabs",
- LLRect(LLPANEL_BORDER_WIDTH, mRect.getHeight() - LLFLOATER_HEADER_SIZE, mRect.getWidth() - LLPANEL_BORDER_WIDTH, 0),
- mTabPos,
- NULL,
- NULL);
+ LLRect(LLPANEL_BORDER_WIDTH, getRect().getHeight() - LLFLOATER_HEADER_SIZE, getRect().getWidth() - LLPANEL_BORDER_WIDTH, 0),
+ mTabPos,
+ FALSE,
+ FALSE);
mTabContainer->setFollowsAll();
- if (mResizable && mTabPos == LLTabContainerCommon::BOTTOM)
+ if (isResizable() && mTabPos == LLTabContainer::BOTTOM)
{
mTabContainer->setRightTabBtnOffset(RESIZE_HANDLE_WIDTH);
}
@@ -2563,21 +2409,6 @@ LLMultiFloater::LLMultiFloater(
}
-LLMultiFloater::~LLMultiFloater()
-{
-}
-
-// virtual
-EWidgetType LLMultiFloater::getWidgetType() const
-{
- return WIDGET_TYPE_MULTI_FLOATER;
-}
-
-// virtual
-LLString LLMultiFloater::getWidgetTag() const
-{
- return LL_MULTI_FLOATER_TAG;
-}
void LLMultiFloater::open() /* Flawfinder: ignore */
{
@@ -2597,7 +2428,7 @@ void LLMultiFloater::onClose(bool app_quitting)
{
if(closeAllFloaters() == TRUE)
{
- LLFloater::onClose(app_quitting ? true : false);
+ LLFloater::onClose(app_quitting);
}//else not all tabs could be closed...
}
@@ -2648,16 +2479,18 @@ BOOL LLMultiFloater::closeAllFloaters()
void LLMultiFloater::growToFit(S32 content_width, S32 content_height)
{
- S32 new_width = llmax(mRect.getWidth(), content_width + LLPANEL_BORDER_WIDTH * 2);
- S32 new_height = llmax(mRect.getHeight(), content_height + LLFLOATER_HEADER_SIZE + TABCNTR_HEADER_HEIGHT);
+ S32 new_width = llmax(getRect().getWidth(), content_width + LLPANEL_BORDER_WIDTH * 2);
+ S32 new_height = llmax(getRect().getHeight(), content_height + LLFLOATER_HEADER_SIZE + TABCNTR_HEADER_HEIGHT);
- if (isMinimized())
- {
- mPreviousRect.setLeftTopAndSize(mPreviousRect.mLeft, mPreviousRect.mTop, new_width, new_height);
- }
+ if (isMinimized())
+ {
+ LLRect newrect;
+ newrect.setLeftTopAndSize(getExpandedRect().mLeft, getExpandedRect().mTop, new_width, new_height);
+ setExpandedRect(newrect);
+ }
else
{
- S32 old_height = mRect.getHeight();
+ S32 old_height = getRect().getHeight();
reshape(new_width, new_height);
// keep top left corner in same position
translate(0, old_height - new_height);
@@ -2737,7 +2570,7 @@ void LLMultiFloater::addFloater(LLFloater* floaterp, BOOL select_added_floater,
}
floaterp->setHost(this);
- if (mMinimized)
+ if (isMinimized())
{
floaterp->setVisible(FALSE);
}
@@ -2920,7 +2753,7 @@ void LLMultiFloater::onTabSelected(void* userdata, bool from_click)
void LLMultiFloater::setCanResize(BOOL can_resize)
{
LLFloater::setCanResize(can_resize);
- if (mResizable && mTabContainer->getTabPosition() == LLTabContainer::BOTTOM)
+ if (isResizable() && mTabContainer->getTabPosition() == LLTabContainer::BOTTOM)
{
mTabContainer->setRightTabBtnOffset(RESIZE_HANDLE_WIDTH);
}
@@ -2963,20 +2796,23 @@ void LLMultiFloater::updateResizeLimits()
}
setResizeLimits(new_min_width, new_min_height);
- S32 cur_height = mRect.getHeight();
- S32 new_width = llmax(mRect.getWidth(), new_min_width);
- S32 new_height = llmax(mRect.getHeight(), new_min_height);
+ S32 cur_height = getRect().getHeight();
+ S32 new_width = llmax(getRect().getWidth(), new_min_width);
+ S32 new_height = llmax(getRect().getHeight(), new_min_height);
if (isMinimized())
{
- mPreviousRect.setLeftTopAndSize(mPreviousRect.mLeft, mPreviousRect.mTop, llmax(mPreviousRect.getWidth(), new_width), llmax(mPreviousRect.getHeight(), new_height));
+ const LLRect& expanded = getExpandedRect();
+ LLRect newrect;
+ newrect.setLeftTopAndSize(expanded.mLeft, expanded.mTop, llmax(expanded.getWidth(), new_width), llmax(expanded.getHeight(), new_height));
+ setExpandedRect(newrect);
}
else
{
reshape(new_width, new_height);
// make sure upper left corner doesn't move
- translate(0, cur_height - mRect.getHeight());
+ translate(0, cur_height - getRect().getHeight());
// make sure this window is visible on screen when it has been modified
// (tab added, etc)