303 connect(ui.pageSinglePlayer->BtnDemos, SIGNAL(clicked()), this, SLOT(GoToDemos())); |
304 connect(ui.pageSinglePlayer->BtnDemos, SIGNAL(clicked()), this, SLOT(GoToDemos())); |
304 |
305 |
305 connect(ui.pageTraining, SIGNAL(startMission(const QString&)), this, SLOT(startTraining(const QString&))); |
306 connect(ui.pageTraining, SIGNAL(startMission(const QString&)), this, SLOT(startTraining(const QString&))); |
306 |
307 |
307 connect(ui.pageCampaign->BtnStartCampaign, SIGNAL(clicked()), this, SLOT(StartCampaign())); |
308 connect(ui.pageCampaign->BtnStartCampaign, SIGNAL(clicked()), this, SLOT(StartCampaign())); |
|
309 connect(ui.pageCampaign->btnPreview, SIGNAL(clicked()), this, SLOT(StartCampaign())); |
308 connect(ui.pageCampaign->CBTeam, SIGNAL(currentIndexChanged(int)), this, SLOT(UpdateCampaignPage(int))); |
310 connect(ui.pageCampaign->CBTeam, SIGNAL(currentIndexChanged(int)), this, SLOT(UpdateCampaignPage(int))); |
309 connect(ui.pageCampaign->CBCampaign, SIGNAL(currentIndexChanged(int)), this, SLOT(UpdateCampaignPage(int))); |
311 connect(ui.pageCampaign->CBCampaign, SIGNAL(currentIndexChanged(int)), this, SLOT(UpdateCampaignPage(int))); |
310 connect(ui.pageCampaign->CBMission, SIGNAL(currentIndexChanged(int)), this, SLOT(UpdateCampaignPageMission(int))); |
312 connect(ui.pageCampaign->CBMission, SIGNAL(currentIndexChanged(int)), this, SLOT(UpdateCampaignPageMission(int))); |
311 |
313 |
312 connect(ui.pageSelectWeapon->BtnDelete, SIGNAL(clicked()), |
314 connect(ui.pageSelectWeapon->BtnDelete, SIGNAL(clicked()), |
1126 if (!ok || newNick.isEmpty()) |
1128 if (!ok || newNick.isEmpty()) |
1127 { |
1129 { |
1128 //ForcedDisconnect(tr("No nickname supplied.")); |
1130 //ForcedDisconnect(tr("No nickname supplied.")); |
1129 bool retry = RetryDialog(tr("Hedgewars - Empty nickname"), tr("No nickname supplied.")); |
1131 bool retry = RetryDialog(tr("Hedgewars - Empty nickname"), tr("No nickname supplied.")); |
1130 GoBack(); |
1132 GoBack(); |
1131 if (retry) { |
1133 if (retry && hwnet) { |
1132 if (hwnet->m_private_game) { |
1134 if (hwnet->m_private_game) { |
1133 QStringList list = hwnet->getHost().split(":"); |
1135 QStringList list = hwnet->getHost().split(":"); |
1134 NetConnectServer(list.at(0), list.at(1).toShort()); |
1136 NetConnectServer(list.at(0), list.at(1).toShort()); |
1135 } else |
1137 } else |
1136 NetConnectOfficialServer(); |
1138 NetConnectOfficialServer(); |
1137 } |
1139 } |
1138 return; |
1140 return; |
1139 } |
1141 } |
1140 |
1142 |
1141 hwnet->NewNick(newNick); |
1143 if(hwnet) |
|
1144 hwnet->NewNick(newNick); |
1142 config->setValue("net/nick", newNick); |
1145 config->setValue("net/nick", newNick); |
1143 config->updNetNick(); |
1146 config->updNetNick(); |
1144 |
1147 |
1145 ui.pageRoomsList->setUser(nick); |
1148 ui.pageRoomsList->setUser(nick); |
1146 ui.pageNetGame->setUser(nick); |
1149 ui.pageNetGame->setUser(nick); |
1239 connect(hwnet, SIGNAL(NickRegistered(const QString&)), this, SLOT(NetNickRegistered(const QString&)), Qt::QueuedConnection); |
1249 connect(hwnet, SIGNAL(NickRegistered(const QString&)), this, SLOT(NetNickRegistered(const QString&)), Qt::QueuedConnection); |
1240 connect(hwnet, SIGNAL(NickNotRegistered(const QString&)), this, SLOT(NetNickNotRegistered(const QString&)), Qt::QueuedConnection); |
1250 connect(hwnet, SIGNAL(NickNotRegistered(const QString&)), this, SLOT(NetNickNotRegistered(const QString&)), Qt::QueuedConnection); |
1241 connect(hwnet, SIGNAL(NickTaken(const QString&)), this, SLOT(NetNickTaken(const QString&)), Qt::QueuedConnection); |
1251 connect(hwnet, SIGNAL(NickTaken(const QString&)), this, SLOT(NetNickTaken(const QString&)), Qt::QueuedConnection); |
1242 connect(hwnet, SIGNAL(AuthFailed()), this, SLOT(NetAuthFailed()), Qt::QueuedConnection); |
1252 connect(hwnet, SIGNAL(AuthFailed()), this, SLOT(NetAuthFailed()), Qt::QueuedConnection); |
1243 //connect(ui.pageNetGame->BtnBack, SIGNAL(clicked()), hwnet, SLOT(partRoom())); |
1253 //connect(ui.pageNetGame->BtnBack, SIGNAL(clicked()), hwnet, SLOT(partRoom())); |
|
1254 connect(hwnet, SIGNAL(askForRoomPassword()), this, SLOT(askRoomPassword()), Qt::QueuedConnection); |
1244 |
1255 |
1245 ui.pageRoomsList->chatWidget->setUsersModel(hwnet->lobbyPlayersModel()); |
1256 ui.pageRoomsList->chatWidget->setUsersModel(hwnet->lobbyPlayersModel()); |
1246 ui.pageNetGame->chatWidget->setUsersModel(hwnet->roomPlayersModel()); |
1257 ui.pageNetGame->chatWidget->setUsersModel(hwnet->roomPlayersModel()); |
1247 |
1258 |
1248 // rooms list page stuff |
1259 // rooms list page stuff |
1253 ui.pageRoomsList->chatWidget, SLOT(adminAccess(bool)), Qt::QueuedConnection); |
1264 ui.pageRoomsList->chatWidget, SLOT(adminAccess(bool)), Qt::QueuedConnection); |
1254 |
1265 |
1255 connect(hwnet, SIGNAL(serverMessage(const QString&)), |
1266 connect(hwnet, SIGNAL(serverMessage(const QString&)), |
1256 ui.pageRoomsList->chatWidget, SLOT(onServerMessage(const QString&)), Qt::QueuedConnection); |
1267 ui.pageRoomsList->chatWidget, SLOT(onServerMessage(const QString&)), Qt::QueuedConnection); |
1257 |
1268 |
1258 connect(ui.pageRoomsList, SIGNAL(askForCreateRoom(const QString &)), |
1269 connect(ui.pageRoomsList, SIGNAL(askForCreateRoom(const QString &, const QString &)), |
1259 hwnet, SLOT(CreateRoom(const QString&))); |
1270 hwnet, SLOT(CreateRoom(const QString&, const QString &))); |
1260 connect(ui.pageRoomsList, SIGNAL(askForJoinRoom(const QString &)), |
1271 connect(ui.pageRoomsList, SIGNAL(askForJoinRoom(const QString &, const QString &)), |
1261 hwnet, SLOT(JoinRoom(const QString&))); |
1272 hwnet, SLOT(JoinRoom(const QString&, const QString &))); |
1262 // connect(ui.pageRoomsList, SIGNAL(askForCreateRoom(const QString &)), |
1273 // connect(ui.pageRoomsList, SIGNAL(askForCreateRoom(const QString &)), |
1263 // this, SLOT(NetGameMaster())); |
1274 // this, SLOT(NetGameMaster())); |
1264 // connect(ui.pageRoomsList, SIGNAL(askForJoinRoom(const QString &)), |
1275 // connect(ui.pageRoomsList, SIGNAL(askForJoinRoom(const QString &)), |
1265 // this, SLOT(NetGameSlave())); |
1276 // this, SLOT(NetGameSlave())); |
1266 connect(ui.pageRoomsList, SIGNAL(askForRoomList()), |
1277 connect(ui.pageRoomsList, SIGNAL(askForRoomList()), |
1889 { |
1896 { |
1890 ui.pageCampaign->CBCampaign->addItem(QString(entries[i]).replace(QString("_"),QString(" ")), QString(entries[i]).replace(QString("_"),QString(" "))); |
1897 ui.pageCampaign->CBCampaign->addItem(QString(entries[i]).replace(QString("_"),QString(" ")), QString(entries[i]).replace(QString("_"),QString(" "))); |
1891 } |
1898 } |
1892 } |
1899 } |
1893 |
1900 |
1894 |
|
1895 void HWForm::UpdateCampaignPage(int index) |
1901 void HWForm::UpdateCampaignPage(int index) |
1896 { |
1902 { |
1897 Q_UNUSED(index); |
1903 Q_UNUSED(index); |
1898 |
|
1899 HWTeam team(ui.pageCampaign->CBTeam->currentText()); |
1904 HWTeam team(ui.pageCampaign->CBTeam->currentText()); |
1900 ui.pageCampaign->CBMission->clear(); |
|
1901 |
|
1902 QString campaignName = ui.pageCampaign->CBCampaign->currentText().replace(QString(" "),QString("_")); |
1905 QString campaignName = ui.pageCampaign->CBCampaign->currentText().replace(QString(" "),QString("_")); |
1903 QStringList missionEntries = getCampMissionList(campaignName); |
1906 QString tName = team.name(); |
1904 QString tName = team.name(); |
1907 |
1905 unsigned int n = missionEntries.count(); |
1908 campaignMissionInfo = getCampMissionList(campaignName,tName); |
1906 unsigned int m = getCampProgress(tName, campaignName); |
1909 ui.pageCampaign->CBMission->clear(); |
1907 |
1910 |
1908 // if the campaign name changes update the campaignMissionDescriptions list |
1911 for(int i=0;i<campaignMissionInfo.size();i++) |
1909 // this will be used later in UpdateCampaignPageMission() to update |
1912 { |
1910 // the mission description in the campaign page |
1913 ui.pageCampaign->CBMission->addItem(QString(campaignMissionInfo[i].name), QString(campaignMissionInfo[i].name)); |
1911 bool updateMissionList = false; |
1914 } |
1912 QSettings * m_info; |
|
1913 if(previousCampaignName.compare(campaignName)!=0 || |
|
1914 previousTeamName.compare(tName) != 0) |
|
1915 { |
|
1916 if (previousTeamName.compare(tName) != 0 && |
|
1917 previousTeamName.compare("") != 0) |
|
1918 index = qMin(m + 1, n); |
|
1919 previousCampaignName = campaignName; |
|
1920 previousTeamName = tName; |
|
1921 updateMissionList = true; |
|
1922 // the following code was based on pagetraining.cpp |
|
1923 DataManager & dataMgr = DataManager::instance(); |
|
1924 // get locale |
|
1925 QSettings settings(dataMgr.settingsFileName(), |
|
1926 QSettings::IniFormat); |
|
1927 QString loc = settings.value("misc/locale", "").toString(); |
|
1928 if (loc.isEmpty()) |
|
1929 loc = QLocale::system().name(); |
|
1930 QString campaignDescFile = QString("physfs://Locale/campaigns_" + loc + ".txt"); |
|
1931 // if file is non-existant try with language only |
|
1932 if (!QFile::exists(campaignDescFile)) |
|
1933 campaignDescFile = QString("physfs://Locale/campaigns_" + loc.remove(QRegExp("_.*$")) + ".txt"); |
|
1934 |
|
1935 // fallback if file for current locale is non-existant |
|
1936 if (!QFile::exists(campaignDescFile)) |
|
1937 campaignDescFile = QString("physfs://Locale/campaigns_en.txt"); |
|
1938 |
|
1939 m_info = new QSettings(campaignDescFile, QSettings::IniFormat, this); |
|
1940 m_info->setIniCodec("UTF-8"); |
|
1941 campaignMissionDescriptions.clear(); |
|
1942 ui.pageCampaign->CBMission->clear(); |
|
1943 } |
|
1944 |
|
1945 for (unsigned int i = qMin(m + 1, n); i > 0; i--) |
|
1946 { |
|
1947 if(updateMissionList) |
|
1948 { |
|
1949 campaignMissionDescriptions += m_info->value(campaignName+"-"+ getCampaignMissionName(campaignName,i) + ".desc", |
|
1950 tr("No description available")).toString(); |
|
1951 } |
|
1952 ui.pageCampaign->CBMission->addItem(QString("Mission %1: ").arg(i) + QString(missionEntries[i-1]), QString(missionEntries[i-1])); |
|
1953 } |
|
1954 if(updateMissionList) |
|
1955 delete m_info; |
|
1956 |
|
1957 UpdateCampaignPageMission(index); |
|
1958 } |
1915 } |
1959 |
1916 |
1960 void HWForm::UpdateCampaignPageMission(int index) |
1917 void HWForm::UpdateCampaignPageMission(int index) |
1961 { |
1918 { |
1962 // update thumbnail |
1919 // update thumbnail and description |
1963 QString campaignName = ui.pageCampaign->CBCampaign->currentText().replace(QString(" "),QString("_")); |
1920 QString campaignName = ui.pageCampaign->CBCampaign->currentText().replace(QString(" "),QString("_")); |
1964 unsigned int mNum = ui.pageCampaign->CBMission->count() - ui.pageCampaign->CBMission->currentIndex(); |
|
1965 QString image = getCampaignImage(campaignName,mNum); |
|
1966 ui.pageCampaign->btnPreview->setIcon(QIcon((":/res/campaign/"+campaignName+"/"+image))); |
|
1967 // update description |
|
1968 // when campaign changes the UpdateCampaignPageMission is triggered with wrong values |
1921 // when campaign changes the UpdateCampaignPageMission is triggered with wrong values |
1969 // this will cause segfault. This check prevents illegal memory reads |
1922 // this will cause segfault. This check prevents illegal memory reads |
1970 if(index > -1 && index < campaignMissionDescriptions.count()) { |
1923 if(index > -1 && index < campaignMissionInfo.count()) { |
1971 ui.pageCampaign->lbltitle->setText("<h2>"+ui.pageCampaign->CBMission->currentText()+"</h2>"); |
1924 ui.pageCampaign->lbltitle->setText("<h2>"+ui.pageCampaign->CBMission->currentText()+"</h2>"); |
1972 ui.pageCampaign->lbldescription->setText(campaignMissionDescriptions[index]); |
1925 ui.pageCampaign->lbldescription->setText(campaignMissionInfo[index].description); |
|
1926 ui.pageCampaign->btnPreview->setIcon(QIcon(campaignMissionInfo[index].image)); |
1973 } |
1927 } |
1974 } |
1928 } |
1975 |
1929 |
1976 void HWForm::UpdateCampaignPageProgress(int index) |
1930 void HWForm::UpdateCampaignPageProgress(int index) |
1977 { |
1931 { |
1978 Q_UNUSED(index); |
1932 Q_UNUSED(index); |
1979 |
1933 |
1980 int missionIndex = ui.pageCampaign->CBMission->currentIndex(); |
1934 QString missionTitle = ui.pageCampaign->CBMission->currentText(); |
1981 UpdateCampaignPage(0); |
1935 UpdateCampaignPage(0); |
1982 ui.pageCampaign->CBMission->setCurrentIndex(missionIndex); |
1936 for(int i=0;i<ui.pageCampaign->CBMission->count();i++) |
|
1937 { |
|
1938 if (ui.pageCampaign->CBMission->itemText(i)==missionTitle) |
|
1939 { |
|
1940 ui.pageCampaign->CBMission->setCurrentIndex(i); |
|
1941 break; |
|
1942 } |
|
1943 } |
1983 } |
1944 } |
1984 |
1945 |
1985 // used for --set-everything [screen width] [screen height] [color dept] [volume] [enable music] [enable sounds] [language file] [full screen] [show FPS] [alternate damage] [timer value] [reduced quality] |
1946 // used for --set-everything [screen width] [screen height] [color dept] [volume] [enable music] [enable sounds] [language file] [full screen] [show FPS] [alternate damage] [timer value] [reduced quality] |
1986 QString HWForm::getDemoArguments() |
1947 QString HWForm::getDemoArguments() |
1987 { |
1948 { |