Example #1
0
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;
    }
Example #3
0
  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);
    }
Example #6
0
  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};
  }