QTfrontend/main.cpp
changeset 6160 863d3edf5690
parent 6129 d1e37b104683
child 6167 728cabee2c9f
equal deleted inserted replaced
6159:c780b8cf4d75 6160:863d3edf5690
    28 #include <QStringListModel>
    28 #include <QStringListModel>
    29 
    29 
    30 #include "hwform.h"
    30 #include "hwform.h"
    31 #include "hwconsts.h"
    31 #include "hwconsts.h"
    32 
    32 
       
    33 #include "HWDataManager.h"
       
    34 
    33 #ifdef _WIN32
    35 #ifdef _WIN32
    34 #include <Shlobj.h>
    36 #include <Shlobj.h>
    35 #endif
    37 #endif
    36 #ifdef __APPLE__
    38 #ifdef __APPLE__
    37 #include "CocoaInitializer.h"
    39 #include "CocoaInitializer.h"
   390                     arg(datadir->absolutePath()+"/hedgewars/Data"));
   392                     arg(datadir->absolutePath()+"/hedgewars/Data"));
   391         return 1;
   393         return 1;
   392     }
   394     }
   393 
   395 
   394     {
   396     {
   395         QDir dir;
       
   396         dir.setPath(cfgdir->absolutePath() + "/Data/Themes");
       
   397 
       
   398         QStringList themes;
   397         QStringList themes;
   399         themes.append(dir.entryList(QDir::AllDirs | QDir::NoDotAndDotDot));
   398 
   400 
   399         themes.append(HWDataManager::instance().entryList(
   401         dir.setPath(datadir->absolutePath() + "/Themes");
   400                          "Themes",
   402         themes.append(dir.entryList(QDir::AllDirs | QDir::NoDotAndDotDot));
   401                          QDir::AllDirs | QDir::NoDotAndDotDot)
       
   402                      );
   403 
   403 
   404         QList<QPair<QIcon, QIcon> > icons;
   404         QList<QPair<QIcon, QIcon> > icons;
   405 
   405 
   406         themes.sort();
   406         themes.sort();
   407         for(int i = themes.size() - 1; i >= 0; --i)
   407         for(int i = themes.size() - 1; i >= 0; --i)
   408         {
   408         {
   409             QFile tmpfile;
   409             QFile * tmpfile =
   410             tmpfile.setFileName(QString("%1/Data/Themes/%2/icon.png").arg(cfgdir->absolutePath()).arg(themes.at(i)));
   410             HWDataManager::instance().findFileForRead(
   411             if (!tmpfile.exists())
   411                                 QString("Themes/%1/icon.png").arg(themes.at(i))
   412                 tmpfile.setFileName(QString("%1/Themes/%2/icon.png").arg(datadir->absolutePath()).arg(themes.at(i)));
   412                             );
   413 
   413 
   414             if(tmpfile.exists())
   414             if(tmpfile->exists())
   415             { // load icon
   415             { // load icon
   416                 QPair<QIcon, QIcon> ic;
   416                 QPair<QIcon, QIcon> ic;
   417                 ic.first = QIcon(QFileInfo(tmpfile).absoluteFilePath());
   417                 ic.first = QIcon(tmpfile->fileName());
   418 
   418 
   419                 QFile previewIconFile;
   419                 QFile * previewIconFile =
   420                 previewIconFile.setFileName(QString("%1/Data/Themes/%2/icon@2x.png").arg(cfgdir->absolutePath()).arg(themes.at(i)));
   420                     HWDataManager::instance().findFileForRead(
   421                 if (previewIconFile.exists()) ic.second = QIcon(QFileInfo(previewIconFile).absoluteFilePath());
   421                             QString("Themes/%1/icon@2x.png").arg(themes.at(i))
   422                 else ic.second = QIcon(QString("%1/Themes/%2/icon@2x.png").arg(datadir->absolutePath()).arg(themes.at(i)));
   422                         );
       
   423 
       
   424                 ic.second = QIcon(previewIconFile->fileName());
       
   425 
       
   426                 // this QFile is not needed any further
       
   427                 delete previewIconFile;
   423 
   428 
   424                 icons.prepend(ic);
   429                 icons.prepend(ic);
   425             }
   430             }
   426             else
   431             else
   427             {
   432             {
   428                 themes.removeAt(i);
   433                 themes.removeAt(i);
   429             }
   434             }
       
   435 
       
   436             // this QFile is not needed any further
       
   437             delete tmpfile;
   430         }
   438         }
   431 
   439 
   432         themesModel = new ThemesModel(themes);
   440         themesModel = new ThemesModel(themes);
   433         Q_ASSERT(themes.size() == icons.size());
   441         Q_ASSERT(themes.size() == icons.size());
   434         for(int i = 0; i < icons.size(); ++i)
   442         for(int i = 0; i < icons.size(); ++i)
   436             themesModel->setData(themesModel->index(i), icons[i].first, Qt::DecorationRole);
   444             themesModel->setData(themesModel->index(i), icons[i].first, Qt::DecorationRole);
   437             themesModel->setData(themesModel->index(i), icons[i].second, Qt::UserRole);
   445             themesModel->setData(themesModel->index(i), icons[i].second, Qt::UserRole);
   438         }
   446         }
   439     }
   447     }
   440 
   448 
   441     QDir tmpdir;
   449     mapList = new QStringList(HWDataManager::instance().entryList(
   442     tmpdir.cd(cfgdir->absolutePath());
   450                                  QString("Maps"),
   443     tmpdir.cd("Data/Maps");
   451                                  QDir::Dirs | QDir::NoDotAndDotDot
   444     tmpdir.setFilter(QDir::Dirs | QDir::NoDotAndDotDot);
   452                                  )
   445     mapList = new QStringList(tmpdir.entryList(QStringList("*")));
   453                              );
   446 
       
   447     tmpdir.cd(datadir->absolutePath());
       
   448     tmpdir.cd("Maps");
       
   449     tmpdir.setFilter(QDir::Dirs | QDir::NoDotAndDotDot);
       
   450     QStringList tmplist = QStringList(tmpdir.entryList(QStringList("*")));
       
   451     for (QStringList::Iterator it = tmplist.begin(); it != tmplist.end(); ++it)
       
   452         if (!mapList->contains(*it,Qt::CaseInsensitive)) mapList->append(*it);
       
   453  
   454  
   454     tmpdir.cd(cfgdir->absolutePath());
   455     scriptList = new QStringList(HWDataManager::instance().entryList(
   455     tmpdir.cd("Data/Scripts/Multiplayer");
   456                                      QString("Scripts/Multiplayer"),
   456     tmpdir.setFilter(QDir::Files | QDir::NoDotAndDotDot);
   457                                      QDir::Dirs | QDir::NoDotAndDotDot,
   457     scriptList = new QStringList(tmpdir.entryList(QStringList("*.lua")));
   458                                      QStringList("*.lua")
   458 
   459                                      )
   459     tmpdir.cd(datadir->absolutePath());
   460                                  );
   460     tmpdir.cd("Scripts/Multiplayer");
       
   461     tmpdir.setFilter(QDir::Files | QDir::NoDotAndDotDot);
       
   462     tmplist = QStringList(tmpdir.entryList(QStringList("*.lua")));
       
   463     for (QStringList::Iterator it = tmplist.begin(); it != tmplist.end(); ++it)
       
   464         if (!scriptList->contains(*it,Qt::CaseInsensitive)) scriptList->append(*it);
       
   465 
   461 
   466     QTranslator Translator;
   462     QTranslator Translator;
   467     {
   463     {
   468         QSettings settings(cfgdir->absolutePath() + "/hedgewars.ini", QSettings::IniFormat);
   464         QSettings settings(cfgdir->absolutePath() + "/hedgewars.ini", QSettings::IniFormat);
   469         QString cc = settings.value("misc/locale", QString()).toString();
   465         QString cc = settings.value("misc/locale", QString()).toString();
   470         if(cc.isEmpty())
   466         if(cc.isEmpty())
   471             cc = QLocale::system().name();
   467             cc = QLocale::system().name();
   472         QFile tmpfile;
   468         QFile * tmpfile = HWDataManager::instance().findFileForRead(
   473         tmpfile.setFileName(cfgdir->absolutePath() + "/Data/Locale/hedgewars_" + cc);
   469                                             QString("Locale/hedgewars_" + cc));
   474         if (!tmpfile.exists()) tmpfile.setFileName(datadir->absolutePath() + "/Locale/hedgewars_" + cc);
   470         Translator.load(tmpfile->fileName());
   475         Translator.load(QFileInfo(tmpfile).absoluteFilePath());
       
   476         app.installTranslator(&Translator);
   471         app.installTranslator(&Translator);
   477     }
   472     }
   478 
   473 
   479 #ifdef _WIN32
   474 #ifdef _WIN32
   480     // Win32 registry setup (used for xfire detection etc. - don't set it if we're running in "portable" mode with a custom config dir)
   475     // Win32 registry setup (used for xfire detection etc. - don't set it if we're running in "portable" mode with a custom config dir)