24 #include <QtCore/QFile>
25 #include <QtCore/QTextIStream>
32 class KColorCollectionPrivate
35 KColorCollectionPrivate(
const QString&);
36 KColorCollectionPrivate(
const KColorCollectionPrivate&);
37 ~KColorCollectionPrivate() {}
41 : color(c),
name(n) {}
45 QList<ColorNode> colorList;
52 KColorCollectionPrivate::KColorCollectionPrivate(
const QString &_name)
55 if (
name.isEmpty())
return;
58 if (filename.isEmpty())
return;
60 QFile paletteFile(filename);
61 if (!paletteFile.exists())
return;
62 if (!paletteFile.open(QIODevice::ReadOnly))
return;
66 QString line = QString::fromLocal8Bit(paletteFile.readLine());
67 if (line.indexOf(
" Palette") == -1)
return;
69 while( !paletteFile.atEnd() )
71 line = QString::fromLocal8Bit(paletteFile.readLine());
76 line = line.trimmed();
85 line = line.trimmed();
86 if (line.isEmpty())
continue;
89 if (sscanf(line.toLatin1(),
"%d %d %d%n", &r, &g, &b, &pos) >= 3)
91 r = qBound(0, r, 255);
92 g = qBound(0, g, 255);
93 b = qBound(0, b, 255);
95 colorList.append(ColorNode(
QColor(r, g, b), name));
101 KColorCollectionPrivate::KColorCollectionPrivate(
const KColorCollectionPrivate& p)
102 : colorList(p.colorList), name(p.name), desc(p.desc), editable(p.editable)
113 int strip = strlen(
"colors/");
114 for(QStringList::Iterator it = paletteList.begin();
115 it != paletteList.end();
118 (*it) = (*it).mid(strip);
126 d =
new KColorCollectionPrivate(name);
131 d =
new KColorCollectionPrivate(*p.d);
145 if (!sf.
open())
return false;
147 QTextStream str ( &sf );
150 description =
'#'+description.split(
'\n', QString::KeepEmptyParts).join(
"\n#");
152 str <<
"KDE RGB Palette\n";
153 str << description <<
"\n";
154 foreach (
const KColorCollectionPrivate::ColorNode &node, d->colorList)
157 node.color.getRgb(&r, &g, &b);
158 str << r <<
" " << g <<
" " << b <<
" " << node.name <<
"\n";
197 return (
int) d->colorList.count();
203 if (&p ==
this)
return *
this;
204 d->colorList = p.d->colorList;
207 d->editable = p.d->editable;
214 if ((index < 0) || (index >=
count()))
217 return d->colorList[index].color;
223 for (
int i = 0; i < d->colorList.size(); ++i)
225 if (d->colorList[i].color == color)
234 if ((index < 0) || (index >=
count()))
237 return d->colorList[index].name;
248 d->colorList.append(KColorCollectionPrivate::ColorNode(newColor, newColorName));
257 if ((index < 0) || (index >=
count()))
260 KColorCollectionPrivate::ColorNode& node = d->colorList[index];
261 node.color = newColor;
262 node.name = newColorName;