Thomas noticed that the emoticons patch should let the users to install theirs own themes.
I've test it with the EMOTICON_TEST_DRIVER in emoticons.cpp and seems to be ok. I'am still re-compiling qt-gui. -- Buenos Aires, Argentina 24°C with winds at 12 km/h SSW
? 1 ? autom4te.cache ? src/1 ? src/a.out Index: src/emoticon.cpp =================================================================== RCS file: /cvsroot/licq/qt-gui/src/emoticon.cpp,v retrieving revision 1.1 diff -u -d -p -r1.1 emoticon.cpp --- src/emoticon.cpp 26 Nov 2003 13:02:20 -0000 1.1 +++ src/emoticon.cpp 30 Nov 2003 18:26:11 -0000 @@ -31,16 +31,19 @@ typedef std::list<struct node> node_list /*! private definition of CEmotions */ struct Emoticons { - QString basedir; /* base directory for resourses */ - QString theme; /* current theme */ + QString basedir; /* base directory for resourses */ + QString altbasedir; /* alternative base directory for resourses */ + QString theme; /* current theme */ node_list_t emoticons; }; -CEmoticons::CEmoticons(const char *basedir, const char *theme ) +CEmoticons::CEmoticons(const char *basedir, const char *altbasedir, + const char *theme ) { this->data = new struct Emoticons; data->basedir = basedir; + data->altbasedir = altbasedir; } CEmoticons::~CEmoticons() @@ -50,9 +53,24 @@ CEmoticons::~CEmoticons() QStringList CEmoticons::Themes() { - QDir dir(data->basedir, "*", 0, QDir::Dirs); + QDir dir(data->basedir, "*", 0, QDir::Dirs); + QDir altdir(data->altbasedir, "*", 0, QDir::Dirs); + QStringList list = dir.entryList().grep(QRegExp("^[^.].*")) + + altdir.entryList().grep(QRegExp("^[^.].*")); - return dir.entryList().grep(QRegExp("^[^.].*")); + // unique + QString last = ""; + list.sort(); + for ( QStringList::Iterator it = list.begin(); it != list.end(); ++it ) + { + // std::cout << "\t" << *it << "\n"; + if( *it == last ) + it = list.remove(it); + else + last = *it; + } + + return list; } /*! @@ -193,18 +211,24 @@ static unsigned loadTheme(const struct E int CEmoticons::SetTheme(const char *theme) { - QString szdir = data->basedir + "/" + theme + "/"; + QString szdir1 = data->altbasedir + "/" + theme + "/"; + QString szdir2 = data->basedir + "/" + theme + "/"; + QDir d1(szdir1); + QDir d2(szdir2); node_list_t list; - QDir d(szdir); int ret = -1; unsigned n; - if (d.exists()) - { - n = loadTheme(data, szdir.ascii(), list); - ret = n; - data->theme = theme; - data->emoticons = list; + if (d1.exists()) + n = loadTheme(data, szdir1.ascii(), list); + else if(d2.exists()) + n = loadTheme(data, szdir2.ascii(), list); + + + if( n ) { + ret = n; + data->theme = theme; + data->emoticons = list; } return ret; @@ -291,7 +315,7 @@ main(int argc, char **argv) CEmoticons *e; if (argc != 1) - e = new CEmoticons(argv[1]); + e = new CEmoticons(argv[1], argv[2]); else { std::cout << "missing theme dir\n"; Index: src/emoticon.h =================================================================== RCS file: /cvsroot/licq/qt-gui/src/emoticon.h,v retrieving revision 1.1 diff -u -d -p -r1.1 emoticon.h --- src/emoticon.h 26 Nov 2003 13:02:20 -0000 1.1 +++ src/emoticon.h 30 Nov 2003 18:26:11 -0000 @@ -11,7 +11,7 @@ public: * \param basedir base dir for icons * \param theme sets the current theme */ - CEmoticons(const char *basedir, const char *theme = 0 ); + CEmoticons(const char *basedir, const char *altdir=0, const char *theme = 0 ); ~CEmoticons(); /*! \returns the list of themes available */ Index: src/mainwin.cpp =================================================================== RCS file: /cvsroot/licq/qt-gui/src/mainwin.cpp,v retrieving revision 1.300 diff -u -d -p -r1.300 mainwin.cpp --- src/mainwin.cpp 26 Nov 2003 13:02:20 -0000 1.300 +++ src/mainwin.cpp 30 Nov 2003 18:26:13 -0000 @@ -450,8 +450,9 @@ CMainWindow::CMainWindow(CICQDaemon *the // Load the Emoticons char szEmoticons[MAX_FILENAME_LEN]; licqConf.ReadStr("Emoticons", szEmoticons, "Default" ); - QString s = QString::fromAscii(SHARE_DIR) + QTGUI_DIR + EMOTICONS_DIR; - emoticons = new CEmoticons(s.latin1()); + QString s = QString::fromAscii(SHARE_DIR) + QTGUI_DIR + EMOTICONS_DIR; + QString alt = QString::fromAscii(BASE_DIR) + QTGUI_DIR + EMOTICONS_DIR; + emoticons = new CEmoticons(s.latin1(), alt.latin1()); if (*szEmoticons) if (emoticons->SetTheme(szEmoticons) < 0) gLog.Error("%s Loading emoticons theme `%s'\n", L_ERRORxSTR,
pgp00000.pgp
Description: signature