bool CSmileyPack::load(const QString& filename) { // discard old data filenameTable.clear(); imgCache.clear(); emoticons.clear(); path.clear(); // open emoticons.xml QFile xmlFile(filename); if(!xmlFile.open(QIODevice::ReadOnly)) { LOG_MODEL_ERROR("CSmileyPack", "Don't open file:%s", qPrintable(filename)); return false; // cannot open file } /* parse the cfg file * sample: * <?xml version='1.0'?> * <messaging-emoticon-map> * <emoticon file="smile.png" > * <string>:)</string> * <string>:-)</string> * </emoticon> * <emoticon file="sad.png" > * <string>:(</string> * <string>:-(</string> * </emoticon> * </messaging-emoticon-map> */ path = QFileInfo(filename).absolutePath(); QDomDocument doc; doc.setContent(xmlFile.readAll()); QDomNodeList emoticonElements = doc.elementsByTagName("emoticon"); for (int i = 0; i < emoticonElements.size(); ++i) { QString file = emoticonElements.at(i).attributes().namedItem("file").nodeValue(); QDomElement stringElement = emoticonElements.at(i).firstChildElement("string"); QStringList emoticonSet; // { ":)", ":-)" } etc. while (!stringElement.isNull()) { QString emoticon = stringElement.text(); filenameTable.insert(emoticon, file); emoticonSet.push_back(emoticon); cacheSmiley(file); // preload all smileys stringElement = stringElement.nextSibling().toElement(); } emoticons.push_back(emoticonSet); } // success! return true; }
QIcon SmileyPack::getCachedSmiley(const QString &key) { // valid key? if (!filenameTable.contains(key)) return QPixmap(); // cache it if needed QString file = filenameTable.value(key); if (!iconCache.contains(file)) cacheSmiley(file); return iconCache.value(file); }
QByteArray CSmileyPack::getCachedSmiley(const QString &key) { // valid key? if (!filenameTable.contains(key)) return QByteArray(); // cache it if needed QString file = filenameTable.value(key); if (!imgCache.contains(file)) { cacheSmiley(file); } return imgCache.value(file); }