void wxhdSelectionTool::mouseDown(wxhdMouseEvent& event)
{
	wxhdITool::mouseDown(event);

	wxhdDrawingView *view=getDrawingEditor()->view();
	int x=event.GetPosition().x, y=event.GetPosition().y;

	wxhdIHandle *handle = view->findHandle(x,y);
	if(handle)
    {
		setDelegateTool(new wxhdHandleTrackerTool(getDrawingEditor(),handle));
	}
	else
	{
        wxhdIFigure *figure = view->getDrawing()->findFigure(x,y);
        if(figure)
        {
			view->getDrawing()->bringToFront(figure);
			setDelegateTool(figure->CreateFigureTool(getDrawingEditor(),new wxhdDragTrackerTool(getDrawingEditor(),figure)));
        }
        else
        {
			setDelegateTool( new wxhdCanvasMenuTool(getDrawingEditor(),new wxhdSelectAreaTool(getDrawingEditor())) );
        }
	}

	wxhdITool *delegateTool = getDelegateTool();
	if (delegateTool)
        delegateTool->mouseDown(event);
}
void ddMenuTool::mouseDown(ddMouseEvent& event)
{	
	setAnchorCoords(event.GetPosition().x,event.GetPosition().y);

	

	if(menuFigure->menuEnabled() && event.RightDown())
	{
                wxMenu menu;
				getDrawingEditor()->view()->setMenuToolFigure(menuFigure);
				getDrawingEditor()->view()->setTextPopUpList(menuFigure->popupStrings(),menu);
				ddPoint p=event.GetPosition();
				event.getView()->CalcScrolledPosition(p.x,p.y,&p.x,&p.y);
				getDrawingEditor()->view()->PopupMenu(&menu, p);
		return;
	}


/*	if(event.LeftDClick())
	{
		getDrawingEditor()->view()->setMenuToolFigure(menuFigure);
		showEdit = true;
		edit->ChangeValue(txtFigure->getText()); //Same as SetValue but don't generated wxEVT_COMMAND_TEXT_UPDATED event
		calculateSizeEntry(event.getView());
		edit->SetFocus();
		edit->Show();
		return;
	}*/
	getDefaultTool()->mouseDown(event);
}
void wxhdCompositeFigureTool::mouseDown(wxhdMouseEvent& event)
{
	int x=event.GetPosition().x, y=event.GetPosition().y;
	wxhdCompositeFigure *cfigure = (wxhdCompositeFigure*) getFigure();
	wxhdIFigure *figure = cfigure->findFigure(x,y);
	
	if(figure)
	{
		setDelegateTool(figure->CreateFigureTool(getDrawingEditor(),getDefaultTool()));
	}
	else
	{
		setDelegateTool(getDefaultTool());
	}

	if(delegateTool)
	{
		delegateTool->mouseDown(event);
	}
}
void wxhdSelectAreaTool::selectFiguresOnRect(bool shiftPressed)
{
	wxhdIFigure *figure;
	wxhdIteratorBase *iterator = getDrawingEditor()->model()->figuresInverseEnumerator();
	while(iterator->HasNext())
	{
		figure=(wxhdIFigure *)iterator->Next();
		if(selectionRect.Contains(figure->displayBox()))
        {
			if(shiftPressed)
            {
				view->toggleSelection(figure);
			}
			else
			{
				view->addToSelection(figure);
			}
		}
	}
	delete iterator;
}
void wxhdSelectionTool::mouseMove(wxhdMouseEvent& event)
{
	wxhdAbstractTool::mouseMove(event);
	wxhdDrawingView *view=getDrawingEditor()->view();
	int x=event.GetPosition().x, y=event.GetPosition().y;
	wxhdIHandle *handle = view->findHandle(x,y);

	if(handle)
    {
		view->SetCursor(handle->createCursor());
	}
	else
	{
		wxhdIFigure *figure = view->getDrawing()->findFigure(x,y);
		if(figure)
		{
			view->SetCursor(wxCursor(wxCURSOR_HAND));
		}
		else
		{
			view->SetCursor(wxCursor(wxCURSOR_ARROW));
		}
	}
}