96 lines
2.4 KiB
C++
96 lines
2.4 KiB
C++
// 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);
|
|
}
|