recalculate and set widget size on data change