AbstractNotificationWidget::AbstractNotificationWidget()
	: QFrame(),
		m_position(0), slide(100, this)
{
	setWindowFlags(Qt::ToolTip | Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint);
	
	setAttribute(Qt::WA_DeleteOnClose, true);
	//setAttribute(Qt::WA_TranslucentBackground, true);
	setAttribute(Qt::WA_X11NetWmWindowTypeNotification, true);
	
	setFocusPolicy(Qt::NoFocus);
	
	slide.setCurveShape(QTimeLine::EaseOutCurve);
	slide.setUpdateInterval(1000/50);
	connect(&slide, SIGNAL(valueChanged(qreal)), SLOT(sliding(qreal)));
	connect(&slide, SIGNAL(finished()), SLOT(slideFinished()));
}
void GuiSlider::onMessage(gui::Message* message)
{
    // anywhere onMouseUp
    if( message->event == gui::onMouseUp )
    {
        if( _scrolling ) _scrolling = false;
    }

    // anywhere onMouseMove if scrolling is enabled
    if( _scrolling && message->event == gui::onMouseMove )
    {
        // slider vector
        Flector sliding( float(_upperRect.left - _lowerRect.left), float(_upperRect.top - _lowerRect.top) );
        Flector slidingN;
        D3DXVec2Normalize( &slidingN, &sliding );
        // motion offset
        Flector offset( float( Gui::instance->getMouseDX() ), float( Gui::instance->getMouseDY() ) );
        // motion offset in slider space
        Flector slidingOffset = slidingN * D3DXVec2Dot( &slidingN, &offset );
        // parametric motion offset (0..1)
        float pSlidingOffset = D3DXVec2Length( &slidingOffset ) / D3DXVec2Length( &sliding );
        if( D3DXVec2Dot( &slidingN, &offset ) < 0 ) pSlidingOffset *= -1;
        // final update
        setPosition( getPosition() + pSlidingOffset * getUpperLimit() - getLowerLimit() );

        // messaging
        gui::Message message;
        message.origin = this;
        message.event = gui::onSlide;
        Gui::instance->pushMessage( &message );
    }

    // mousedown from scroll button
    if( _scrollButton && 
        message->event == gui::onMouseDown && 
        message->origin == _scrollButton->getPanel() )
    {    
        _scrolling = true;
    }
}