Exemplo n.º 1
0
void CContextWeather::TimerProc(UINT idTimer)
{
	time_t now;
	struct tm *t;
	char szText[128] = {0,};

	switch(idTimer)
	{
	case CLOCK_TIMER:
		now = time(NULL);
		t = localtime(&now);

		if(g_setup_data.m_SetupData.wallpad_type != WALLPAD_TYPE_KCM)
		{
		
			sprintf(szText, "%04d년 %02d월 %02d일\0", 
					t->tm_year + 1900,
					t->tm_mon + 1,
					t->tm_mday);

			RedrawImage(g_wid, g_gc, 300, 34, 200, 32, 300, 34, 200, 32, WEATHER_OBJ_BG);
			DrawText(szText, g_wid, g_gc, 300, 34, 200, 32, g_font, 24, WHITE, TXT_HALIGN_CENTER|TXT_VALIGN_MIDDLE);

			memset(szText, 0, 128);
			sprintf(szText, "%02d:%02d\0", 
					t->tm_hour,
					t->tm_min);

			RedrawImage(g_wid, g_gc, 300, 68, 200, 88, 300, 68, 200, 88, WEATHER_OBJ_BG);
			DrawText(szText, g_wid, g_gc, 300, 68, 200, 88, g_font, 72, WHITE, TXT_HALIGN_CENTER|TXT_VALIGN_MIDDLE);
		}
		else
		{
			sprintf(szText, "%02d:%02d\0", 
					t->tm_hour,
					t->tm_min);

			RedrawImage(g_wid, g_gc, 300, 68, 200, 88, 300, 68, 200, 88, WEATHER_OBJ_BG);
			DrawText(szText, g_wid, g_gc, 300, 68, 200, 88, g_font, 72, WHITE, TXT_HALIGN_CENTER|TXT_VALIGN_MIDDLE);
		}
		break;
	case RESPONSE_TIMER:
		if(g_pWallPad)
		{
			g_pWallPad->RequestWeatherInfo();	//날씨정보요청
		}
		break;
	}
}
Exemplo n.º 2
0
void CContextWeather::ButtonDown(UINT usGpioFlag, UINT usEventEnum)
{
	DBGMSGC(DBG_WEATHER, "++\r\n");

	if(usEventEnum == MTM_GPIO_BUTTON_DOWN)
	{
	}
	else if(usEventEnum == MTM_GPIO_BUTTON_LONG)
	{
		if( CHK_FLAG(usGpioFlag, BIT_FLAG(GPIO_FRONT_RIGHT_TOP)|BIT_FLAG(GPIO_FRONT_RIGHT_BOTTOM)) ||
			CHK_FLAG(usGpioFlag, BIT_FLAG(GPIO_REAR_VOL_UP)|BIT_FLAG(GPIO_REAR_VOL_DOWN)) )
		{
			if (!CHK_FLAG(usGpioFlag, BIT_FLAG(GPIO_FRONT_RIGHT_MIDDLE))) {
				GrUnmapWindow(m_wid_ment);

				//Ment Scroll Window 영역이 까맣게 보이는 증상이 있어서 배경으로 다시 덮어줌
				RedrawImage(g_wid, g_gc, MENT_AREA_X, MENT_AREA_Y, MENT_AREA_WIDTH, MENT_AREA_HEIGHT, 
							MENT_AREA_X, MENT_AREA_Y, MENT_AREA_WIDTH, MENT_AREA_HEIGHT, WEATHER_OBJ_BG);

				g_state.ChangeState(STATE_SETUP);
			}
		}
	}

	DBGMSGC(DBG_WEATHER, "--\r\n");
}
Exemplo n.º 3
0
bool wxGenericDragImage::Show()
{
    wxASSERT_MSG( (m_windowDC != NULL), wxT("No window DC in wxGenericDragImage::Show()") );

    // Show at the current position

    if (!m_isShown)
    {
        // This is where we restore the backing bitmap, in case
        // something has changed on the window.

#ifndef wxHAS_NATIVE_OVERLAY
        wxBitmap* backing = (m_pBackingBitmap ? m_pBackingBitmap : (wxBitmap*) & m_backingBitmap);
        wxMemoryDC memDC;
        memDC.SelectObject(* backing);

        UpdateBackingFromWindow(* m_windowDC, memDC, m_boundingRect, wxRect(0, 0, m_boundingRect.width, m_boundingRect.height));

        //memDC.Blit(0, 0, m_boundingRect.width, m_boundingRect.height, m_windowDC, m_boundingRect.x, m_boundingRect.y);
        memDC.SelectObject(wxNullBitmap);
#endif // !wxHAS_NATIVE_OVERLAY

        RedrawImage(m_position - m_offset, m_position - m_offset, false, true);
    }

    m_isShown = true;
    m_isDirty = true;

    return true;
}
Exemplo n.º 4
0
void CContextWeather::Proc(UINT nContextNum)
{
	char szWaveFile[7][14] = { "serenity\0", "party_cloudy\0", "cloudy\0", "shower\0", "rainny\0", "thunderstorm\0", "snow\0" };
	char szWaveFilePath[128] = {0,};

	DBGMSGC(DBG_WEATHER, "++ [%d]\r\n", nContextNum);

	switch (nContextNum) {
	case 0:	//하단 배너 준비
		if ((!g_setup_data.m_SetupData.light_stat) &&
			(g_gpio_mtm.CheckWatchdogReset()==FALSE) &&
			(g_gpio_mtm.GetGpioInputPin(GPIO_DOOR_DETECT)==HIGH)) {	//와치독 리셋상태가 아니고 출입문이 닫힌 상태이면
			sprintf(szWaveFilePath, "/app/sound/%s.wav\0",
				szWaveFile[g_setup_data.m_SetupData.weather_right]);
			PlayWavFile(szWaveFilePath);
		}

		//문자열의 길이
		m_len_ment = strlen(g_szWeatherMent[g_setup_data.m_SetupData.weather_right]);

		//폰트크기를 감안한 문자열이 표시되는 폭
		m_width_ment = m_len_ment*12;

		//멘트 텍스트를 픽셀맵에 그리기
		GrMapWindow(m_wid_ment);

		RedrawImage(m_wid_ment, g_gc, 0, 0, MENT_AREA_WIDTH, MENT_AREA_HEIGHT, 
					MENT_AREA_X, MENT_AREA_Y, MENT_AREA_WIDTH, MENT_AREA_HEIGHT, WEATHER_OBJ_BG);

		RedrawImage(m_pixmap_ment, g_gc, 0, 0, MENT_AREA_WIDTH, MENT_AREA_HEIGHT, 
					MENT_AREA_X, MENT_AREA_Y, MENT_AREA_WIDTH, MENT_AREA_HEIGHT, WEATHER_OBJ_BG);
		RedrawImage(m_pixmap_ment, g_gc, MENT_AREA_WIDTH, 0, MENT_PIXEL_MAP_WIDTH-MENT_AREA_WIDTH, MENT_AREA_HEIGHT, 
					MENT_AREA_X, MENT_AREA_Y, MENT_PIXEL_MAP_WIDTH-MENT_AREA_WIDTH, MENT_AREA_HEIGHT, WEATHER_OBJ_BG);

		DrawText(g_szWeatherMent[g_setup_data.m_SetupData.weather_right],
				 m_pixmap_ment, g_gc, 0, 0, m_width_ment, MENT_AREA_HEIGHT, g_font, 24, WHITE, TXT_HALIGN_LEFT|TXT_VALIGN_MIDDLE);

		GrRaiseWindow(m_wid_ment);

		m_nThreadStep = 0;
		break;
	case 1:
		break;
	}

	DBGMSGC(DBG_WEATHER, "--\r\n");
}
Exemplo n.º 5
0
void CContextWeather::DeInit()
{
	CContext::DeInit();

	GrDestroyWindow(m_pixmap_ment);

//	GrUnmapWindow(m_wid_ment);
	GrDestroyWindow(m_wid_ment);

	//Ment Scroll Window 영역이 까맣게 보이는 증상이 있어서 배경으로 다시 덮어줌
	RedrawImage(g_wid, g_gc, MENT_AREA_X, MENT_AREA_Y, MENT_AREA_WIDTH, MENT_AREA_HEIGHT, 
				MENT_AREA_X, MENT_AREA_Y, MENT_AREA_WIDTH, MENT_AREA_HEIGHT, WEATHER_OBJ_BG);
	
	m_ObjectList.RemoveAll();
}
Exemplo n.º 6
0
bool wxGenericDragImage::Hide()
{
    wxASSERT_MSG( (m_windowDC != NULL), wxT("No window DC in wxGenericDragImage::Hide()") );

    // Repair the old position

    if (m_isShown && m_isDirty)
    {
        RedrawImage(m_position - m_offset, m_position - m_offset, true, false);
    }

    m_isShown = false;
    m_isDirty = false;

    return true;
}
Exemplo n.º 7
0
void CContextParking::Draw(UINT nContextNum)
{
	MTM_DATA_PARKING parking_info;
	char szText[64] = {0,};
	int i, line_feed = 0;

	if(m_gc==0) return;

	DBGMSGC(DBG_PARKING, "++ [%d]\r\n", nContextNum);

	//배경
	m_ObjectList.Draw(PARKING_OBJ_BG);

	//아이콘
	m_ObjectList.Draw(PARKING_OBJ_ICON);

	//주차 이미지
	m_ObjectList.Draw(PARKING_OBJ_IMAGE);

	parking_list_get_item(0, &parking_info);
	if (parking_info.status == MTM_DATA_PARKING_STATUS_IN) {
		sprintf(szText, "[%s]층 [%s]에 주차 되었습니다", parking_info.floor, parking_info.zone);
		DrawText(szText,  m_wid_parent, m_gc,  245, 89, 500, 32, g_font, 24,
			WHITE, TXT_HALIGN_LEFT|TXT_VALIGN_MIDDLE);
	} else {
		DrawText("주차위치를 확인할 수 없습니다", m_wid_parent, m_gc,  245, 89, 500, 32,
			g_font, 24, WHITE, TXT_HALIGN_LEFT|TXT_VALIGN_MIDDLE);
	}

//	37,251 - 209,450 : w=172, h=200
	RedrawImage(g_wid, g_gc, 37, 251, 172, 200, 37, 251, 172, 200, PARKING_OBJ_BG);

	for (i = 1; i < MAX_PARKING_LIST; i++) {
		parking_list_get_item(i, &parking_info);
		if (parking_info.status != MTM_DATA_PARKING_STATUS_IN)
			break;

		memset(szText, 0, 64);
		sprintf(szText, "%s -%s", parking_info.floor, parking_info.zone);
		DrawText(szText,  m_wid_parent, m_gc, 37, 251+line_feed*36, 172, 32, g_font,
			24, WHITE, TXT_HALIGN_LEFT|TXT_VALIGN_MIDDLE);
		line_feed++;
	}

	DBGMSGC(DBG_PARKING, "--\r\n");
}
Exemplo n.º 8
0
void CContextWeather::ButtonUp(UINT usGpioFlag, UINT usEventEnum)
{
	DBGMSGC(DBG_WEATHER, "++\r\n");

	if(usEventEnum == MTM_GPIO_BUTTON_UP)
	{
		switch(usGpioFlag)
		{
		case GPIO_FLAG_FRONT_LEFT_TOP:		//Weather
			if(g_pWallPad)
			{
				g_pWallPad->RequestWeatherInfo();	//날씨정보요청
			}
			break;
		case GPIO_FLAG_FRONT_LEFT_MIDDLE:	//Elevator
			g_state.ChangeState(STATE_ELEVATOR);
			break;
		case GPIO_FLAG_FRONT_LEFT_BOTTOM:	//Parking
			g_state.ChangeState(STATE_PARKING);
			break;
		case GPIO_FLAG_FRONT_RIGHT_TOP:		//Gas
			g_state.ChangeState(STATE_GAS);
			break;
		case GPIO_FLAG_FRONT_RIGHT_MIDDLE:	//Light
			g_state.ChangeState(STATE_LIGHT);
			break;
		case GPIO_FLAG_FRONT_RIGHT_BOTTOM:	//Security
			g_state.ChangeState(STATE_SECURITY);
			break;
		default:
			return;
		}

		if(usGpioFlag != GPIO_FLAG_FRONT_LEFT_TOP)
		{
			GrUnmapWindow(m_wid_ment);

			//Ment Scroll Window 영역이 까맣게 보이는 증상이 있어서 배경으로 다시 덮어줌
			RedrawImage(g_wid, g_gc, MENT_AREA_X, MENT_AREA_Y, MENT_AREA_WIDTH, MENT_AREA_HEIGHT, 
						MENT_AREA_X, MENT_AREA_Y, MENT_AREA_WIDTH, MENT_AREA_HEIGHT, WEATHER_OBJ_BG);
		}
	}

	DBGMSGC(DBG_WEATHER, "--\r\n");
}
Exemplo n.º 9
0
// Move the image: call from OnMouseMove. Pt is in window client coordinates if window
// is non-NULL, or in screen coordinates if NULL.
bool wxGenericDragImage::Move(const wxPoint& pt)
{
    wxASSERT_MSG( (m_windowDC != NULL), wxT("No window DC in wxGenericDragImage::Move()") );

    wxPoint pt2(pt);
    if (m_fullScreen)
        pt2 = m_window->ClientToScreen(pt);

    // Erase at old position, then show at the current position
    wxPoint oldPos = m_position;

    bool eraseOldImage = (m_isDirty && m_isShown);

    if (m_isShown)
        RedrawImage(oldPos - m_offset, pt2 - m_offset, eraseOldImage, true);

    m_position = pt2;

    if (m_isShown)
        m_isDirty = true;

    return true;
}
Exemplo n.º 10
0
//
// Member Function
//
void CContextWeather::Init()
{
	CObject* pObject;
	CObjectIcon* pObjectIcon;
	UINT id;

	CContext::Init();

	// 배경 이미지
	pObject = new CObjectImage(m_wid_parent, m_gc, 0, 0, g_scr_info.cols, g_scr_info.rows);
	if(pObject)
	{
		pObject->LoadImage(IMG_BACKGROUND, "/app/img/main_bg_blank.png");

		id = m_ObjectList.AddObject(pObject);
	}

	// 왼쪽 날씨 이미지
	pObject = new CObjectIcon(m_wid_parent, m_gc, 1, 169, 300, 246);
	if(pObject)
	{
		pObjectIcon = (CObjectIcon*)pObject;
		pObjectIcon->AllocImageCount(IMG_ENUM_WEATHER_COUNT);
		pObject->LoadImage(IMG_ENUM_WEATHER_SERENITY,		"/app/img/weather/serenity.png");
		pObject->LoadImage(IMG_ENUM_WEATHER_PARTLY_CLOUDY,	"/app/img/weather/partly_cloudy.png");
		pObject->LoadImage(IMG_ENUM_WEATHER_CLOUDY,			"/app/img/weather/cloudy.png");
		pObject->LoadImage(IMG_ENUM_WEATHER_SHOWER,			"/app/img/weather/shower.png");
		pObject->LoadImage(IMG_ENUM_WEATHER_RAINNY,			"/app/img/weather/rainny.png");
		pObject->LoadImage(IMG_ENUM_WEATHER_THUNDERSTORM,	"/app/img/weather/thunderstorm.png");
		pObject->LoadImage(IMG_ENUM_WEATHER_SNOW,			"/app/img/weather/snow.png");

		id = m_ObjectList.AddObject(pObject);
	}

	// 오른쪽 날씨 이미지
	pObject = new CObjectIcon(m_wid_parent, m_gc, 499, 169, 300, 246);
	if(pObject)
	{
		pObjectIcon = (CObjectIcon*)pObject;
		pObjectIcon->AllocImageCount(IMG_ENUM_WEATHER_COUNT);
		pObject->LoadImage(IMG_ENUM_WEATHER_SERENITY,		"/app/img/weather/serenity.png");
		pObject->LoadImage(IMG_ENUM_WEATHER_PARTLY_CLOUDY,	"/app/img/weather/partly_cloudy.png");
		pObject->LoadImage(IMG_ENUM_WEATHER_CLOUDY,			"/app/img/weather/cloudy.png");
		pObject->LoadImage(IMG_ENUM_WEATHER_SHOWER,			"/app/img/weather/shower.png");
		pObject->LoadImage(IMG_ENUM_WEATHER_RAINNY,			"/app/img/weather/rainny.png");
		pObject->LoadImage(IMG_ENUM_WEATHER_THUNDERSTORM,	"/app/img/weather/thunderstorm.png");
		pObject->LoadImage(IMG_ENUM_WEATHER_SNOW,			"/app/img/weather/snow.png");

		id = m_ObjectList.AddObject(pObject);
	}

	// 가스On/Off 이미지
	pObject = new CObjectIcon(m_wid_parent, m_gc, 325, 245, 137, 137);		//좌측여백 13
	if(pObject)
	{
		pObjectIcon = (CObjectIcon*)pObject;
		pObjectIcon->AllocImageCount(IMG_ENUM_GAS_COUNT);
		pObject->LoadImage(IMG_ENUM_GAS_ON,		"/app/img/main_icon/main_gas_on.png");		//적색 가스사용
		pObject->LoadImage(IMG_ENUM_GAS_OFF,	"/app/img/main_icon/main_gas_off.png");		//녹색 가스차단

		id = m_ObjectList.AddObject(pObject);
	}

	// 주차아이콘
	pObject = new CObjectImage(m_wid_parent, m_gc, 0, 419, 261, 61);
	if(pObject)
	{
		pObject->LoadImage(IMG_BACKGROUND, "/app/img/main_bar_back.png");

		id = m_ObjectList.AddObject(pObject);
	}

	//g_setup_data.m_SetupData.gas_stat: 0=사용중, 1=사용차단
	m_isGasOff = (g_setup_data.m_SetupData.gas_stat) ? TRUE : FALSE;

	//멘트가 표시될 서브 윈도
	m_wid_ment = GrNewWindow(g_wid, MENT_AREA_X, MENT_AREA_Y, MENT_AREA_WIDTH, MENT_AREA_HEIGHT, 0, 0, 0);
	if(m_wid_ment)
	{
	//	GrMapWindow(m_wid_ment);

		//이미지 버퍼링을 처리할 Pixel Map
	//	m_pixmap_ment = GrNewPixmap(MENT_AREA_WIDTH, MENT_AREA_HEIGHT, NULL);
		m_pixmap_ment = GrNewPixmap(MENT_PIXEL_MAP_WIDTH, MENT_AREA_HEIGHT, NULL);

	#if 0
		RedrawImage(m_wid_ment, g_gc, 0, 0, MENT_AREA_WIDTH, MENT_AREA_HEIGHT, 
					MENT_AREA_X, MENT_AREA_Y, MENT_AREA_WIDTH, MENT_AREA_HEIGHT, WEATHER_OBJ_BG);

		RedrawImage(m_pixmap_ment, g_gc, 0, 0, MENT_AREA_WIDTH, MENT_AREA_HEIGHT, 
					MENT_AREA_X, MENT_AREA_Y, MENT_AREA_WIDTH, MENT_AREA_HEIGHT, WEATHER_OBJ_BG);

		DrawText(g_szWeatherMent[g_setup_data.m_SetupData.today_weather],
					 m_pixmap_ment, g_gc, 0, 0, m_width_ment, MENT_AREA_HEIGHT, g_font, 24, WHITE, TXT_HALIGN_LEFT|TXT_VALIGN_MIDDLE);

		GrRaiseWindow(m_wid_ment);
	#endif
	}
	else
	{
		DBGMSGC(DBG_WEATHER, "%s: GrNewWindow failure\r\n", __func__);
	}
}
Exemplo n.º 11
0
void CContextElevator::ThreadProc()
{
	static int nArrowStep;
	static ULONG ulTickDraw;
	char szText[32] = {0,};

	//호출이 성공하고 엘리베이터 상태를 모니터링 하는 동안 동작함
//	if(m_nContextNum==0) return;

	switch(m_nThreadStep)
	{
	case 0:
		nArrowStep = 0;
		m_nThreadStep++;
		break;
	case 1:
		if( m_pObjectIcon && (m_nContextNum==2))
		{
			RedrawImage(m_wid_parent, m_gc, 245, 89, 500, 32, 245, 89, 500, 32, ELEVATOR_OBJ_BG);
			switch(m_nElevatorDir)
			{
			case MTM_DATA_EV_STATUS_STOP:
				DrawText("엘레베이터가 정지해 있습니다",  m_wid_parent, m_gc,  245, 89, 500, 32, g_font, 24, WHITE, TXT_HALIGN_LEFT|TXT_VALIGN_MIDDLE);
				break;
			case MTM_DATA_EV_STATUS_UP:
			case MTM_DATA_EV_STATUS_DOWN:
				DrawText("엘레베이터가 이동중 입니다",  m_wid_parent, m_gc,  245, 89, 500, 32, g_font, 24, WHITE, TXT_HALIGN_LEFT|TXT_VALIGN_MIDDLE);
				break;
			case MTM_DATA_EV_STATUS_ARRIVE:
				DrawText("엘레베이터가 도착 하였습니다",  m_wid_parent, m_gc,  245, 89, 500, 32, g_font, 24, WHITE, TXT_HALIGN_LEFT|TXT_VALIGN_MIDDLE);
				break;
			}

			//방향표시
			if( (m_nElevatorDir == MTM_DATA_EV_STATUS_STOP) || (m_nElevatorDir == MTM_DATA_EV_STATUS_ARRIVE) )
			{
				m_pObjectIcon->Draw(IMG_ENUM_ARROW_BLANK);
				nArrowStep = 0;
			}
			else if(m_nElevatorDir == MTM_DATA_EV_STATUS_DOWN)
			{
				switch(nArrowStep)
				{
				case 0:
					m_pObjectIcon->Draw(IMG_ENUM_ARROW_DOWN_1);
					break;
				case 1:
					m_pObjectIcon->Draw(IMG_ENUM_ARROW_DOWN_2);
					break;
				default:
					m_pObjectIcon->Draw(IMG_ENUM_ARROW_DOWN_3);
					break;
				}

				nArrowStep++;
				if(nArrowStep==5) nArrowStep=0;
			}
			else if(m_nElevatorDir == MTM_DATA_EV_STATUS_UP)
			{
				switch(nArrowStep)
				{
				case 0:
					m_pObjectIcon->Draw(IMG_ENUM_ARROW_UP_1);
					break;
				case 1:
					m_pObjectIcon->Draw(IMG_ENUM_ARROW_UP_2);
					break;
				default:
					m_pObjectIcon->Draw(IMG_ENUM_ARROW_UP_3);
					break;
				}

				nArrowStep++;
				if(nArrowStep==5) nArrowStep=0;
			}

			//층표시
			if(m_nElevatorFloor > 0)
			{
				if(m_nElevatorFloor >= 128)
					sprintf(szText, "B%2d\0", 256-m_nElevatorFloor);
				else
					sprintf(szText, "%3d\0", m_nElevatorFloor);
			}
			else if(m_nElevatorFloor < 0)
			{
				sprintf(szText, "B%2d\0", m_nElevatorFloor*(-1));
			}
		//	else
		//	{
		//		sprintf(szText, "L\0");
		//	}

		#if 0
			DrawText(szText, m_wid_parent, m_gc,  339+13, 240+13, 143-26, 127-26, g_font, 72, WHITE, TXT_HALIGN_CENTER|TXT_VALIGN_MIDDLE);
		#else
			RedrawImage(m_wid_parent, m_gc, 352, 253, 117, 101, 12, 12, 117, 101, ELEVATOR_OBJ_DISPLAY);
			DrawText(szText, m_wid_parent, m_gc,  352, 253, 117, 101, g_font, 80, WHITE, TXT_HALIGN_CENTER|TXT_VALIGN_TOP);
			//DrawText(szText, m_wid_parent, m_gc,  352, 253, 117, 101, g_font, 72, WHITE, TXT_HALIGN_CENTER|TXT_VALIGN_MIDDLE);
		#endif

			ulTickDraw = GetTickCount();
			m_nThreadStep++;
		}
		break;
	case 2:
		if(GetElapsedTick(ulTickDraw) >= 500)
		{
			m_nThreadStep--;
		}
		break;
	}
}