ATMO_BOOL CAtmoGradients::HandleMessage(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{ 
	ATMO_BOOL r = CBasicDialog::HandleMessage(hwnd, uMsg, wParam, lParam);
	HWND groupBox = getDlgItem( IDC_ZONE_GROUP );
	CLanguage *Lng = new CLanguage;

	if((hwnd == groupBox) && (uMsg == WM_PAINT)) 
	{
		HDC hdc = GetDC(hwnd);
		HDC memDC = CreateCompatibleDC(hdc);
		RECT r;
		GetClientRect( groupBox, &r );
		int cx = (r.right - r.left) / 2;
		int cy = (r.bottom - r.top) / 2;

		HGDIOBJ oldObject = SelectObject( memDC, m_current_gradient );
		DWORD error = GetLastError();

		cx = cx - (CAP_WIDTH * 3) / 2;
		cy = cy - (CAP_HEIGHT * 3) / 2;

		StretchBlt( hdc, cx, cy, CAP_WIDTH*3, CAP_HEIGHT*3, memDC, 0, 0, CAP_WIDTH, CAP_HEIGHT, SRCCOPY );
		error = GetLastError();

		SelectObject( memDC, oldObject );
		DeleteDC( memDC );
		ReleaseDC(hwnd, hdc);
	}

	if((hwnd == groupBox) && (uMsg == WM_DROPFILES) && (m_active_zone>=0))
	{
		char psz_filename[MAX_PATH];
		char psz_filename_dest[MAX_PATH];
		char msg[MAX_PATH+128];
		DragQueryFile((HDROP)wParam, 0, psz_filename, sizeof(psz_filename));
		int i;
		i = (int)strlen(psz_filename) - 1;
		while(i && psz_filename[i]!='.') i--;
		if(i>0) 
		{
			if(!stricmp(&psz_filename[i],".bmp"))
			{
				CAtmoZoneDefinition *azone = m_pConfig->getZoneDefinition( m_active_zone );
				if(azone)
				{

					sprintf(psz_filename_dest,"%s%s\\zone_%d.bmp",
						m_pDynData->getWorkDir(),
						m_pDynData->getAtmoConnection()->getDevicePath(),
						m_active_zone
						);

					FILE *fp=fopen(psz_filename_dest,"r");
					if(fp) 
					{
						fclose(fp);
						sprintf( msg, Lng->sGradientsText[3] + "%s" + Lng->sGradientsText[4], psz_filename_dest);
						if(MessageBox(m_hDialog, msg ,Lng->sGradientsText[5],MB_ICONQUESTION | MB_YESNO) == IDNO)
							return(r);
					}

					switch(azone->LoadGradientFromBitmap( psz_filename ))
					{
					case ATMO_LOAD_GRADIENT_OK:   
						SetActiveZone( m_active_zone );
						InvalidateRect( groupBox, NULL, false);
						if(!CopyFile( psz_filename, psz_filename_dest, false)) 
						{
							sprintf( msg, Lng->sGradientsText[3] + "%s" + Lng->sGradientsText[6], psz_filename_dest);
							MessageBox(m_hDialog, msg ,Lng->sGradientsText[7], MB_ICONERROR );
						} else
							MessageBox(m_hDialog, Lng->sGradientsText[8],Lng->sGradientsText[9],MB_OK);
						break;
					case ATMO_LOAD_GRADIENT_FILENOTFOND:   
						MessageBox(m_hDialog, Lng->sGradientsText[10],Lng->sGradientsText[7],MB_ICONERROR | MB_OK);
						break;
					case ATMO_LOAD_GRADIENT_FAILED_SIZE:   
						MessageBox(m_hDialog, Lng->sGradientsText[11],Lng->sGradientsText[7],MB_ICONERROR | MB_OK);
						break;
					case ATMO_LOAD_GRADIENT_FAILED_HEADER:   
						MessageBox(m_hDialog, Lng->sGradientsText[12],Lng->sGradientsText[7],MB_ICONERROR | MB_OK);
						break;
					case ATMO_LOAD_GRADIENT_FAILED_FORMAT:   
						MessageBox(m_hDialog, Lng->sGradientsText[13],Lng->sGradientsText[7],MB_ICONERROR | MB_OK);
						break;
					}
				}
				return(r); 
			}
		}
		MessageBox( m_hDialog, Lng->sGradientsText[14],Lng->sGradientsText[7],MB_ICONERROR | MB_OK);
	}
	return(r);
}
Exemplo n.º 2
0
void CAtmoDynData::ReloadZoneDefinitionBitmaps()
{
  int i;
  // suchlogik fuer die Farbverlaufs Bitmaps ...
  // <WorkDir>\hardware\numchannels\zone..0..n.bmp
  // <WorkDir>\hardware\zone..0..n.bmp
  // <WorkDir>\zone..0..n.bmp
  // Automatik Berechnung...
  LockCriticalSection();
  if(!m_pAtmoConnection || !m_pAtmoConfig) {
      UnLockCriticalSection();
      return;
  }

  m_pAtmoConfig->UpdateZoneDefinitionCount();

  CalculateDefaultZones();


  char psz_filename[MAX_PATH];
  CAtmoZoneDefinition *zoneDef;

  sprintf(psz_filename,"%s%s",
                        m_WorkDir,
                        m_pAtmoConnection->getDevicePath()
                );
  CreateDirectory( psz_filename, NULL );

  sprintf(psz_filename,"%s%s\\%dx%dx%d",
                        m_WorkDir,
                        m_pAtmoConnection->getDevicePath(),
                        m_pAtmoConfig->getZonesTopCount(),
                        m_pAtmoConfig->getZonesLRCount(),
                        m_pAtmoConfig->getZonesBottomCount()

               );
  CreateDirectory(psz_filename, NULL );

  // try to load device depended zone definition bitmaps
  for(int zone=0; zone < m_pAtmoConfig->getZoneCount(); zone++)  {
      zoneDef = m_pAtmoConfig->getZoneDefinition(zone);
      if(!zoneDef) continue;

      sprintf(psz_filename,"%s%s\\%dx%dx%d\\zone_%d.bmp",
                        m_WorkDir,
                        m_pAtmoConnection->getDevicePath(),
                        m_pAtmoConfig->getZonesTopCount(),
                        m_pAtmoConfig->getZonesLRCount(),
                        m_pAtmoConfig->getZonesBottomCount(),
                        zone
                );
      i = zoneDef->LoadGradientFromBitmap( psz_filename );
      if(i == ATMO_LOAD_GRADIENT_OK) continue;
      if((i == ATMO_LOAD_GRADIENT_FAILED_SIZE) || (i == ATMO_LOAD_GRADIENT_FAILED_HEADER))
         MessageBox(0,psz_filename,"Failed to load, Check Format, Check Size.",MB_ICONERROR);

      sprintf(psz_filename,"%s%s\\zone_%d.bmp",
                        m_WorkDir,
                        m_pAtmoConnection->getDevicePath(),
                        zone
                );
      i = zoneDef->LoadGradientFromBitmap( psz_filename );
      if(i == ATMO_LOAD_GRADIENT_OK) continue;
      if((i == ATMO_LOAD_GRADIENT_FAILED_SIZE) || (i == ATMO_LOAD_GRADIENT_FAILED_HEADER))
         MessageBox(0,psz_filename,"Failed to load, Check Format, Check Size.",MB_ICONERROR);

      sprintf(psz_filename,"%szone_%d.bmp",
                        m_WorkDir,
                        zone
                );
      i = zoneDef->LoadGradientFromBitmap( psz_filename );
      if(i == ATMO_LOAD_GRADIENT_OK) continue;
      if((i == ATMO_LOAD_GRADIENT_FAILED_SIZE) || (i == ATMO_LOAD_GRADIENT_FAILED_HEADER))
         MessageBox(0,psz_filename,"Failed to load, Check Format, Check Size.",MB_ICONERROR);
  }

  UnLockCriticalSection();
}