1892 |
1894 |
1893 |
1895 |
1894 void HWForm::UpdateCampaignPage(int index) |
1896 void HWForm::UpdateCampaignPage(int index) |
1895 { |
1897 { |
1896 Q_UNUSED(index); |
1898 Q_UNUSED(index); |
1897 |
1899 |
1898 HWTeam team(ui.pageCampaign->CBTeam->currentText()); |
1900 HWTeam team(ui.pageCampaign->CBTeam->currentText()); |
1899 ui.pageCampaign->CBMission->clear(); |
1901 ui.pageCampaign->CBMission->clear(); |
1900 |
1902 |
1901 QString campaignName = ui.pageCampaign->CBCampaign->currentText(); |
1903 QString campaignName = ui.pageCampaign->CBCampaign->currentText(); |
1902 QStringList missionEntries = getCampMissionList(campaignName); |
1904 QStringList missionEntries = getCampMissionList(campaignName); |
1903 QString tName = team.name(); |
1905 QString tName = team.name(); |
1904 unsigned int n = missionEntries.count(); |
1906 unsigned int n = missionEntries.count(); |
1905 unsigned int m = getCampProgress(tName, campaignName); |
1907 unsigned int m = getCampProgress(tName, campaignName); |
1906 |
1908 |
1907 // if the campaign name changes update the campaignMissionDescriptions list |
1909 // if the campaign name changes update the campaignMissionDescriptions list |
1908 // this will be used later in UpdateCampaignPageMission() to update |
1910 // this will be used later in UpdateCampaignPageMission() to update |
1909 // the mission description in the campaign page |
1911 // the mission description in the campaign page |
1910 bool updateMissionList = false; |
1912 bool updateMissionList = false; |
1911 QSettings * m_info; |
1913 QSettings * m_info; |
1912 if(previousCampaignName.compare(campaignName)!=0 || |
1914 if(previousCampaignName.compare(campaignName)!=0 || |
1913 previousTeamName.compare(tName) != 0) |
1915 previousTeamName.compare(tName) != 0) |
1914 { |
1916 { |
1915 if (previousTeamName.compare(tName) != 0 && |
1917 if (previousTeamName.compare(tName) != 0 && |
1916 previousTeamName.compare("") != 0) |
1918 previousTeamName.compare("") != 0) |
1917 index = qMin(m + 1, n); |
1919 index = qMin(m + 1, n); |
1918 previousCampaignName = campaignName; |
1920 previousCampaignName = campaignName; |
1919 previousTeamName = tName; |
1921 previousTeamName = tName; |
1920 updateMissionList = true; |
1922 updateMissionList = true; |
1921 // the following code was based on pagetraining.cpp |
1923 // the following code was based on pagetraining.cpp |
1922 DataManager & dataMgr = DataManager::instance(); |
1924 DataManager & dataMgr = DataManager::instance(); |
1923 // get locale |
1925 // get locale |
1924 QSettings settings(dataMgr.settingsFileName(), |
1926 QSettings settings(dataMgr.settingsFileName(), |
1925 QSettings::IniFormat); |
1927 QSettings::IniFormat); |
1926 QString loc = settings.value("misc/locale", "").toString(); |
1928 QString loc = settings.value("misc/locale", "").toString(); |
1927 if (loc.isEmpty()) |
1929 if (loc.isEmpty()) |
1928 loc = QLocale::system().name(); |
1930 loc = QLocale::system().name(); |
1929 QString campaignDescFile = QString("physfs://Locale/campaigns_" + loc + ".txt"); |
1931 QString campaignDescFile = QString("physfs://Locale/campaigns_" + loc + ".txt"); |
1930 // if file is non-existant try with language only |
1932 // if file is non-existant try with language only |
1931 if (!QFile::exists(campaignDescFile)) |
1933 if (!QFile::exists(campaignDescFile)) |
1932 campaignDescFile = QString("physfs://Locale/campaigns_" + loc.remove(QRegExp("_.*$")) + ".txt"); |
1934 campaignDescFile = QString("physfs://Locale/campaigns_" + loc.remove(QRegExp("_.*$")) + ".txt"); |
1933 |
1935 |
1934 // fallback if file for current locale is non-existant |
1936 // fallback if file for current locale is non-existant |
1935 if (!QFile::exists(campaignDescFile)) |
1937 if (!QFile::exists(campaignDescFile)) |
1936 campaignDescFile = QString("physfs://Locale/campaigns_en.txt"); |
1938 campaignDescFile = QString("physfs://Locale/campaigns_en.txt"); |
1937 |
1939 |
1938 m_info = new QSettings(campaignDescFile, QSettings::IniFormat, this); |
1940 m_info = new QSettings(campaignDescFile, QSettings::IniFormat, this); |
1939 m_info->setIniCodec("UTF-8"); |
1941 m_info->setIniCodec("UTF-8"); |
1940 campaignMissionDescriptions.clear(); |
1942 campaignMissionDescriptions.clear(); |
1941 ui.pageCampaign->CBMission->clear(); |
1943 ui.pageCampaign->CBMission->clear(); |
1942 } |
1944 } |
1943 |
1945 |
1944 for (unsigned int i = qMin(m + 1, n); i > 0; i--) |
1946 for (unsigned int i = qMin(m + 1, n); i > 0; i--) |
1945 { |
1947 { |
1946 if(updateMissionList) |
1948 if(updateMissionList) |
1947 { |
1949 { |
1948 campaignMissionDescriptions += m_info->value(campaignName+"-"+ getCampaignMissionName(campaignName,i) + ".desc", |
1950 campaignMissionDescriptions += m_info->value(campaignName+"-"+ getCampaignMissionName(campaignName,i) + ".desc", |
1949 tr("No description available")).toString(); |
1951 tr("No description available")).toString(); |
1950 } |
1952 } |
1951 ui.pageCampaign->CBMission->addItem(QString("Mission %1: ").arg(i) + QString(missionEntries[i-1]), QString(missionEntries[i-1])); |
1953 ui.pageCampaign->CBMission->addItem(QString("Mission %1: ").arg(i) + QString(missionEntries[i-1]), QString(missionEntries[i-1])); |
1952 } |
1954 } |
1953 if(updateMissionList) |
1955 if(updateMissionList) |
1954 delete m_info; |
1956 delete m_info; |
1955 |
1957 |
1956 UpdateCampaignPageMission(index); |
1958 UpdateCampaignPageMission(index); |
1957 } |
1959 } |
1958 |
1960 |
1959 void HWForm::UpdateCampaignPageMission(int index) |
1961 void HWForm::UpdateCampaignPageMission(int index) |
1960 { |
1962 { |
1961 // update thumbnail |
1963 // update thumbnail |
1962 QString campaignName = ui.pageCampaign->CBCampaign->currentText(); |
1964 QString campaignName = ui.pageCampaign->CBCampaign->currentText(); |
1963 unsigned int mNum = ui.pageCampaign->CBMission->count() - ui.pageCampaign->CBMission->currentIndex(); |
1965 unsigned int mNum = ui.pageCampaign->CBMission->count() - ui.pageCampaign->CBMission->currentIndex(); |
1964 QString image = getCampaignImage(campaignName,mNum); |
1966 QString image = getCampaignImage(campaignName,mNum); |
1965 ui.pageCampaign->btnPreview->setIcon(QIcon((":/res/campaign/"+campaignName+"/"+image))); |
1967 ui.pageCampaign->btnPreview->setIcon(QIcon((":/res/campaign/"+campaignName+"/"+image))); |
1966 // update description |
1968 // update description |
1967 // when campaign changes the UpdateCampaignPageMission is triggered with wrong values |
1969 // when campaign changes the UpdateCampaignPageMission is triggered with wrong values |
1968 // this will cause segfault. This check prevents illegal memory reads |
1970 // this will cause segfault. This check prevents illegal memory reads |
1969 if(index > -1 && index < campaignMissionDescriptions.count()) { |
1971 if(index > -1 && index < campaignMissionDescriptions.count()) { |
1970 ui.pageCampaign->lbltitle->setText("<h2>"+ui.pageCampaign->CBMission->currentText()+"</h2>"); |
1972 ui.pageCampaign->lbltitle->setText("<h2>"+ui.pageCampaign->CBMission->currentText()+"</h2>"); |
1971 ui.pageCampaign->lbldescription->setText(campaignMissionDescriptions[index]); |
1973 ui.pageCampaign->lbldescription->setText(campaignMissionDescriptions[index]); |
1972 } |
1974 } |
1973 } |
1975 } |
1974 |
1976 |
1975 void HWForm::UpdateCampaignPageProgress(int index) |
1977 void HWForm::UpdateCampaignPageProgress(int index) |
1976 { |
1978 { |
1977 Q_UNUSED(index); |
1979 Q_UNUSED(index); |