⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 scripting.cpp

📁 Powerful and Portable GPS application -- support Linux, Windows, Windows CE GPS navigation and Map m
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	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 + -