mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-09-12 15:19:05 +02:00
carbon: added GetDate/SetDate for carbon calendar
git-svn-id: trunk@21818 -
This commit is contained in:
parent
4209ed3b45
commit
3f589dad6a
@ -23,6 +23,8 @@ unit CarbonCalendar;
|
||||
interface
|
||||
|
||||
uses
|
||||
// System
|
||||
MacOSAll,
|
||||
// FCL
|
||||
Classes, SysUtils,
|
||||
// LCL
|
||||
@ -37,6 +39,10 @@ type
|
||||
TCarbonCalendar = class(TCarbonControl)
|
||||
protected
|
||||
procedure CreateWidget(const AParams: TCreateParams); override;
|
||||
procedure SetDateTime(const aDate: TDateTime);
|
||||
function GetDateTime: TDateTime;
|
||||
public
|
||||
property DateTime: TDateTime read GetDateTime write SetDateTime;
|
||||
end;
|
||||
|
||||
implementation
|
||||
@ -49,6 +55,29 @@ begin
|
||||
Self, 'CreateWidget', 'CalendarViewCreate') then RaiseCreateWidgetError(LCLObject);
|
||||
end;
|
||||
|
||||
procedure TCarbonCalendar.SetDateTime(const aDate: TDateTime);
|
||||
var
|
||||
date : CFGregorianDate;
|
||||
y, m, d : Word;
|
||||
begin
|
||||
DecodeDate(aDate, y,m,d);
|
||||
FillChar(date, sizeof(date), 0);
|
||||
date.day := d;
|
||||
date.month := m;
|
||||
date.year := y;
|
||||
CalendarSetDate(Widget, date);
|
||||
end;
|
||||
|
||||
function TCarbonCalendar.GetDateTime: TDateTime;
|
||||
var
|
||||
date : CFGregorianDate;
|
||||
begin
|
||||
CalendarGetDate(Widget, date);
|
||||
with date do
|
||||
writeln(date.year,' / ',date.month, ' / ',date.day);
|
||||
Result := EncodeDate(date.year, date.month, date.day);
|
||||
end;
|
||||
|
||||
|
||||
end.
|
||||
|
||||
|
@ -54,12 +54,12 @@ function CalendarSetDate(Calendar: ControlRef; const Date: CFGregorianDate): Boo
|
||||
// -----------------------------------------------------------------------------
|
||||
//
|
||||
const
|
||||
kControlCalendarTitleRatioTag = 'tRat'; // float
|
||||
kControlCalendarDayNameRatioTag = 'nRat'; // float
|
||||
kControlCalendarDayRatioTag = 'dRat'; // float
|
||||
kControlCalendarDateTag = 'Date'; // CFGregorianDate -- on Set, day, hour, etc are ignored
|
||||
kControlCalendarDrawProcTag = 'Draw'; // CalendarDrawUPP
|
||||
kControlCalendarLabelProcTag = 'Labl'; // CalendarDrawUPP
|
||||
kControlCalendarTitleRatioTag = {$IFDEF FPC_LITTLE_ENDIAN}$74615274{$else}$74526174{$endif}; //tRat float
|
||||
kControlCalendarDayNameRatioTag = {$IFDEF FPC_LITTLE_ENDIAN}$7461526E{$else}$6E526174{$endif}; //nRat float
|
||||
kControlCalendarDayRatioTag = {$IFDEF FPC_LITTLE_ENDIAN}$74615264{$else}$64526174{$endif}; //dRat float
|
||||
kControlCalendarDateTag = {$IFDEF FPC_LITTLE_ENDIAN}$65746144{$else}$44617465{$endif}; //Date CFGregorianDate -- on Set, day, hour, etc are ignored
|
||||
kControlCalendarDrawProcTag = {$IFDEF FPC_LITTLE_ENDIAN}$77617244{$else}$44726177{$endif}; //Draw CalendarDrawUPP
|
||||
kControlCalendarLabelProcTag = {$IFDEF FPC_LITTLE_ENDIAN}$6C62614C{$else}$4C61626C{$endif}; //Labl CalendarDrawUPP
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
// CalendarView Draw/LabelProc callback data and prototypes
|
||||
@ -713,10 +713,6 @@ end;
|
||||
// -----------------------------------------------------------------------------
|
||||
//
|
||||
|
||||
type
|
||||
FourCharStr = string[4];
|
||||
FourCharStrPtr = ^FourCharStr;
|
||||
|
||||
function CalendarViewGetData(inEvent : EventRef; const inData: CalendarViewData): OSStatus;
|
||||
var
|
||||
part : ControlPartCode;
|
||||
@ -737,7 +733,7 @@ begin
|
||||
Result := GetEventParameter( inEvent, kEventParamControlDataBufferSize, typeLongInteger, nil, sizeof( Size ), nil, @sz );
|
||||
if Result <> noErr then Exit;
|
||||
|
||||
case FourCharStrPtr(@tag)^ of
|
||||
case tag of
|
||||
kControlCalendarTitleRatioTag:
|
||||
begin
|
||||
if sz = sizeof( single ) then
|
||||
@ -767,6 +763,7 @@ begin
|
||||
|
||||
kControlCalendarDateTag:
|
||||
begin
|
||||
writeln('getting the date!');
|
||||
if sz = sizeof( CFGregorianDate ) then begin
|
||||
CFGregorianDatePtr(ptr)^ := inData.date;
|
||||
if (inData.selDay>0) and (inData.selDay<inData.daysInMonth) then
|
||||
@ -827,7 +824,7 @@ begin
|
||||
Result := GetEventParameter( inEvent, kEventParamControlDataBufferSize, typeLongInteger, nil, sizeof( sz ), nil, @sz );
|
||||
if Result <> noErr then Exit;
|
||||
|
||||
case FourCharStrPtr(@tag)^ of
|
||||
case tag of
|
||||
kControlCalendarTitleRatioTag:
|
||||
if sz = sizeof( single ) then
|
||||
inData.titleRowRatio := PSingle(ptr)^
|
||||
@ -1066,14 +1063,19 @@ function CalendarGetDate(Calendar: ControlRef; var Date: CFGregorianDate): Boole
|
||||
begin
|
||||
Result := isValidCalendarControl(Calendar);
|
||||
if not Result then Exit;
|
||||
Result := GetControlData(Calendar, kControlEntireControl, LongWord(kControlCalendarDateTag), sizeof(Date), @Date, nil) = noErr;
|
||||
Result := GetControlData(Calendar, kControlEntireControl,
|
||||
kControlCalendarDateTag, sizeof(Date), @Date, nil) = noErr;
|
||||
end;
|
||||
|
||||
function CalendarSetDate(Calendar: ControlRef; const Date: CFGregorianDate): Boolean;
|
||||
begin
|
||||
Result := isValidCalendarControl(Calendar);
|
||||
if not Result then Exit;
|
||||
Result := SetControlData(Calendar, kControlEntireControl, LongWord(kControlCalendarDateTag), sizeof(Date), @Date) = noErr;
|
||||
if not Result then begin
|
||||
writeln('not calendar!');
|
||||
Exit;
|
||||
end;
|
||||
writeln('calendar!');
|
||||
Result := SetControlData(Calendar, kControlEntireControl, kControlCalendarDateTag, sizeof(Date), @Date) = noErr;
|
||||
end;
|
||||
|
||||
|
||||
|
@ -26,17 +26,18 @@ unit CarbonWSCalendar;
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
////////////////////////////////////////////////////
|
||||
// I M P O R T A N T
|
||||
// I M P O R T A N T
|
||||
////////////////////////////////////////////////////
|
||||
// To get as little as posible circles,
|
||||
// uncomment only when needed for registration
|
||||
////////////////////////////////////////////////////
|
||||
// Calendar,
|
||||
////////////////////////////////////////////////////
|
||||
Controls, LCLType,
|
||||
WSCalendar, WSLCLClasses, CarbonCalendar;
|
||||
|
||||
uses
|
||||
Types,
|
||||
LCLType, Controls, Calendar,
|
||||
WSCalendar, WSLCLClasses,
|
||||
CarbonDef, CarbonCalendar;
|
||||
|
||||
type
|
||||
|
||||
@ -44,8 +45,12 @@ type
|
||||
|
||||
TCarbonWSCustomCalendar = class(TWSCustomCalendar)
|
||||
published
|
||||
class function CreateHandle(const AWinControl: TWinControl;
|
||||
const AParams: TCreateParams): TLCLIntfHandle; override;
|
||||
class function CreateHandle(const AWinControl: TWinControl; const AParams: TCreateParams): TLCLIntfHandle; override;
|
||||
class function GetDateTime(const ACalendar: TCustomCalendar): TDateTime; override;
|
||||
class procedure SetDateTime(const ACalendar: TCustomCalendar; const ADateTime: TDateTime); override;
|
||||
class function HitTest(const ACalendar: TCustomCalendar; const APoint: TPoint): TCalendarPart; override;
|
||||
class procedure SetDisplaySettings(const ACalendar: TCustomCalendar;
|
||||
const ADisplaySettings: TDisplaySettings); override;
|
||||
end;
|
||||
|
||||
|
||||
@ -59,6 +64,31 @@ begin
|
||||
Result := TLCLIntfHandle(TCarbonCalendar.Create(AWinControl, AParams));
|
||||
end;
|
||||
|
||||
class function TCarbonWSCustomCalendar.GetDateTime(const ACalendar: TCustomCalendar): TDateTime;
|
||||
begin
|
||||
if not CheckHandle(ACalendar, Self, 'GetDateTime') then Exit;
|
||||
Result := TCarbonCalendar(ACalendar.Handle).DateTime;
|
||||
end;
|
||||
|
||||
class procedure TCarbonWSCustomCalendar.SetDateTime(const ACalendar: TCustomCalendar; const ADateTime: TDateTime);
|
||||
begin
|
||||
if not CheckHandle(ACalendar, Self, 'SetDateTime') then Exit;
|
||||
TCarbonCalendar(ACalendar.Handle).DateTime := ADateTime;
|
||||
end;
|
||||
|
||||
class function TCarbonWSCustomCalendar.HitTest(
|
||||
const ACalendar: TCustomCalendar; const APoint: TPoint): TCalendarPart;
|
||||
begin
|
||||
//TODO
|
||||
Result:=inherited HitTest(ACalendar, APoint);
|
||||
end;
|
||||
|
||||
class procedure TCarbonWSCustomCalendar.SetDisplaySettings(
|
||||
const ACalendar: TCustomCalendar; const ADisplaySettings: TDisplaySettings);
|
||||
begin
|
||||
//TODO:
|
||||
end;
|
||||
|
||||
initialization
|
||||
|
||||
////////////////////////////////////////////////////
|
||||
|
Loading…
Reference in New Issue
Block a user