mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-05-15 18:02:42 +02:00

- 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 -
168 lines
6.1 KiB
ObjectPascal
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.
|