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) |