Example #1
0
void CAtmoDynData::CalculateDefaultZones()
{
  int i;
  int num_cols_top;
  int num_cols_bottom;
  int num_rows;
  CAtmoZoneDefinition *zoneDef;

  if(!m_pAtmoConfig)
     return;

  m_pAtmoConfig->UpdateZoneDefinitionCount();


  num_cols_top    = m_pAtmoConfig->getZonesTopCount();
  num_cols_bottom = m_pAtmoConfig->getZonesBottomCount();
  num_rows        = m_pAtmoConfig->getZonesLRCount();

  for(int zone=0; zone < m_pAtmoConfig->getZoneCount(); zone++)
  {
     zoneDef = m_pAtmoConfig->getZoneDefinition(zone);
     if(zoneDef)
        zoneDef->Fill(0);
  }


  // the zones will be counted starting from top left - in clockwise order around the display
  // the summary channel will be the last one (in the center)
  i = 0;
  // top zones from left to right
  for(int c=0;c<num_cols_top;c++)
  {
       zoneDef = m_pAtmoConfig->getZoneDefinition(i); i++;
       if(zoneDef) {
          int l = (c * CAP_WIDTH)/num_cols_top;
          int r = ((c+1) * CAP_WIDTH)/num_cols_top;
          zoneDef->FillGradientFromTop( ATMO_MAX( l - CAP_ZONE_OVERLAP, 0) , ATMO_MIN( r + CAP_ZONE_OVERLAP, CAP_WIDTH ) );
       }
  }
  // right zones from top to bottom
  for(int r=0;r<num_rows;r++)
  {
       zoneDef = m_pAtmoConfig->getZoneDefinition(i); i++;
       if(zoneDef) {
          int t = (r * CAP_HEIGHT)/num_rows;
          int b = ((r+1) * CAP_HEIGHT)/num_rows;
          zoneDef->FillGradientFromRight( ATMO_MAX( t - CAP_ZONE_OVERLAP, 0) , ATMO_MIN( b + CAP_ZONE_OVERLAP, CAP_HEIGHT) );
       }
  }
  //  bottom zones from  RIGHT to LEFT!
  for(int c=(num_cols_bottom-1);c>=0;c--)
  {
       zoneDef = m_pAtmoConfig->getZoneDefinition(i); i++;
       if(zoneDef) {
          int l = (c * CAP_WIDTH)/num_cols_bottom;
          int r = ((c+1) * CAP_WIDTH)/num_cols_bottom;
          zoneDef->FillGradientFromBottom( ATMO_MAX( l - CAP_ZONE_OVERLAP, 0 ), ATMO_MIN( r + CAP_ZONE_OVERLAP, CAP_WIDTH ) );
       }
  }
  // left zones from bottom to top!
  for(int r=(num_rows-1);r>=0;r--)
  {
       zoneDef = m_pAtmoConfig->getZoneDefinition(i); i++;
       if(zoneDef)
       {
          int t = (r * CAP_HEIGHT)/num_rows;
          int b = ((r+1) * CAP_HEIGHT)/num_rows;
          zoneDef->FillGradientFromLeft( ATMO_MAX( t - CAP_ZONE_OVERLAP, 0 ), ATMO_MIN( b + CAP_ZONE_OVERLAP, CAP_HEIGHT ) );
       }
  }
  if(m_pAtmoConfig->getZoneSummary())
  {
     // and last the summary zone if requested!
     zoneDef = m_pAtmoConfig->getZoneDefinition(i++);
     if(zoneDef)
        zoneDef->Fill(255);
  }
}