MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) { QString None(tr("Not selected")); setupUi(this); setWindowTitle(ProgramVersion); QPixmap AppIconPixmap(iconpixmap); QIcon ApplicationIcon(AppIconPixmap); setWindowIcon(ApplicationIcon); cbxAI_Im->addItem(None,0); cbxAI_Cmd->addItem(None,0); cbxAI_Cm_tlg->addItem(None,0); cbxAI_Freq_tlg->addItem(None,0); cbxAI_Gain_tlg->addItem(None,0); cbxAI_Lsw_tlg->addItem(None,0); cbxAO_Cmd->addItem(None,0); comedi_set_global_oor_behavior(COMEDI_OOR_NUMBER); GetComediInfo(); QObject::connect(btnTest, SIGNAL(clicked()), this, SLOT(RunCalibration())); QObject::connect(pbOK, SIGNAL(clicked()), this, SLOT(SaveSelections())); QObject::connect(pbReject, SIGNAL(clicked()), this, SLOT(close())); WindowUpdateTimer = new QTimer(this); connect(WindowUpdateTimer, SIGNAL(timeout()), this, SLOT(UpdateOnTimer())); WindowUpdateTimer->start(1000/WindowUpdateFrequencyHz); }
/** ** Save a game to file. ** ** @param filename File name to be stored. ** ** @note Later we want to store in a more compact binary format. */ void SaveGame(const std::string &filename) { time_t now; CFile file; char *s; char *s1; std::string fullpath; fullpath = GetSaveDir() + filename; if (file.open(fullpath.c_str(), CL_WRITE_GZ | CL_OPEN_WRITE) == -1) { fprintf(stderr, "Can't save to `%s'\n", filename.c_str()); return; } time(&now); s = ctime(&now); if ((s1 = strchr(s, '\n'))) { *s1 = '\0'; } // Parseable header file.printf("SavedGameInfo({\n"); file.printf("--- generator = \"Generated by Bos Wars Version " VERSION "\",\n"); file.printf("--- comment = \"Visit http://www.boswars.org for more informations\",\n"); file.printf("--- type = \"%s\",\n", "single-player"); file.printf("--- date = \"%s\",\n", s); file.printf("--- map = \"%s\",\n", Map.Info.Description.c_str()); file.printf("--- media-version = \"%s\",\n", "Undefined"); file.printf("--- engine = {%d, %d, %d},\n", StratagusMajorVersion, StratagusMinorVersion, StratagusPatchLevel); file.printf(" SyncHash = %d, \n", SyncHash); file.printf(" SyncRandSeed = %d, \n", SyncRandSeed); file.printf(" SaveFile = \"%s\"\n", CurrentMapPath); file.printf("} )\n\n"); // FIXME: probably not the right place for this file.printf("GameCycle = %lu\n", GameCycle); SaveCcl(&file); Map.Save(&file); SavePlayers(&file); SaveUpgrades(&file); SaveUnits(&file); SaveUserInterface(&file); SaveAi(&file); SaveSelections(&file); SaveGroups(&file); SaveMissiles(&file); SaveTriggers(&file); SaveReplayList(&file); // FIXME: find all state information which must be saved. s = SaveGlobal(Lua, true); if (s != NULL) { file.printf("-- Lua state\n\n%s\n", s); delete[] s; } file.close(); }
void CBOINCBaseView::OnListRender(wxTimerEvent& event) { if (!m_bProcessingListRenderEvent) { m_bProcessingListRenderEvent = true; wxASSERT(m_pListPane); // Remember the key values of currently selected items SaveSelections(); int iDocCount = GetDocCount(); int iCacheCount = GetCacheCount(); if (iDocCount != iCacheCount) { if (0 >= iDocCount) { EmptyCache(); m_pListPane->DeleteAllItems(); } else { int iIndex = 0; int iReturnValue = -1; if (iDocCount > iCacheCount) { for (iIndex = 0; iIndex < (iDocCount - iCacheCount); iIndex++) { iReturnValue = AddCacheElement(); wxASSERT(!iReturnValue); } wxASSERT(GetDocCount() == GetCacheCount()); m_pListPane->SetItemCount(iDocCount); m_bNeedSort = true; } else { // The virtual ListCtrl keeps a separate its list of selected rows; // make sure it does not reference any rows beyond the new last row. // We can ClearSelections() because we called SaveSelections() above. ClearSelections(); m_pListPane->SetItemCount(iDocCount); for (iIndex = (iCacheCount - 1); iIndex >= iDocCount; --iIndex) { iReturnValue = RemoveCacheElement(); wxASSERT(!iReturnValue); } wxASSERT(GetDocCount() == GetCacheCount()); m_pListPane->RefreshItems(0, iDocCount - 1); m_bNeedSort = true; } } } if (iDocCount > 0) { SynchronizeCache(); if (iDocCount > 1) { if (_EnsureLastItemVisible() && (iDocCount != iCacheCount)) { m_pListPane->EnsureVisible(iDocCount - 1); } } if (m_pListPane->m_bIsSingleSelection) { // If no item has been selected yet, select the first item. #ifdef __WXMSW__ if ((m_pListPane->GetSelectedItemCount() == 0) && (m_pListPane->GetItemCount() >= 1)) { long desiredstate = wxLIST_STATE_FOCUSED | wxLIST_STATE_SELECTED; m_pListPane->SetItemState(0, desiredstate, desiredstate); } #else if ((m_pListPane->GetFirstSelected() < 0) && (m_pListPane->GetItemCount() >= 1)) { m_pListPane->SetItemState(0, wxLIST_STATE_FOCUSED | wxLIST_STATE_SELECTED, wxLIST_STATE_FOCUSED | wxLIST_STATE_SELECTED); } #endif } } // Find the previously selected items by their key values and reselect them RestoreSelections(); UpdateSelection(); m_bProcessingListRenderEvent = false; } event.Skip(); }
void CBOINCBaseView::OnListRender(wxTimerEvent& event) { if (!m_bProcessingListRenderEvent) { m_bProcessingListRenderEvent = true; wxASSERT(m_pListPane); // Remember the key values of currently selected items SaveSelections(); int iDocCount = GetDocCount(); int iCacheCount = GetCacheCount(); if (iDocCount != iCacheCount) { if (0 >= iDocCount) { EmptyCache(); m_pListPane->DeleteAllItems(); } else { int iIndex = 0; int iReturnValue = -1; if (iDocCount > iCacheCount) { for (iIndex = 0; iIndex < (iDocCount - iCacheCount); iIndex++) { iReturnValue = AddCacheElement(); wxASSERT(!iReturnValue); } wxASSERT(GetDocCount() == GetCacheCount()); m_pListPane->SetItemCount(iDocCount); m_bNeedSort = true; } else { // The virtual ListCtrl keeps a separate its list of selected rows; // make sure it does not reference any rows beyond the new last row. // We can ClearSelections() because we called SaveSelections() above. ClearSelections(); m_pListPane->SetItemCount(iDocCount); for (iIndex = (iCacheCount - 1); iIndex >= iDocCount; --iIndex) { iReturnValue = RemoveCacheElement(); wxASSERT(!iReturnValue); } wxASSERT(GetDocCount() == GetCacheCount()); //fprintf(stderr, "CBOINCBaseView::OnListRender(): m_pListPane->RefreshItems(0, %d)\n", iDocCount - 1); m_pListPane->RefreshItems(0, iDocCount - 1); #ifdef __WXGTK__ // Work around an apparent bug in wxWidgets 3.0 // which drew blank lines at the top and failed // to draw the bottom items. This could happen // if the list was scrolled near the bottom and // the user selected "Show active tasks." m_pListPane->EnsureVisible(iDocCount - 1); #endif m_bNeedSort = true; } } } if (iDocCount > 0) { SynchronizeCache(); if (iDocCount > 1) { if (_EnsureLastItemVisible() && (iDocCount != iCacheCount)) { m_pListPane->EnsureVisible(iDocCount - 1); } } } // Find the previously selected items by their key values and reselect them RestoreSelections(); UpdateSelection(); m_bProcessingListRenderEvent = false; } event.Skip(); }
void CBOINCBaseView::OnListRender(wxTimerEvent& event) { if (!m_bProcessingListRenderEvent) { m_bProcessingListRenderEvent = true; wxASSERT(m_pListPane); // Remember the key values of currently selected items SaveSelections(); int iDocCount = GetDocCount(); int iCacheCount = GetCacheCount(); if (iDocCount != iCacheCount) { if (0 >= iDocCount) { EmptyCache(); m_pListPane->DeleteAllItems(); } else { int iIndex = 0; int iReturnValue = -1; if (iDocCount > iCacheCount) { for (iIndex = 0; iIndex < (iDocCount - iCacheCount); iIndex++) { iReturnValue = AddCacheElement(); wxASSERT(!iReturnValue); } wxASSERT(GetDocCount() == GetCacheCount()); m_pListPane->SetItemCount(iDocCount); m_bNeedSort = true; } else { // The virtual ListCtrl keeps a separate its list of selected rows; // make sure it does not reference any rows beyond the new last row. // We can ClearSelections() because we called SaveSelections() above. ClearSelections(); m_pListPane->SetItemCount(iDocCount); for (iIndex = (iCacheCount - 1); iIndex >= iDocCount; --iIndex) { iReturnValue = RemoveCacheElement(); wxASSERT(!iReturnValue); } wxASSERT(GetDocCount() == GetCacheCount()); //fprintf(stderr, "CBOINCBaseView::OnListRender(): m_pListPane->RefreshItems(0, %d)\n", iDocCount - 1); m_pListPane->RefreshItems(0, iDocCount - 1); m_bNeedSort = true; } } } if (iDocCount > 0) { SynchronizeCache(); if (iDocCount > 1) { if (_EnsureLastItemVisible() && (iDocCount != iCacheCount)) { m_pListPane->EnsureVisible(iDocCount - 1); } } } // Find the previously selected items by their key values and reselect them RestoreSelections(); UpdateSelection(); m_bProcessingListRenderEvent = false; } event.Skip(); }
/** ** Save a game to file. ** ** @param filename File name to be stored. ** @return -1 if saving failed, 0 if all OK ** ** @note Later we want to store in a more compact binary format. */ int SaveGame(const std::string &filename) { CFile file; std::string fullpath(GetSaveDir()); fullpath += "/"; fullpath += filename; if (file.open(fullpath.c_str(), CL_WRITE_GZ | CL_OPEN_WRITE) == -1) { fprintf(stderr, "Can't save to `%s'\n", filename.c_str()); return -1; } time_t now; char dateStr[64]; time(&now); const struct tm *timeinfo = localtime(&now); strftime(dateStr, sizeof(dateStr), "%c", timeinfo); // Load initial level // Without units file.printf("local oldCreateUnit = CreateUnit\n"); file.printf("local oldSetResourcesHeld = SetResourcesHeld\n"); file.printf("local oldSetTile = SetTile\n"); file.printf("function CreateUnit() end\n"); file.printf("function SetResourcesHeld() end\n"); file.printf("function SetTile() end\n"); file.printf("Load(\"%s\")\n", Map.Info.Filename.c_str()); file.printf("CreateUnit = oldCreateUnit\n"); file.printf("SetResourcesHeld = oldSetResourcesHeld\n"); file.printf("SetTile = oldSetTile\n"); // // Parseable header // file.printf("SavedGameInfo({\n"); file.printf("--- \"comment\", \"Generated by Stratagus Version " VERSION "\",\n"); file.printf("--- \"comment\", \"Visit https://launchpad.net/stratagus for more informations\",\n"); file.printf("--- \"type\", \"%s\",\n", "single-player"); file.printf("--- \"date\", \"%s\",\n", dateStr); file.printf("--- \"map\", \"%s\",\n", Map.Info.Description.c_str()); file.printf("--- \"media-version\", \"%s\"", "Undefined"); file.printf("--- \"engine\", {%d, %d, %d},\n", StratagusMajorVersion, StratagusMinorVersion, StratagusPatchLevel); file.printf(" SyncHash = %d, \n", SyncHash); file.printf(" SyncRandSeed = %d, \n", SyncRandSeed); file.printf(" SaveFile = \"%s\"\n", CurrentMapPath); file.printf("\n--- \"preview\", \"%s.pam\",\n", filename.c_str()); file.printf("} )\n\n"); // FIXME: probably not the right place for this file.printf("GameCycle = %lu\n", GameCycle); file.printf("SetGodMode(%s)\n", GodMode ? "true" : "false"); SaveUnitTypes(file); SaveUpgrades(file); SavePlayers(file); Map.Save(file); UnitManager.Save(file); SaveUserInterface(file); SaveAi(file); SaveSelections(file); SaveGroups(file); SaveMissiles(file); SaveReplayList(file); // FIXME: find all state information which must be saved. const std::string s = SaveGlobal(Lua); if (!s.empty()) { file.printf("-- Lua state\n\n %s\n", s.c_str()); } SaveTriggers(file); //Triggers are saved in SaveGlobal, so load it after Global file.close(); return 0; }