ginebra2/SlidingWidget.cpp
changeset 16 3c88a81ff781
parent 3 0954f5dd2cd0
equal deleted inserted replaced
14:6aeb7a756187 16:3c88a81ff781
    31   SlidingWidget::SlidingWidget(QGraphicsItem* parent)
    31   SlidingWidget::SlidingWidget(QGraphicsItem* parent)
    32     : QGraphicsWidget(parent),
    32     : QGraphicsWidget(parent),
    33       m_top(0),
    33       m_top(0),
    34       m_window(0),
    34       m_window(0),
    35       m_bottom(0),
    35       m_bottom(0),
       
    36       m_slidePos(0),
    36       m_slideMax(0),
    37       m_slideMax(0),
    37       m_slidePos(0),
       
    38       m_shrinked(0),
    38       m_shrinked(0),
    39       m_shrinkMax(0),
    39       m_shrinkMax(0),
    40       m_windowSize(QSizeF())
    40       m_windowSize(QSizeF())
    41   {
    41   {
    42     //Clip child item so that it can "slide" out of view
    42     //Clip child item so that it can "slide" out of view
    83 
    83 
    84   }
    84   }
    85 
    85 
    86   qreal SlidingWidget::slide(qreal delta)
    86   qreal SlidingWidget::slide(qreal delta)
    87   {
    87   {
       
    88       return setSlide(m_slideMax - m_slidePos - delta);
       
    89   }
    88 
    90 
    89     qreal newPos = m_slidePos + delta;
    91   qreal SlidingWidget::setSlide(qreal scrollPos)
       
    92   {
    90 
    93 
    91     //qDebug() << "SlidingWidget::slide: delta: " << delta << " m_slidePos: " << m_slidePos << " newPos: " << newPos;
    94     qreal pos = m_slideMax - scrollPos;
    92 
    95 
    93     if (newPos < 0) {
    96     if(pos < 0) {
    94       if (m_slidePos == 0)
    97         pos = 0;
    95     return 0;
    98     } else if (pos > m_slideMax){
    96       delta = -m_slidePos;
    99         pos = m_slideMax;
    97       m_slidePos = 0;
       
    98     }
   100     }
    99 
   101 
   100     else if (newPos > m_slideMax){
   102     if(pos == m_slidePos)
   101       if (m_slidePos == m_slideMax)
       
   102     return 0;
   103     return 0;
   103       delta = m_slideMax - m_slidePos;
       
   104       m_slidePos = m_slideMax;
       
   105     }
       
   106 
   104 
   107     else m_slidePos = newPos;
   105     qreal delta = pos - m_slidePos;
       
   106     m_slidePos = pos;
   108 
   107 
   109     //qDebug() << "calculated delta: " << delta << " new m_slidePos: " << m_slidePos;
   108     //qDebug() << "calculated delta: " << delta << " new m_slidePos: " << m_slidePos;
   110 
   109 
   111     QTransform transform;
   110     QTransform transform;
   112     transform.translate(0,delta);
   111     transform.translate(0,delta);
   159     m_top = 0;
   158     m_top = 0;
   160     if (m_window)
   159     if (m_window)
   161       m_window->setPos(0,0);
   160       m_window->setPos(0,0);
   162   }
   161   }
   163 
   162 
       
   163   QSize SlidingWidget::viewPortSize(bool withoutTop ) {
       
   164 
       
   165       QSize sz =  m_windowSize.toSize();
       
   166       if (m_top && withoutTop) {
       
   167           sz.setHeight(m_windowSize.height() - m_top->geometry().height()); 
       
   168       }
       
   169       return sz;
       
   170   }
   164 
   171 
   165 } // end of namespace GVA
   172 } // end of namespace GVA
   166 
   173 
   167 
   174