Ticket #1463: code.diff

File code.diff, 3.0 KB (added by LonelyPixel, 10 years ago)

Patch of my proposed implementation

  • merkaartor\PaintStyle\EditPaintStyle.cpp

    old new  
    286286                out << globalPainter.toXML();
    287287                for (int i=0; i<Painters.size(); ++i)
    288288                {
    289                         QString s = Painters[i].toXML();
     289                        QString s = Painters[i].toXML(filename);
    290290                        out << s;
    291291                }
    292292                out << "</mapStyle>\n";
     
    319319                } else
    320320                if(!e.isNull() && e.tagName() == "painter")
    321321                {
    322                         FeaturePainter FP = FeaturePainter::fromXML(e);
     322                        FeaturePainter FP = FeaturePainter::fromXML(e, filename);
    323323                        Painters.push_back(FP);
    324324                }
    325325                n = n.nextSibling();
  • merkaartor\PaintStyle\PaintStyle.cpp

    old new  
    150150}
    151151
    152152
    153 QString FeaturePainter::toXML() const
     153QString FeaturePainter::toXML(QString filename) const
    154154{
    155155        QString r;
    156156        r += "<painter\n";
     
    169169        if (ForegroundFill)
    170170                r += " fillColor=\""+::asXML(ForegroundFillFillColor)+"\"\n";
    171171        if (!IconName.isEmpty() && DrawIcon)
    172                 r += " " + iconAsXML("icon",IconName, IconScale, IconOffset);
     172        {
     173                QString iconFilename = IconName;
     174                if (QFileInfo(iconFilename).absolutePath() == QFileInfo(filename).absolutePath())
     175                {
     176                        iconFilename = QFileInfo(iconFilename).fileName();
     177                }
     178                r += " " + iconAsXML("icon",iconFilename, IconScale, IconOffset);
     179        }
    173180        if (DrawTrafficDirectionMarks)
    174181                r += " drawTrafficDirectionMarks=\"yes\"";
    175182        else
     
    196203        return r;
    197204}
    198205
    199 FeaturePainter FeaturePainter::fromXML(const QDomElement& e)
     206FeaturePainter FeaturePainter::fromXML(const QDomElement& e, QString filename)
    200207{
    201208        FeaturePainter FP;
    202209
     
    222229        if (e.hasAttribute("fillColor"))
    223230                FP.foregroundFill(toColor(e.attribute("fillColor")));
    224231        if (e.hasAttribute("icon"))
    225                 FP.setIcon(e.attribute("icon"),e.attribute("iconScale", "0.0").toDouble(),e.attribute("iconOffset", "0.0").toDouble());
     232        {
     233                QString iconFilename = e.attribute("icon");
     234                if (!QFileInfo(iconFilename).isAbsolute())
     235                        iconFilename = QFileInfo(filename).absolutePath().append("/").append(iconFilename);
     236                FP.setIcon(iconFilename,e.attribute("iconScale", "0.0").toDouble(),e.attribute("iconOffset", "0.0").toDouble());
     237        }
    226238        if (e.attribute("drawTrafficDirectionMarks") == "yes")
    227239                FP.drawTrafficDirectionMarks();
    228240        if (e.hasAttribute("labelColor"))
  • merkaartor\PaintStyle\PaintStyle.h

    old new  
    9898                bool getLabelHalo() const;
    9999                bool getLabelArea() const;
    100100
    101                 QString toXML() const;
    102                 static FeaturePainter fromXML(const QDomElement& e);
     101                QString toXML(QString filename) const;
     102                static FeaturePainter fromXML(const QDomElement& e, QString filename);
    103103
    104104                void drawBackground(Road* R, QPainter& thePainter, const Projection& theProjection) const;
    105105                void drawBackground(Relation* R, QPainter& thePainter, const Projection& theProjection) const;