You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
koffice/kplato/kptcalendarpanel.h

234 lines
6.5 KiB

/* This file is part of the KDE project
Copyright (C) 1997 Tim D. Gilman (tdgilman@best.org)
(C) 1998-2001 Mirko Boehm (mirko@kde.org)
(C) 2004 Dag Andersen <danders@get2net.dk>
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public License
along with this library; see the file COPYING.LIB. If not, write to
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301, USA.
*/
/* This is based on KDatePicker. */
#ifndef KPTCALENDARPANEL_H
#define KPTCALENDARPANEL_H
#include "kptmap.h"
#include <tqdatetime.h>
#include <tqframe.h>
class TQLineEdit;
class TQToolButton;
namespace KPlato
{
class DateValidator;
class DateTable;
class Calendar;
/**
* Provides a widget for calendar input.
*
**/
class CalendarPanel: public TQFrame
{
Q_OBJECT
TQ_PROPERTY( TQDate date READ date WRITE setDate)
TQ_PROPERTY( bool closeButton READ hasCloseButton WRITE setCloseButton )
public:
/** The usual constructor. The given date will be displayed
* initially.
**/
CalendarPanel(TQWidget *parent=0, TQDate=TQDate::currentDate(), const char *name=0, WFlags f=0);
/**
* Standard qt widget constructor. The initial date will be the
* current date.
*/
CalendarPanel( TQWidget *parent, const char *name );
/**
* The destructor.
**/
virtual ~CalendarPanel();
/** The size hint for date pickers. The size hint recommends the
* minimum size of the widget so that all elements may be placed
* without clipping. This sometimes looks ugly, so when using the
* size hint, try adding 28 to each of the reported numbers of
* pixels.
**/
TQSize sizeHint() const;
TQSize minimumSizeHint() const { return sizeHint(); }
/**
* Sets the date.
*
* @returns @p false and does not change anything
* if the date given is invalid.
**/
bool setDate(const TQDate&);
/**
* Returns the selected date.
* @deprecated
**/
const TQDate& getDate() const;
/**
* @returns the selected date.
*/
const TQDate &date() const;
/**
* Enables or disables the widget.
**/
void setEnabled(bool);
/**
* Sets the font size of the widgets elements.
**/
void setFontSize(int);
/**
* Returns the font size of the widget elements.
*/
int fontSize() const
{ return fontsize; }
/**
* By calling this method with @p enable = true, CalendarPanel will show
* a little close-button in the upper button-row. Clicking the
* close-button will cause the CalendarPanel's topLevelWidget()'s close()
* method being called. This is mostly useful for toplevel datepickers
* without a window manager decoration.
* @see #hasCloseButton
*/
void setCloseButton( bool enable );
/**
* @returns true if a CalendarPanel shows a close-button.
* @see #setCloseButton
*/
bool hasCloseButton() const;
void setCalendar(Calendar *cal);
DateMap selectedDates();
IntMap selectedWeekdays();
WeekMap selectedWeeks();
DateMap markedDates();
IntMap markedWeekdays();
WeekMap markedWeeks();
void clear();
void markSelected(int state);
protected:
/// to catch move keyEvents when TQLineEdit has keyFocus
virtual bool eventFilter(TQObject *o, TQEvent *e );
/// the resize event
virtual void resizeEvent(TQResizeEvent*);
/// the year forward button
TQToolButton *yearForward;
/// the year backward button
TQToolButton *yearBackward;
/// the month forward button
TQToolButton *monthForward;
/// the month backward button
TQToolButton *monthBackward;
/// the button for selecting the month directly
TQToolButton *selectMonth;
/// the button for selecting the year directly
TQToolButton *selectYear;
/// the line edit to enter the date directly
TQLineEdit *line;
/// the validator for the line edit:
DateValidator *val;
/// the date table
DateTable *table;
// the widest month string in pixels:
TQSize maxMonthRect;
protected slots:
void dateChangedSlot(TQDate);
void tableClickedSlot();
void monthForwardClicked();
void monthBackwardClicked();
void yearForwardClicked();
void yearBackwardClicked();
void selectWeekClicked();
void selectMonthClicked();
void selectYearClicked();
void lineEnterPressed();
void slotWeekdaySelected(int day);
void slotWeekSelected(int week, int year);
void slotSelectionCleared();
signals:
/** This signal is emitted each time the selected date is changed.
* Usually, this does not mean that the date has been entered,
* since the date also changes, for example, when another month is
* selected.
* @see dateSelected
*/
void dateChanged(TQDate);
/** This signal is emitted each time a day has been selected by
* clicking on the table (hitting a day in the current month).
*/
void dateSelected(TQDate);
/** This signal is emitted when enter is pressed and a VALID date
* has been entered before into the line edit. Connect to both
* dateEntered() and dateSelected() to receive all events where the
* user really enters a date.
*/
void dateEntered(TQDate);
/** This signal is emitted when the day has been selected by
* clicking on it in the table.
*/
void tableClicked();
void weekSelected(int week, int year);
void weekdaySelected(int day);
/**
* All selections have been cleared
*/
void selectionCleared();
private:
/// the font size for the widget
int fontsize;
bool m_selectedDays[7];
protected:
virtual void virtual_hook( int id, void* data );
private:
void init( const TQDate &dt );
class CalendarPanelPrivate;
CalendarPanelPrivate *d;
// calculate ISO 8601 week number
int weekOfYear(TQDate);
};
} //KPlato namespace
#endif // CALENDARPANEL_H