void CoordSearchDialog::Button_Click(Button& sender, bool checked){ if ( sender == Search_PushButton ) { NetworkTransfer transfer; String url( "http://simbad.u-strasbg.fr/simbad/sim-tap/sync?request=doQuery&lang=adql&format=text&query=" ); String select_stmt = "SELECT basic.OID, RA, DEC, main_id AS \"Main identifier\" FROM basic JOIN ident ON oidref = oid WHERE id = '" + String( m_targetObj ) + "';"; //String url( "http://vizier.cfa.harvard.edu/viz-bin/nph-sesame/-oI/A?" ); //url.Append(m_targetObj); url.Append( select_stmt ); transfer.SetURL( url ); transfer.OnDownloadDataAvailable( (NetworkTransfer::download_event_handler) &CoordSearchDialog::DownloadObjectCoordinates, *this ); if ( !transfer.Download() ) { Console().WriteLn( "Download failed with error '" + String( transfer.ErrorInformation() ) + "'" ); } else { Console().WriteLn( String().Format( "%d bytes downloaded @ %.3g KiB/s", transfer.BytesTransferred(), transfer.TotalSpeed() ) ); StringList lines; m_downloadedFile.Break( lines, '\n', true/*trim*/ ); if ( lines.Length() >= 3 ) { StringList tokens; lines[2].Break( tokens, '|', true/*trim*/ ); if ( tokens.Length() == 4 ) { double ra_in_hours = tokens[1].ToDouble()/360*24; m_RA_TargetCoord = ra_in_hours; m_DEC_TargetCoord = tokens[2].ToDouble(); CoordUtils::HMS coord_RA_HMS = CoordUtils::convertToHMS( m_RA_TargetCoord ); CoordUtils::HMS coord_DEC_HMS = CoordUtils::convertToHMS( m_DEC_TargetCoord ); TRA_Edit.SetText( String().Format( "%02d:%02d:%2.2f", int( coord_RA_HMS.hour ), int( coord_RA_HMS.minute ), coord_RA_HMS.second ) ); TDEC_Edit.SetText( String().Format( "%02d:%02d:%2.2f", int( coord_DEC_HMS.hour ), int( coord_DEC_HMS.minute ), coord_DEC_HMS.second ) ); } } } m_downloadedFile.Clear(); } else if ( sender == SearchOK_PushButton ) { Ok(); } else if ( sender == SearchCancel_PushButton ) { m_RA_TargetCoord = m_DEC_TargetCoord = 0; Cancel(); } }
void MetaModule::GetVersion( int& major, int& minor, int& release, int& build, IsoString& language, IsoString& status ) const { // Set undefined states for all variables, in case of error. major = minor = release = build = 0; language.Clear(); status.Clear(); IsoString vs( Version() ); // A version string must begin with a version marker if ( vs.Length() < LengthOfVersionMarker ) return; // Split the string of version numbers into tokens separated by dots StringList tokens; vs.Break( tokens, '.', false/*trim*/, LengthOfVersionMarker ); // Required: MM.mm.rr.bbbb.LLL // Optional: .<status> if ( tokens.Length() < 5 || tokens.Length() > 6 ) return; // Extract version numbers try { int MM = tokens[0].ToInt( 10 ); int mm = tokens[1].ToInt( 10 ); int rr = tokens[2].ToInt( 10 ); int bbbb = tokens[3].ToInt( 10 ); major = MM; minor = mm; release = rr; build = bbbb; } catch ( ... ) // silently eat all parse exceptions here { return; } // Language code language = tokens[4]; // ### TODO: Verify validity of ISO 639.2 code // Optional status word if ( tokens.Length() == 6 ) status = tokens[5]; // ### TODO: Verify validity of the status word }
static IsoString GetDemangledFunctionName( const char* symbol, IsoString& addrStr ) { IsoString symbolStr( symbol ); addrStr.Clear(); // Get mangled function name. Example: // /opt/PixInsight/bin/lib/libQtGui.so.4(_ZN7QWidget5eventEP6QEvent+0x411) [0x7fa271347811] StringList tokens; symbolStr.Break( tokens, '(' , true/*trim*/ ); if ( tokens.Length() != 2 ) return symbolStr; // Take second token and split again. StringList tokens2; tokens[1].Break( tokens2, '+' , true/*trim*/ ); if ( tokens2.Length() != 2 ) return symbolStr; // If there is no function name, do not set the addr string. if ( !tokens2[0].IsEmpty() ) { addrStr = tokens2[1]; addrStr.DeleteChar( '(' ); addrStr.DeleteChar( ')' ); } // The first token of tokens2 contains the mangled string. Demangle it. size_t funcnameSize = 256; char funcname[ funcnameSize ]; int status; IsoString token( tokens2[0] ); const char* demangledFuncname = abi::__cxa_demangle( token.c_str(), funcname, &funcnameSize, &status ); return (status == 0) ? IsoString( demangledFuncname ) : symbolStr; }
void EditEqCoordPropertyDialog::setRACoords(String value){ StringList tokens; value.Break(tokens,':',true); assert(tokens.Length()==3); tokens[0].TrimLeft(); RA_Hour_Edit.SetText(tokens[0]); RA_Minute_Edit.SetText(tokens[1]); RA_Second_Edit.SetText(tokens[2]); m_ra_hour=tokens[0].ToDouble(); m_ra_minute=tokens[1].ToDouble(); m_ra_second=tokens[2].ToDouble(); double coord_ra=m_ra_hour + m_ra_minute / 60 + m_ra_second / 3600; m_RA_TargetCoord = String(coord_ra); }
void EditEqCoordPropertyDialog::setDECCoords(String value){ StringList tokens; value.Break(tokens,':',true); assert(tokens.Length()==3); tokens[0].TrimLeft(); DEC_Hour_Edit.SetText(tokens[0]); DEC_Minute_Edit.SetText(tokens[1]); DEC_Second_Edit.SetText(tokens[2]); m_dec_deg=tokens[0].ToDouble(); m_dec_arcminute=tokens[1].ToDouble(); m_dec_arcsecond=tokens[2].ToDouble(); int sign=m_dec_deg >= 0 ? 1 : -1; double coord_dec=sign * (fabs(m_dec_deg) + m_dec_arcminute / 60 + m_dec_arcsecond / 3600); m_DEC_TargetCoord = String(coord_dec); }
static void GetNewPropertyListItemParametersFromKey( INDINewPropertyListItem& item ) { StringList items; item.PropertyKey.Break( items, '/', true/*trim*/, item.PropertyKey.StartsWith( '/' ) ? 1 : 0 ); if ( items.Length() == 3 ) if ( !items[0].IsEmpty() && !items[1].IsEmpty() && !items[2].IsEmpty() ) { item.Device = items[0]; item.Property = items[1]; item.Element = items[2]; item.PropertyKey = '/' + items[0] + '/' + items[1] + '/' + items[2]; return; } throw Error( "Invalid property key '" + item.PropertyKey + "'" ); }
void INDIMountInterface::ComboItemSelected( ComboBox& sender, int itemIndex ) { if ( sender == GUI->MountDevice_Combo ) { m_Device = sender.ItemText( itemIndex ); if ( TheINDIDeviceControllerInterface != nullptr ) { INDIDeviceControllerInstance* pInstance = &TheINDIDeviceControllerInterface->instance; if ( pInstance == nullptr ) return; // Start update timer GUI->UpdateMount_Timer.Start(); } pcl::Sleep( 2 ); // Download stars from simbad database NetworkTransfer transfer; IsoString url( "http://simbad.u-strasbg.fr/simbad/sim-tap/sync?request=doQuery&lang=adql&format=text&query=" ); //IsoString url( "http://simbad.cfa.harvard.edu/simbad/sim-tap/sync?request=doQuery&lang=adql&format=text&query=" ); SkyMap::geoCoord geoCoord; geoCoord.geo_lat = m_geoLat; SkyMap::filter filter; filter.dec_lowerLimit = (m_geoLat < 0) ? 90.0 - m_geoLat : m_geoLat - 90.0; filter.dec_upperLimit = (m_geoLat < 0) ? -90.0 : 90.0; filter.v_upperLimit = m_limitStarMag; m_skymap = new SkyMap( filter, geoCoord ); IsoString select_stmt = m_skymap->getASDLQueryString(); Console().WriteLn( "QueryStr = " + m_skymap->getASDLQueryString() ); url.Append( select_stmt ); transfer.SetURL( url ); transfer.OnDownloadDataAvailable( (NetworkTransfer::download_event_handler) &INDIMountInterface::DownloadObjectCoordinates, *this ); if ( !transfer.Download() ) { Console().WriteLn( "Download failed with error '" + transfer.ErrorInformation() + "'" ); if ( transfer.WasAborted() ) Console().WriteLn( "Download was aborted" ); } else { Console().WriteLn( String().Format( "%u bytes downloaded @ %.3g KiB/s", transfer.BytesTransferred(), transfer.TotalSpeed() ) ); StringList lines; m_downloadedFile.Break( lines, '\n', true/*trim*/ ); Console().WriteLn( m_downloadedFile.c_str() ); for ( size_t i = 0; i < lines.Length(); i++ ) { if ( i <= 1 ) continue; StringList tokens; lines[i].Break( tokens, '|', true/*trim*/ ); if ( tokens.Length() != 5 ) continue; if ( !tokens[1].IsNumeral() || !tokens[2].IsNumeral() || !tokens[3].IsNumeral() ) continue; SkyMap::object star; star.mainId = tokens[0]; star.ra = tokens[1].ToDouble(); star.dec = tokens[2].ToDouble(); star.v = tokens[3].ToDouble(); star.spType = tokens[4]; #if DEBUG Console().WriteLn( IsoString().Format( "star=%s, ra=%f, dec=%f, vmag=%f, sp=%s", star.mainId.c_str(), star.ra, star.dec, star.v, star.spType.c_str() ) ); #endif m_skymap->addObject( star ); } } m_downloadedFile.Clear(); } }
void INDIMountInterface::TabPageSelected( TabBox& sender, int pageIndex ) { if ( sender == GUI->SkyChart_TabBox ) { if ( pageIndex == 0 ) // AllSky tab page { m_isAllSkyView = true; } else if ( pageIndex==1 ) // FoV tab page { double CCD_chipHeight = 2200; double CCD_chipWidth = 2750; double CCD_pixelSize = 4.54/1000; double TEL_focalLength = 700; double FoV_width = CCD_chipWidth*CCD_pixelSize / TEL_focalLength*3438/60; double FoV_height = CCD_chipHeight*CCD_pixelSize / TEL_focalLength*3438/60; double limitStarMag = 13; double ra_center = m_scopeRA*360/24; double dec_center = m_scopeDEC; // download stars NetworkTransfer transfer; IsoString url( "http://simbad.u-strasbg.fr/simbad/sim-tap/sync?request=doQuery&lang=adql&format=text&query=" ); IsoString select_stmt = m_skymap->getASDLFoVQueryString( ra_center, dec_center, FoV_width, FoV_height, limitStarMag ); Console().WriteLn( "QueryStr = " + select_stmt ); url.Append( select_stmt ); transfer.SetURL( url ); transfer.OnDownloadDataAvailable( (NetworkTransfer::download_event_handler)&INDIMountInterface::DownloadObjectCoordinates, *this ); if ( !transfer.Download() ) { Console().WriteLn( "Download failed with error '" + transfer.ErrorInformation() + "'" ); } else { Console().WriteLn( String().Format( "%d bytes downloaded @ %.3g KiB/s", transfer.BytesTransferred(), transfer.TotalSpeed() ) ); StringList lines; m_downloadedFile.Break( lines, '\n', true/*trim*/ ); m_skymap->clearFoVObjectList(); if ( lines.Length() > 0 ) { for ( size_t i = 0; i < lines.Length(); i++ ) { if (i <= 1) continue; StringList tokens; lines[i].Break( tokens, '|', true/*trim*/ ); if ( tokens.Length() < 4 ) continue; if ( !tokens[1].IsNumeral() || !tokens[2].IsNumeral() || !tokens[3].IsNumeral() ) continue; SkyMap::object star; star.mainId = tokens[0]; star.ra = tokens[1].ToDouble(); star.dec = tokens[2].ToDouble(); star.v = tokens[3].ToDouble(); if ( tokens.Length() == 6 ) star.spType = tokens[5]; #if DEBUG Console().WriteLn( IsoString().Format( "star=%s, ra=%f, dec=%f", star.mainId.c_str(), star.ra, star.dec ) ); #endif m_skymap->addObjectToFoV( star ); } } } m_downloadedFile.Clear(); m_isAllSkyView = false; } } }