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,

Attachment: pgp00000.pgp
Description: signature

Reply via email to