int MeasureTool::processMouseEvent( ViewportMouseEvent& event )
{
    int flags = 0;

    Ogre::Vector3 pos;

    std::stringstream ss;

    bool success = context_->getSelectionManager()->get3DPoint( event.viewport, event.x, event.y, pos );
    setCursor( success ? hit_cursor_ : std_cursor_ );

    switch ( state_ )
    {
    case START:
        break;
    case END:
        if ( success )
        {
            line_->setPoints(start_,pos);
            length_ = (start_-pos).length();
        }
        break;
    }

    if ( length_ > 0.0 )
    {
        ss << "[Length: " << length_ << "m] ";
    }

    ss << "Click on two points to measure their distance. Right-click to reset.";
    setStatus( QString( ss.str().c_str() ) );

    if( event.leftUp() && success )
    {
        switch ( state_ )
        {
        case START:
            start_ = pos;
            state_ = END;
            break;
        case END:
            end_ = pos;
            state_ = START;
            line_->setPoints(start_,end_);
            break;
        }

        flags |= Render;
    }

    if ( event.rightUp() )
    {
        state_ = START;
        line_->setVisible(false);
    }

    return flags;
}