void CArrayGrid::OnLButtonDown(UINT nFlags, CPoint point)
{
	CBCGPGridCtrl::OnLButtonDown(nFlags, point);
	CDlgParamEditArray::DataType type = ((CDlgParamEditArray*)GetParent())->m_dataType;
	if (type!=CDlgParamEditArray::TypeBool)
		return;

	if (IsColumnSelected(0))
		return;

	CBCGPGridItem * pItem = GetCurSelItem();
	if (pItem==NULL)
		return;

	CString str;
	ConvertBSTR2CString( str, pItem->GetValue().bstrVal );
	if ( str.CompareNoCase("true") == 0 )
		str = "false";
	else
		str = "true";

	pItem->SetValue( (LPCTSTR)(str) );
	int iRow = pItem->GetGridItemID().m_nRow;
	((CDlgParamEditArray*)GetParent())->m_vArray[iRow] = str;
}
NS_IMETHODIMP
nsHTMLTableAccessible::GetSelectedColumnIndices(PRUint32 *aNumColumns,
                                                PRInt32 **aColumns)
{
  nsresult rv = NS_OK;

  PRInt32 columnCount;
  rv = GetColumnCount(&columnCount);
  NS_ENSURE_SUCCESS(rv, rv);

  PRBool *states = new PRBool[columnCount];
  NS_ENSURE_TRUE(states, NS_ERROR_OUT_OF_MEMORY);

  *aNumColumns = 0;
  PRInt32 index;
  for (index = 0; index < columnCount; index++) {
    rv = IsColumnSelected(index, &states[index]);
    NS_ENSURE_SUCCESS(rv, rv);

    if (states[index]) {
      (*aNumColumns)++;
    }
  }

  PRInt32 *outArray = (PRInt32 *)nsMemory::Alloc((*aNumColumns) * sizeof(PRInt32));
  if (!outArray) {
    delete []states;
    return NS_ERROR_OUT_OF_MEMORY;
  }

  PRInt32 curr = 0;
  for (index = 0; index < columnCount; index++) {
    if (states[index]) {
      outArray[curr++] = index;
    }
  }

  delete []states;
  *aColumns = outArray;
  return rv;
}
NS_IMETHODIMP
nsHTMLTableAccessible::GetSelectedColumnCount(PRUint32* aCount)
{
  NS_ENSURE_ARG_POINTER(aCount);
  *aCount = 0;

  PRInt32 count = 0;
  nsresult rv = GetColumnCount(&count);
  NS_ENSURE_SUCCESS(rv, rv);

  PRInt32 index;
  for (index = 0; index < count; index++) {
    PRBool state = PR_FALSE;
    rv = IsColumnSelected(index, &state);
    NS_ENSURE_SUCCESS(rv, rv);

    if (state)
      (*aCount)++;
  }

  return NS_OK;
}