Author: jghali
Date: Sun Feb 25 04:24:22 2018
New Revision: 22409

URL: http://scribus.net/websvn/listing.php?repname=Scribus&sc=1&rev=22409
Log:
reduce indentation level in importColorsFromFile() by exiting early when 
possible

Modified:
    trunk/Scribus/scribus/util_color.cpp

Modified: trunk/Scribus/scribus/util_color.cpp
URL: 
http://scribus.net/websvn/diff.php?repname=Scribus&rev=22409&path=/trunk/Scribus/scribus/util_color.cpp
==============================================================================
--- trunk/Scribus/scribus/util_color.cpp        (original)
+++ trunk/Scribus/scribus/util_color.cpp        Sun Feb 25 04:24:22 2018
@@ -624,34 +624,56 @@
 
 bool importColorsFromFile(QString fileName, ColorList &EditColors, 
QHash<QString, VGradient> *dialogGradients, bool merge)
 {
+       if (fileName.isEmpty())
+               return false;
        int oldCount = EditColors.count();
-       if (!fileName.isEmpty())
-       {
-               QFileInfo fi = QFileInfo(fileName);
-               QString ext = fi.suffix().toLower();
-               if (extensionIndicatesEPSorPS(ext))
+
+       QFileInfo fi = QFileInfo(fileName);
+       QString ext = fi.suffix().toLower();
+       if (extensionIndicatesEPSorPS(ext))
+       {
+               QString tmp, FarNam;
+               double c, m, y, k;
+               ScColor cc;
+               QFile f(fileName);
+               if (f.open(QIODevice::ReadOnly))
                {
-                       QString tmp, FarNam;
-                       double c, m, y, k;
-                       ScColor cc;
-                       QFile f(fileName);
-                       if (f.open(QIODevice::ReadOnly))
+                       bool isAtend = false;
+                       QDataStream ts(&f);
+                       while (!ts.atEnd())
                        {
-                               bool isAtend = false;
-                               QDataStream ts(&f);
-                               while (!ts.atEnd())
+                               tmp = readLineFromDataStream(ts);
+                               if ((tmp.startsWith("%%CMYKCustomColor")) || 
(tmp.startsWith("%%CMYKProcessColor")))
                                {
-                                       tmp = readLineFromDataStream(ts);
-                                       if 
((tmp.startsWith("%%CMYKCustomColor")) || 
(tmp.startsWith("%%CMYKProcessColor")))
+                                       if (tmp.contains("(atend)"))
+                                               isAtend = true;
+                                       else
                                        {
-                                               if (tmp.contains("(atend)"))
-                                                       isAtend = true;
-                                               else
-                                               {
-                                                       if 
(tmp.startsWith("%%CMYKCustomColor"))
-                                                               tmp = 
tmp.remove(0,18);
-                                                       else if 
(tmp.startsWith("%%CMYKProcessColor"))
-                                                               tmp = 
tmp.remove(0,19);
+                                               if 
(tmp.startsWith("%%CMYKCustomColor"))
+                                                       tmp = tmp.remove(0,18);
+                                               else if 
(tmp.startsWith("%%CMYKProcessColor"))
+                                                       tmp = tmp.remove(0,19);
+                                               ScTextStream ts2(&tmp, 
QIODevice::ReadOnly);
+                                               ts2 >> c >> m >> y >> k;
+                                               FarNam = ts2.readAll();
+                                               FarNam = FarNam.trimmed();
+                                               FarNam = FarNam.remove(0,1);
+                                               FarNam = 
FarNam.remove(FarNam.length()-1,1);
+                                               FarNam = FarNam.simplified();
+                                               cc = ScColor(qRound(255 * c), 
qRound(255 * m), qRound(255 * y), qRound(255 * k));
+                                               cc.setSpotColor(true);
+                                               if (!FarNam.isEmpty())
+                                                       
EditColors.tryAddColor(FarNam, cc);
+                                               while (!ts.atEnd())
+                                               {
+                                                       quint64 oldPos = 
ts.device()->pos();
+                                                       tmp = 
readLineFromDataStream(ts);
+                                                       if 
(!tmp.startsWith("%%+"))
+                                                       {
+                                                               
ts.device()->seek(oldPos);
+                                                               break;
+                                                       }
+                                                       tmp = tmp.remove(0,3);
                                                        ScTextStream ts2(&tmp, 
QIODevice::ReadOnly);
                                                        ts2 >> c >> m >> y >> k;
                                                        FarNam = ts2.readAll();
@@ -663,40 +685,39 @@
                                                        cc.setSpotColor(true);
                                                        if (!FarNam.isEmpty())
                                                                
EditColors.tryAddColor(FarNam, cc);
-                                                       while (!ts.atEnd())
-                                                       {
-                                                               quint64 oldPos 
= ts.device()->pos();
-                                                               tmp = 
readLineFromDataStream(ts);
-                                                               if 
(!tmp.startsWith("%%+"))
-                                                               {
-                                                                       
ts.device()->seek(oldPos);
-                                                                       break;
-                                                               }
-                                                               tmp = 
tmp.remove(0,3);
-                                                               ScTextStream 
ts2(&tmp, QIODevice::ReadOnly);
-                                                               ts2 >> c >> m 
>> y >> k;
-                                                               FarNam = 
ts2.readAll();
-                                                               FarNam = 
FarNam.trimmed();
-                                                               FarNam = 
FarNam.remove(0,1);
-                                                               FarNam = 
FarNam.remove(FarNam.length()-1,1);
-                                                               FarNam = 
FarNam.simplified();
-                                                               cc = 
ScColor(qRound(255 * c), qRound(255 * m), qRound(255 * y), qRound(255 * k));
-                                                               
cc.setSpotColor(true);
-                                                               if 
(!FarNam.isEmpty())
-                                                                       
EditColors.tryAddColor(FarNam, cc);
-                                                       }
                                                }
                                        }
-                                       if 
((tmp.startsWith("%%RGBCustomColor")) || (tmp.startsWith("%%RGBProcessColor")))
+                               }
+                               if ((tmp.startsWith("%%RGBCustomColor")) || 
(tmp.startsWith("%%RGBProcessColor")))
+                               {
+                                       if (tmp.contains("(atend)"))
+                                               isAtend = true;
+                                       else
                                        {
-                                               if (tmp.contains("(atend)"))
-                                                       isAtend = true;
-                                               else
-                                               {
-                                                       if 
(tmp.startsWith("%%RGBCustomColor"))
-                                                               tmp = 
tmp.remove(0,17);
-                                                       else if 
(tmp.startsWith("%%RGBProcessColor"))
-                                                               tmp = 
tmp.remove(0,18);
+                                               if 
(tmp.startsWith("%%RGBCustomColor"))
+                                                       tmp = tmp.remove(0,17);
+                                               else if 
(tmp.startsWith("%%RGBProcessColor"))
+                                                       tmp = tmp.remove(0,18);
+                                               ScTextStream ts2(&tmp, 
QIODevice::ReadOnly);
+                                               ts2 >> c >> m >> y;
+                                               FarNam = ts2.readAll();
+                                               FarNam = FarNam.trimmed();
+                                               FarNam = FarNam.remove(0,1);
+                                               FarNam = 
FarNam.remove(FarNam.length()-1,1);
+                                               FarNam = FarNam.simplified();
+                                               cc = ScColor(qRound(255 * c), 
qRound(255 * m), qRound(255 * y));
+                                               if (!FarNam.isEmpty())
+                                                       
EditColors.tryAddColor(FarNam, cc);
+                                               while (!ts.atEnd())
+                                               {
+                                                       quint64 oldPos = 
ts.device()->pos();
+                                                       tmp = 
readLineFromDataStream(ts);
+                                                       if 
(!tmp.startsWith("%%+"))
+                                                       {
+                                                               
ts.device()->seek(oldPos);
+                                                               break;
+                                                       }
+                                                       tmp = tmp.remove(0,3);
                                                        ScTextStream ts2(&tmp, 
QIODevice::ReadOnly);
                                                        ts2 >> c >> m >> y;
                                                        FarNam = ts2.readAll();
@@ -707,431 +728,561 @@
                                                        cc = ScColor(qRound(255 
* c), qRound(255 * m), qRound(255 * y));
                                                        if (!FarNam.isEmpty())
                                                                
EditColors.tryAddColor(FarNam, cc);
-                                                       while (!ts.atEnd())
-                                                       {
-                                                               quint64 oldPos 
= ts.device()->pos();
-                                                               tmp = 
readLineFromDataStream(ts);
-                                                               if 
(!tmp.startsWith("%%+"))
-                                                               {
-                                                                       
ts.device()->seek(oldPos);
-                                                                       break;
-                                                               }
-                                                               tmp = 
tmp.remove(0,3);
-                                                               ScTextStream 
ts2(&tmp, QIODevice::ReadOnly);
-                                                               ts2 >> c >> m 
>> y;
-                                                               FarNam = 
ts2.readAll();
-                                                               FarNam = 
FarNam.trimmed();
-                                                               FarNam = 
FarNam.remove(0,1);
-                                                               FarNam = 
FarNam.remove(FarNam.length()-1,1);
-                                                               FarNam = 
FarNam.simplified();
-                                                               cc = 
ScColor(qRound(255 * c), qRound(255 * m), qRound(255 * y));
-                                                               if 
(!FarNam.isEmpty())
-                                                                       
EditColors.tryAddColor(FarNam, cc);
-                                                       }
-                                               }
-                                       }
-                                       if (tmp.startsWith("%%EndComments"))
-                                       {
-                                               if (!isAtend)
-                                                       break;
+                                               }
                                        }
                                }
-                               f.close();
+                               if (tmp.startsWith("%%EndComments"))
+                               {
+                                       if (!isAtend)
+                                               break;
+                               }
+                       }
+                       f.close();
+               }
+       }
+       else
+       {
+               QStringList allFormatsV = 
LoadSavePlugin::getExtensionsForColors();
+               if (allFormatsV.contains(ext))
+               {
+                       FileLoader fl(fileName);
+                       int testResult = fl.testFile();
+                       if (testResult != -1)
+                       {
+                               ColorList LColors;
+                               if (fl.readColors(LColors))
+                               {
+                                       ColorList::Iterator it;
+                                       for (it = LColors.begin(); it != 
LColors.end(); ++it)
+                                       {
+                                               
EditColors.tryAddColor(it.key(), it.value());
+                                       }
+                                       return (EditColors.count() != oldCount);
+                               }
                        }
                }
-               else
+               if (ext == "acb")                       // Adobe color book 
format
                {
-                       QStringList allFormatsV = 
LoadSavePlugin::getExtensionsForColors();
-                       if (allFormatsV.contains(ext))
+                       QFile fiC(fileName);
+                       if (fiC.open(QIODevice::ReadOnly))
                        {
-                               FileLoader fl(fileName);
-                               int testResult = fl.testFile();
-                               if (testResult != -1)
+                               ScColor lf = ScColor();
+                               quint16 vers = 0;
+                               quint32 signature;
+                               QDataStream ts(&fiC);
+                               ts.setByteOrder(QDataStream::BigEndian);
+                               ts >> signature;
+                               ts >> vers;
+                               if ((signature == 0x38424342) && (vers == 1))
                                {
-                                       ColorList LColors;
-                                       if (fl.readColors(LColors))
+                                       quint16 vendor, numcolors, colType;
+                                       ts >> vendor;
+//                                     QString title           = 
readAdobeUniCodeString(ts);
+//                                     QString prefix          = 
readAdobeUniCodeString(ts);
+//                                     QString postfix         = 
readAdobeUniCodeString(ts);
+//                                     QString description     = 
readAdobeUniCodeString(ts);
+                                       ts >> numcolors;
+                                       ts.skipRawData(4);
+                                       ts >> colType;
+                                       for (quint16 cc = 0; cc < numcolors; 
cc++)
                                        {
-                                               ColorList::Iterator it;
-                                               for (it = LColors.begin(); it 
!= LColors.end(); ++it)
-                                               {
-                                                       
EditColors.tryAddColor(it.key(), it.value());
-                                               }
-                                               return (EditColors.count() != 
oldCount);
+                                               QString name = 
readAdobeUniCodeString(ts);
+                                               if (vendor == 3000)
+                                                       name.prepend("ANPA");
+                                               else if (vendor == 3001)
+                                                       
name.prepend("Focoltone");
+                                               else if (vendor == 3002)
+                                                       
name.prepend("PantoneCoated");
+                                               else if (vendor == 3003)
+                                                       
name.prepend("PantoneProcess");
+                                               else if (vendor == 3004)
+                                                       
name.prepend("PantoneProSlim");
+                                               else if (vendor == 3005)
+                                                       
name.prepend("PantoneUncoated");
+                                               else if (vendor == 3006)
+                                                       name.prepend("Toyo");
+                                               else if (vendor == 3007)
+                                                       
name.prepend("Trumatch");
+                                               else if (vendor == 3008)
+                                                       name.prepend("HKSE");
+                                               else if (vendor == 3009)
+                                                       name.prepend("HKSK");
+                                               else if (vendor == 3010)
+                                                       name.prepend("HKSN");
+                                               else if (vendor == 3011)
+                                                       name.prepend("HKSZ");
+                                               else if (vendor == 3012)
+                                                       name.prepend("DIC");
+                                               else if (vendor == 3020)
+                                                       
name.prepend("PantonePastelCoated");
+                                               else if (vendor == 3021)
+                                                       
name.prepend("PantonePastelUncoated");
+                                               else if (vendor == 3022)
+                                                       
name.prepend("PantoneMetallic");
+                                               ts.skipRawData(6);
+                                               quint8 componentR, componentG, 
componentB, componentK;
+                                               ts >> componentR >> componentG 
>> componentB;
+                                               if (colType == 2)
+                                                       ts >> componentK;
+                                               if (!name.isEmpty())
+                                               {
+                                                       bool validColor = false;
+                                                       if (colType == 0)       
                // RBG
+                                                       {
+                                                               
lf.setRgbColor(componentR, componentG, componentB);
+                                                               validColor = 
true;
+                                                       }
+                                                       else if (colType == 2)  
        // CMYK
+                                                       {
+                                                               lf.setColor(255 
- componentR, 255 - componentG, 255 - componentB, 255 - componentK);
+                                                               validColor = 
true;
+                                                       }
+                                                       if (validColor)
+                                                       {
+                                                               
lf.setSpotColor(false);
+                                                               
lf.setRegistrationColor(false);
+                                                               
EditColors.tryAddColor(name, lf);
+                                                       }
+                                               }
+                                       }
+                                       fiC.close();
+                               }
+                               else                                    // try 
AutoCAD XML format
+                               {
+                                       fiC.close();
+                                       QByteArray docBytes("");
+                                       loadRawText(fileName, docBytes);
+                                       QString docText("");
+                                       docText = QString::fromUtf8(docBytes);
+                                       QDomDocument docu("scridoc");
+                                       if (!docu.setContent(docText))
+                                               return false;
+                                       QDomElement elem = 
docu.documentElement();
+                                       QDomNode PAGE = elem.firstChild();
+                                       while(!PAGE.isNull())
+                                       {
+                                               QDomElement pg = 
PAGE.toElement();
+                                               if (pg.tagName() == "colorPage")
+                                               {
+                                                       QDomNode colNode = 
pg.firstChild();
+                                                       while(!colNode.isNull())
+                                                       {
+                                                               QDomElement cg 
= colNode.toElement();
+                                                               if 
(cg.tagName() == "colorEntry")
+                                                               {
+                                                                       int r 
(0), g(0), b(0);
+                                                                       QString 
colorName = "";
+                                                                       
QDomNode colEntry = cg.firstChild();
+                                                                       
while(!colEntry.isNull())
+                                                                       {
+                                                                               
QDomElement cc = colEntry.toElement();
+                                                                               
if (cc.tagName() == "colorName")
+                                                                               
        colorName = cc.text();
+                                                                               
else if (cc.tagName() == "RGB8")
+                                                                               
{
+                                                                               
        QDomNode colVal = cc.firstChild();
+                                                                               
        while(!colVal.isNull())
+                                                                               
        {
+                                                                               
                QDomElement cv = colVal.toElement();
+                                                                               
                if (cv.tagName() == "red")
+                                                                               
                        r = cv.text().toInt();
+                                                                               
                else if (cv.tagName() == "green")
+                                                                               
                        g = cv.text().toInt();
+                                                                               
                else if (cv.tagName() == "blue")
+                                                                               
                        b = cv.text().toInt();
+                                                                               
                colVal = colVal.nextSibling();
+                                                                               
        }
+                                                                               
}
+                                                                               
colEntry = colEntry.nextSibling();
+                                                                       }
+                                                                       if 
(!colorName.isEmpty())
+                                                                       {
+                                                                               
lf.setRgbColor(r, g, b);
+                                                                               
lf.setSpotColor(false);
+                                                                               
lf.setRegistrationColor(false);
+                                                                               
EditColors.tryAddColor(colorName, lf);
+                                                                       }
+                                                               }
+                                                               colNode = 
colNode.nextSibling();
+                                                       }
+                                               }
+                                               PAGE = PAGE.nextSibling();
                                        }
                                }
                        }
-                       if (ext == "acb")                       // Adobe color 
book format
+               }
+               else if (ext == "aco")                  // Adobe color swatch 
format
+               {
+                       QFile fiC(fileName);
+                       if (fiC.open(QIODevice::ReadOnly))
                        {
-                               QFile fiC(fileName);
-                               if (fiC.open(QIODevice::ReadOnly))
+                               ScColor lf = ScColor();
+                               QDataStream ts(&fiC);
+                               ts.setByteOrder(QDataStream::BigEndian);
+                               quint16 vers = 0;
+                               ts >> vers;
+                               if (vers == 1)
                                {
-                                       ScColor lf = ScColor();
-                                       quint16 vers = 0;
-                                       quint32 signature;
-                                       QDataStream ts(&fiC);
-                                       ts.setByteOrder(QDataStream::BigEndian);
-                                       ts >> signature;
-                                       ts >> vers;
-                                       if ((signature == 0x38424342) && (vers 
== 1))
+                                       quint16 count1 = 0;
+                                       quint16 count2 = 0;
+                                       ts >> count1;
+                                       qint64 pos = ts.device()->pos();
+                                       if (pos + count1 * 10 < fiC.size())
                                        {
-                                               quint16 vendor, numcolors, 
colType;
-                                               ts >> vendor;
-//                                             QString title           = 
readAdobeUniCodeString(ts);
-//                                             QString prefix          = 
readAdobeUniCodeString(ts);
-//                                             QString postfix         = 
readAdobeUniCodeString(ts);
-//                                             QString description     = 
readAdobeUniCodeString(ts);
-                                               ts >> numcolors;
-                                               ts.skipRawData(4);
-                                               ts >> colType;
-                                               for (quint16 cc = 0; cc < 
numcolors; cc++)
-                                               {
-                                                       QString name = 
readAdobeUniCodeString(ts);
-                                                       if (vendor == 3000)
-                                                               
name.prepend("ANPA");
-                                                       else if (vendor == 3001)
-                                                               
name.prepend("Focoltone");
-                                                       else if (vendor == 3002)
-                                                               
name.prepend("PantoneCoated");
-                                                       else if (vendor == 3003)
-                                                               
name.prepend("PantoneProcess");
-                                                       else if (vendor == 3004)
-                                                               
name.prepend("PantoneProSlim");
-                                                       else if (vendor == 3005)
-                                                               
name.prepend("PantoneUncoated");
-                                                       else if (vendor == 3006)
-                                                               
name.prepend("Toyo");
-                                                       else if (vendor == 3007)
-                                                               
name.prepend("Trumatch");
-                                                       else if (vendor == 3008)
-                                                               
name.prepend("HKSE");
-                                                       else if (vendor == 3009)
-                                                               
name.prepend("HKSK");
-                                                       else if (vendor == 3010)
-                                                               
name.prepend("HKSN");
-                                                       else if (vendor == 3011)
-                                                               
name.prepend("HKSZ");
-                                                       else if (vendor == 3012)
-                                                               
name.prepend("DIC");
-                                                       else if (vendor == 3020)
-                                                               
name.prepend("PantonePastelCoated");
-                                                       else if (vendor == 3021)
-                                                               
name.prepend("PantonePastelUncoated");
-                                                       else if (vendor == 3022)
-                                                               
name.prepend("PantoneMetallic");
-                                                       ts.skipRawData(6);
-                                                       quint8 componentR, 
componentG, componentB, componentK;
-                                                       ts >> componentR >> 
componentG >> componentB;
-                                                       if (colType == 2)
-                                                               ts >> 
componentK;
-                                                       if (!name.isEmpty())
-                                                       {
-                                                               bool validColor 
= false;
-                                                               if (colType == 
0)                       // RBG
+                                               ts.skipRawData(count1 * 10);
+                                               ts >> vers >> count2;
+                                               if ((vers == 2) && (count1 == 
count2))
+                                               {
+                                                       for (quint16 cc = 0; cc 
< count2; cc++)
+                                                       {
+                                                               quint16 colType;
+                                                               quint16 
componentR, componentG, componentB, componentK;
+                                                               ts >> colType 
>> componentR >> componentG >> componentB >> componentK;
+                                                               QString name = 
readAdobeUniCodeString(ts);
+                                                               if 
(!name.isEmpty())
                                                                {
-                                                                       
lf.setRgbColor(componentR, componentG, componentB);
-                                                                       
validColor = true;
+                                                                       bool 
validColor = false;
+                                                                       if 
(colType == 0)                       // RBG
+                                                                       {
+                                                                               
lf.setRgbColor(componentR >> 8, componentG >> 8, componentB >> 8);
+                                                                               
validColor = true;
+                                                                       }
+                                                                       else if 
(colType == 1)          // HSB
+                                                                       {
+                                                                               
uchar hc, sc, bc;
+                                                                               
hc = componentR >> 8;
+                                                                               
sc = componentG >> 8;
+                                                                               
bc = componentB >> 8;
+                                                                               
HSVTORGB(hc, sc, bc);
+                                                                               
lf.setRgbColor(hc, sc, bc);
+                                                                               
validColor = true;
+                                                                       }
+                                                                       else if 
(colType == 2)          // CMYK
+                                                                       {
+                                                                               
lf.setColor(255 - (componentR >> 8), 255 - (componentG >> 8), 255 - (componentB 
>> 8), 255 - (componentK >> 8));
+                                                                               
validColor = true;
+                                                                       }
+                                                                       else if 
(colType == 8)          // Grayscale
+                                                                       {
+                                                                               
lf.setColor(0, 0, 0, qRound((componentK / 10000.0) * 255));
+                                                                               
validColor = true;
+                                                                       }
+                                                                       if 
(validColor)
+                                                                       {
+                                                                               
lf.setSpotColor(false);
+                                                                               
lf.setRegistrationColor(false);
+                                                                               
EditColors.tryAddColor(name, lf);
+                                                                       }
                                                                }
-                                                               else if 
(colType == 2)          // CMYK
+                                                       }
+                                               }
+                                       }
+                                       else
+                                       {
+                                               QFileInfo fiCinf(fileName);
+                                               QString baseName = 
fiCinf.baseName();
+                                               baseName.replace(" ", "_");
+                                               for (quint16 cc = 0; cc < 
count1; cc++)
+                                               {
+                                                       quint16 colType;
+                                                       quint16 componentR, 
componentG, componentB, componentK;
+                                                       ts >> colType >> 
componentR >> componentG >> componentB >> componentK;
+                                                       bool validColor = false;
+                                                       if (colType == 0)       
                // RBG
+                                                       {
+                                                               
lf.setRgbColor(componentR >> 8, componentG >> 8, componentB >> 8);
+                                                               validColor = 
true;
+                                                       }
+                                                       else if (colType == 1)  
        // HSB
+                                                       {
+                                                               uchar hc, sc, 
bc;
+                                                               hc = componentR 
>> 8;
+                                                               sc = componentG 
>> 8;
+                                                               bc = componentB 
>> 8;
+                                                               HSVTORGB(hc, 
sc, bc);
+                                                               
lf.setRgbColor(hc, sc, bc);
+                                                               validColor = 
true;
+                                                       }
+                                                       else if (colType == 2)  
        // CMYK
+                                                       {
+                                                               lf.setColor(255 
- (componentR >> 8), 255 - (componentG >> 8), 255 - (componentB >> 8), 255 - 
(componentK >> 8));
+                                                               validColor = 
true;
+                                                       }
+                                                       else if (colType == 8)  
        // Grayscale
+                                                       {
+                                                               lf.setColor(0, 
0, 0, qRound((componentK / 10000.0) * 255));
+                                                               validColor = 
true;
+                                                       }
+                                                       if (validColor)
+                                                       {
+                                                               
lf.setSpotColor(false);
+                                                               
lf.setRegistrationColor(false);
+                                                               QString name = 
baseName+lf.name().toUpper();
+                                                               
EditColors.tryAddColor(name, lf);
+                                                       }
+                                               }
+                                       }
+                               }
+                               fiC.close();
+                       }
+               }
+               else if (ext == "ase")                  // Adobe swatch 
exchange format
+               {
+                       QFile fiC(fileName);
+                       if (fiC.open(QIODevice::ReadOnly))
+                       {
+                               ScColor lf = ScColor();
+                               QDataStream ts(&fiC);
+                               ts.setByteOrder(QDataStream::BigEndian);
+                               
ts.setFloatingPointPrecision(QDataStream::SinglePrecision);
+                               quint16 vers1 = 0;
+                               quint16 vers2 = 0;
+                               quint32 signature;
+                               ts >> signature;
+                               ts >> vers1 >> vers2;
+                               if ((signature == 0x41534546) && (vers1 == 1) 
&& (vers2 == 0))
+                               {
+                                       QString blockName;
+                                       quint32 numBlocks;
+                                       ts >> numBlocks;
+                                       for (quint32 n = 0; n < numBlocks; n++)
+                                       {
+                                               quint16 blockType;
+                                               quint32 blockLen;
+                                               ts >> blockType;
+                                               ts >> blockLen;
+                                               if (blockType == 0xC001)
+                                                       blockName = 
readAdobeUniCodeString16(ts);
+                                               else if (blockType == 0x0001)
+                                               {
+                                                       if (blockName.isEmpty())
+                                                               blockName = 
fi.baseName();
+                                                       QString Cname = 
readAdobeUniCodeString16(ts);
+                                                       quint32 clrType;
+                                                       quint16 spotMode;
+                                                       ts >> clrType;
+                                                       if (clrType == 
0x52474220)              // RGB
+                                                       {
+                                                               float r, g, b;
+                                                               ts >> r >> g >> 
b;
+                                                               ts >> spotMode;
+                                                               
lf.setRgbColorF(r, g, b);
+                                                               
lf.setSpotColor(spotMode == 1);
+                                                               
lf.setRegistrationColor(false);
+                                                               if 
(Cname.isEmpty())
                                                                {
-                                                                       
lf.setColor(255 - componentR, 255 - componentG, 255 - componentB, 255 - 
componentK);
-                                                                       
validColor = true;
+                                                                       Cname = 
blockName + QString("#%1%2%3").arg(qRound(255 * 
r),2,16,QChar('0')).arg(qRound(255 * g),2,16,QChar('0')).arg(qRound(255 * 
b),2,16,QChar('0')).toUpper();
+                                                                       
Cname.replace(" ","_");
                                                                }
-                                                               if (validColor)
+                                                               
EditColors.tryAddColor(Cname, lf);
+                                                       }
+                                                       else if (clrType == 
0x434D594B) // CMYK
+                                                       {
+                                                               float c, m, y, 
k;
+                                                               ts >> c >> m >> 
y >> k;
+                                                               ts >> spotMode;
+                                                               lf.setColorF(c, 
m, y, k);
+                                                               
lf.setSpotColor(spotMode == 1);
+                                                               
lf.setRegistrationColor(false);
+                                                               if 
(Cname.isEmpty())
                                                                {
-                                                                       
lf.setSpotColor(false);
-                                                                       
lf.setRegistrationColor(false);
-                                                                       
EditColors.tryAddColor(name, lf);
+                                                                       Cname = 
blockName + QString("#%1%2%3%4").arg(qRound(255 * 
c),2,16,QChar('0')).arg(qRound(255 * m),2,16,QChar('0')).arg(qRound(255 * 
y),2,16,QChar('0')).arg(qRound(255 * k),2,16,QChar('0')).toUpper();
+                                                                       
Cname.replace(" ","_");
                                                                }
-                                                       }
-                                               }
-                                               fiC.close();
+                                                               
EditColors.tryAddColor(Cname, lf);
+                                                       }
+                                                       else if (clrType == 
0x47726179) // Gray
+                                                       {
+                                                               float g;
+                                                               ts >> g;
+                                                               ts >> spotMode;
+                                                               lf.setColorF(0, 
0, 0, g);
+                                                               
lf.setSpotColor(spotMode == 1);
+                                                               
lf.setRegistrationColor(false);
+                                                               if 
(Cname.isEmpty())
+                                                               {
+                                                                       Cname = 
blockName + QString("#000000%1").arg(qRound(255 * g),2,16,QChar('0')).toUpper();
+                                                                       
Cname.replace(" ","_");
+                                                               }
+                                                               
EditColors.tryAddColor(Cname, lf);
+                                                       }
+                                                       else if (clrType == 
0x4C414220) // Lab
+                                                       {
+                                                               float L, a, b;
+                                                               ts >> L >> a >> 
b;
+                                                               ts >> spotMode;
+                                                               
lf.setLabColor(L * 100.0, a, b);
+                                                               
lf.setSpotColor(spotMode == 1);
+                                                               
lf.setRegistrationColor(false);
+                                                               if 
(Cname.isEmpty())
+                                                               {
+                                                                       Cname = 
blockName + QString("_%1_%2_%3").arg(qRound(L * 
100)).arg(qRound(a)).arg(qRound(b));
+                                                                       
Cname.replace(" ","_");
+                                                               }
+                                                               
EditColors.tryAddColor(Cname, lf);
+                                                       }
+                                               }
                                        }
-                                       else                                    
// try AutoCAD XML format
+                               }
+                               fiC.close();
+                       }
+               }
+               else if (ext == "skp")                  // Sk1 palette
+               {
+                       QFile fiC(fileName);
+                       if (fiC.open(QIODevice::ReadOnly))
+                       {
+                               bool isCMYK = false;
+                               QByteArray docBytes("");
+                               loadRawText(fileName, docBytes);
+                               QString docText("");
+                               docText = QString::fromUtf8(docBytes);
+                               QDomDocument docu("scridoc");
+                               docu.setContent(docText);
+                               ScColor lf = ScColor();
+                               QDomElement elem = docu.documentElement();
+                               QDomNode PAGE = elem.firstChild();
+                               while(!PAGE.isNull())
+                               {
+                                       QDomElement pg = PAGE.toElement();
+                                       if(pg.tagName() == "description")
                                        {
-                                               fiC.close();
-                                               QByteArray docBytes("");
-                                               loadRawText(fileName, docBytes);
+                                               if (pg.attribute("type", "") == 
"CMYK")
+                                                       isCMYK = true;
+                                       }
+                                       if(pg.tagName() == "color")
+                                       {
+                                               QString Cname;
+                                               if (isCMYK)
+                                               {
+                                                       double c, m, y, k;
+                                                       c = pg.attribute("c", 
"0").toDouble();
+                                                       m = pg.attribute("m", 
"0").toDouble();
+                                                       y = pg.attribute("y", 
"0").toDouble();
+                                                       k = pg.attribute("k", 
"0").toDouble();
+                                                       Cname = 
pg.attribute("name", "");
+                                                       if (!Cname.isEmpty())
+                                                       {
+                                                               lf.setColorF(c, 
m, y, k);
+                                                               
lf.setSpotColor(false);
+                                                               
lf.setRegistrationColor(false);
+                                                               
EditColors.tryAddColor(Cname, lf);
+                                                       }
+                                               }
+                                               else
+                                               {
+                                                       double r, g, b;
+                                                       r = pg.attribute("r", 
"0").toDouble();
+                                                       g = pg.attribute("g", 
"0").toDouble();
+                                                       b = pg.attribute("b", 
"0").toDouble();
+                                                       Cname = 
pg.attribute("name", "");
+                                                       if (!Cname.isEmpty())
+                                                       {
+                                                               
lf.setRgbColorF(r, g, b);
+                                                               
lf.setSpotColor(false);
+                                                               
lf.setRegistrationColor(false);
+                                                               
EditColors.tryAddColor(Cname, lf);
+                                                       }
+                                               }
+                                       }
+                                       PAGE=PAGE.nextSibling();
+                               }
+                       }
+                       fiC.close();
+               }
+               else if (ext == "sbz")
+               {
+                       ScZipHandler *uz = new ScZipHandler();
+                       if (uz->open(fileName))
+                       {
+                               if (uz->contains("swatchbook.xml"))
+                               {
+                                       QByteArray docBytes;
+                                       if (uz->read("swatchbook.xml", 
docBytes))
+                                       {
                                                QString docText("");
                                                docText = 
QString::fromUtf8(docBytes);
                                                QDomDocument docu("scridoc");
-                                               if (!docu.setContent(docText))
-                                                       return false;
-                                               QDomElement elem = 
docu.documentElement();
-                                               QDomNode PAGE = 
elem.firstChild();
-                                               while(!PAGE.isNull())
-                                               {
-                                                       QDomElement pg = 
PAGE.toElement();
-                                                       if (pg.tagName() == 
"colorPage")
-                                                       {
-                                                               QDomNode 
colNode = pg.firstChild();
-                                                               
while(!colNode.isNull())
+                                               if (docu.setContent(docText))
+                                               {
+                                                       QDomElement docElem = 
docu.documentElement();
+                                                       for(QDomElement drawPag 
= docElem.firstChildElement(); !drawPag.isNull(); drawPag = 
drawPag.nextSiblingElement())
+                                                       {
+                                                               if 
(drawPag.tagName() == "materials")
                                                                {
-                                                                       
QDomElement cg = colNode.toElement();
-                                                                       if 
(cg.tagName() == "colorEntry")
+                                                                       
for(QDomElement spf = drawPag.firstChildElement(); !spf.isNull(); spf = 
spf.nextSiblingElement() )
                                                                        {
-                                                                               
int r (0), g(0), b(0);
-                                                                               
QString colorName = "";
-                                                                               
QDomNode colEntry = cg.firstChild();
-                                                                               
while(!colEntry.isNull())
+                                                                               
if (spf.tagName() == "color")
                                                                                
{
-                                                                               
        QDomElement cc = colEntry.toElement();
-                                                                               
        if (cc.tagName() == "colorName")
-                                                                               
                colorName = cc.text();
-                                                                               
        else if (cc.tagName() == "RGB8")
+                                                                               
        bool isSpot = spf.attribute("usage") == "spot";
+                                                                               
        QString colorName = "";
+                                                                               
        ScColor tmp;
+                                                                               
        tmp.setRegistrationColor(false);
+                                                                               
        for(QDomElement spp = spf.firstChildElement(); !spp.isNull(); spp = 
spp.nextSiblingElement() )
                                                                                
        {
-                                                                               
                QDomNode colVal = cc.firstChild();
-                                                                               
                while(!colVal.isNull())
+                                                                               
                if (spp.tagName() == "metadata")
                                                                                
                {
-                                                                               
                        QDomElement cv = colVal.toElement();
-                                                                               
                        if (cv.tagName() == "red")
-                                                                               
                                r = cv.text().toInt();
-                                                                               
                        else if (cv.tagName() == "green")
-                                                                               
                                g = cv.text().toInt();
-                                                                               
                        else if (cv.tagName() == "blue")
-                                                                               
                                b = cv.text().toInt();
-                                                                               
                        colVal = colVal.nextSibling();
+                                                                               
                        for(QDomElement spm = spp.firstChildElement(); 
!spm.isNull(); spm = spm.nextSiblingElement() )
+                                                                               
                        {
+                                                                               
                                if (spm.tagName() == "dc:identifier")
+                                                                               
                                        colorName = spm.text();
+                                                                               
                        }
+                                                                               
                }
+                                                                               
                else if (spp.tagName() == "values")
+                                                                               
                {
+                                                                               
                        QString colorVals = spp.text();
+                                                                               
                        ScTextStream CoE(&colorVals, QIODevice::ReadOnly);
+                                                                               
                        if (spp.attribute("model") == "Lab")
+                                                                               
                        {
+                                                                               
                                double inC[3];
+                                                                               
                                CoE >> inC[0];
+                                                                               
                                CoE >> inC[1];
+                                                                               
                                CoE >> inC[2];
+                                                                               
                                tmp.setLabColor(inC[0], inC[1], inC[2]);
+                                                                               
                                tmp.setSpotColor(isSpot);
+                                                                               
                        }
+                                                                               
                        else if (spp.attribute("model") == "CMYK")
+                                                                               
                        {
+                                                                               
                                double c, m, y, k;
+                                                                               
                                CoE >> c >> m >> y >> k;
+                                                                               
                                tmp.setColorF(c, m, y, k);
+                                                                               
                                tmp.setSpotColor(isSpot);
+                                                                               
                        }
+                                                                               
                        else if (spp.attribute("model") == "RGB")
+                                                                               
                        {
+                                                                               
                                double r, g, b;
+                                                                               
                                CoE >> r >> g >> b;
+                                                                               
                                tmp.setRgbColorF(r, g, b);
+                                                                               
                                tmp.setSpotColor(false);
+                                                                               
                        }
                                                                                
                }
                                                                                
        }
-                                                                               
        colEntry = colEntry.nextSibling();
-                                                                               
}
-                                                                               
if (!colorName.isEmpty())
-                                                                               
{
-                                                                               
        lf.setRgbColor(r, g, b);
-                                                                               
        lf.setSpotColor(false);
-                                                                               
        lf.setRegistrationColor(false);
-                                                                               
        EditColors.tryAddColor(colorName, lf);
+                                                                               
        if (!colorName.isEmpty())
+                                                                               
                EditColors.tryAddColor(colorName, tmp);
                                                                                
}
                                                                        }
-                                                                       colNode 
= colNode.nextSibling();
                                                                }
                                                        }
-                                                       PAGE = 
PAGE.nextSibling();
                                                }
                                        }
                                }
                        }
-                       else if (ext == "aco")                  // Adobe color 
swatch format
+                       delete uz;
+               }
+               else                                                    // try 
for OpenOffice, Viva and our own format
+               {
+                       QFile fiC(fileName);
+                       if (fiC.open(QIODevice::ReadOnly))
                        {
-                               QFile fiC(fileName);
-                               if (fiC.open(QIODevice::ReadOnly))
+                               QString ColorEn, Cname;
+                               int Rval, Gval, Bval, Kval;
+                               ScTextStream tsC(&fiC);
+                               ColorEn = tsC.readLine();
+                               bool cus = false;
+                               if (ColorEn.contains("OpenOffice"))
+                                       cus = true;
+                               if ((ColorEn.startsWith("<?xml version=")) || 
(ColorEn.contains("VivaColors")))
                                {
-                                       ScColor lf = ScColor();
-                                       QDataStream ts(&fiC);
-                                       ts.setByteOrder(QDataStream::BigEndian);
-                                       quint16 vers = 0;
-                                       ts >> vers;
-                                       if (vers == 1)
-                                       {
-                                               quint16 count1 = 0;
-                                               quint16 count2 = 0;
-                                               ts >> count1;
-                                               qint64 pos = ts.device()->pos();
-                                               if (pos + count1 * 10 < 
fiC.size())
-                                               {
-                                                       ts.skipRawData(count1 * 
10);
-                                                       ts >> vers >> count2;
-                                                       if ((vers == 2) && 
(count1 == count2))
-                                                       {
-                                                               for (quint16 cc 
= 0; cc < count2; cc++)
-                                                               {
-                                                                       quint16 
colType;
-                                                                       quint16 
componentR, componentG, componentB, componentK;
-                                                                       ts >> 
colType >> componentR >> componentG >> componentB >> componentK;
-                                                                       QString 
name = readAdobeUniCodeString(ts);
-                                                                       if 
(!name.isEmpty())
-                                                                       {
-                                                                               
bool validColor = false;
-                                                                               
if (colType == 0)                       // RBG
-                                                                               
{
-                                                                               
        lf.setRgbColor(componentR >> 8, componentG >> 8, componentB >> 8);
-                                                                               
        validColor = true;
-                                                                               
}
-                                                                               
else if (colType == 1)          // HSB
-                                                                               
{
-                                                                               
        uchar hc, sc, bc;
-                                                                               
        hc = componentR >> 8;
-                                                                               
        sc = componentG >> 8;
-                                                                               
        bc = componentB >> 8;
-                                                                               
        HSVTORGB(hc, sc, bc);
-                                                                               
        lf.setRgbColor(hc, sc, bc);
-                                                                               
        validColor = true;
-                                                                               
}
-                                                                               
else if (colType == 2)          // CMYK
-                                                                               
{
-                                                                               
        lf.setColor(255 - (componentR >> 8), 255 - (componentG >> 8), 255 - 
(componentB >> 8), 255 - (componentK >> 8));
-                                                                               
        validColor = true;
-                                                                               
}
-                                                                               
else if (colType == 8)          // Grayscale
-                                                                               
{
-                                                                               
        lf.setColor(0, 0, 0, qRound((componentK / 10000.0) * 255));
-                                                                               
        validColor = true;
-                                                                               
}
-                                                                               
if (validColor)
-                                                                               
{
-                                                                               
        lf.setSpotColor(false);
-                                                                               
        lf.setRegistrationColor(false);
-                                                                               
        EditColors.tryAddColor(name, lf);
-                                                                               
}
-                                                                       }
-                                                               }
-                                                       }
-                                               }
-                                               else
-                                               {
-                                                       QFileInfo 
fiCinf(fileName);
-                                                       QString baseName = 
fiCinf.baseName();
-                                                       baseName.replace(" ", 
"_");
-                                                       for (quint16 cc = 0; cc 
< count1; cc++)
-                                                       {
-                                                               quint16 colType;
-                                                               quint16 
componentR, componentG, componentB, componentK;
-                                                               ts >> colType 
>> componentR >> componentG >> componentB >> componentK;
-                                                               bool validColor 
= false;
-                                                               if (colType == 
0)                       // RBG
-                                                               {
-                                                                       
lf.setRgbColor(componentR >> 8, componentG >> 8, componentB >> 8);
-                                                                       
validColor = true;
-                                                               }
-                                                               else if 
(colType == 1)          // HSB
-                                                               {
-                                                                       uchar 
hc, sc, bc;
-                                                                       hc = 
componentR >> 8;
-                                                                       sc = 
componentG >> 8;
-                                                                       bc = 
componentB >> 8;
-                                                                       
HSVTORGB(hc, sc, bc);
-                                                                       
lf.setRgbColor(hc, sc, bc);
-                                                                       
validColor = true;
-                                                               }
-                                                               else if 
(colType == 2)          // CMYK
-                                                               {
-                                                                       
lf.setColor(255 - (componentR >> 8), 255 - (componentG >> 8), 255 - (componentB 
>> 8), 255 - (componentK >> 8));
-                                                                       
validColor = true;
-                                                               }
-                                                               else if 
(colType == 8)          // Grayscale
-                                                               {
-                                                                       
lf.setColor(0, 0, 0, qRound((componentK / 10000.0) * 255));
-                                                                       
validColor = true;
-                                                               }
-                                                               if (validColor)
-                                                               {
-                                                                       
lf.setSpotColor(false);
-                                                                       
lf.setRegistrationColor(false);
-                                                                       QString 
name = baseName+lf.name().toUpper();
-                                                                       
EditColors.tryAddColor(name, lf);
-                                                               }
-                                                       }
-                                               }
-                                       }
-                                       fiC.close();
-                               }
-                       }
-                       else if (ext == "ase")                  // Adobe swatch 
exchange format
-                       {
-                               QFile fiC(fileName);
-                               if (fiC.open(QIODevice::ReadOnly))
-                               {
-                                       ScColor lf = ScColor();
-                                       QDataStream ts(&fiC);
-                                       ts.setByteOrder(QDataStream::BigEndian);
-                                       
ts.setFloatingPointPrecision(QDataStream::SinglePrecision);
-                                       quint16 vers1 = 0;
-                                       quint16 vers2 = 0;
-                                       quint32 signature;
-                                       ts >> signature;
-                                       ts >> vers1 >> vers2;
-                                       if ((signature == 0x41534546) && (vers1 
== 1) && (vers2 == 0))
-                                       {
-                                               QString blockName;
-                                               quint32 numBlocks;
-                                               ts >> numBlocks;
-                                               for (quint32 n = 0; n < 
numBlocks; n++)
-                                               {
-                                                       quint16 blockType;
-                                                       quint32 blockLen;
-                                                       ts >> blockType;
-                                                       ts >> blockLen;
-                                                       if (blockType == 0xC001)
-                                                               blockName = 
readAdobeUniCodeString16(ts);
-                                                       else if (blockType == 
0x0001)
-                                                       {
-                                                               if 
(blockName.isEmpty())
-                                                                       
blockName = fi.baseName();
-                                                               QString Cname = 
readAdobeUniCodeString16(ts);
-                                                               quint32 clrType;
-                                                               quint16 
spotMode;
-                                                               ts >> clrType;
-                                                               if (clrType == 
0x52474220)              // RGB
-                                                               {
-                                                                       float 
r, g, b;
-                                                                       ts >> r 
>> g >> b;
-                                                                       ts >> 
spotMode;
-                                                                       
lf.setRgbColorF(r, g, b);
-                                                                       
lf.setSpotColor(spotMode == 1);
-                                                                       
lf.setRegistrationColor(false);
-                                                                       if 
(Cname.isEmpty())
-                                                                       {
-                                                                               
Cname = blockName + QString("#%1%2%3").arg(qRound(255 * 
r),2,16,QChar('0')).arg(qRound(255 * g),2,16,QChar('0')).arg(qRound(255 * 
b),2,16,QChar('0')).toUpper();
-                                                                               
Cname.replace(" ","_");
-                                                                       }
-                                                                       
EditColors.tryAddColor(Cname, lf);
-                                                               }
-                                                               else if 
(clrType == 0x434D594B) // CMYK
-                                                               {
-                                                                       float 
c, m, y, k;
-                                                                       ts >> c 
>> m >> y >> k;
-                                                                       ts >> 
spotMode;
-                                                                       
lf.setColorF(c, m, y, k);
-                                                                       
lf.setSpotColor(spotMode == 1);
-                                                                       
lf.setRegistrationColor(false);
-                                                                       if 
(Cname.isEmpty())
-                                                                       {
-                                                                               
Cname = blockName + QString("#%1%2%3%4").arg(qRound(255 * 
c),2,16,QChar('0')).arg(qRound(255 * m),2,16,QChar('0')).arg(qRound(255 * 
y),2,16,QChar('0')).arg(qRound(255 * k),2,16,QChar('0')).toUpper();
-                                                                               
Cname.replace(" ","_");
-                                                                       }
-                                                                       
EditColors.tryAddColor(Cname, lf);
-                                                               }
-                                                               else if 
(clrType == 0x47726179) // Gray
-                                                               {
-                                                                       float g;
-                                                                       ts >> g;
-                                                                       ts >> 
spotMode;
-                                                                       
lf.setColorF(0, 0, 0, g);
-                                                                       
lf.setSpotColor(spotMode == 1);
-                                                                       
lf.setRegistrationColor(false);
-                                                                       if 
(Cname.isEmpty())
-                                                                       {
-                                                                               
Cname = blockName + QString("#000000%1").arg(qRound(255 * 
g),2,16,QChar('0')).toUpper();
-                                                                               
Cname.replace(" ","_");
-                                                                       }
-                                                                       
EditColors.tryAddColor(Cname, lf);
-                                                               }
-                                                               else if 
(clrType == 0x4C414220) // Lab
-                                                               {
-                                                                       float 
L, a, b;
-                                                                       ts >> L 
>> a >> b;
-                                                                       ts >> 
spotMode;
-                                                                       
lf.setLabColor(L * 100.0, a, b);
-                                                                       
lf.setSpotColor(spotMode == 1);
-                                                                       
lf.setRegistrationColor(false);
-                                                                       if 
(Cname.isEmpty())
-                                                                       {
-                                                                               
Cname = blockName + QString("_%1_%2_%3").arg(qRound(L * 
100)).arg(qRound(a)).arg(qRound(b));
-                                                                               
Cname.replace(" ","_");
-                                                                       }
-                                                                       
EditColors.tryAddColor(Cname, lf);
-                                                               }
-                                                       }
-                                               }
-                                       }
-                                       fiC.close();
-                               }
-                       }
-                       else if (ext == "skp")                  // Sk1 palette
-                       {
-                               QFile fiC(fileName);
-                               if (fiC.open(QIODevice::ReadOnly))
-                               {
-                                       bool isCMYK = false;
                                        QByteArray docBytes("");
                                        loadRawText(fileName, docBytes);
                                        QString docText("");
@@ -1140,360 +1291,210 @@
                                        docu.setContent(docText);
                                        ScColor lf = ScColor();
                                        QDomElement elem = 
docu.documentElement();
+                                       QString dTag = "";
+                                       dTag = elem.tagName();
+                                       QString nameMask = "%1";
+                                       nameMask = elem.attribute("mask", "%1");
                                        QDomNode PAGE = elem.firstChild();
-                                       while(!PAGE.isNull())
+                                       while (!PAGE.isNull())
                                        {
                                                QDomElement pg = 
PAGE.toElement();
-                                               if(pg.tagName() == 
"description")
-                                               {
-                                                       if 
(pg.attribute("type", "") == "CMYK")
-                                                               isCMYK = true;
-                                               }
-                                               if(pg.tagName() == "color")
-                                               {
-                                                       QString Cname;
-                                                       if (isCMYK)
-                                                       {
-                                                               double c, m, y, 
k;
-                                                               c = 
pg.attribute("c", "0").toDouble();
-                                                               m = 
pg.attribute("m", "0").toDouble();
-                                                               y = 
pg.attribute("y", "0").toDouble();
-                                                               k = 
pg.attribute("k", "0").toDouble();
-                                                               Cname = 
pg.attribute("name", "");
-                                                               if 
(!Cname.isEmpty())
+                                               if (pg.tagName()=="COLOR" && 
pg.attribute("NAME")!=CommonStrings::None)
+                                               {
+                                                       if 
(pg.hasAttribute("SPACE"))
+                                                       {
+                                                               QString space = 
pg.attribute("SPACE");
+                                                               if (space == 
"CMYK")
                                                                {
-                                                                       
lf.setColorF(c, m, y, k);
-                                                                       
lf.setSpotColor(false);
-                                                                       
lf.setRegistrationColor(false);
-                                                                       
EditColors.tryAddColor(Cname, lf);
+                                                                       double 
c = pg.attribute("C", "0").toDouble() / 100.0;
+                                                                       double 
m = pg.attribute("M", "0").toDouble() / 100.0;
+                                                                       double 
y = pg.attribute("Y", "0").toDouble() / 100.0;
+                                                                       double 
k = pg.attribute("K", "0").toDouble() / 100.0;
+                                                                       
lf.setCmykColorF(c, m, y, k);
                                                                }
-                                                       }
-                                                       else
-                                                       {
-                                                               double r, g, b;
-                                                               r = 
pg.attribute("r", "0").toDouble();
-                                                               g = 
pg.attribute("g", "0").toDouble();
-                                                               b = 
pg.attribute("b", "0").toDouble();
-                                                               Cname = 
pg.attribute("name", "");
-                                                               if 
(!Cname.isEmpty())
+                                                               else if (space 
== "RGB")
                                                                {
+                                                                       double 
r = pg.attribute("R", "0").toDouble() / 255.0;
+                                                                       double 
g = pg.attribute("G", "0").toDouble() / 255.0;
+                                                                       double 
b = pg.attribute("B", "0").toDouble() / 255.0;
                                                                        
lf.setRgbColorF(r, g, b);
-                                                                       
lf.setSpotColor(false);
-                                                                       
lf.setRegistrationColor(false);
-                                                                       
EditColors.tryAddColor(Cname, lf);
                                                                }
-                                                       }
-                                               }
-                                               PAGE=PAGE.nextSibling();
-                                       }
-                               }
-                               fiC.close();
-                       }
-                       else if (ext == "sbz")
-                       {
-                               ScZipHandler *uz = new ScZipHandler();
-                               if (uz->open(fileName))
-                               {
-                                       if (uz->contains("swatchbook.xml"))
-                                       {
-                                               QByteArray docBytes;
-                                               if (uz->read("swatchbook.xml", 
docBytes))
-                                               {
-                                                       QString docText("");
-                                                       docText = 
QString::fromUtf8(docBytes);
-                                                       QDomDocument 
docu("scridoc");
-                                                       if 
(docu.setContent(docText))
-                                                       {
-                                                               QDomElement 
docElem = docu.documentElement();
-                                                               for(QDomElement 
drawPag = docElem.firstChildElement(); !drawPag.isNull(); drawPag = 
drawPag.nextSiblingElement())
-                                                               {
-                                                                       if 
(drawPag.tagName() == "materials")
-                                                                       {
-                                                                               
for(QDomElement spf = drawPag.firstChildElement(); !spf.isNull(); spf = 
spf.nextSiblingElement() )
-                                                                               
{
-                                                                               
        if (spf.tagName() == "color")
-                                                                               
        {
-                                                                               
                bool isSpot = spf.attribute("usage") == "spot";
-                                                                               
                QString colorName = "";
-                                                                               
                ScColor tmp;
-                                                                               
                tmp.setRegistrationColor(false);
-                                                                               
                for(QDomElement spp = spf.firstChildElement(); !spp.isNull(); 
spp = spp.nextSiblingElement() )
-                                                                               
                {
-                                                                               
                        if (spp.tagName() == "metadata")
-                                                                               
                        {
-                                                                               
                                for(QDomElement spm = spp.firstChildElement(); 
!spm.isNull(); spm = spm.nextSiblingElement() )
-                                                                               
                                {
-                                                                               
                                        if (spm.tagName() == "dc:identifier")
-                                                                               
                                                colorName = spm.text();
-                                                                               
                                }
-                                                                               
                        }
-                                                                               
                        else if (spp.tagName() == "values")
-                                                                               
                        {
-                                                                               
                                QString colorVals = spp.text();
-                                                                               
                                ScTextStream CoE(&colorVals, 
QIODevice::ReadOnly);
-                                                                               
                                if (spp.attribute("model") == "Lab")
-                                                                               
                                {
-                                                                               
                                        double inC[3];
-                                                                               
                                        CoE >> inC[0];
-                                                                               
                                        CoE >> inC[1];
-                                                                               
                                        CoE >> inC[2];
-                                                                               
                                        tmp.setLabColor(inC[0], inC[1], inC[2]);
-                                                                               
                                        tmp.setSpotColor(isSpot);
-                                                                               
                                }
-                                                                               
                                else if (spp.attribute("model") == "CMYK")
-                                                                               
                                {
-                                                                               
                                        double c, m, y, k;
-                                                                               
                                        CoE >> c >> m >> y >> k;
-                                                                               
                                        tmp.setColorF(c, m, y, k);
-                                                                               
                                        tmp.setSpotColor(isSpot);
-                                                                               
                                }
-                                                                               
                                else if (spp.attribute("model") == "RGB")
-                                                                               
                                {
-                                                                               
                                        double r, g, b;
-                                                                               
                                        CoE >> r >> g >> b;
-                                                                               
                                        tmp.setRgbColorF(r, g, b);
-                                                                               
                                        tmp.setSpotColor(false);
-                                                                               
                                }
-                                                                               
                        }
-                                                                               
                }
-                                                                               
                if (!colorName.isEmpty())
-                                                                               
                        EditColors.tryAddColor(colorName, tmp);
-                                                                               
        }
-                                                                               
}
-                                                                       }
-                                                               }
-                                                       }
-                                               }
-                                       }
-                               }
-                               delete uz;
-                       }
-                       else                                                    
// try for OpenOffice, Viva and our own format
-                       {
-                               QFile fiC(fileName);
-                               if (fiC.open(QIODevice::ReadOnly))
-                               {
-                                       QString ColorEn, Cname;
-                                       int Rval, Gval, Bval, Kval;
-                                       ScTextStream tsC(&fiC);
-                                       ColorEn = tsC.readLine();
-                                       bool cus = false;
-                                       if (ColorEn.contains("OpenOffice"))
-                                               cus = true;
-                                       if ((ColorEn.startsWith("<?xml 
version=")) || (ColorEn.contains("VivaColors")))
-                                       {
-                                               QByteArray docBytes("");
-                                               loadRawText(fileName, docBytes);
-                                               QString docText("");
-                                               docText = 
QString::fromUtf8(docBytes);
-                                               QDomDocument docu("scridoc");
-                                               docu.setContent(docText);
-                                               ScColor lf = ScColor();
-                                               QDomElement elem = 
docu.documentElement();
-                                               QString dTag = "";
-                                               dTag = elem.tagName();
-                                               QString nameMask = "%1";
-                                               nameMask = 
elem.attribute("mask", "%1");
-                                               QDomNode PAGE = 
elem.firstChild();
-                                               while (!PAGE.isNull())
-                                               {
-                                                       QDomElement pg = 
PAGE.toElement();
-                                                       if 
(pg.tagName()=="COLOR" && pg.attribute("NAME")!=CommonStrings::None)
-                                                       {
-                                                               if 
(pg.hasAttribute("SPACE"))
-                                                               {
-                                                                       QString 
space = pg.attribute("SPACE");
-                                                                       if 
(space == "CMYK")
-                                                                       {
-                                                                               
double c = pg.attribute("C", "0").toDouble() / 100.0;
-                                                                               
double m = pg.attribute("M", "0").toDouble() / 100.0;
-                                                                               
double y = pg.attribute("Y", "0").toDouble() / 100.0;
-                                                                               
double k = pg.attribute("K", "0").toDouble() / 100.0;
-                                                                               
lf.setCmykColorF(c, m, y, k);
-                                                                       }
-                                                                       else if 
(space == "RGB")
-                                                                       {
-                                                                               
double r = pg.attribute("R", "0").toDouble() / 255.0;
-                                                                               
double g = pg.attribute("G", "0").toDouble() / 255.0;
-                                                                               
double b = pg.attribute("B", "0").toDouble() / 255.0;
-                                                                               
lf.setRgbColorF(r, g, b);
-                                                                       }
-                                                                       else if 
(space == "Lab")
-                                                                       {
-                                                                               
double L = pg.attribute("L", "0").toDouble();
-                                                                               
double a = pg.attribute("A", "0").toDouble();
-                                                                               
double b = pg.attribute("B", "0").toDouble();
-                                                                               
lf.setLabColor(L, a, b);
-                                                                       }
-                                                               }
-                                                               else if 
(pg.hasAttribute("CMYK"))
-                                                                       
lf.setNamedColor(pg.attribute("CMYK"));
-                                                               else if 
(pg.hasAttribute("RGB"))
-                                                                       
lf.fromQColor(QColor(pg.attribute("RGB")));
-                                                               else
+                                                               else if (space 
== "Lab")
                                                                {
                                                                        double 
L = pg.attribute("L", "0").toDouble();
                                                                        double 
a = pg.attribute("A", "0").toDouble();
                                                                        double 
b = pg.attribute("B", "0").toDouble();
                                                                        
lf.setLabColor(L, a, b);
                                                                }
-                                                               if 
(pg.hasAttribute("Spot"))
-                                                                       
lf.setSpotColor(static_cast<bool>(pg.attribute("Spot").toInt()));
-                                                               else
-                                                                       
lf.setSpotColor(false);
-                                                               if 
(pg.hasAttribute("Register"))
-                                                                       
lf.setRegistrationColor(static_cast<bool>(pg.attribute("Register").toInt()));
-                                                               else
-                                                                       
lf.setRegistrationColor(false);
-                                                               
EditColors.tryAddColor(pg.attribute("NAME"), lf);
-                                                       }
-                                                       else if (pg.tagName() 
== "Gradient")
-                                                       {
-                                                               if 
(dialogGradients != NULL)
+                                                       }
+                                                       else if 
(pg.hasAttribute("CMYK"))
+                                                               
lf.setNamedColor(pg.attribute("CMYK"));
+                                                       else if 
(pg.hasAttribute("RGB"))
+                                                               
lf.fromQColor(QColor(pg.attribute("RGB")));
+                                                       else
+                                                       {
+                                                               double L = 
pg.attribute("L", "0").toDouble();
+                                                               double a = 
pg.attribute("A", "0").toDouble();
+                                                               double b = 
pg.attribute("B", "0").toDouble();
+                                                               
lf.setLabColor(L, a, b);
+                                                       }
+                                                       if 
(pg.hasAttribute("Spot"))
+                                                               
lf.setSpotColor(static_cast<bool>(pg.attribute("Spot").toInt()));
+                                                       else
+                                                               
lf.setSpotColor(false);
+                                                       if 
(pg.hasAttribute("Register"))
+                                                               
lf.setRegistrationColor(static_cast<bool>(pg.attribute("Register").toInt()));
+                                                       else
+                                                               
lf.setRegistrationColor(false);
+                                                       
EditColors.tryAddColor(pg.attribute("NAME"), lf);
+                                               }
+                                               else if (pg.tagName() == 
"Gradient")
+                                               {
+                                                       if (dialogGradients != 
NULL)
+                                                       {
+                                                               VGradient gra = 
VGradient(VGradient::linear);
+                                                               
gra.clearStops();
+                                                               QDomNode grad = 
pg.firstChild();
+                                                               
while(!grad.isNull())
                                                                {
-                                                                       
VGradient gra = VGradient(VGradient::linear);
-                                                                       
gra.clearStops();
-                                                                       
QDomNode grad = pg.firstChild();
-                                                                       
while(!grad.isNull())
-                                                                       {
-                                                                               
QDomElement stop = grad.toElement();
-                                                                               
QString name = stop.attribute("NAME");
-                                                                               
double ramp  = ScCLocale::toDoubleC(stop.attribute("RAMP"), 0.0);
-                                                                               
int shade    = stop.attribute("SHADE", "100").toInt();
-                                                                               
double opa   = ScCLocale::toDoubleC(stop.attribute("TRANS"), 1.0);
-                                                                               
QColor color;
-                                                                               
if (name == CommonStrings::None)
-                                                                               
        color = QColor(255, 255, 255, 0);
-                                                                               
else
-                                                                               
{
-                                                                               
        const ScColor& col = EditColors[name];
-                                                                               
        color = ScColorEngine::getShadeColorProof(col, NULL, shade);
-                                                                               
}
-                                                                               
gra.addStop(color, ramp, 0.5, opa, name, shade);
-                                                                               
grad = grad.nextSibling();
-                                                                       }
-                                                                       if 
((!dialogGradients->contains(pg.attribute("Name"))) || (merge))
-                                                                               
dialogGradients->insert(pg.attribute("Name"), gra);
+                                                                       
QDomElement stop = grad.toElement();
+                                                                       QString 
name = stop.attribute("NAME");
+                                                                       double 
ramp  = ScCLocale::toDoubleC(stop.attribute("RAMP"), 0.0);
+                                                                       int 
shade    = stop.attribute("SHADE", "100").toInt();
+                                                                       double 
opa   = ScCLocale::toDoubleC(stop.attribute("TRANS"), 1.0);
+                                                                       QColor 
color;
+                                                                       if 
(name == CommonStrings::None)
+                                                                               
color = QColor(255, 255, 255, 0);
                                                                        else
                                                                        {
-                                                                               
QString tmp;
-                                                                               
QString name = pg.attribute("Name");
-                                                                               
name += "("+tmp.setNum(dialogGradients->count())+")";
-                                                                               
dialogGradients->insert(name, gra);
+                                                                               
const ScColor& col = EditColors[name];
+                                                                               
color = ScColorEngine::getShadeColorProof(col, NULL, shade);
                                                                        }
+                                                                       
gra.addStop(color, ramp, 0.5, opa, name, shade);
+                                                                       grad = 
grad.nextSibling();
                                                                }
-                                                       }
-                                                       else if 
(pg.tagName()=="draw:color" && pg.attribute("draw:name")!=CommonStrings::None)
-                                                       {
-                                                               if 
(pg.hasAttribute("draw:color"))
-                                                                       
lf.setNamedColor(pg.attribute("draw:color"));
+                                                               if 
((!dialogGradients->contains(pg.attribute("Name"))) || (merge))
+                                                                       
dialogGradients->insert(pg.attribute("Name"), gra);
+                                                               else
+                                                               {
+                                                                       QString 
tmp;
+                                                                       QString 
name = pg.attribute("Name");
+                                                                       name += 
"("+tmp.setNum(dialogGradients->count())+")";
+                                                                       
dialogGradients->insert(name, gra);
+                                                               }
+                                                       }
+                                               }
+                                               else if 
(pg.tagName()=="draw:color" && pg.attribute("draw:name")!=CommonStrings::None)
+                                               {
+                                                       if 
(pg.hasAttribute("draw:color"))
+                                                               
lf.setNamedColor(pg.attribute("draw:color"));
+                                                       lf.setSpotColor(false);
+                                                       
lf.setRegistrationColor(false);
+                                                       QString nam = 
pg.attribute("draw:name");
+                                                       if (!nam.isEmpty())
+                                                               
EditColors.tryAddColor(nam, lf);
+                                               }
+                                               else if (dTag == "VivaColors")
+                                               {
+                                                       int cVal = 0;
+                                                       int mVal = 0;
+                                                       int yVal = 0;
+                                                       int kVal = 0;
+                                                       QString nam = 
nameMask.arg(pg.attribute("name"));
+                                                       if 
(pg.attribute("type") == "cmyk")
+                                                       {
+                                                               QDomNode 
colNode = pg.firstChild();
+                                                               
while(!colNode.isNull())
+                                                               {
+                                                                       
QDomElement colVal = colNode.toElement();
+                                                                       if 
(colVal.tagName() == "cyan")
+                                                                               
cVal = colVal.text().toInt();
+                                                                       if 
(colVal.tagName() == "magenta")
+                                                                               
mVal = colVal.text().toInt();
+                                                                       if 
(colVal.tagName() == "yellow")
+                                                                               
yVal = colVal.text().toInt();
+                                                                       if 
(colVal.tagName() == "key")
+                                                                               
kVal = colVal.text().toInt();
+                                                                       colNode 
= colNode.nextSibling();
+                                                               }
+                                                               
lf.setColorF(cVal / 100.0, mVal / 100.0, yVal / 100.0, kVal / 100.0);
                                                                
lf.setSpotColor(false);
                                                                
lf.setRegistrationColor(false);
-                                                               QString nam = 
pg.attribute("draw:name");
                                                                if 
(!nam.isEmpty())
                                                                        
EditColors.tryAddColor(nam, lf);
                                                        }
-                                                       else if (dTag == 
"VivaColors")
-                                                       {
-                                                               int cVal = 0;
-                                                               int mVal = 0;
-                                                               int yVal = 0;
-                                                               int kVal = 0;
-                                                               QString nam = 
nameMask.arg(pg.attribute("name"));
-                                                               if 
(pg.attribute("type") == "cmyk")
+                                                       else if 
(pg.attribute("type") == "rgb")
+                                                       {
+                                                               QDomNode 
colNode = pg.firstChild();
+                                                               
while(!colNode.isNull())
                                                                {
-                                                                       
QDomNode colNode = pg.firstChild();
-                                                                       
while(!colNode.isNull())
-                                                                       {
-                                                                               
QDomElement colVal = colNode.toElement();
-                                                                               
if (colVal.tagName() == "cyan")
-                                                                               
        cVal = colVal.text().toInt();
-                                                                               
if (colVal.tagName() == "magenta")
-                                                                               
        mVal = colVal.text().toInt();
-                                                                               
if (colVal.tagName() == "yellow")
-                                                                               
        yVal = colVal.text().toInt();
-                                                                               
if (colVal.tagName() == "key")
-                                                                               
        kVal = colVal.text().toInt();
-                                                                               
colNode = colNode.nextSibling();
-                                                                       }
-                                                                       
lf.setColorF(cVal / 100.0, mVal / 100.0, yVal / 100.0, kVal / 100.0);
-                                                                       
lf.setSpotColor(false);
-                                                                       
lf.setRegistrationColor(false);
-                                                                       if 
(!nam.isEmpty())
-                                                                               
EditColors.tryAddColor(nam, lf);
+                                                                       
QDomElement colVal = colNode.toElement();
+                                                                       if 
(colVal.tagName() == "red")
+                                                                               
cVal = colVal.text().toInt();
+                                                                       if 
(colVal.tagName() == "green")
+                                                                               
mVal = colVal.text().toInt();
+                                                                       if 
(colVal.tagName() == "blue")
+                                                                               
yVal = colVal.text().toInt();
+                                                                       colNode 
= colNode.nextSibling();
                                                                }
-                                                               else if 
(pg.attribute("type") == "rgb")
-                                                               {
-                                                                       
QDomNode colNode = pg.firstChild();
-                                                                       
while(!colNode.isNull())
-                                                                       {
-                                                                               
QDomElement colVal = colNode.toElement();
-                                                                               
if (colVal.tagName() == "red")
-                                                                               
        cVal = colVal.text().toInt();
-                                                                               
if (colVal.tagName() == "green")
-                                                                               
        mVal = colVal.text().toInt();
-                                                                               
if (colVal.tagName() == "blue")
-                                                                               
        yVal = colVal.text().toInt();
-                                                                               
colNode = colNode.nextSibling();
-                                                                       }
-                                                                       
lf.setRgbColor(cVal, mVal, yVal);
-                                                                       
lf.setSpotColor(false);
-                                                                       
lf.setRegistrationColor(false);
-                                                                       if 
(!nam.isEmpty())
-                                                                               
EditColors.tryAddColor(nam, lf);
-                                                               }
-                                                       }
-                                                       PAGE=PAGE.nextSibling();
-                                               }
+                                                               
lf.setRgbColor(cVal, mVal, yVal);
+                                                               
lf.setSpotColor(false);
+                                                               
lf.setRegistrationColor(false);
+                                                               if 
(!nam.isEmpty())
+                                                                       
EditColors.tryAddColor(nam, lf);
+                                                       }
+                                               }
+                                               PAGE=PAGE.nextSibling();
                                        }
-                                       else
+                               }
+                               else
+                               {
+                                       QString paletteName = "";
+                                       QString dummy;
+                                       if (ColorEn.startsWith("GIMP Palette"))
                                        {
-                                               QString paletteName = "";
-                                               QString dummy;
-                                               if (ColorEn.startsWith("GIMP 
Palette"))
-                                               {
-                                                       ColorEn = 
tsC.readLine();
-                                                       ScTextStream 
CoE(&ColorEn, QIODevice::ReadOnly);
-                                                       CoE >> dummy >> 
paletteName;
-                                               }
-                                               while (!tsC.atEnd())
-                                               {
-                                                       ScColor tmp;
-                                                       ColorEn = 
tsC.readLine();
-                                                       if (ColorEn.length()>0 
&& ColorEn[0]==QChar('#'))
-                                                               continue;
-                                                       ScTextStream 
CoE(&ColorEn, QIODevice::ReadOnly);
-                                                       CoE >> Rval;
-                                                       CoE >> Gval;
-                                                       CoE >> Bval;
-                                                       if (cus)
-                                                       {
-                                                               CoE >> Kval;
-                                                               Cname = 
CoE.readAll().trimmed();
-                                                               
tmp.setColor(Rval, Gval, Bval, Kval);
-                                                       }
+                                               ColorEn = tsC.readLine();
+                                               ScTextStream CoE(&ColorEn, 
QIODevice::ReadOnly);
+                                               CoE >> dummy >> paletteName;
+                                       }
+                                       while (!tsC.atEnd())
+                                       {
+                                               ScColor tmp;
+                                               ColorEn = tsC.readLine();
+                                               if (ColorEn.length()>0 && 
ColorEn[0]==QChar('#'))
+                                                       continue;
+                                               ScTextStream CoE(&ColorEn, 
QIODevice::ReadOnly);
+                                               CoE >> Rval;
+                                               CoE >> Gval;
+                                               CoE >> Bval;
+                                               if (cus)
+                                               {
+                                                       CoE >> Kval;
+                                                       Cname = 
CoE.readAll().trimmed();
+                                                       tmp.setColor(Rval, 
Gval, Bval, Kval);
+                                               }
+                                               else
+                                               {
+                                                       Cname = 
CoE.readAll().trimmed();
+                                                       tmp.setRgbColor(Rval, 
Gval, Bval);
+                                               }
+                                               if (Cname == "Untitled")
+                                                       Cname = "";
+                                               if (Cname.length() == 0)
+                                               {
+                                                       if (!cus)
+                                                               Cname = 
paletteName + 
QString("#%1%2%3").arg(Rval,2,16).arg(Gval,2,16).arg(Bval,2,16).toUpper();
                                                        else
-                                                       {
-                                                               Cname = 
CoE.readAll().trimmed();
-                                                               
tmp.setRgbColor(Rval, Gval, Bval);
-                                                       }
-                                                       if (Cname == "Untitled")
-                                                               Cname = "";
-                                                       if (Cname.length() == 0)
-                                                       {
-                                                               if (!cus)
-                                                                       Cname = 
paletteName + 
QString("#%1%2%3").arg(Rval,2,16).arg(Gval,2,16).arg(Bval,2,16).toUpper();
-                                                               else
-                                                                       Cname = 
paletteName + 
QString("#%1%2%3%4").arg(Rval,2,16).arg(Gval,2,16).arg(Bval,2,16).arg(Kval,2,16).toUpper();
-                                                               Cname.replace(" 
","0");
-                                                       }
-                                                       
EditColors.tryAddColor(Cname, tmp);
-                                               }
+                                                               Cname = 
paletteName + 
QString("#%1%2%3%4").arg(Rval,2,16).arg(Gval,2,16).arg(Bval,2,16).arg(Kval,2,16).toUpper();
+                                                       Cname.replace(" ","0");
+                                               }
+                                               EditColors.tryAddColor(Cname, 
tmp);
                                        }
-                                       fiC.close();
                                }
+                               fiC.close();
                        }
                }
        }
+
        return (EditColors.count() != oldCount);
 }


_______________________________________________
scribus-commit mailing list
[email protected]
http://lists.scribus.net/mailman/listinfo/scribus-commit

Reply via email to