// Calendar Control version 2.5
// by Al.V. Sarikov.
// Kherson, Ukraine, 2006.
// E-mail: avix@ukrpost.net.
// Home page: http://avix.pp.ru.

// Control which allows to work with dates:
// enter date to text field and choose it from calendar.

// Distributed under BSD license (see LICENSE file).

#include <ControlLook.h>
#include <Message.h>
#include <Messenger.h>
#include <Point.h>
#include <Rect.h>
#include <StringView.h>

class MouseSenseStringView:public BStringView
{
	public:
		MouseSenseStringView(BMessage *msg,
                       BMessenger *msng,
                       BRect frame,
                       const char *name,
                       const char *text,
                       uint32 resizingMode=B_FOLLOW_LEFT|B_FOLLOW_TOP,
                       uint32 flags=B_WILL_DRAW);
		virtual void MouseDown(BPoint p);
		virtual void MouseUp(BPoint p);
		void Draw(BRect(update));
	
	private:
		BMessage *msg;
		BMessenger *msng;
		bool isMouseDown;
};

MouseSenseStringView::MouseSenseStringView(BMessage *msg,
                                           BMessenger *msng,
                                           BRect frame,
                                           const char *name,
                                           const char *text,
                                           uint32 resizingMode,
                                           uint32 flags)
                     :BStringView(frame,name,text,resizingMode,flags)
{
	this->msg=msg;
	this->msng=msng;
	isMouseDown = false;
}


void MouseSenseStringView::MouseDown(BPoint p)
{
	isMouseDown = true;
	// if(msg!=NULL) if(msng!=NULL)
	// 	msng->SendMessage(msg);
}

void MouseSenseStringView::MouseUp(BPoint p)
{
	BPoint mouse;
	uint32 buttons;
	GetMouse(&mouse, &buttons);
	if(Bounds().Contains(mouse))
		if(msg!=NULL) if(msng!=NULL)
			msng->SendMessage(msg);
	isMouseDown = false;
}

void MouseSenseStringView::Draw(BRect update)
{
	BString t(Text());
	BRect r1(Bounds());
	r1.right = r1.right/2;
	BRect r2(Bounds());
	r2.left= r2.right/4;
	r2.right= r2.right*3/4;
	rgb_color base = ui_color(B_PANEL_BACKGROUND_COLOR);
	uint32 flags = 0;

	if(t == "<<")
	{
		be_control_look->DrawArrowShape(this, r1, update, base, 0);
		be_control_look->DrawArrowShape(this, r2, update, base, 0);
	}
	else if(t == ">>")
	{
		be_control_look->DrawArrowShape(this, r1, update, base, 1);
		be_control_look->DrawArrowShape(this, r2, update, base, 1);
	}
	else
		BStringView::Draw(update);
}