void Tableur::drawGrid() { calculateCellSize(); QPainter painter(&m_image); painter.setPen(Qt::black); for(int i = 0;i<=this->height();i+=m_cellSize.height()) { painter.drawLine(QPoint(0,i),QPoint(this->width(),i)); } for(int i = 0;i<=this->width();i+=m_cellSize.width()) { painter.drawLine(QPoint(i,0),QPoint(i,this->height())); } if(!m_cellList.isEmpty()) { Cell cell; foreach (cell, m_cellList) { QPoint point = QPoint(cell.getPos().x()*m_cellSize.width(),(cell.getPos().y()*m_cellSize.height()+m_cellSize.height()/2)); painter.drawText(point,cell.getValue()); }
void startZoomOutAnimation() { if (zoomedIndex < 0) return; int lm, tm, rm, bm; m_public->getContentsMargins(&lm, &tm, &rm, &bm); QRect adjustedGeo = m_public->geometry().adjusted(lm, tm, -rm, -bm); int spacing = m_public->spacing(); QSize cellSize = calculateCellSize(adjustedGeo,spacing); QParallelAnimationGroup * animGroup = new QParallelAnimationGroup; for (int i = 0; i < list.size(); ++i) { Wrapper * wr = list.at(i); wr->item->widget()->show(); QPropertyAnimation * anim = new QPropertyAnimation(wr->item->widget(), "geometry"); anim->setEndValue( calculateCellGeometry( adjustedGeo, cellSize, spacing, wr->row, wr->col, wr->rowSpan,wr->colSpan)); anim->setDuration(duration); anim->setEasingCurve(easing); animGroup->addAnimation(anim); } qApp->connect(animGroup, SIGNAL(finished()), m_public, SIGNAL(animationFinished())); animationRunning = true; animGroup->start(QAbstractAnimation::DeleteWhenStopped); zoomedIndex = -1; }
void BoardView::paintEvent(QPaintEvent *event) { const QRect& rectange = event->rect(); const float cellSize = calculateCellSize(rectange, m_height, m_width); const float tableWidth = cellSize * m_width; const float tableHeight = cellSize * m_height; QPixmap pixmap(QSize(tableWidth + 1, tableHeight + 1)); pixmap.fill(Qt::white); QPainter pixPainter(&pixmap); pixPainter.setRenderHint(QPainter::Antialiasing); pixPainter.setPen(QPen(Qt::black, 1)); for (int i = cellSize, k = m_width * cellSize; i < k; i += cellSize) pixPainter.drawLine(i, 0, i, pixmap.height()); for (int i = cellSize, k = m_height * cellSize; i < k; i += cellSize) pixPainter.drawLine(0, i, pixmap.width(), i); pixPainter.setPen(QPen(Qt::black, 3)); pixPainter.drawRect(0, 0, pixmap.width(), pixmap.height()); fillPolygon(pixPainter, cellSize); drawLastPoint(pixPainter, cellSize); drawPolygons(pixPainter, cellSize); drawUnderMousePoint(pixPainter, cellSize); QPainter painter(this); const int dx =(rectange.width() - tableWidth) / 2; const int dy =(rectange.height() - tableHeight) / 2; painter.drawPixmap(dx, dy, pixmap); }
void setGeometry(const QRect & adjustedGeo) { if (animationRunning) return; if (!rowCount || !colCount) return; if (zoomedIndex >= 0) { Wrapper * wr = list.at(zoomedIndex); wr->item->setGeometry(adjustedGeo); return; } int spacing = m_public->spacing(); QSize cellSize = calculateCellSize(adjustedGeo,spacing); for (int i = 0; i < list.size(); ++i) { Wrapper * wr = list.at(i); int r = wr->row,c = wr->col,rs = wr->rowSpan,cs = wr->colSpan; wr->item->setGeometry( calculateCellGeometry( adjustedGeo, cellSize, spacing, r,c,rs,cs)); } }
void startZoomInAnimation(QWidget * widget) { if (zoomedIndex >= 0) return; zoomedIndex = widgetIndex(widget); if (zoomedIndex < 0) // widget is not in the list return; QRect winGeo = m_public->geometry(); if (outerWidgetForRect) winGeo = outerWidgetForRect->geometry(); int lm, tm, rm, bm; m_public->getContentsMargins(&lm, &tm, &rm, &bm); QRect adjustedGeo = m_public->geometry().adjusted(lm, tm, -rm, -bm); int spacing = m_public->spacing(); QSize cellSize = calculateCellSize(adjustedGeo,spacing); QParallelAnimationGroup * animGroup = new QParallelAnimationGroup; for (int i = 0; i < list.size(); ++i) { Wrapper * wr = list.at(i); QPropertyAnimation * anim = new QPropertyAnimation(wr->item->widget(), "pos"); if (wr->item->widget() == widget) continue; anim->setEndValue(calculateOutPos(wr,winGeo,cellSize,spacing)); anim->setDuration(duration); anim->setEasingCurve(easing); animGroup->addAnimation(anim); qApp->connect(anim,SIGNAL(finished()),wr->item->widget(),SLOT(hide())); } QPropertyAnimation * anim = new QPropertyAnimation(widget, "geometry"); anim->setEndValue(adjustedGeo); anim->setDuration(duration); anim->setEasingCurve(easing); animGroup->addAnimation(anim); qApp->connect(animGroup, SIGNAL(finished()),m_public, SIGNAL(animationFinished())); animationRunning = true; animGroup->start(QAbstractAnimation::DeleteWhenStopped); }
void BoardView::calculatePoint(QPoint& point, QMouseEvent *event) { const QRect& rectange = rect(); const float cellSize = calculateCellSize(rectange, m_height, m_width); float dx =(rectange.width() - cellSize * m_width) / 2; float dy =(rectange.height() - cellSize * m_height) / 2; int x =(event->x() - dx) / cellSize; int y =(event->y() - dy) / cellSize; const float firstPart = cellSize / 3; const float lastPart = cellSize * 2 / 3; dx = event->x() - dx - x * cellSize; if (dx > firstPart && dx < lastPart) return; else if (dx < firstPart) --x; dy = event->y() - dy - y * cellSize; if (dy > firstPart && dy < lastPart) return; else if (dy < firstPart) --y; if (x >= m_width - 1 || x < 0 || y < 0 || y >= m_height - 1) return; point = {x, y}; }