CMArray2DTable::CMArray2DTable
	(
	CMCommandDirector*	cmdDir,
	CMArray2DDir*		arrayDir,
	JXMenuBar*			menuBar,
	JStringTableData*	data,
	JXScrollbarSet*		scrollbarSet,
	JXContainer*		enclosure,
	const HSizingOption	hSizing,
	const VSizingOption	vSizing,
	const JCoordinate	x,
	const JCoordinate	y,
	const JCoordinate	w,
	const JCoordinate	h
	)
	:
	JXStringTable(data, scrollbarSet, enclosure, hSizing,vSizing, x,y, w,h),
	itsCmdDir(cmdDir),
	itsArrayDir(arrayDir)
{
	SetSelectionBehavior(kJFalse, kJFalse);

	JXTEBase* te = GetEditMenuHandler();
	itsEditMenu  = te->AppendEditMenu(menuBar);
	ListenTo(itsEditMenu);
}
TestFloatTable::TestFloatTable
	(
	JFloatTableData*	data,
	JXMenuBar*			menuBar,
	JXScrollbarSet*		scrollbarSet,
	JXContainer*		enclosure,
	const HSizingOption	hSizing,
	const VSizingOption	vSizing,
	const JCoordinate	x,
	const JCoordinate	y,
	const JCoordinate	w,
	const JCoordinate	h
	)
	:
	JXFloatTable(data, 4, scrollbarSet, enclosure,
				 hSizing,vSizing, x,y, w,h)
{
JIndex i,j;

	itsMouseAction = kInsertCol;

	(GetEditMenuHandler())->AppendEditMenu(menuBar);

	itsTableMenu = menuBar->AppendTextMenu(kTableMenuTitleStr);
	itsTableMenu->SetMenuItems(kTableMenuStr);
	itsTableMenu->SetUpdateAction(JXMenu::kDisableNone);
	ListenTo(itsTableMenu);

	itsSizeMenu = new JXFontSizeMenu(JGetDefaultFontName(), "Size", menuBar,
									 kFixedLeft, kFixedTop, 0,0, 10,10);
	assert( itsSizeMenu != NULL );
	menuBar->AppendMenu(itsSizeMenu);
	ListenTo(itsSizeMenu);

	itsStyleMenu =
		new JXStyleTableMenu(this, menuBar,
							 kFixedLeft, kFixedTop, 0,0, 10,10);
	assert( itsStyleMenu != NULL );
	menuBar->AppendMenu(itsStyleMenu);

	JSize fontSize;
	const JString& fontName = GetFont(&fontSize);
	itsSizeMenu->SetFontName(fontName);
	itsSizeMenu->SetFontSize(fontSize);

	data->AppendRows(kInitRowCount);
	data->AppendCols(kInitColCount);

	JKLRand r;
	for (j=1; j<=kInitColCount; j++)
		{
		for (i=1; i<=kInitRowCount; i++)
			{
			data->SetElement(i,j, r.UniformClosedProb());
			}
		}
}
void
CMArray2DTable::UpdateEditMenu()
{
	JXTEBase* te = GetEditMenuHandler();

	JIndex index;
	if ((GetTableSelection()).HasSelection() &&
		te->EditMenuCmdToIndex(JTextEditor::kCopyCmd, &index))
		{
		itsEditMenu->EnableItem(index);
		}
}
void
CMArray2DTable::HandleEditMenu
	(
	const JIndex index
	)
{
	JTextEditor::CmdIndex cmd;
	JPoint cell;
	if (GetEditMenuHandler()->EditMenuIndexToCmd(index, &cmd) &&
		cmd == JTextEditor::kCopyCmd &&
		(GetTableSelection()).GetSingleSelectedCell(&cell))
		{
		JXTextSelection* data =
			jnew JXTextSelection(GetDisplay(), GetStringData()->GetString(cell));
		assert( data != NULL );

		GetSelectionManager()->SetData(kJXClipboardName, data);
		}
}
TestStringTable::TestStringTable
	(
	JStringTableData*	data,
	JXMenuBar*			menuBar,
	JXScrollbarSet*		scrollbarSet,
	JXContainer*		enclosure,
	const HSizingOption	hSizing,
	const VSizingOption	vSizing,
	const JCoordinate	x,
	const JCoordinate	y,
	const JCoordinate	w,
	const JCoordinate	h
	)
	:
	JXStringTable(data, scrollbarSet, enclosure, hSizing,vSizing, x,y, w,h)
{
JIndex i,j;

	itsMouseAction = kInsertCol;
	itsRowHeader   = NULL;

	(GetEditMenuHandler())->AppendEditMenu(menuBar);

	itsTableMenu = menuBar->AppendTextMenu(kTableMenuTitleStr);
	itsTableMenu->SetMenuItems(kTableMenuStr);
	itsTableMenu->SetUpdateAction(JXMenu::kDisableNone);
	ListenTo(itsTableMenu);

	itsRowBorderMenu = new JXTextMenu(itsTableMenu, kChangeRowBorderWidthCmd, menuBar);
	assert( itsRowBorderMenu != NULL );
	itsRowBorderMenu->SetMenuItems(kBorderWidthMenuStr);
	itsRowBorderMenu->SetUpdateAction(JXMenu::kDisableNone);
	ListenTo(itsRowBorderMenu);

	itsColBorderMenu = new JXTextMenu(itsTableMenu, kChangeColBorderWidthCmd, menuBar);
	assert( itsColBorderMenu != NULL );
	itsColBorderMenu->SetMenuItems(kBorderWidthMenuStr);
	itsColBorderMenu->SetUpdateAction(JXMenu::kDisableNone);
	ListenTo(itsColBorderMenu);

	itsFontMenu = new JXFontNameMenu("Font", menuBar, kFixedLeft, kFixedTop, 0,0, 10,10);
	assert( itsFontMenu != NULL );
	menuBar->AppendMenu(itsFontMenu);
	ListenTo(itsFontMenu);

	itsSizeMenu = new JXFontSizeMenu(itsFontMenu, "Size", menuBar,
									 kFixedLeft, kFixedTop, 0,0, 10,10);
	assert( itsSizeMenu != NULL );
	menuBar->AppendMenu(itsSizeMenu);
	ListenTo(itsSizeMenu);

	itsStyleMenu =
		new JXStyleTableMenu(this, menuBar,
							 kFixedLeft, kFixedTop, 0,0, 10,10);
	assert( itsStyleMenu != NULL );
	menuBar->AppendMenu(itsStyleMenu);

	JSize fontSize;
	const JString& fontName = GetFont(&fontSize);
	itsFontMenu->SetFontName(fontName);
	itsSizeMenu->SetFontSize(fontSize);

	data->AppendRows(kInitRowCount);
	data->AppendCols(kInitColCount);

	for (j=1; j<=kInitColCount; j++)
		{
		for (i=1; i<=kInitRowCount; i++)
			{
			const JString str = "(" + JString(i) + "," + JString(j) + ")";
			data->SetString(i,j, str);
			}
		}
}