void AbstractEmoticonsLayer::setEmoticonPath(const QString &path) { m_emoticon_list.clear(); m_emoticons.clear(); QFile file(path); QString dirPath = QFileInfo( path ).absolutePath(); m_dir_path = dirPath; QDir dir ( dirPath ); QStringList fileList = dir.entryList(QDir::Files); if (file.exists() && file.open(QIODevice::ReadOnly) ) { QDomDocument doc; if ( doc.setContent(&file) ) { QDomElement rootElement = doc.documentElement(); int emoticonCount = rootElement.childNodes().count(); QDomElement emoticon = rootElement.firstChild().toElement(); for ( int i = 0; i < emoticonCount ; i++ ) { if ( emoticon.tagName() == "emoticon") { QString regexp = "(^"; regexp += QRegExp::escape(emoticon.attribute("file")); regexp += "\\.\\w+$)|(^"; regexp += QRegExp::escape(emoticon.attribute("file")); regexp += "$)"; QStringList fileName = fileList.filter(QRegExp(regexp)); if ( !fileName.isEmpty()) { QStringList strings; QPixmap tmp; int stringCount = emoticon.childNodes().count(); QDomElement emoticonString = emoticon.firstChild().toElement(); for(int j = 0; j < stringCount; j++) { if ( emoticonString.tagName() == "string") { if(tmp.isNull()) tmp = QPixmap(dirPath + "/" + fileName.at(0)); QString text = Qt::escape(emoticonString.text()); m_urls.insert(Qt::escape(emoticonString.text()), QString("<img src=\"%1\" width=\"%2\" height=\"%3\" alt=\"%4\" title=\"%4\"/>") .arg(dirPath + "/" + fileName.at(0)).arg(tmp.size().width()) .arg(tmp.size().height()) //.arg(text.replace("\"", """)) ); strings.append(emoticonString.text()); } emoticonString = emoticonString.nextSibling().toElement(); } m_emoticon_list.insert(QString::number(i+1)+"|"+dirPath + "/" + fileName.at(0),strings); } } emoticon = emoticon.nextSibling().toElement(); } QStringList emoticon_keys = m_urls.keys(); qSort(emoticon_keys.begin(), emoticon_keys.end(), lengthLessThan); m_emoticons.clear(); foreach( const QString &emoticon, emoticon_keys ) { m_emoticons << qMakePair( emoticon.toLower(), m_urls.value(emoticon) ); }