initiaql check-in, moved repository -- no-longer a fork of
haikuarchives/yab
This commit is contained in:
112
src/MonthWindow.cpp
Normal file
112
src/MonthWindow.cpp
Normal file
@@ -0,0 +1,112 @@
|
||||
// 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 <Point.h>
|
||||
#include <Screen.h>
|
||||
#include <String.h>
|
||||
#include <StringView.h>
|
||||
#include <Window.h>
|
||||
|
||||
#include "MonthView.cpp"
|
||||
|
||||
class MonthWindow: public BWindow
|
||||
{
|
||||
public:
|
||||
MonthWindow(BPoint LT, BMessenger *msng, int day, int month, int year,
|
||||
int first_year, int last_year);
|
||||
virtual void MessageReceived(BMessage *msg);
|
||||
virtual bool QuitRequested(void);
|
||||
virtual void WindowActivated(bool active);
|
||||
private:
|
||||
MonthView *myMonthView;
|
||||
BMessenger *messenger;
|
||||
|
||||
int first_year;
|
||||
int last_year;
|
||||
};
|
||||
|
||||
|
||||
MonthWindow::MonthWindow(BPoint LT, BMessenger *msng, int day, int month, int year, int first_year, int last_year)
|
||||
:BWindow(BRect(LT,BPoint(LT.x+200,LT.y+200)),"MonthWindowAViX",
|
||||
B_BORDERED_WINDOW_LOOK, B_MODAL_APP_WINDOW_FEEL, B_NOT_MOVABLE|B_AVOID_FOCUS)
|
||||
{
|
||||
this->first_year=first_year;
|
||||
this->last_year=last_year;
|
||||
|
||||
myMonthView = new MonthView(day, month, year, first_year, last_year);
|
||||
|
||||
AddChild(myMonthView);
|
||||
myMonthView->MakeFocus(true);
|
||||
|
||||
messenger = msng;
|
||||
|
||||
BRect screenFrame = BScreen(this).Frame();
|
||||
if(LT.x < 0)
|
||||
LT.x = 0;
|
||||
if(LT.x > screenFrame.right - Bounds().Width())
|
||||
LT.x = screenFrame.right - Bounds().Width();
|
||||
if(LT.y > screenFrame.bottom - Bounds().Height())
|
||||
LT.y = screenFrame.bottom - Bounds().Height();
|
||||
MoveTo(LT);
|
||||
|
||||
Show();
|
||||
}
|
||||
|
||||
|
||||
void MonthWindow::MessageReceived(BMessage *msg)
|
||||
{
|
||||
if(msg->what=='MVME')
|
||||
{
|
||||
// Is date correct?
|
||||
int32 day, month, year;
|
||||
if(msg->FindInt32("day",&day)!=B_OK) return;
|
||||
if(msg->FindInt32("month",&month)!=B_OK) return;
|
||||
if(msg->FindInt32("year",&year)!=B_OK) return;
|
||||
|
||||
if(year<first_year || year>last_year) return;
|
||||
if(month<1 || month>12) return;
|
||||
int32 tmp;
|
||||
|
||||
tmp=31;
|
||||
if(month==4 || month==6 || month==9 || month==11)
|
||||
tmp=30;
|
||||
else if(month==2)
|
||||
{
|
||||
if(year%4==0)
|
||||
{
|
||||
if(year%100==0 && year%400!=0)
|
||||
tmp=28;
|
||||
else
|
||||
tmp=29;
|
||||
}
|
||||
else
|
||||
tmp=28;
|
||||
}
|
||||
if(day<1 || day>tmp) return;
|
||||
messenger->SendMessage(msg);
|
||||
Quit();
|
||||
}
|
||||
else
|
||||
BWindow::MessageReceived(msg);
|
||||
}
|
||||
|
||||
|
||||
bool MonthWindow::QuitRequested(void)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
void MonthWindow::WindowActivated(bool active)
|
||||
{
|
||||
// exit if unfocused
|
||||
if(!active) Quit();
|
||||
}
|
||||
Reference in New Issue
Block a user