void LLDockControl::repositionDockable() { if (!mDockWidget) return; LLRect dockRect = mDockWidget->calcScreenRect(); LLRect rootRect; LLRect floater_rect = mDockableFloater->calcScreenRect(); mGetAllowedRectCallback(rootRect); // recalculate dockable position if: if (mPrevDockRect != dockRect //dock position changed || mDockWidgetVisible != isDockVisible() //dock visibility changed || mRootRect != rootRect //root view rect changed || mFloaterRect != floater_rect //floater rect changed || mRecalculateDockablePosition //recalculation is forced ) { // undock dockable and off() if dock not visible if (!isDockVisible()) { mDockableFloater->setDocked(false); // force off() since dockable may not have dockControll at this time off(); LLDockableFloater* dockable_floater = dynamic_cast<LLDockableFloater*> (mDockableFloater); if(dockable_floater != NULL) { dockable_floater->onDockHidden(); } } else { if(mEnabled) { moveDockable(); } LLDockableFloater* dockable_floater = dynamic_cast<LLDockableFloater*> (mDockableFloater); if(dockable_floater != NULL) { dockable_floater->onDockShown(); } } mPrevDockRect = dockRect; mRootRect = rootRect; mFloaterRect = floater_rect; mRecalculateDockablePosition = false; mDockWidgetVisible = isDockVisible(); } }
void LLDockControl::on() { if (isDockVisible()) { mEnabled = true; mRecalculateDockablePosition = true; } }
void LLDockControl::setDock(LLView* dockWidget) { mDockWidget = dockWidget; if (mDockWidget != NULL) { repositionDockable(); mDockWidgetVisible = isDockVisible(); } else { mDockWidgetVisible = false; } }
void LLDockControl::setDock(LLView* dockWidget) { if (dockWidget != NULL) { mDockWidgetHandle = dockWidget->getHandle(); repositionDockable(); mDockWidgetVisible = isDockVisible(); } else { mDockWidgetHandle = LLHandle<LLView>(); mDockWidgetVisible = false; } }
LLDockControl::LLDockControl(LLView* dockWidget, LLFloater* dockableFloater, const LLUIImagePtr& dockTongue, DocAt dockAt, get_allowed_rect_callback_t get_allowed_rect_callback) : mDockableFloater(dockableFloater), mDockTongue(dockTongue), mDockTongueX(0), mDockTongueY(0) { mDockAt = dockAt; if (dockWidget != NULL) { mDockWidgetHandle = dockWidget->getHandle(); } if (dockableFloater->isDocked()) { on(); } else { off(); } if (!(get_allowed_rect_callback)) { mGetAllowedRectCallback = boost::bind(&LLDockControl::getAllowedRect, this, _1); } else { mGetAllowedRectCallback = get_allowed_rect_callback; } if (dockWidget != NULL) { repositionDockable(); } if (getDock() != NULL) { mDockWidgetVisible = isDockVisible(); } else { mDockWidgetVisible = false; } }