void EnviroFrame::LoadClouds(const char *fname) { ImagePtr input = osgDB::readImageFile(fname); if (input.valid()) { int depth = input->getPixelSizeInBits(); if (depth != 8) DisplayAndLog("That isn't an 8-bit cloud image."); else { // For transparency, convert the 8-bit (from black to white) to a // 32-bit (RGB is white, Alpha is 0-255) uint w = input->s(); uint h = input->t(); vtImagePtr img2 = new vtImage; img2->Create(w, h, 32); RGBAi rgba(255,255,255,0); for (uint i = 0; i < w; i++) for (uint j = 0; j < h; j++) { rgba.a = GetPixel8(input, i, j); img2->SetPixel32(i, j, rgba); } OpenProgressDialog(_T("Processing Images"), _T(""), false, this); g_App.MakeOverlayGlobe(img2, progress_callback); CloseProgressDialog(); } } else DisplayAndLog("Couldn't read input file."); }
void EnviroFrame::LoadLayer(vtString &fname) { VTLOG("EnviroFrame::LoadLayer '%s'\n", (const char *) fname); bool success = false; if (g_App.m_state == AS_Terrain) { vtTerrain *pTerr = g_App.GetCurrentTerrain(); OpenProgressDialog(_("Loading..."), wxString::FromUTF8(fname), false, this); pTerr->SetProgressCallback(progress_callback); success = LoadTerrainLayer(fname); CloseProgressDialog(); } else if (g_App.m_state == AS_Orbit) { // earth view int ret = g_App.AddGlobeAbstractLayer(fname); if (ret == -1) wxMessageBox(_("Couldn't open")); else if (ret == -2) wxMessageBox(_("That file isn't point data.")); else success = true; } if (success) m_pLayerDlg->RefreshTreeContents(); }
void AfterStartup() { #if TESTBENCH StartupStore(TEXT(". CloseProgressDialog%s"),NEWLINE); #endif CloseProgressDialog(); // NOTE: Must show errors AFTER all windows ready int olddelay = StatusMessageData[0].delay_ms; StatusMessageData[0].delay_ms = 20000; // 20 seconds if (SIMMODE) { StartupStore(TEXT(". GCE_STARTUP_SIMULATOR%s"),NEWLINE); InputEvents::processGlideComputer(GCE_STARTUP_SIMULATOR); } else { StartupStore(TEXT(". GCE_STARTUP_REAL%s"),NEWLINE); InputEvents::processGlideComputer(GCE_STARTUP_REAL); } StatusMessageData[0].delay_ms = olddelay; // Create default task if none exists #if TESTBENCH StartupStore(TEXT(". Create default task%s"),NEWLINE); #endif DefaultTask(); // Trigger first redraw MapWindow::MapDirty = true; MapWindow::zoom.Reset(); FullScreen(); drawTriggerEvent.set(); }
void MapServerDlg::OnQueryLayers( wxCommandEvent &event ) { #if SUPPORT_CURL VTLOG1("OnQueryLayers\n"); wxString val = GetBaseUrl()->GetValue(); vtString url = (const char *) val.mb_str(wxConvUTF8); OpenProgressDialog(_("Querying server..."), val, false, this); VTLOG(" from base URL: %s\n", (const char *)url); vtString msg; bool success = GetLayersFromWMS(url, m_pServers->at(m_iServer).m_layers, msg, progress_callback); CloseProgressDialog(); if (success) { UpdateLayerList(); UpdateLayerDescription(); UpdateURL(); } else { VTLOG("Error: '%s'\n", (const char *)msg); wxString str(msg, wxConvUTF8); wxMessageBox(str); } #endif // SUPPORT_CURL }
void Eval() { vtScene *scene = vtGetScene(); if (step > 0) { wxString msg; msg.Printf(_T("Output %.2f/%.2f"), fStep * step, fTotal); if (UpdateProgressDialog((int) (99 * fStep * step / fTotal), msg) == true) { // user pressed cancel scene->SetPostDrawEngine(NULL); CloseProgressDialog(); return; } // We can't grab the screen directly, we must use an OSG callback // to capture after the next draw. vtString fname; fname.Format("image_%04d.png", step-1); std::string Filename = (const char *)(directory+fname); CScreenCaptureHandler::SetupScreenCapture(Filename); } // Show the next frame time engine->SetTime(fStep * step); engine->UpdateTargets(); // Advance to next frame step++; if (fStep * step > fTotal) { // We're finished scene->SetPostDrawEngine(NULL); CloseProgressDialog(); return; } }
BOOL devDeclare(PDeviceDescriptor_t d, Declaration_t *decl, unsigned errBufferLen, TCHAR errBuffer[]) { BOOL result = FALSE; if (SIMMODE) return TRUE; const unsigned BUFF_LEN = 128; TCHAR buffer[BUFF_LEN]; // We must be sure we are not going to attempt task declaration // while a port reset is already in progress. If this happens, a Flarm device will not be Flarm anymore // until a Flarm nmea sentence is parsed again once. // LKTOKEN _@M1400_ = "Task declaration" // LKTOKEN _@M571_ = "START" _sntprintf(buffer, BUFF_LEN, _T("%s: %s..."), gettext(_T("_@M1400_")), gettext(_T("_@M571_"))); CreateProgressDialog(buffer); /***********************************************************/ devDirectLink(d,true); /***********************************************************/ LockComm(); if ((d != NULL) && (d->Declare != NULL)) result = d->Declare(d, decl, errBufferLen, errBuffer); else { if ((d != NULL) && NMEAParser::PortIsFlarm(d->Port)) { result |= FlarmDeclare(d, decl, errBufferLen, errBuffer); } } UnlockComm(); /***********************************************************/ devDirectLink(d,false); /***********************************************************/ CloseProgressDialog(); return result; }
void LayerDlg::OnLayerRemove( wxCommandEvent &event ) { LayerItemData *data = GetLayerDataFromItem(m_item); if (!data) return; if (data->m_layer != NULL) { // Inform table views, don't show a layer that's going away if (data->m_alay) g_App.OnSetDelete(data->m_alay->GetFeatureSet()); OpenProgressDialog(_T("Deleting layer"), _T(""), false, this); m_pTerrain->RemoveLayer(data->m_layer, progress_callback); CloseProgressDialog(); } else if (data->m_glay != NULL) { g_App.RemoveGlobeAbstractLayer(data->m_glay); } RefreshTreeContents(); }
void XCSoarInterface::AfterStartup() { static bool first = true; if (!first) { return; } first = false; StartupStore(TEXT("ProgramStarted=3\n")); StartupLogFreeRamAndStorage(); status_messages.Startup(true); if (is_simulator()) { StartupStore(TEXT("GCE_STARTUP_SIMULATOR\n")); InputEvents::processGlideComputer(GCE_STARTUP_SIMULATOR); } else { StartupStore(TEXT("GCE_STARTUP_REAL\n")); InputEvents::processGlideComputer(GCE_STARTUP_REAL); } // Create default task if none exists StartupStore(TEXT("Create default task\n")); task.DefaultTask(SettingsComputer()); StartupStore(TEXT("CloseProgressDialog\n")); CloseProgressDialog(); main_window.full_screen(); InfoBoxManager::SetDirty(true); TriggerAll(); status_messages.Startup(false); #ifdef _INPUTDEBUG_ InputEvents::showErrors(); #endif }
void vtElevLayer::MergeSharedVerts(bool bSilent) { if (!m_pTin) return; OpenProgressDialog(_("Merging shared vertices"), _T("")); int before = m_pTin->NumVerts(); m_pTin->MergeSharedVerts(progress_callback); int after = m_pTin->NumVerts(); if (after != before) SetModified(true); CloseProgressDialog(); if (!bSilent) { if (after < before) DisplayAndLog((const wchar_t *) _("Reduced vertices from %d to %d"), before, after); else DisplayAndLog((const wchar_t *) _("There are %d vertices, unable to merge any."), before); } }
void XCSoarInterface::Shutdown(void) { CreateProgressDialog(gettext(TEXT("Shutdown, please wait..."))); StartHourglassCursor(); StartupStore(TEXT("Entering shutdown...\n")); StartupLogFreeRamAndStorage(); // turn off all displays globalRunningEvent.reset(); StartupStore(TEXT("dlgAirspaceWarningDeInit\n")); dlgAirspaceWarningDeInit(); CreateProgressDialog(gettext(TEXT("Shutdown, saving logs..."))); // stop logger logger.guiStopLogger(Basic(),true); CreateProgressDialog(gettext(TEXT("Shutdown, saving profile..."))); // Save settings Profile::StoreRegistry(); // Stop sound StartupStore(TEXT("SaveSoundSettings\n")); Profile::SaveSoundSettings(); #ifndef DISABLEAUDIOVARIO // VarioSound_EnableSound(false); // VarioSound_Close(); #endif // Stop drawing CreateProgressDialog(gettext(TEXT("Shutdown, please wait..."))); StartupStore(TEXT("CloseDrawingThread\n")); closeTriggerEvent.trigger(); calculation_thread->join(); StartupStore(TEXT("- calculation thread returned\n")); instrument_thread->join(); StartupStore(TEXT("- instrument thread returned\n")); draw_thread->join(); StartupStore(TEXT("- draw thread returned\n")); delete draw_thread; // Clear data CreateProgressDialog(gettext(TEXT("Shutdown, saving task..."))); StartupStore(TEXT("Resume abort task\n")); task.ResumeAbortTask(SettingsComputer(), -1); // turn off abort if it was on. StartupStore(TEXT("Save default task\n")); task.SaveDefaultTask(); StartupStore(TEXT("Clear task data\n")); task.ClearTask(); StartupStore(TEXT("Close airspace\n")); CloseAirspace(); StartupStore(TEXT("Close waypoints\n")); way_points.clear(); CreateProgressDialog(gettext(TEXT("Shutdown, please wait..."))); StartupStore(TEXT("CloseTerrainTopology\n")); RASP.Close(); terrain.CloseTerrain(); delete topology; delete marks; devShutdown(); SaveCalculationsPersist(Basic(),Calculated()); #if (EXPERIMENTAL > 0) // CalibrationSave(); #endif #if defined(GNAV) && !defined(PCGNAV) StartupStore(TEXT("Altair shutdown\n")); Sleep(2500); StopHourglassCursor(); InputEvents::eventDLLExecute(TEXT("altairplatform.dll SetShutdown 1")); while(1) { Sleep(100); // free time up for processor to perform shutdown } #endif CloseFLARMDetails(); // Kill windows StartupStore(TEXT("Destroy Info Boxes\n")); InfoBoxManager::Destroy(); StartupStore(TEXT("Destroy Button Labels\n")); ButtonLabel::Destroy(); StartupStore(TEXT("Delete Objects\n")); // Kill graphics objects DeleteFonts(); DeleteAirspace(); StartupStore(TEXT("Close Progress Dialog\n")); CloseProgressDialog(); CloseGeoid(); StartupStore(TEXT("Close Windows - main \n")); main_window.reset(); StartupStore(TEXT("Close Graphics\n")); MapGfx.Destroy(); #ifdef DEBUG_TRANSLATIONS StartupStore(TEXT("Writing missing translations\n")); WriteMissingTranslations(); #endif StartupLogFreeRamAndStorage(); StartupStore(TEXT("Finished shutdown\n")); StopHourglassCursor(); }
void EnviroFrame::CarveTerrainToFitNode(osg::Node *node) { vtTerrain *terr = g_App.GetCurrentTerrain(); if (!terr) return; vtDynTerrainGeom *dyn = terr->GetDynTerrain(); if (!dyn) return; FSphere sph; GetBoundSphere(node, sph, true); int changed = 0; int cols, rows; dyn->GetDimensions(cols, rows); const FPoint3 yvec(0,100,0); for (int c = 0; c < cols; c++) { for (int r = 0; r < rows; r++) { FPoint3 wpos; dyn->GetWorldLocation(c, r, wpos); if (wpos.x < (sph.center.x - sph.radius)) continue; if (wpos.x > (sph.center.x + sph.radius)) continue; if (wpos.z < (sph.center.z - sph.radius)) continue; if (wpos.z > (sph.center.z + sph.radius)) continue; // Shoot a ray upwards through the terrain surface point vtHitList HitList; int iNumHits = vtIntersect(node, wpos - yvec, wpos + yvec, HitList); if (iNumHits) { FPoint3 pos = HitList.front().point; dyn->SetElevation(c, r, pos.y); changed++; } } } if (changed != 0) { wxString msg; msg.Printf(_T("Adjusted %d heixels. Re-shade the terrain?"), changed); int res = wxMessageBox(msg, _T(""), wxYES_NO, this); if (res == wxYES) { // Update the (entire) shading and culture EnableContinuousRendering(false); OpenProgressDialog(_("Recalculating Shading"), _T(""), false, this); terr->ReshadeTexture(vtGetTS()->GetSunLightTransform(), progress_callback); DRECT area; area.SetToZero(); terr->RedrapeCulture(area); CloseProgressDialog(); EnableContinuousRendering(true); } } }
void SettingsLeave() { if (!GlobalRunning) return; SwitchToMapWindow(); // Locking everything here prevents the calculation thread from running, // while shared data is potentially reloaded. LockFlightData(); LockTaskData(); MenuActive = false; // 101020 LKmaps contain only topology , so no need to force total reload! if(MAPFILECHANGED) { #if TESTBENCH StartupStore(_T(".... MAPFILECHANGED from configuration\n")); #endif if (LKTopo==0) { AIRSPACEFILECHANGED = TRUE; AIRFIELDFILECHANGED = TRUE; WAYPOINTFILECHANGED = TRUE; TERRAINFILECHANGED = TRUE; } TOPOLOGYFILECHANGED = TRUE; } if (TERRAINFILECHANGED) { #if TESTBENCH StartupStore(_T(".... TERRAINFILECHANGED from configuration\n")); #endif RasterTerrain::CloseTerrain(); RasterTerrain::OpenTerrain(); // NO! We dont reload waypoints on terrain change. // SetHome(WAYPOINTFILECHANGED==TRUE); MapWindow::ForceVisibilityScan = true; } if((WAYPOINTFILECHANGED) || (AIRFIELDFILECHANGED)) { #if TESTBENCH StartupStore(_T(".... WAYPOINT OR AIRFIELD CHANGED from configuration\n")); #endif SaveDefaultTask(); //@ 101020 BUGFIX ClearTask(); ReadWayPoints(); StartupStore(_T(". RELOADED %d WAYPOINTS + %d virtuals%s"),WayPointList.size()-NUMRESWP,NUMRESWP,NEWLINE); SetHome(true); // force home reload if (WAYPOINTFILECHANGED) { #if TESTBENCH StartupStore(_T(".... WAYPOINTFILECHANGED from configuration\n")); #endif SaveRecentList(); LoadRecentList(); RangeLandableNumber=0; RangeAirportNumber=0; RangeTurnpointNumber=0; CommonNumber=0; SortedNumber=0; // SortedTurnpointNumber=0; 101222 LastDoRangeWaypointListTime=0; LKForceDoCommon=true; LKForceDoNearest=true; LKForceDoRecent=true; // LKForceDoNearestTurnpoint=true; 101222 } InputEvents::eventTaskLoad(_T(LKF_DEFAULTASK)); //@ BUGFIX 101020 } if (TOPOLOGYFILECHANGED) { #if TESTBENCH StartupStore(_T(".... TOPOLOGYFILECHANGED from configuration\n")); #endif CloseTopology(); OpenTopology(); MapWindow::ForceVisibilityScan = true; } if(AIRSPACEFILECHANGED) { #if TESTBENCH StartupStore(_T(".... AIRSPACEFILECHANGED from configuration\n")); #endif CAirspaceManager::Instance().CloseAirspaces(); CAirspaceManager::Instance().ReadAirspaces(); CAirspaceManager::Instance().SortAirspaces(); MapWindow::ForceVisibilityScan = true; } if (POLARFILECHANGED) { #if TESTBENCH StartupStore(_T(".... POLARFILECHANGED from configuration\n")); #endif CalculateNewPolarCoef(); GlidePolar::SetBallast(); } if (AIRFIELDFILECHANGED || AIRSPACEFILECHANGED || WAYPOINTFILECHANGED || TERRAINFILECHANGED || TOPOLOGYFILECHANGED ) { CloseProgressDialog(); MainWindow.SetFocus(); } extern void ReinitScreen(void); if (FONTSCHANGED) { ReinitScreen(); } UnlockTaskData(); UnlockFlightData(); if(!SIMMODE && COMPORTCHANGED) { #if TESTBENCH StartupStore(_T(".... COMPORTCHANGED from configuration. ForceComPortReset @%s\n"),WhatTimeIsIt()); #endif LKForceComPortReset=true; // RestartCommPorts(); 110605 } MapWindow::ResumeDrawingThread(); // allow map and calculations threads to continue on their merry way }
void Shutdown(void) { int i; // LKTOKEN _@M1219_ "Shutdown, please wait..." CreateProgressDialog(gettext(TEXT("_@M1219_"))); LKSound(_T("LK_DISCONNECT.WAV")); Poco::Thread::sleep(500); // real WAV length is 410+ms if (!GlobalRunning) { // shutdown on startup (before sim/fly or clicking on the window X) StartupStore(_T(". Quick shutdown requested before terminating startup%s"),NEWLINE); // force exit mode for the case of being in welcome screen: OnTimerNotify will catch it RUN_MODE=RUN_SHUTDOWN; CloseCalculations(); CloseGeoid(); DeInitCustomHardware(); LKRunStartEnd(false); return; } StartupStore(_T(". Entering shutdown %s%s"), WhatTimeIsIt(),NEWLINE); MapWindow::Event_Pan(0); // return from PAN restores the Task in case of Turnpoint moving #if TESTBENCH StartupLogFreeRamAndStorage(); #endif // turn off all displays GlobalRunning = false; // LKTOKEN _@M1220_ "Shutdown, saving logs..." CreateProgressDialog(gettext(TEXT("_@M1220_"))); // In case we quit while are still flying UpdateLogBook(false); // false=only log if still flying // stop logger guiStopLogger(true); // LKTOKEN _@M1221_ "Shutdown, saving profile..." CreateProgressDialog(gettext(TEXT("_@M1221_"))); extern void LKAircraftSave(const TCHAR *szFile); extern void LKPilotSave(const TCHAR *szFile); extern void LKDeviceSave(const TCHAR *szFile); LKPilotSave(defaultPilotFile); LKAircraftSave(defaultAircraftFile); LKProfileSave(defaultProfileFile); LKDeviceSave(defaultDeviceFile); #if TESTBENCH StartupStore(TEXT(". Save_Recent_WP_history%s"),NEWLINE); #endif SaveRecentList(); // Stop sound // Stop drawing // LKTOKEN _@M1219_ "Shutdown, please wait..." CreateProgressDialog(gettext(TEXT("_@M1219_"))); // 100526 this is creating problem in SIM mode when quit is called from X button, and we are in waypoint details // or probably in other menu related screens. However it cannot happen from real PNA or PDA because we don't have // that X button. MapWindow::CloseDrawingThread(); // Stop calculating too (wake up) dataTriggerEvent.set(); drawTriggerEvent.set(); // Clear data // LKTOKEN _@M1222_ "Shutdown, saving task..." CreateProgressDialog(gettext(TEXT("_@M1222_"))); #if TESTBENCH StartupStore(TEXT(".... Save default task%s"),NEWLINE); #endif SaveDefaultTask(); #if TESTBENCH StartupStore(TEXT(".... Clear task data%s"),NEWLINE); #endif LockTaskData(); Task[0].Index = -1; ActiveWayPoint = -1; AATEnabled = FALSE; CloseWayPoints(); UnlockTaskData(); // LKTOKEN _@M1219_ "Shutdown, please wait..." CreateProgressDialog(gettext(TEXT("_@M1219_"))); #if TESTBENCH StartupStore(TEXT(".... CloseTerrainTopology%s"),NEWLINE); #endif RasterTerrain::CloseTerrain(); CloseTopology(); #if USETOPOMARKS TopologyCloseMarks(); #endif CloseTerrainRenderer(); LiveTrackerShutdown(); #ifndef NO_DATARECORDER CloseFlightDataRecorder(); #endif // Stop COM devices StartupStore(TEXT(". Stop COM devices%s"),NEWLINE); devCloseAll(); CloseFLARMDetails(); ProgramStarted = psInitInProgress; // Kill windows #if TESTBENCH StartupStore(TEXT(".... Close Messages%s"),NEWLINE); #endif Message::Destroy(); #if TESTBENCH StartupStore(TEXT(".... Destroy Button Labels%s"),NEWLINE); #endif ButtonLabel::Destroy(); #if TESTBENCH StartupStore(TEXT(".... Delete Objects%s"),NEWLINE); #endif // Kill graphics objects #ifdef LXMINIMAP hBrushButtonHasFocus.Release(); #endif CAirspaceManager::Instance().CloseAirspaces(); #if TESTBENCH StartupStore(TEXT(".... Delete Critical Sections%s"),NEWLINE); #endif // Wait end of Calculation thread before deinit critical section. WaitThreadCalculation(); #if TESTBENCH StartupStore(TEXT(".... Close Progress Dialog%s"),NEWLINE); #endif CloseProgressDialog(); #if TESTBENCH StartupStore(TEXT(".... Close Calculations%s"),NEWLINE); #endif CloseCalculations(); CloseGeoid(); DeInitCustomHardware(); #if TESTBENCH StartupStore(TEXT(".... Close Windows%s"),NEWLINE); #endif #if TESTBENCH StartupLogFreeRamAndStorage(); #endif for (i=0;i<NUMDEV;i++) { if (ComPortStatus[i]!=0) { StartupStore(_T(". ComPort %d: status=%d Rx=%ld Tx=%ld ErrRx=%ld + ErrTx=%ld (==%ld)%s"), i, ComPortStatus[i], ComPortRx[i],ComPortTx[i], ComPortErrRx[i],ComPortErrTx[i],ComPortErrors[i],NEWLINE); } } StartupStore(_T(". Finished shutdown %s%s"), WhatTimeIsIt(),NEWLINE); LKRunStartEnd(false); #ifdef DEBUG TCHAR foop[80]; TASK_POINT wp; TASK_POINT *wpr = ℘ _stprintf(foop,TEXT(". Sizes %d %d %d%s"), sizeof(TASK_POINT), ((long)&wpr->AATTargetLocked)-((long)wpr), ((long)&wpr->Target)-((long)wpr), NEWLINE ); StartupStore(foop); #endif StartupStore(_T("Destroy MainWindow" NEWLINE)); MainWindow.Destroy(); }
void vtElevLayer::RenderBitmap() { if (!m_pGrid) return; // flag as being rendered m_bNeedsDraw = false; // safety check if (m_ImageSize.x == 0 || m_ImageSize.y == 0) return; DetermineMeterSpacing(); clock_t tm1 = clock(); #if 0 // TODO: re-enable this friendly cancel behavior if (UpdateProgressDialog(j*100/m_ImageSize.y)) { wxString msg = _("Turn off displayed elevation for elevation layers?"); if (wxMessageBox(msg, _T(""), wxYES_NO) == wxYES) { m_draw.m_bShowElevation = false; CloseProgressDialog(); return; } else ResumeProgressDialog(); } #endif ColorMap cmap; vtString cmap_fname = m_draw.m_strColorMapFile; vtString cmap_path = FindFileOnPaths(vtGetDataPath(), "GeoTypical/" + cmap_fname); bool bLoaded = false; if (cmap_path != "") { if (cmap.Load(cmap_path)) bLoaded = true; } if (!bLoaded) SetupDefaultColors(cmap); bool has_invalid = m_pGrid->ColorDibFromElevation(m_pBitmap, &cmap, 8000, RGBi(255,0,0), progress_callback_minor); if (m_draw.m_bShadingQuick) m_pGrid->ShadeQuick(m_pBitmap, SHADING_BIAS, true, progress_callback_minor); else if (m_draw.m_bShadingDot) { // Quick and simple sunlight vector FPoint3 light_dir = LightDirection(m_draw.m_iCastAngle, m_draw.m_iCastDirection); if (m_draw.m_bCastShadows) m_pGrid->ShadowCastDib(m_pBitmap, light_dir, 1.0f, m_draw.m_fAmbient, progress_callback_minor); else m_pGrid->ShadeDibFromElevation(m_pBitmap, light_dir, 1.0f, m_draw.m_fAmbient, m_draw.m_fGamma, true, progress_callback_minor); } m_pBitmap->ContentsChanged(); if (has_invalid && m_draw.m_bDoMask) { m_pMask = new wxMask(*m_pBitmap->m_pBitmap, wxColour(255, 0, 0)); m_pBitmap->m_pBitmap->SetMask(m_pMask); m_bHasMask = true; } else m_bHasMask = false; clock_t tm2 = clock(); float time = ((float)tm2 - tm1)/CLOCKS_PER_SEC; VTLOG("RenderBitmap: %.3f seconds.\n", time); m_bBitmapRendered = true; }