QString AttributeModel::actualRangeDefintion(bool calc) const
{
    QString rangeString;
    if ( _coldefinition.isValid()) {
        if ( calc || _coldefinition.datadef().range().isNull()) {
            if ( hasType( _owner->ilwisType() , itFEATURE)) {
                Ilwis::IFeatureCoverage features = _owner.as<Ilwis::FeatureCoverage>();
                if ( !features.isValid())
                    return "";
                features->loadData();
                std::vector<QVariant> data = features->attributeTable()->column(_coldefinition.name());
                if ( data.size() != 0) {
                    std::vector<double> values(data.size());
                    int  i=0;
                    for(auto v : data)
                        values[i++] = v.toDouble();
                    Ilwis::NumericStatistics stats; // realy like to do this with a template specialization of the proper calculate function, but the syntax was unclear to me
                    stats.calculate(values.begin(), values.end());
                    Ilwis::NumericRange *rng = new Ilwis::NumericRange(stats.prop(Ilwis::NumericStatistics::pMIN),stats.prop(Ilwis::NumericStatistics::pMAX));
                    features->attributeDefinitionsRef().columndefinitionRef(_coldefinition.name()).datadef().range(rng);
                    const_cast<AttributeModel *>(this)->_coldefinition = features->attributeDefinitions().columndefinition(_coldefinition.name());
                }
            }
        }
        rangeString = _coldefinition.datadef().range()->toString();

    }
    return rangeString;
}