void EditorListDelegate::UpdateCellSize(UIList *forList)
	{		
		if (isElementsCountNeedUpdate && forList)
		{
			isElementsCountNeedUpdate = false;
			// Change cell size only if aggregator control is available
			UIControl *aggregatorControl = GetCurrentAggregatorControl();
			if (aggregatorControl)
			{
				Vector2 aggregatorSize = aggregatorControl->GetSize();
				SetCellSize(aggregatorSize);
			}
			
			Vector2 listSize = forList->GetSize();
			if(forList->GetOrientation() == UIList::ORIENTATION_HORIZONTAL)
			{
				DVASSERT(cellSize.x > 0);
				cellsCount =  ceilf( listSize.x / cellSize.x );
			}
			else
			{
				DVASSERT(cellSize.y > 0);
				cellsCount =  ceilf( listSize.y / cellSize.y );
			}
		}
	}
void OpSpeedDialView::SetCellsSizes()
{
	for(unsigned i = 0; i < m_thumbnail_flow->GetWidgetCount(); ++i)
	{
		SetCellSize(i);
	}
}
void CGridLabThresholds::_SetColCount(int nCols)
{
  int nOldCount = m_bCreated ? GetNumberCols() : 0;
  int nCol;
  int nRow;
  _CreateGrid(m_nRows,nCols);
  if(nOldCount <= 1)
  {
    nOldCount = 0;
  }
  else
  {
    // ummerge all cells in first row
    for(nCol = 0; nCol < nOldCount; nCol++)
    {
      SetCellSize(0,nCol,1,1);
    }
  }

  // set Renderer and Editor
  for(nRow = 1; nRow < m_nRows; nRow++)
  {
    for(nCol = nOldCount; nCol < nCols; nCol++)
    {
      SetCellEditor(nRow,nCol,new wxGridCellFloatEditor(-1,4));
      SetReadOnly(nRow,nCol,m_bReadOnly);
    }
  }
}
OP_STATUS OpSpeedDialView::CreateThumbnail(const DesktopSpeedDial& entry, bool animate)
{
	typedef QuickAnimatedWidget<SpeedDialThumbnail> QuickSpeedDialThumbnail;
	OpAutoPtr<QuickSpeedDialThumbnail> quick_thumbnail(OP_NEW(QuickSpeedDialThumbnail, ()));
	RETURN_OOM_IF_NULL(quick_thumbnail.get());
	RETURN_IF_ERROR(quick_thumbnail->Init());

	SpeedDialThumbnail* thumbnail = quick_thumbnail->GetOpWidget();
	RETURN_IF_ERROR(thumbnail->SetEntry(&entry));
	thumbnail->SetLocked(IsReadOnly());

	const int pos = g_speeddial_manager->FindSpeedDial(&entry);
	if (pos < 0 || pos > (int)m_thumbnails.GetCount())
	{
		OP_ASSERT(!"Out of sync with SpeedDialManager");
		return OpStatus::ERR;
	}
	RETURN_IF_ERROR(m_thumbnails.Insert(pos, thumbnail));

	quick_thumbnail->SetListener(m_thumbnail_flow);
	RETURN_IF_ERROR(m_thumbnail_flow->InsertWidget(quick_thumbnail.release(), pos));

	SetCellSize(pos);

	if (animate)
	{
		DoLayout(); // must do the layout explicitly first, before we do the following animation
		m_thumbnails.Get(pos)->AnimateThumbnailIn();
	}

	return OpStatus::OK;
}
int GLIDebugVariableGrid::AddRowType(RowType addType, uint typeIndex)
{
  //Add the row and get the index
  AppendRows(1);

  //Add to the type array
  rowTypeDataArray.push_back(RowTypeData(addType, typeIndex));

  //Check that the array sizes match
  wxASSERT(rowTypeDataArray.size() == GetNumberRows());

  //Set the default properties for the different types
  int addIndex = GetNumberRows() - 1;
  switch(addType)
  {
    case(RT_Header):
      SetCellSize(addIndex, NAME_COLUMN_INDEX, 1, 3);
      SetReadOnly(addIndex, NAME_COLUMN_INDEX);
      SetCellBackgroundColour(addIndex, NAME_COLUMN_INDEX, gridGrey);
      SetCellFont(addIndex, NAME_COLUMN_INDEX, GetLabelFont());
      break;

    case(RT_WatchValue):
      SetCellRenderer(addIndex, NAME_COLUMN_INDEX, new OffsetStringGridCellRenderer(CELL_RENDER_OFFSET));  
      SetReadOnly(addIndex, VALUE_COLUMN_INDEX);
      break;

    case(RT_Uniform):
      SetReadOnly(addIndex, NAME_COLUMN_INDEX);
      SetReadOnly(addIndex, VALUE_COLUMN_INDEX);
      SetReadOnly(addIndex, TYPE_COLUMN_INDEX);

      SetCellRenderer(addIndex, NAME_COLUMN_INDEX, new OffsetStringGridCellRenderer(CELL_RENDER_OFFSET));  
      break;

    case(RT_UniformArray):
      SetReadOnly(addIndex, NAME_COLUMN_INDEX);
      SetReadOnly(addIndex, VALUE_COLUMN_INDEX);
      SetReadOnly(addIndex, TYPE_COLUMN_INDEX);

      SetCellRenderer(addIndex, NAME_COLUMN_INDEX, new OffsetStringGridCellRenderer(CELL_RENDER_OFFSET*2));  
      break;

  };


  //Return the index
  return addIndex;
}