Example #1
0
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;
}
Example #2
0
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);
}
Example #3
0
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);
}