QTfrontend/hwform.cpp
branchwebgl
changeset 9950 2759212a27de
parent 9521 8054d9d775fd
parent 9648 3a3defce1b28
child 10015 4feced261c68
equal deleted inserted replaced
9521:8054d9d775fd 9950:2759212a27de
   196     previousCampaignName = "";
   196     previousCampaignName = "";
   197     previousTeamName = "";
   197     previousTeamName = "";
   198     UpdateTeamsLists();
   198     UpdateTeamsLists();
   199     InitCampaignPage();
   199     InitCampaignPage();
   200     UpdateCampaignPage(0);
   200     UpdateCampaignPage(0);
       
   201     UpdateCampaignPageMission(0);
   201     UpdateWeapons();
   202     UpdateWeapons();
   202 
   203 
   203     // connect all goBack signals
   204     // connect all goBack signals
   204     int nPages = ui.Pages->count();
   205     int nPages = ui.Pages->count();
   205 
   206 
   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);
  1158     config->clearPasswordHash();
  1161     config->clearPasswordHash();
  1159     config->clearTempHash();
  1162     config->clearTempHash();
  1160     if (retry) {
  1163     if (retry) {
  1161        NetConnectOfficialServer();
  1164        NetConnectOfficialServer();
  1162     }
  1165     }
       
  1166 }
       
  1167 
       
  1168 void HWForm::askRoomPassword()
       
  1169 {
       
  1170     QString password = QInputDialog::getText(this, tr("Room password"), tr("The room is protected with password.\nPlease, enter the password:"));
       
  1171     if(hwnet && !password.isEmpty())
       
  1172         hwnet->roomPasswordEntered(password);
  1163 }
  1173 }
  1164 
  1174 
  1165 bool HWForm::RetryDialog(const QString & title, const QString & label)
  1175 bool HWForm::RetryDialog(const QString & title, const QString & label)
  1166 {
  1176 {
  1167     QMessageBox retryMsg(this);
  1177     QMessageBox retryMsg(this);
  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()),
  1718 }
  1729 }
  1719 
  1730 
  1720 void HWForm::StartCampaign()
  1731 void HWForm::StartCampaign()
  1721 {
  1732 {
  1722     CreateGame(0, 0, 0);
  1733     CreateGame(0, 0, 0);
  1723 
       
  1724     QComboBox *combo = ui.pageCampaign->CBMission;
       
  1725     QString camp = ui.pageCampaign->CBCampaign->currentText().replace(QString(" "),QString("_"));
  1734     QString camp = ui.pageCampaign->CBCampaign->currentText().replace(QString(" "),QString("_"));
  1726     unsigned int mNum = combo->count() - combo->currentIndex();
  1735     QString miss = campaignMissionInfo[ui.pageCampaign->CBMission->currentIndex()].script;
  1727     QString miss = getCampaignScript(camp, mNum);
       
  1728     QString campTeam = ui.pageCampaign->CBTeam->currentText();
  1736     QString campTeam = ui.pageCampaign->CBTeam->currentText();
  1729 
       
  1730     game->StartCampaign(camp, miss, campTeam);
  1737     game->StartCampaign(camp, miss, campTeam);
  1731 }
  1738 }
  1732 
  1739 
  1733 void HWForm::CreateNetGame()
  1740 void HWForm::CreateNetGame()
  1734 {
  1741 {
  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 {