void LLAccordionCtrlTab::draw() { if(mFitPanel) LLUICtrl::draw(); else { LLRect root_rect = getRootView()->getRect(); drawChild(root_rect,mHeader); drawChild(root_rect,mScrollbar ); { LLRect child_rect; S32 width = getRect().getWidth(); S32 height = getRect().getHeight(); child_rect.setLeftTopAndSize( getPaddingLeft(), height - getHeaderHeight() - getPaddingTop(), width - getPaddingLeft() - getPaddingRight(), height - getHeaderHeight() - getPaddingTop() - getPaddingBottom() ); LLLocalClipRect clip(child_rect); drawChild(root_rect,mContainerPanel); } } }
void LLAccordionCtrlTab::adjustContainerPanel () { S32 width = getRect().getWidth(); S32 height = getRect().getHeight(); LLRect child_rect; child_rect.setLeftTopAndSize( getPaddingLeft(), height - getHeaderHeight() - getPaddingTop(), width - getPaddingLeft() - getPaddingRight(), height - getHeaderHeight() - getPaddingTop() - getPaddingBottom() ); adjustContainerPanel(child_rect); }
void LLAccordionCtrlTab::onScrollPosChangeCallback(S32, LLScrollbar*) { LLRect child_rect; S32 width = getRect().getWidth(); S32 height = getRect().getHeight(); child_rect.setLeftTopAndSize( getPaddingLeft(), height - getHeaderHeight() - getPaddingTop(), width - getPaddingLeft() - getPaddingRight(), height - getHeaderHeight() - getPaddingTop() - getPaddingBottom() ); updateLayout(child_rect); }
void MidiGrid::resized() { header->setBounds (0, 0, getWidth(), getHeaderHeight()); indicator->setBounds (indicator->getX(), 0, indicator->getWidth(), getHeight()); repaint (); }
void LLAccordionCtrlTab::reshape(S32 width, S32 height, BOOL called_from_parent /* = TRUE */) { LLRect headerRect; headerRect.setLeftTopAndSize( 0,height,width,HEADER_HEIGHT); mHeader->setRect(headerRect); mHeader->reshape(headerRect.getWidth(), headerRect.getHeight()); if(!mDisplayChildren) return; LLRect childRect; childRect.setLeftTopAndSize( getPaddingLeft(), height - getHeaderHeight() - getPaddingTop(), width - getPaddingLeft() - getPaddingRight(), height - getHeaderHeight() - getPaddingTop() - getPaddingBottom() ); adjustContainerPanel(childRect); }
void LLFloaterOutbox::showNotification(const LLSD& notify) { LLNotificationPtr notification = LLNotifications::instance().find(notify["id"].asUUID()); if (!notification) { LL_ERRS() << "Unable to find outbox notification!" << notify.asString() << LL_ENDL; return; } #if USE_WINDOWSHADE_DIALOGS if (mWindowShade) { delete mWindowShade; } LLRect floater_rect = getLocalRect(); floater_rect.mTop -= getHeaderHeight(); floater_rect.stretch(-5, 0); LLWindowShade::Params params; params.name = "notification_shade"; params.rect = floater_rect; params.follows.flags = FOLLOWS_ALL; params.modal = true; params.can_close = false; params.shade_color = LLColor4::white % 0.25f; params.text_color = LLColor4::white; mWindowShade = LLUICtrlFactory::create<LLWindowShade>(params); addChild(mWindowShade); mWindowShade->show(notification); #else //USE_WINDOWSHADE_DIALOGS /* LLNotificationsUI::LLEventHandler * handler = LLNotificationsUI::LLNotificationManager::instance().getHandlerForNotification("alertmodal"); LLNotificationsUI::LLSysHandler * sys_handler = dynamic_cast<LLNotificationsUI::LLSysHandler *>(handler); llassert(sys_handler); sys_handler->processNotification(notify); */ LLNotifications::instance().add(notification); #endif //USE_WINDOWSHADE_DIALOGS }
void LLFloaterMap::setDirectionPos( LLTextBox* text_box, F32 rotation ) { // Rotation is in radians. // Rotation of 0 means x = 1, y = 0 on the unit circle. F32 map_half_height = (F32)(getRect().getHeight() / 2) - getHeaderHeight()/2; F32 map_half_width = (F32)(getRect().getWidth() / 2) ; F32 text_half_height = (F32)(text_box->getRect().getHeight() / 2); F32 text_half_width = (F32)(text_box->getRect().getWidth() / 2); F32 radius = llmin( map_half_height - text_half_height, map_half_width - text_half_width ); // Inset by a little to account for position display. radius -= 8.f; text_box->setOrigin( llround(map_half_width - text_half_width + radius * cos( rotation )), llround(map_half_height - text_half_height + radius * sin( rotation )) ); }
/** * @brief This method has been reimplemented. It manages the following actions: * - Column resizing * - Header button * * @param[in] event Mouse event * * @return Nothing. */ void AbstractTableView::mousePressEvent(QMouseEvent* event) { if(((event->buttons() & Qt::LeftButton) != 0) && ((event->buttons() & Qt::RightButton) == 0)) { if(mColResizeData.splitHandle == true) { int wColIndex = getColumnIndexFromX(event->x()); int wStartPos = getColumnPosition(wColIndex); // Position X of the start of column mGuiState = AbstractTableView::ResizeColumnState; if(event->x() <= (wStartPos + 2)) { mColResizeData.index = wColIndex - 1; } else { mColResizeData.index = wColIndex; } mColResizeData.lastPosX = event->x(); } else if(mHeader.isVisible && getColumnCount() && (event->y() <= getHeaderHeight()) && (event->y() >= 0)) { int wColIndex = getColumnIndexFromX(event->x()); //qDebug() << "Button " << wColIndex << "has been pressed."; emit headerButtonPressed(wColIndex); mColumnList[wColIndex].header.isPressed = true; mColumnList[wColIndex].header.isMouseOver = true; mHeader.activeButtonIndex = wColIndex; mGuiState = AbstractTableView::HeaderButtonPressed; updateViewport(); } } //QWidget::mousePressEvent(event); }
Rectangle AutomationGrid::getNoteRect (AutomationEvent* note) { const int diameter = getEventDiameter(); int x; float snapsPerBeat = 1.0f / (snapQuantize / (float) divDenominator); float snapWidth = barWidth / (float) snapQuantize; float beatWidth = barWidth / (float) divDenominator; if (snapQuantize == 0) x = roundFloatToInt (beatWidth * note->getBeat()); else //x = roundFloatToInt (snapWidth * round(note->getBeat() / snapsPerBeat)); x = roundFloatToInt (snapWidth * (note->getBeat() / snapsPerBeat)); int fullh = getAvailableHeight(); // account for header & space for item's circle at top or bottom int y = fullh - (note->value * fullh); // upside down flip y += getEventDiameter() + getHeaderHeight(); return Rectangle (x-diameter, y-diameter, diameter*2, diameter*2); }
void FloaterAO::onClickLess() { LLRect fullSize=getRect(); LLRect smallSize=mSmallInterfacePanel->getRect(); smallSize.setLeftTopAndSize(0,0,smallSize.getWidth(),smallSize.getHeight()+getHeaderHeight()); gSavedPerAccountSettings.setRect("floater_rect_animation_overrider_full",fullSize); mMore=FALSE; mSmallInterfacePanel->setVisible(TRUE); mMainInterfacePanel->setVisible(FALSE); setCanResize(FALSE); gSavedPerAccountSettings.setBOOL("UseFullAOInterface",FALSE); reshape(getRect().getWidth(),smallSize.getHeight()); // save current size and position gSavedPerAccountSettings.setRect("floater_rect_animation_overrider_full",fullSize); }
// virtual void LLFloaterTexturePicker::draw() { S32 floater_header_size = getHeaderHeight(); if (mOwner) { // draw cone of context pointing back to texture swatch LLRect owner_rect; mOwner->localRectToOtherView(mOwner->getLocalRect(), &owner_rect, this); LLRect local_rect = getLocalRect(); if (gFocusMgr.childHasKeyboardFocus(this) && mOwner->isInVisibleChain() && mContextConeOpacity > 0.001f) { gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE); LLGLEnable(GL_CULL_FACE); gGL.begin(LLRender::QUADS); { gGL.color4f(0.f, 0.f, 0.f, CONTEXT_CONE_IN_ALPHA * mContextConeOpacity); gGL.vertex2i(owner_rect.mLeft, owner_rect.mTop); gGL.vertex2i(owner_rect.mRight, owner_rect.mTop); gGL.color4f(0.f, 0.f, 0.f, CONTEXT_CONE_OUT_ALPHA * mContextConeOpacity); gGL.vertex2i(local_rect.mRight, local_rect.mTop); gGL.vertex2i(local_rect.mLeft, local_rect.mTop); gGL.color4f(0.f, 0.f, 0.f, CONTEXT_CONE_OUT_ALPHA * mContextConeOpacity); gGL.vertex2i(local_rect.mLeft, local_rect.mTop); gGL.vertex2i(local_rect.mLeft, local_rect.mBottom); gGL.color4f(0.f, 0.f, 0.f, CONTEXT_CONE_IN_ALPHA * mContextConeOpacity); gGL.vertex2i(owner_rect.mLeft, owner_rect.mBottom); gGL.vertex2i(owner_rect.mLeft, owner_rect.mTop); gGL.color4f(0.f, 0.f, 0.f, CONTEXT_CONE_OUT_ALPHA * mContextConeOpacity); gGL.vertex2i(local_rect.mRight, local_rect.mBottom); gGL.vertex2i(local_rect.mRight, local_rect.mTop); gGL.color4f(0.f, 0.f, 0.f, CONTEXT_CONE_IN_ALPHA * mContextConeOpacity); gGL.vertex2i(owner_rect.mRight, owner_rect.mTop); gGL.vertex2i(owner_rect.mRight, owner_rect.mBottom); gGL.color4f(0.f, 0.f, 0.f, CONTEXT_CONE_OUT_ALPHA * mContextConeOpacity); gGL.vertex2i(local_rect.mLeft, local_rect.mBottom); gGL.vertex2i(local_rect.mRight, local_rect.mBottom); gGL.color4f(0.f, 0.f, 0.f, CONTEXT_CONE_IN_ALPHA * mContextConeOpacity); gGL.vertex2i(owner_rect.mRight, owner_rect.mBottom); gGL.vertex2i(owner_rect.mLeft, owner_rect.mBottom); } gGL.end(); } } if (gFocusMgr.childHasMouseCapture(getDragHandle())) { mContextConeOpacity = lerp(mContextConeOpacity, gSavedSettings.getF32("PickerContextOpacity"), LLCriticalDamp::getInterpolant(CONTEXT_FADE_TIME)); } else { mContextConeOpacity = lerp(mContextConeOpacity, 0.f, LLCriticalDamp::getInterpolant(CONTEXT_FADE_TIME)); } updateImageStats(); // if we're inactive, gray out "apply immediate" checkbox getChildView("show_folders_check")->setEnabled(mActive && mCanApplyImmediately && !mNoCopyTextureSelected); getChildView("Select")->setEnabled(mActive); getChildView("Pipette")->setEnabled(mActive); getChild<LLUICtrl>("Pipette")->setValue(LLToolMgr::getInstance()->getCurrentTool() == LLToolPipette::getInstance()); //BOOL allow_copy = FALSE; if( mOwner ) { mTexturep = NULL; if(mImageAssetID.notNull()) { mTexturep = LLViewerTextureManager::getFetchedTexture(mImageAssetID, MIPMAP_YES); mTexturep->setBoostLevel(LLViewerTexture::BOOST_PREVIEW); } if (mTentativeLabel) { mTentativeLabel->setVisible( FALSE ); } getChildView("Default")->setEnabled(mImageAssetID != mOwner->getDefaultImageAssetID()); getChildView("Blank")->setEnabled(mImageAssetID != mWhiteImageAssetID ); getChildView("None")->setEnabled(mOwner->getAllowNoTexture() && !mImageAssetID.isNull() ); LLFloater::draw(); if( isMinimized() ) { return; } // Border LLRect border( BORDER_PAD, getRect().getHeight() - floater_header_size - BORDER_PAD, ((getMinWidth() / 2) - TEXTURE_INVENTORY_PADDING - HPAD) - BORDER_PAD, BORDER_PAD + FOOTER_HEIGHT + (getRect().getHeight() - getMinHeight())); gl_rect_2d( border, LLColor4::black, FALSE ); // Interior LLRect interior = border; interior.stretch( -1 ); // If the floater is focused, don't apply its alpha to the texture (STORM-677). const F32 alpha = getTransparencyType() == TT_ACTIVE ? 1.0f : getCurrentTransparency(); if( mTexturep ) { if( mTexturep->getComponents() == 4 ) { gl_rect_2d_checkerboard( interior, alpha ); } gl_draw_scaled_image( interior.mLeft, interior.mBottom, interior.getWidth(), interior.getHeight(), mTexturep, UI_VERTEX_COLOR % alpha ); // Pump the priority mTexturep->addTextureStats( (F32)(interior.getWidth() * interior.getHeight()) ); } else if (!mFallbackImage.isNull()) { mFallbackImage->draw(interior, UI_VERTEX_COLOR % alpha); } else { gl_rect_2d( interior, LLColor4::grey % alpha, TRUE ); // Draw X gl_draw_x(interior, LLColor4::black ); } // Draw Tentative Label over the image if( mOwner->getTentative() && !mViewModel->isDirty() ) { mTentativeLabel->setVisible( TRUE ); drawChild(mTentativeLabel); } if (mSelectedItemPinned) return; LLFolderView* folder_view = mInventoryPanel->getRootFolder(); if (!folder_view) return; LLInventoryFilter* filter = folder_view->getFilter(); if (!filter) return; bool is_filter_active = folder_view->getCompletedFilterGeneration() < filter->getCurrentGeneration() && filter->isNotDefault(); // After inventory panel filter is applied we have to update // constraint rect for the selected item because of folder view // AutoSelectOverride set to TRUE. We force PinningSelectedItem // flag to FALSE state and setting filter "dirty" to update // scroll container to show selected item (see LLFolderView::doIdle()). if (!is_filter_active && !mSelectedItemPinned) { folder_view->setPinningSelectedItem(mSelectedItemPinned); folder_view->dirtyFilter(); folder_view->arrangeFromRoot(); mSelectedItemPinned = TRUE; } } }
/** * @brief This method has been reimplemented. It manages the following actions: * - Column resizing * - Header button * * @param[in] event Mouse event * * @return Nothing. */ void AbstractTableView::mouseMoveEvent(QMouseEvent* event) { int wColIndex = getColumnIndexFromX(event->x()); int wStartPos = getColumnPosition(wColIndex); // Position X of the start of column int wEndPos = getColumnPosition(wColIndex) + getColumnWidth(wColIndex); // Position X of the end of column bool wHandle = ((wColIndex != 0) && (event->x() >= wStartPos) && (event->x() <= (wStartPos + 2))) || ((event->x() <= wEndPos) && (event->x() >= (wEndPos - 2))); if(wColIndex == getColumnCount() - 1 && event->x() > viewport()->width()) //last column wHandle = false; switch(mGuiState) { case AbstractTableView::NoState: { if(event->buttons() == Qt::NoButton) { bool wHasCursor = cursor().shape() == Qt::SplitHCursor ? true : false; if((wHandle == true) && (wHasCursor == false)) { setCursor(Qt::SplitHCursor); mColResizeData.splitHandle = true; mGuiState = AbstractTableView::ReadyToResize; } if((wHandle == false) && (wHasCursor == true)) { unsetCursor(); mColResizeData.splitHandle = false; mGuiState = AbstractTableView::NoState; } } else { QWidget::mouseMoveEvent(event); } } break; case AbstractTableView::ReadyToResize: { if(event->buttons() == Qt::NoButton) { if((wHandle == false) && (mGuiState == AbstractTableView::ReadyToResize)) { unsetCursor(); mColResizeData.splitHandle = false; mGuiState = AbstractTableView::NoState; } } } break; case AbstractTableView::ResizeColumnState: { int delta = event->x() - mColResizeData.lastPosX; bool bCanResize = (getColumnWidth(mColResizeData.index) + delta) >= 20; if(bCanResize) { int wNewSize = getColumnWidth(mColResizeData.index) + delta; setColumnWidth(mColResizeData.index, wNewSize); mColResizeData.lastPosX = event->x(); updateViewport(); } } break; case AbstractTableView::HeaderButtonPressed: { int wColIndex = getColumnIndexFromX(event->x()); if((wColIndex == mHeader.activeButtonIndex) && (event->y() <= getHeaderHeight()) && (event->y() >= 0)) { mColumnList[mHeader.activeButtonIndex].header.isMouseOver = true; } else { mColumnList[mHeader.activeButtonIndex].header.isMouseOver = false; } } break; default: break; } }
/** * @brief This method has been reimplemented. It paints the whole table. * * @param[in] event Paint event * * @return Nothing. */ void AbstractTableView::paintEvent(QPaintEvent* event) { if(!mAllowPainting) return; if(getColumnCount()) //make sure the last column is never smaller than the window { int totalWidth = 0; for(int i = 0; i < getColumnCount(); i++) totalWidth += getColumnWidth(i); int lastWidth = 0; for(int i = 0; i < getColumnCount() - 1; i++) lastWidth += getColumnWidth(i); int width = this->viewport()->width(); lastWidth = width > lastWidth ? width - lastWidth : 0; int last = getColumnCount() - 1; if(totalWidth < width) setColumnWidth(last, lastWidth); else setColumnWidth(last, getColumnWidth(last)); } Q_UNUSED(event); QPainter wPainter(this->viewport()); int wViewableRowsCount = getViewableRowsCount(); int scrollValue = -horizontalScrollBar()->value(); int x = scrollValue; int y = 0; // Reload data if needed if(mPrevTableOffset != mTableOffset || mShouldReload == true) { prepareData(); mPrevTableOffset = mTableOffset; mShouldReload = false; } // Paints background wPainter.fillRect(wPainter.viewport(), QBrush(backgroundColor)); // Paints header if(mHeader.isVisible == true) { for(int i = 0; i < getColumnCount(); i++) { QStyleOptionButton wOpt; if((mColumnList[i].header.isPressed == true) && (mColumnList[i].header.isMouseOver == true)) wOpt.state = QStyle::State_Sunken; else wOpt.state = QStyle::State_Enabled; wOpt.rect = QRect(x, y, getColumnWidth(i), getHeaderHeight()); mHeaderButtonSytle.style()->drawControl(QStyle::CE_PushButton, &wOpt, &wPainter, &mHeaderButtonSytle); wPainter.setPen(headerTextColor); wPainter.drawText(QRect(x + 4, y, getColumnWidth(i) - 8, getHeaderHeight()), Qt::AlignVCenter | Qt::AlignLeft, mColumnList[i].title); x += getColumnWidth(i); } } x = scrollValue; y = getHeaderHeight(); // Iterate over all columns and cells for(int j = 0; j < getColumnCount(); j++) { for(int i = 0; i < wViewableRowsCount; i++) { // Paints cell contents if(i < mNbrOfLineToPrint) { // Don't draw cells if the flag is set, and no process is running //if(!mDrawDebugOnly || DbgIsDebugging()) if(true) { QString wStr = paintContent(&wPainter, mTableOffset, i, j, x, y, getColumnWidth(j), getRowHeight()); if(wStr.length()) { wPainter.setPen(textColor); wPainter.drawText(QRect(x + 4, y, getColumnWidth(j) - 4, getRowHeight()), Qt::AlignVCenter | Qt::AlignLeft, wStr); } } } // Paints cell right borders wPainter.setPen(separatorColor); wPainter.drawLine(x + getColumnWidth(j) - 1, y, x + getColumnWidth(j) - 1, y + getRowHeight() - 1); // Update y for the next iteration y += getRowHeight(); } y = getHeaderHeight(); x += getColumnWidth(j); } //emit repainted(); }