Patched bugs in Calendar.
Added Menu->Tools-> Calendar and Calculator
include ( ../ananas.pri )
SOURCES += main.cpp \
- ananasmainform.cpp \
- aminicalc.cpp
-HEADERS += ananasmainform.h \
- aminicalc.h
+ ananasmainform.cpp
+HEADERS += ananasmainform.h
#load(qsa)
#FORMS = qadocjournal.ui
IMAGES = images/a-system.png \
- images/calc.png \
+ images/calc.png \
+ images/calendar.png \
images/msg_info.png \
images/msg_warning.png \
images/msg_error.png \
#include "ananas.h"
#include "aminicalc.h"
+#include "ananas.h"
MainForm *mainform=NULL;
QWorkspace *mainformws=NULL;
this, SLOT( windowsMenuAboutToShow() ) );
m->insertItem(rcIcon("ananas-32x32.png"), tr( "About" ), this, SLOT( helpAbout() ), Key_F11);
s->insertItem(rcIcon("calc.png"), tr( "Calculator" ), this, SLOT( miniCalc() ), Key_F10);
+ s->insertItem(rcIcon("calendar.png"), tr( "Calendar" ), this, SLOT( ShowCalendar() ), Key_F12);
//windowsMenu->insertItem(rcIcon("ananas-32x32.png"), tr( "Windows" ), this, SLOT( windowsMenuAboutToShow() ));
menubar = new AMenuBar( md, this, "menubar");
InsertMainMenu( tr("&Tools"), s );
MiniCalc *calc = new MiniCalc(ws, "MiniCalc", false, 0);
calc->show();
}
+
+/*
+ * Open a Calendar
+ */
+void
+MainForm::ShowCalendar()
+{
+ PopupCalendar *calendar = new PopupCalendar(QDate::currentDate(),
+ QPoint(ws->width() / 2, ws->height() / 2 ), ws, "");
+ calendar->show();
+}
#include "atoolbar.h"
#include "awindowslist.h"
#include "engine.h"
-
+#include "aminicalc.h"
+#include "acalendar.h"
class QVBoxLayout;
class QHBoxLayout;
QPopupMenu *windowsMenu;
QWorkspace* ws;
aWindowsList* wl;
+ MiniCalc* calc;
+ PopupCalendar* calendar;
QString rcfile;
public slots:
void Exit(int code);
void close();
void helpAbout();
+ void miniCalc();
+ void ShowCalendar();
void statusMessage( const QString &msg );
void windowsMenuAboutToShow();
void windowsMenuActivated( int id );
--- /dev/null
+/****************************************************************************
+** $Id: acalendar.dkr,v 1.73 2008/06/09 11:45:27 app Exp $
+**
+**********************************************************************/
+
+#include <qlineedit.h>
+#include <qlayout.h>
+#include <qdom.h>
+#include <qvalidator.h>
+#include <qlabel.h>
+#include <qsizepolicy.h>
+#include <qevent.h>
+#include <qpainter.h>
+
+#include "ananas.h"
+#include "alog.h"
+#include "acalendar.h"
+
+
+/**
+ * \ru
+ * \brief Запрашивает дату у пользователя, показав ему календарик.
+ * \return дату, указанную пользователем.
+ * \_ru
+ */
+QDate
+PopupCalendar::getDate(QWidget *parent, const QDate &day, QPoint pos)
+{
+ PopupCalendar *calendar = new PopupCalendar(day, pos, parent);
+ calendar->exec();
+ QDate date = calendar->day();
+ delete calendar;
+ return date;
+}
+
+
+/**
+ * \ru
+ * \brief Осуществляет отрисовку календарика, обрабатывая событие PaintEvent виджета PopupCalendar.
+ * \_ru
+ */
+void
+PopupCalendar::paintEvent(QPaintEvent *event)
+{
+ QPainter painter(this);
+ painter.setClipRegion(event->region());
+ painter.setFont(smallFont);
+ int w = width();// Ширина окна
+ int h = height(); // Высота окна
+ int dayw = w / COLS; // Ширина ячейки
+ int dayh = h / (ROWS + 2); // Высота ячейки
+
+ QRect rect;
+ QColor color = colorGroup().light();
+ QColor f_color = "red";
+ QColor g_color = "green";
+ QColor b_color = "blue";
+ // Формируем строку с годом и месяцем
+ painter.fillRect(1, 1, dayw - 2, dayh - 1, color);
+ painter.drawText(1, 1, dayw - 1, dayh - 1, AlignHCenter, today.toString("<< "), -1, &rect);
+ painter.fillRect(dayw, 1, dayw - 2, dayh - 1, color);
+ painter.drawText(dayw, 1, dayw - 1, dayh - 1, AlignHCenter, today.toString(" < "), -1, &rect);
+ painter.drawText(dayw*2+1, 1, dayw*3- 1, dayh - 1, AlignHCenter, today.toString("MMM, yyyy"), -1, &rect);
+ painter.fillRect(w-(dayw*2), 1, dayw - 2, dayh - 1, color);
+ painter.drawText(w-(dayw*2), 1, dayw - 1, dayh - 1, AlignHCenter, today.toString(" > "), -1, &rect);
+ painter.fillRect(w-dayw, 1, dayw - 2, dayh - 1, color);
+ painter.drawText(w-dayw, 1, dayw - 1, dayh - 1, AlignHCenter, today.toString(" >>"), -1, &rect);
+
+// Формируем строку с днями недели
+ int i;
+ int y = dayh;
+ for (i = 0; i < 7; i++) {
+
+ painter.drawText(dayw * i + 1, y, dayw, dayh - 1,
+ AlignHCenter, QDate::shortDayName(i+1), -1, &rect);
+ }
+
+ // Заплняем таблицу календаря
+ QDate day(today.year(), today.month(), 1);
+ int day_pos = day.dayOfWeek()-1;
+ day = day.addDays(-day_pos);
+ y += dayh;
+ for (int j = 0; j < ROWS-1; ++j)
+ for (i = 0; i < COLS; ++i) {
+ color = (day == today) ? colorGroup().light() : ( ( i < 5 ) ? colorGroup().light() : colorGroup().midlight());
+ if (day == today){
+ painter.fillRect(dayw * i + 1, dayh * j + y + 1, dayw - 1, dayh - 1, b_color);
+ painter.fillRect(dayw * i + 3, dayh * j + y + 3, dayw - 5, dayh - 5, color);
+ }else{
+ painter.fillRect(dayw * i + 1, dayh * j + y + 1, dayw - 1, dayh - 1, color);
+ }
+ (today.month() != day.month() )? painter.setPen(colorGroup().mid()): ( ( i < 5 ) ? painter.setPen(colorGroup().foreground()):painter.setPen(f_color));
+ painter.drawText(dayw * i + 2, dayh * j + y + 2, dayw, dayh, AlignTop|AlignHCenter, day.toString("d"));
+ day = day.addDays(1);
+ }
+ // Формируем последнюю строку
+ painter.fillRect(1, h - dayh - 1, dayw*2, dayh - 1, b_color);
+ painter.fillRect(3, h - dayh + 1, dayw*2-4, dayh - 5, color);
+ painter.setPen(colorGroup().foreground());
+ painter.drawText(2, h - dayh, dayw*2-2, dayh - 3, AlignTop|AlignHCenter, "Now");
+ painter.drawText(w - dayw*3, h - dayh, dayw*3-2, dayh - 1, AlignTop|AlignHCenter, QString(tr("Week: %1").arg(today.weekNumber())));
+}
+
+/**
+ * \ru
+ * \brief Обрабатывает пользовательские действия по выбору даты в календарике.
+ *
+ * Записывает значение выбранной пользователем даты в свойство виджета.
+ *
+ * \_ru
+ */
+void
+PopupCalendar::keyPressEvent(QKeyEvent *event)
+{
+ int days = 0;
+ switch (event->key()) {
+ case Key_Left: days = -1; break;
+ case Key_Right: days = 1; break;
+ case Key_Up: days = -COLS; break;
+ case Key_Down: days = COLS; break;
+ case Key_PageUp: days = today.daysTo(today.addMonths(-1)); break;
+ case Key_PageDown: days = today.daysTo(today.addMonths(1)); break;
+ case Key_Home: days = today.daysTo(today.addYears(-1)); break;
+ case Key_End: days = today.daysTo(today.addYears(1)); break;
+ case Key_Escape: today = original; accept(); break;
+ case Key_Space: // fallthrough
+ case Key_Enter: // fallthrough
+ case Key_Return: accept(); return;
+ default: QDialog::keyPressEvent(event); return;
+ }
+
+ QDate day = today.addDays(days);
+ if (day != today)
+ setDay(day);
+}
+
+/**
+ * \ru
+ * \brief Обрабатывает пользовательские действия мышкой по выбору даты в календарике.
+ * Записывает значение выбранной пользователем даты в свойство виджета.
+ *
+ * \_ru
+ */
+void
+PopupCalendar::mousePressEvent(QMouseEvent *event)
+{
+ QDate day = today;
+ int w = width();
+ int h = height();
+ int dayh2 = (h / (ROWS + 2)) * 2;
+ int dayh = h / (ROWS + 2); // Высота строки
+ int dayw = w / COLS; // Ширина колонки
+ if (event->y() < dayh) {
+ if (event->x() > 1 && event->x() < dayw) day = day.addYears(-1);
+ if (event->x() > dayw && event->x() < dayw*2 ) day = day.addMonths(-1);
+ if (event->x() > (w - dayw*2) && event->x() < (w - dayw) ) day = day.addMonths(1);
+ if (event->x() > (w - dayw) ) day = day.addYears(1);
+ } else {
+ if (event->y() > dayh2 && event->y() < h - dayh) {
+ int xday = event->x() / (width() / (COLS) );
+ int yday = (event->y() - dayh2) / ((h - dayh2) / ROWS);
+ day = QDate(today.year(), today.month(), 1);
+ int day_pos = day.dayOfWeek()-1;
+ day = day.addDays(xday + (COLS * yday) - (day_pos));
+ }else{
+ if (event->x() > 1 && event->x() < dayw*2) {
+ day = today.currentDate();
+ }
+ }
+ }
+ if (day != today) setDay(day);
+}
+
+/**
+ * \ru
+ * \brief Обрабатывает двойной клик мышкой в календарике.
+ *
+ * Записывает значение выбранной пользователем даты в свойство виджета.
+ *
+ * \_ru
+ */
+void
+PopupCalendar::mouseDoubleClickEvent(QMouseEvent *event)
+{
+ QDate day = today;
+ int w = width();
+ int h = height();
+ int dayh2 = (h / (ROWS + 2)) * 2;
+ int dayh = h / (ROWS + 2); // Высота строки
+ int dayw = w / COLS; // Ширина колонки
+
+ if (event->y() > dayh2 && event->y() < h - dayh) {
+ int xday = event->x() / (width() / (COLS) );
+ int yday = (event->y() - dayh2) / ((h - dayh2) / ROWS);
+ day = QDate(today.year(), today.month(), 1);
+ int day_pos = day.dayOfWeek()-1;
+ day = day.addDays(xday + (COLS * yday) - (day_pos));
+ if (day != today) setDay(day);
+ accept();
+ }
+}
+
+QSize
+PopupCalendar::sizeHint() const
+{
+ QFontMetrics fm(smallFont);
+ return QSize(COLS * (fm.width(tr("Wed"))+2), (ROWS + 2) * fm.height() * 1.2);
+}
+
+/**
+ * \ru
+ * \brief Сеттер задающий дату виджету.
+ *
+ * Вызывает перерисовку виджета.
+ *
+ * \_ru
+ */
+void
+PopupCalendar::setDay(const QDate &day)
+{
+ today = day;
+ update();
+}
+
+
+/**
+ * \ru
+ * \brief Конструктор. Инициализирует свойства виджета, задает надпись в шапке виджета.
+ *
+ * \_ru
+ */
+PopupCalendar::PopupCalendar(const QDate &day, QPoint pos,
+ QWidget *parent, const char *name)
+ : QDialog(parent, name), today(day), original(day)
+{
+ setCaption(tr("A-Calendar"));
+ if (!pos.isNull()) move(pos);
+ smallFont = font();
+ if (smallFont.pointSize() >= 10) {
+ smallFont.setPointSize(smallFont.pointSize() - 2);
+ smallFont.setBold(true);
+ }
+
+ setFixedSize(sizeHint());
+ setFocusPolicy(StrongFocus);
+}
--- /dev/null
+/****************************************************************************
+** $Id: acalendar.h,v 1.37 2008/06/09 11:44:27 dkr Exp $
+**
+**
+**********************************************************************/
+
+#ifndef CALENDAR_H
+#define CALENDAR_H
+
+#include <qwidget.h>
+#include <qwidgetplugin.h>
+#include <qpushbutton.h>
+#include <qlabel.h>
+#include "ananas.h"
+
+/*!
+ * \en PopupCalendar for DateEdit field editor. \_en
+ * \ru
+ * \brief Всплывающий календарь для выбора даты.
+ *
+ * Используется как дополнение к виджету поля ввода/редактирования
+ * атрибута типа Дата бизнес объекта Ананаса.
+ *
+ * \_ru
+ */
+class PopupCalendar : public QDialog
+{
+Q_OBJECT
+public:
+ PopupCalendar(const QDate &day = QDate::currentDate(),
+ QPoint pos = QPoint(), QWidget *parent = 0, const char *name = 0);
+
+ static QDate getDate(QWidget *parent = 0, const QDate &day = QDate::currentDate(),
+ QPoint pos = QPoint());
+
+ const QDate& day() const { return today; }
+ void setDay(const QDate &day);
+ QSize sizeHint() const;
+
+protected:
+ void mousePressEvent(QMouseEvent *event);
+ void mouseDoubleClickEvent(QMouseEvent *event);
+ void keyPressEvent(QKeyEvent *event);
+ void paintEvent(QPaintEvent *event);
+
+private:
+ enum { ROWS = 7, COLS = 7 };
+ QFont smallFont;
+ QDate today;
+ const QDate original;
+};
+
+#endif
checkBox->hide();
disconnect( checkBox, SIGNAL( valueChanged ( const QString & ) ),
this, SLOT( setValue( const QString & ) ) );
-
+
disconnect( checkBox, SIGNAL( toggled (bool) ), checkBox, SLOT( on_toggled() ) );
// checkBox->disconnect();
layout()->remove(checkBox);
//TODO: need rewrite
if (!vFieldType.isEmpty()) sscanf((const char *)vFieldType,"%s %i %i", s1, &n1, &n2);
-
+
switch (vEditorType)
{
case Numberic:
connect( lineEdit, SIGNAL( textChanged( const QString & ) ),
this, SLOT( setValue( const QString & ) ) );
connect( lineEdit, SIGNAL( lostFocus() ), this, SLOT( focusOutEvent()) );
-
+
setFocusProxy(lineEdit);
layout()->add( lineEdit );
lineEdit->show();
break;
-
+
case String:
if(vFieldType.isEmpty())
{
connect( lineEdit, SIGNAL( textChanged( const QString & ) ),
this, SLOT( setValue( const QString & ) ) );
connect( lineEdit, SIGNAL( lostFocus() ), this, SLOT( focusOutEvent()) );
-
+
setFocusProxy(lineEdit);
layout()->add( lineEdit );
lineEdit->show();
break;
-
+
case Date:
case DateTime:
// used object wDateTime, inherits QDateTime
objButton->show();
dateEdit->show();
break;
-
+
case Catalogue:
md_oid = n1;
objLabel->setFrameShape( QFrame::Box );
objButton->setPixmap( QPixmap::fromMimeSource( "wcatalogue.png" ) );
connect( objButton, SIGNAL( clicked() ),
this, SLOT( fieldSelect() ) );
-
+
setFocusProxy(objButton);
layout()->add( objLabel );
layout()->add( objButton );
objLabel->show();
objButton->show();
break;
-
+
case Boolean:
// connect( checkBox, SIGNAL( lostFocus() ), this, SLOT( focusOutEvent()) );
connect( checkBox, SIGNAL( valueChanged ( const QString & ) ),
this, SLOT( setValue( const QString & ) ) );
-
+
connect( checkBox, SIGNAL( toggled (bool) ), checkBox, SLOT( on_toggled() ) );
setFocusProxy(checkBox);
layout()->add(checkBox);
checkBox->show();
break;
-
+
default:
objLabel->setText("UnknownField");
objLabel->setFrameShape(QFrame::Box);
// conventering date-time to date, and if new value is NULL set up current locale date.
// date must be stored in server in format ISO
str = newvalue;
- if(newvalue.isEmpty())
+ if(newvalue.isEmpty())
{
str= QDateTime::currentDateTime(Qt::LocalTime).toString(Qt::ISODate);
}
break;
case Boolean:
vValue = newvalue;
- if(newvalue == "1")
+ if(newvalue == "1")
{
checkBox->setChecked(true);
}
- else
+ else
{
checkBox->setChecked(false);
}
switch (vEditorType)
{
case Catalogue:
- if ( engine )
+ if ( engine )
{
int fid = md->getDefaultFormId( md->find( md_oid ), md_action_view);
if ( !fid )
return;
}
f = engine->openForm( md_oid, 0, md_action_view, 0, false );
- if ( f )
+ if ( f )
{
connect(f, SIGNAL(selected( Q_ULLONG )), this, SLOT(on_selected( Q_ULLONG )));
f->closeAfterSelect = true;
}
}
- else
+ else
{
aLog::print(aLog::MT_ERROR, tr("wField::fieldSelect no engine"));
}
connect(f, SIGNAL(selected( Q_ULLONG )), this, SLOT(on_selected( Q_ULLONG )));
f->closeAfterSelect = true;
}
-
+
}
else
{
{
switch (vEditorType) {
case Numberic:
+ lineEdit->setReadOnly(fl);
+ objButton->setDisabled( fl );
+ break;
case String:
lineEdit->setReadOnly(fl);
break;
case Date:
case DateTime:
dateEdit->setDisabled(fl);
+ objButton->setDisabled( fl );
break;
case Catalogue:
objButton->setDisabled( fl );
case Document:
objButton->setDisabled( fl );
break;
- case Boolean:
+ case Boolean:
checkBox->setDisabled( fl );
break;
default:
/**
- * \ru
+ * \ru
* \brief Задает значение полю dateEdit запросив его у пользователя.
* \_ru
*/
dateEdit->setDate(date);
dateEdit->setFocus();
}
-
-/**
- * \ru
- * \brief Запрашивает дату у пользователя, показав ему календарик.
- * \return дату, указанную пользователем.
- * \_ru
- */
-QDate
-PopupCalendar::getDate(QWidget *parent, const QDate &day, QPoint pos)
-{
- PopupCalendar *calendar = new PopupCalendar(day, pos, parent);
- calendar->exec();
- QDate date = calendar->day();
- delete calendar;
- return date;
-}
-
-
-/**
- * \ru
- * \brief Осуществляет отрисовку календарика, обрабатывая событие PaintEvent виджета PopupCalendar.
- * \_ru
- */
-void
-PopupCalendar::paintEvent(QPaintEvent *event)
-{
- QPainter painter(this);
- painter.setClipRegion(event->region());
- painter.setFont(smallFont);
- int w = width();// Ширина окна
- int h = height(); // Высота окна
- int dayw = w / COLS; // Ширина ячейки
- int dayh = h / (ROWS + 2); // Высота ячейки
-
- QRect rect;
- QColor color = colorGroup().light();
- QColor f_color = "red";
- QColor g_color = "green";
- QColor b_color = "blue";
- // Формируем строку с годом и месяцем
- painter.fillRect(1, 1, dayw - 2, dayh - 1, color);
- painter.drawText(1, 1, dayw - 1, dayh - 1, AlignHCenter, today.toString("<< "), -1, &rect);
- painter.fillRect(dayw, 1, dayw - 2, dayh - 1, color);
- painter.drawText(dayw, 1, dayw - 1, dayh - 1, AlignHCenter, today.toString(" < "), -1, &rect);
- painter.drawText(dayw*2+1, 1, dayw*3- 1, dayh - 1, AlignHCenter, today.toString("MMM, yyyy"), -1, &rect);
- painter.fillRect(w-(dayw*2), 1, dayw - 2, dayh - 1, color);
- painter.drawText(w-(dayw*2), 1, dayw - 1, dayh - 1, AlignHCenter, today.toString(" > "), -1, &rect);
- painter.fillRect(w-dayw, 1, dayw - 2, dayh - 1, color);
- painter.drawText(w-dayw, 1, dayw - 1, dayh - 1, AlignHCenter, today.toString(" >>"), -1, &rect);
-
-// Формируем строку с днями недели
- int i;
- int y = dayh;
- for (i = 0; i < 7; i++) {
-
- painter.drawText(dayw * i + 1, y, dayw, dayh - 1,
- AlignHCenter, QDate::shortDayName(i+1), -1, &rect);
- }
-
- // Заплняем таблицу календаря
- QDate day(today.year(), today.month(), 1);
- int day_pos = day.dayOfWeek()-1;
- day = day.addDays(-day_pos);
- y += dayh;
- for (int j = 0; j < ROWS-1; ++j)
- for (i = 0; i < COLS; ++i) {
- color = (day == today) ? colorGroup().light() : ( ( i < 5 ) ? colorGroup().light() : colorGroup().midlight());
- if (day == today){
- painter.fillRect(dayw * i + 1, dayh * j + y + 1, dayw - 1, dayh - 1, b_color);
- painter.fillRect(dayw * i + 3, dayh * j + y + 3, dayw - 5, dayh - 5, color);
- }else{
- painter.fillRect(dayw * i + 1, dayh * j + y + 1, dayw - 1, dayh - 1, color);
- }
- (today.month() != day.month() )? painter.setPen(colorGroup().mid()): ( ( i < 5 ) ? painter.setPen(colorGroup().foreground()):painter.setPen(f_color));
- painter.drawText(dayw * i + 2, dayh * j + y + 2, dayw, dayh, AlignTop|AlignHCenter, day.toString("d"));
- day = day.addDays(1);
- }
- // Формируем последнюю строку
- painter.fillRect(1, h - dayh - 1, dayw*2, dayh - 1, b_color);
- painter.fillRect(3, h - dayh + 1, dayw*2-4, dayh - 5, color);
- painter.setPen(colorGroup().foreground());
- painter.drawText(2, h - dayh, dayw*2-2, dayh - 3, AlignTop|AlignHCenter, "Now");
- painter.drawText(w - dayw*3, h - dayh, dayw*3-2, dayh - 1, AlignTop|AlignHCenter, QString(tr("Week: %1").arg(today.weekNumber())));
-}
-
-/**
- * \ru
- * \brief Обрабатывает пользовательские действия по выбору даты в календарике.
- *
- * Записывает значение выбранной пользователем даты в свойство виджета.
- *
- * \_ru
- */
-void
-PopupCalendar::keyPressEvent(QKeyEvent *event)
-{
- int days = 0;
- switch (event->key()) {
- case Key_Left: days = -1; break;
- case Key_Right: days = 1; break;
- case Key_Up: days = -COLS; break;
- case Key_Down: days = COLS; break;
- case Key_PageUp: days = today.daysTo(today.addMonths(-1)); break;
- case Key_PageDown: days = today.daysTo(today.addMonths(1)); break;
- case Key_Home: days = today.daysTo(today.addYears(-1)); break;
- case Key_End: days = today.daysTo(today.addYears(1)); break;
- case Key_Escape: today = original; accept(); break;
- case Key_Space: // fallthrough
- case Key_Enter: // fallthrough
- case Key_Return: accept(); return;
- default: QDialog::keyPressEvent(event); return;
- }
-
- QDate day = today.addDays(days);
- if (day != today)
- setDay(day);
-}
-
-/**
- * \ru
- * \brief Обрабатывает пользовательские действия мышкой по выбору даты в календарике.
- *
- * Записывает значение выбранной пользователем даты в свойство виджета.
- *
- * \_ru
- */
-void
-PopupCalendar::mousePressEvent(QMouseEvent *event)
-{
- QDate day = today;
- int w = width();
- int h = height();
- int dayh2 = (h / (ROWS + 2)) * 2;
- int dayh = h / (ROWS + 2); // Высота строки
- int dayw = w / COLS; // Ширина колонки
- if (event->y() < dayh) {
- if (event->x() > 1 && event->x() < dayw) day = day.addYears(-1);
- if (event->x() > dayw && event->x() < dayw*2 ) day = day.addMonths(-1);
- if (event->x() > (w - dayw*2) && event->x() < (w - dayw) ) day = day.addMonths(1);
- if (event->x() > (w - dayw) ) day = day.addYears(1);
- } else {
- if (event->y() > dayh2 && event->y() < h - dayh) {
- int xday = event->x() / (width() / (COLS) );
- int yday = (event->y() - dayh2) / ((h - dayh2) / ROWS);
- day = QDate(today.year(), today.month(), 1);
- int day_pos = day.dayOfWeek()-1;
- day = day.addDays(xday + (COLS * yday) - (day_pos));
- }else{
- if (event->x() > 1 && event->x() < dayw*2) {
- day = today.currentDate();
- }
- }
- }
- if (day != today) setDay(day);
-}
-
-QSize
-PopupCalendar::sizeHint() const
-{
- QFontMetrics fm(smallFont);
- return QSize(COLS * (fm.width(tr("Wed"))+2), (ROWS + 2) * fm.height() * 1.2);
-}
-
-/**
- * \ru
- * \brief Сеттер задающий дату виджету.
- *
- * Вызывает перерисовку виджета.
- *
- * \_ru
- */
-void
-PopupCalendar::setDay(const QDate &day)
-{
- today = day;
- update();
-}
-
-
-/**
- * \ru
- * \brief Конструктор. Инициализирует свойства виджета, задает надпись в шапке виджета.
- *
- * \_ru
- */
-PopupCalendar::PopupCalendar(const QDate &day, QPoint pos,
- QWidget *parent, const char *name)
- : QDialog(parent, name), today(day), original(day)
-{
- setCaption(tr("A-Calendar"));
- if (!pos.isNull()) move(pos);
- smallFont = font();
- if (smallFont.pointSize() >= 10) {
- smallFont.setPointSize(smallFont.pointSize() - 2);
- smallFont.setBold(true);
- }
-
- setFixedSize(sizeHint());
- setFocusPolicy(StrongFocus);
-}