BOOL WINAPI ChangeState(BOOL bNewState)
{
	AFX_MANAGE_STATE(AfxGetStaticModuleState());
	if(objSettings.bRunState!=bNewState){
		if(objSettings.bRunState==0 && bNewState!=0){
			if( InitOverlay() < 0 ){
				return FALSE;
			}
		}
		if(objSettings.bRunState!=0 && bNewState==0){
			UninitOverlay();
		}
		objSettings.bRunState=bNewState;
		if(objSettings.bRunState){
			DWORD dwTID=0;
			HANDLE hMainThread=CreateThread(NULL,0,MainOVRThread,0,0,&dwTID);
			CloseHandle(hMainThread);
		}
		SetEvent(objSettings.hSync);
		if(!objSettings.bRunState){
			::EnterCriticalSection(&csMain);
			::LeaveCriticalSection(&csMain);
		}
	}
	return TRUE;
};
Beispiel #2
0
void GPXMapOverlayRow::NameChanged(kGUIEvent *event)
{
	if(event->GetEvent()==EVENT_AFTERUPDATE)
	{
		InitOverlay();
		gpx->MapDirty();
	}
}
Beispiel #3
0
void GPXMapOverlayRow::BrowseDone(kGUIFileReq *result,int pressed)
{
	if(pressed==MSGBOX_OK)
	{
		m_filename.SetString(result->GetFilename());
		m_enabled.SetSelected(m_filename.GetLen()>0);
		InitOverlay();
		gpx->MapDirty();
	}
}
DWORD WINAPI MainOVRThread(LPVOID pData)
{
	static long lLock=0;
	if(lLock>0){
		return 0;
	}
	::EnterCriticalSection(&csMain);
	srand(time(NULL));
	SimpleTracker tr(lLock);
	SetThreadPriority( GetCurrentThread(), THREAD_PRIORITY_IDLE );
	while(1){
		WaitForSingleObject(objSettings.hSync,objSettings.dwTimeout);
		if(objSettings.bRunState==0){
			break;
		}
		HWND hWin=GetForegroundWindow();
		if(hWin==NULL || !IsZoomed(hWin)){
			// Animate the image
			UpdateImage();
			// Show the new frame
			if(UpdateOverlay()==-1){
				if(objSettings.bRunState){
					static DWORD dwTry=0;
					if(dwTry==0 || long(GetTickCount()-dwTry)>10000){
						dwTry=GetTickCount();
						UninitOverlay();
						if(InitOverlay()>=0){
							dwTry=0;
						}
					}
				}
			};
		}
	}
	::LeaveCriticalSection(&csMain);
	return 0;
}