void RSPermissionMatrixWidget::mousePressEvent(QMouseEvent *e)
{
    std::cerr << "mouse pressed at x=" << e->x() << ", y=" << e->y() << std::endl;

    uint32_t service_id ;
    RsPeerId peer_id ;

    if(computeServiceAndPeer(e->x(),e->y(),service_id,peer_id))
    {
        std::cerr << "Peer id: " << peer_id << ", service: " << service_id << std::endl;

    // make sure the service is not globally disabled

    RsServicePermissions serv_perms ;
    rsServiceControl->getServicePermissions(service_id,serv_perms) ;

    if(!serv_perms.mDefaultAllowed)
        return ;

        switchPermission(service_id,peer_id) ;
        update() ;
    }
    else if(computeServiceGlobalSwitch(e->x(),e->y(),service_id))
    {
        switchPermission(service_id) ;
        update();
    }
    else
        QFrame::mousePressEvent(e) ;
}
void RSPermissionMatrixWidget::mouseMoveEvent(QMouseEvent *e)
{
    uint32_t service_id ;
    RsPeerId peer_id ;

    if(computeServiceAndPeer(e->x(),e->y(),service_id,peer_id))
    {
        if(_current_service_id != service_id || _current_peer_id != peer_id)
        {
            _current_service_id = service_id ;
            _current_peer_id = peer_id ;

            // redraw!
            update() ;
        }
    }
    else if(computeServiceGlobalSwitch(e->x(),e->y(),service_id))
    {
        peer_id.clear() ;

    if(_current_service_id != service_id || _current_peer_id != peer_id)
    {
        _current_service_id = service_id ;
        _current_peer_id = peer_id ;

        // redraw!
        update() ;
    }
    }
    else
    {
        service_id = ~0 ;
        peer_id.clear() ;
    }
}