Hi, I'm tracking a bug in Sheets style handling but I'm uncertain of how to fix it because I don't understand the code alt. how styles should work.

I thought default styles where used when there was no style assigned to an object, and *maybe* used to give default values for things not specified in a style (but I thought parent style where used for that)?

In Odf::loadSheetInsertStyles()
we have code like this:
        if (autoStyles.contains(styleNames[i])) {
            Style style;
            style.setDefault(); // "overwrite" existing style
            style.merge(autoStyles[styleNames[i]]);
            outStyleRegions.append(qMakePair(styleRegion, style));
        } else {

which effectivly adds a default sub style to the autostyle.

Then there is the comment: // "overwrite" existing style
What can that mean?

Later a new style is composed based on this style with code in:
StyleStorage::composeStyle()

    for (int i = 0; i < subStyles.count(); ++i) {
        if (subStyles[i]->type() == Style::DefaultStyleKey) {
            style = *styleManager()->defaultStyle();
            qDebug()<<Q_FUNC_INFO<<subStyles<<"default:"<<style;
        } else if (subStyles[i]->type() == Style::NamedStyleKey) {
        etc. (adding the different substyles)

One problem here is that the position of the default substyle in the list seems to be random, and since all substyles positioned *before* the default substyle is forgotten about, the resulting style is also random.

Boudewijn, git blame says you added this in 2009, I'm sure you can remember why? It is only 7 years ago :)

The way I hit this was to format a number as scientific and then save/load; sometimes it is formatted as scientific, other times as a float.

Cheers, Dag


Reply via email to