lazarus/lcl/interfaces/qt/qtwscalendar.pp
paul 55f077b595 (QT):
- Removed unnecessary code from radiogroup and checkgroup since LCL do all the job itself
- Removed dummy DestroyHandles. TQtWSWinControl.DestroyHandle will be used in most cases

git-svn-id: trunk@11582 -
2007-07-20 02:06:55 +00:00

168 lines
6.1 KiB
ObjectPascal

{ $Id$}
{
*****************************************************************************
* QtWSCalendar.pp *
* --------------- *
* *
* *
*****************************************************************************
*****************************************************************************
* *
* This file is part of the Lazarus Component Library (LCL) *
* *
* See the file COPYING.modifiedLGPL, included in this distribution, *
* for details about the copyright. *
* *
* This program 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. *
* *
*****************************************************************************
}
unit QtWSCalendar;
{$mode delphi}{$H+}
interface
uses
// Bindings
{$ifdef USE_QT_4_3}
qt43,
{$else}
qt4,
{$endif}
qtwidgets,
// LCL
SysUtils, DateUtils, Controls, Calendar, LCLType, LCLIntf, LCLProc,
// Widgetset
WSCalendar, WSLCLClasses;
type
{ TQtWSCustomCalendar }
TQtWSCustomCalendar = class(TWSCustomCalendar)
private
protected
public
class function CreateHandle(const AWinControl: TWinControl; const AParams: TCreateParams): TLCLIntfHandle; override;
public
class function GetDateTime(const ACalendar: TCustomCalendar): TDateTime; override;
class procedure SetDateTime(const ACalendar: TCustomCalendar; const ADateTime: TDateTime); override;
class procedure SetDisplaySettings(const ACalendar: TCustomCalendar; const ADisplaySettings: TDisplaySettings); override;
class procedure SetReadOnly(const ACalendar: TCustomCalendar; const AReadOnly: boolean); override;
end;
implementation
{ TQtWSCustomCalendar }
class function TQtWSCustomCalendar.CreateHandle(const AWinControl: TWinControl; const AParams: TCreateParams): TLCLIntfHandle;
var
QtCalendar: TQtCalendar;
begin
QtCalendar := TQtCalendar.Create(AWinControl, AParams);
QtCalendar.AttachEvents;
QWidget_setFocusPolicy(QtCalendar.Widget, QtTabFocus or QtClickFocus);
Result := THandle(QtCalendar);
end;
class procedure TQtWSCustomCalendar.SetReadOnly(const ACalendar: TCustomCalendar; const AReadOnly: boolean);
var
QtCalendar: TQtCalendar;
begin
QtCalendar := TQtCalendar(ACalendar.Handle);
if AReadOnly then
QCalendarWidget_setSelectionMode(QCalendarWidgetH(QtCalendar.Widget), QCalendarWidgetNoSelection)
else QCalendarWidget_setSelectionMode(QCalendarWidgetH(QtCalendar.Widget), QCalendarWidgetSingleSelection);
{$ifdef USE_QT_4_3}
QCalendarWidget_setDateEditEnabled(QCalendarWidgetH(QtCalendar.Widget), not AReadOnly);
{$endif}
end;
class function TQtWSCustomCalendar.GetDateTime(const ACalendar: TCustomCalendar): TDateTime;
var
QtCalendar: TQtCalendar;
ADate: QDateH;
begin
QtCalendar := TQtCalendar(ACalendar.Handle);
ADate := QDate_create;
try
QCalendarWidget_selectedDate(QCalendarWidgetH(QtCalendar.Widget), ADate);
QtCalendar.AYear := QDate_year(ADate);
QtCalendar.AMonth := QDate_month(ADate);
QtCalendar.ADay := QDate_day(ADate);
Result := EncodeDate(QtCalendar.AYear, QtCalendar.AMonth, QtCalendar.ADay);
finally
QDate_destroy(ADate);
end;
end;
class procedure TQtWSCustomCalendar.SetDateTime(const ACalendar: TCustomCalendar; const ADateTime: TDateTime);
var
QtCalendar: TQtCalendar;
ADate: QDateH;
begin
QtCalendar := TQtCalendar(ACalendar.Handle);
DecodeDate(ADateTime, QtCalendar.AYear, QtCalendar.AMonth, QtCalendar.ADay);
ADate := QDate_create(QtCalendar.AYear, QtCalendar.AMonth, QtCalendar.ADay);
try
QCalendarWidget_setCurrentPage(QCalendarWidgetH(QtCalendar.Widget), QtCalendar.AYear, QtCalendar.AMonth);
QCalendarWidget_setSelectedDate(QCalendarWidgetH(QtCalendar.Widget), ADate);
finally
QDate_destroy(ADate);
end;
end;
class procedure TQtWSCustomCalendar.SetDisplaySettings(const ACalendar: TCustomCalendar;
const ADisplaySettings: TDisplaySettings);
var
QtCalendar: TQtCalendar;
begin
QtCalendar := TQtCalendar(ACalendar.Handle);
QCalendarWidget_setHeaderVisible(QCalendarWidgetH(QtCalendar.Widget), dsShowHeadings in ADisplaySettings);
if dsShowDayNames in ADisplaySettings then
QCalendarWidget_setHorizontalHeaderFormat(QCalendarWidgetH(QtCalendar.Widget),QCalendarWidgetShortDayNames)
else QCalendarWidget_setHorizontalHeaderFormat(QCalendarWidgetH(QtCalendar.Widget), QCalendarWidgetNoHorizontalHeader);
{$ifdef USE_QT_4_3}
QCalendarWidget_setNavigationBarVisible(QCalendarWidgetH(QtCalendar.Widget), not (dsNoMonthChange in ADisplaySettings));
{$endif}
if dsShowWeekNumbers in ADisplaySettings then
QCalendarWidget_setVerticalHeaderFormat(QCalendarWidgetH(QtCalendar.Widget), QCalendarWidgetISOWeekNumbers)
else QCalendarWidget_setVerticalHeaderFormat(QCalendarWidgetH(QtCalendar.Widget), QCalendarWidgetNoVerticalHeader);
QCalendarWidget_setGridVisible(QCalendarWidgetH(QtCalendar.Widget), dsShowWeekNumbers in ADisplaySettings);
if dsStartMonday in ADisplaySettings then
QCalendarWidget_setFirstDayOfWeek(QCalendarWidgetH(QtCalendar.Widget), QtMonday)
else QCalendarWidget_setFirstDayOfWeek(QCalendarWidgetH(QtCalendar.Widget), QtSunday);
end;
initialization
////////////////////////////////////////////////////
// I M P O R T A N T
////////////////////////////////////////////////////
// To improve speed, register only classes
// which actually implement something
////////////////////////////////////////////////////
RegisterWSComponent(TCustomCalendar, TQtWSCustomCalendar);
////////////////////////////////////////////////////
end.