📄 scripting.cpp
字号:
PumpServers();}//////////////////////////////////////////////////////////////////////////////////// \brief Run a script from a file/////////////////////////////////////////////////////////////////////////////////bool Scripting::RunFromFile(wxString strFilename){ wxFFileInputStream * pStream; pStream = new wxFFileInputStream(strFilename); AddScript(pStream, NULL, NULL); return false;}//////////////////////////////////////////////////////////////////////////////////// \brief Listen on a TCP port for connection for scripting commands/////////////////////////////////////////////////////////////////////////////////bool Scripting::AddTCPServer(int iPort, bool bLocalConnectionsOnly){ wxSocketServer * pServer; wxIPV4address addr; if (bLocalConnectionsOnly) addr.LocalHost(); else addr.AnyAddress(); addr.Service(iPort); pServer = new wxSocketServer(addr); if (!pServer->Ok()) { delete pServer; return true; } AddServer(pServer); return false;}//////////////////////////////////////////////////////////////////////////////////// \brief Delete all TCP servers/////////////////////////////////////////////////////////////////////////////////void Scripting::DeleteAllTCPServers(){ vector<wxSocketServer *>::iterator i2; m_mtxServers.Lock(); for (i2 = m_vServers.begin(); i2 != m_vServers.end(); i2++) { delete (*i2); } m_vServers.clear(); m_mtxServers.Unlock();}//////////////////////////////////////////////////////////////////////////////////// \brief Low level function to perform the command in a string/////////////////////////////////////////////////////////////////////////////////std::list<wxString> Scripting::ExecuteCommand(wxString strCmdAndArgs){ list<wxString> vCmdAndArgs; wxStringTokenizer tkz(strCmdAndArgs, wxT("\t"), wxTOKEN_RET_EMPTY_ALL); while (tkz.HasMoreTokens()) vCmdAndArgs.push_back(tkz.GetNextToken()); return ExecuteCommand(vCmdAndArgs); }//////////////////////////////////////////////////////////////////////////////////// \brief Low level function to perform the command in a list (command and/// arguments)./////////////////////////////////////////////////////////////////////////////////list<wxString> Scripting::ExecuteCommand(list<wxString> vCmdAndArgs){ wxString strCmd; list<wxString> rtn; if (vCmdAndArgs.size() == 0) { rtn.push_back(wxT("Invalid number of arguments")); return rtn; } strCmd = vCmdAndArgs.front().Upper(); vCmdAndArgs.pop_front(); if (strCmd == wxT("ADD_WAYPOINT")) return CommandAddWaypoint(strCmd, vCmdAndArgs); if (strCmd == wxT("GET_WAYPOINT")) return CommandGetWaypoint(strCmd, vCmdAndArgs); if (strCmd == wxT("DELETE_WAYPOINT")) return CommandDeleteWaypoint(strCmd, vCmdAndArgs); if (strCmd == wxT("EXIT")) return CommandExit(strCmd, vCmdAndArgs); rtn.push_back(wxT("Unrecognized command")); return rtn;}//////////////////////////////////////////////////////////////////////////////////// \brief add_waypoint command////// add_waypoint <name> <visible> <call_out> <small_label> <icon_filename> <long> <lat> [scale_icon]////// add_waypoint <name> <visible> <call_out> <small_label> <icon_filename> <street_#> <street name> <street type> <city> <state> [scale_icon]/////////////////////////////////////////////////////////////////////////////////list<wxString> Scripting::CommandAddWaypoint(wxString strCmd, std::list<wxString> vArgs){ list<wxString> rtn; wxString strWaypointName; bool bCallout; bool bSmallLabel; wxString strIconFilename; bool bVisible; if (vArgs.size() < 5) { rtn.push_back(wxT("Invalid number of arguments")); return rtn; } strWaypointName = PopFrontAndReturn(vArgs); bVisible = wxtoi(PopFrontAndReturn(vArgs)) ? true : false; bCallout = wxtoi(PopFrontAndReturn(vArgs)) ? true : false; bSmallLabel = wxtoi(PopFrontAndReturn(vArgs)) ? true : false; strIconFilename = PopFrontAndReturn(vArgs); switch (vArgs.size()) { case 2: case 3: { double fLong = 0; double fLat = 0; Address cAddr; bool bScaleIcon = false; PopFrontAndReturn(vArgs).ToDouble(&fLong); PopFrontAndReturn(vArgs).ToDouble(&fLat); if (vArgs.size()) bScaleIcon = wxtoi(PopFrontAndReturn(vArgs)) ? true : false; cAddr = FindCoordinates(Point(fLong, fLat), AllVisibility()); if (cAddr.m_bValid) { MapMarker cMarker(strWaypointName, &cAddr, -1, bCallout, bSmallLabel, true, strIconFilename, bScaleIcon, bVisible); m_pctlMap->SetMarker(cMarker, false); rtn.push_back(wxT("OK")); } else { rtn.push_back(wxT("Look up failure")); } return rtn; } case 5: case 6: { int iSearchNumber; wxString strSearchStreet; wxString strSearchType; wxString strCity; wxString strState; Address cAddr; bool bScaleIcon = false; iSearchNumber = wxtoi(PopFrontAndReturn(vArgs)); strSearchStreet = PopFrontAndReturn(vArgs); strSearchType = PopFrontAndReturn(vArgs); strCity = PopFrontAndReturn(vArgs); strState = PopFrontAndReturn(vArgs); if (vArgs.size()) bScaleIcon = wxtoi(PopFrontAndReturn(vArgs)) ? true : false; cAddr = FindAddress(iSearchNumber, strSearchStreet, strSearchType, strCity, strState, AllVisibility()); if (cAddr.m_bValid) { MapMarker cMarker(strWaypointName, &cAddr, -1, bCallout, bSmallLabel, true, strIconFilename, bScaleIcon, bVisible); m_pctlMap->SetMarker(cMarker, false); rtn.push_back(wxT("OK")); } else { rtn.push_back(wxT("Look up failure")); } } } rtn.push_back(wxT("Invalid number of arguments")); return rtn;}//////////////////////////////////////////////////////////////////////////////////// \brief delete_waypoint command////// delete_waypoint <name>/////////////////////////////////////////////////////////////////////////////////list<wxString> Scripting::CommandDeleteWaypoint(wxString strCmd, std::list<wxString> vArgs){ list<wxString> rtn; wxString strWaypointName; if (vArgs.size() != 1) { rtn.push_back(wxT("Invalid number of arguments")); return rtn; } strWaypointName = PopFrontAndReturn(vArgs); m_pctlMap->ClearMarker(strWaypointName); rtn.push_back(wxT("OK")); return rtn;}//////////////////////////////////////////////////////////////////////////////////// \brief get_waypoint command////// get_waypoint <name>/// /// Will return the address and coordinates of waypoint/////////////////////////////////////////////////////////////////////////////////list<wxString> Scripting::CommandGetWaypoint(wxString strCmd, std::list<wxString> vArgs){ list<wxString> rtn; wxString strWaypointName; if (vArgs.size() != 1) { rtn.push_back(wxT("Invalid number of arguments")); return rtn; } strWaypointName = PopFrontAndReturn(vArgs); MapMarker & cMarker = m_pctlMap->GetMarker(strWaypointName); rtn.push_back(wxT("OK")); rtn.push_back(cMarker.m_cAddress.FormatAddress(true, true, false)); return rtn;}//////////////////////////////////////////////////////////////////////////////////// \brief exit command////// exit/// /// Causes Roadnav to exit/////////////////////////////////////////////////////////////////////////////////list<wxString> Scripting::CommandExit(wxString strCmd, std::list<wxString> vArgs){ list<wxString> rtn; wxString strWaypointName; if (vArgs.size() != 0) { rtn.push_back(wxT("Invalid number of arguments")); return rtn; } wxCommandEvent ev(wxEVT_COMMAND_MENU_SELECTED, wxID_EXIT); m_pParent->AddPendingEvent(ev); rtn.push_back(wxT("OK")); return rtn;}//////////////////////////////////////////////////////////////////////////////////// \brief Compiles a list of wxString commands into one big tab delimited /// wxString/////////////////////////////////////////////////////////////////////////////////wxString Scripting::CompileCommand(list<wxString> vCmdAndArgs){ wxString strRtn; list<wxString>::iterator i; for (i = vCmdAndArgs.begin(); i != vCmdAndArgs.end(); i++) { if (i != vCmdAndArgs.begin()) strRtn += wxT("\t"); strRtn += *i; } return strRtn;}//////////////////////////////////////////////////////////////////////////////////// \brief Writes a MapMarker to the specified file (add_waypoint command)/////////////////////////////////////////////////////////////////////////////////bool Scripting::WriteWaypointToFile(wxString strFilename, bool bAppend, const MapMarker & cMarker){ wxFFile fFile; list<wxString> vCmdAndArgs; if (!fFile.Open(strFilename, bAppend ? wxT("a+b") : wxT("wb"))) return true; vCmdAndArgs.push_back(wxT("add_waypoint")); vCmdAndArgs.push_back(cMarker.m_strName); vCmdAndArgs.push_back(wxString::Format(wxT("%d"), cMarker.m_bVisible)); vCmdAndArgs.push_back(wxString::Format(wxT("%d"), cMarker.m_bCalloutBox)); vCmdAndArgs.push_back(wxString::Format(wxT("%d"), cMarker.m_bSmallLabel)); vCmdAndArgs.push_back(wxString::Format(cMarker.m_strIcon)); vCmdAndArgs.push_back(wxString::Format(wxT("%.10f"), cMarker.m_cAddress.m_ptCoordinates.m_fLong)); vCmdAndArgs.push_back(wxString::Format(wxT("%.10f"), cMarker.m_cAddress.m_ptCoordinates.m_fLat)); fFile.Write(CompileCommand(vCmdAndArgs) + wxT("\n")); fFile.Close(); return false;}#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -