creating gtk_calendar in a gtk_frame - calendar seems to need a parent window

git-svn-id: trunk@6987 -
This commit is contained in:
mattias 2005-03-18 14:43:54 +00:00
parent 2c1e543208
commit 82338611c1
2 changed files with 35 additions and 14 deletions

View File

@ -3212,8 +3212,8 @@ begin
LM_DAYCHANGED : //calendar
Begin
ConnectSenderSignal(gObject, 'day-selected', @gtkdaychanged);
ConnectSenderSignal(gObject, 'day-selected-double-click', @gtkdaychanged);
ConnectSenderSignal(gCore, 'day-selected', @gtkdaychanged);
ConnectSenderSignal(gCore, 'day-selected-double-click', @gtkdaychanged);
end;
LM_PAINT :
@ -3259,9 +3259,9 @@ begin
LM_MONTHCHANGED: //calendar
Begin
ConnectSenderSignal(gObject, 'month-changed', @gtkmonthchanged);
ConnectSenderSignal(gObject, 'prev-month', @gtkmonthchanged);
ConnectSenderSignal(gObject, 'next-month', @gtkmonthchanged);
ConnectSenderSignal(gCore, 'month-changed', @gtkmonthchanged);
ConnectSenderSignal(gCore, 'prev-month', @gtkmonthchanged);
ConnectSenderSignal(gCore, 'next-month', @gtkmonthchanged);
end;
LM_PRESSED:
@ -3540,8 +3540,8 @@ begin
LM_YEARCHANGED : //calendar
Begin
ConnectSenderSignal(gObject, 'prev-year', @gtkyearchanged);
ConnectSenderSignal(gObject, 'next-year', @gtkyearchanged);
ConnectSenderSignal(gCore, 'prev-year', @gtkyearchanged);
ConnectSenderSignal(gCore, 'next-year', @gtkyearchanged);
end;
// Listview & Header control
@ -4934,7 +4934,12 @@ begin
csCalendar :
begin
p := gtk_calendar_new();
p := gtk_frame_new(nil);
TempWidget := gtk_calendar_new();
gtk_container_add(GTK_CONTAINER(p), TempWidget);
SetMainWidget(p, TempWidget);
GetWidgetInfo(p, True)^.CoreWidget := TempWidget;
gtk_widget_show_all(p);
end;
csCheckbox :
@ -6900,6 +6905,9 @@ end;
{ =============================================================================
$Log$
Revision 1.644 2005/03/18 14:43:53 mattias
creating gtk_calendar in a gtk_frame - calendar seems to need a parent window
Revision 1.643 2005/03/11 15:35:49 mattias
implemented for gtk intf TFileDialog.FilterIndex from Jesus

View File

@ -33,7 +33,7 @@ uses
{$ELSE}
glib, gdk, gtk, {$Ifndef NoGdkPixbufLib}gdkpixbuf,{$EndIf} GtkFontCache,
{$ENDIF}
Calendar, WSCalendar, WSLCLClasses;
GtkProc, GtkDef, Calendar, WSCalendar, WSLCLClasses;
type
@ -50,14 +50,26 @@ type
class procedure SetReadOnly(const ACalendar: TCustomCalendar; const AReadOnly: boolean); override;
end;
function GetGtkCalendar(const ACalendar: TCustomCalendar): PGtkCalendar;
implementation
function GetGtkCalendar(const ACalendar: TCustomCalendar): PGtkCalendar;
var
WinWidgetInfo: PWidgetInfo;
begin
Result:=nil;
if (ACalendar=nil) or (not ACalendar.HandleAllocated) then exit;
WinWidgetInfo:=GetWidgetInfo(PGtkWidget(ACalendar.Handle), False);
if WinWidgetInfo=nil then exit;
Result:=PGtkCalendar(WinWidgetInfo^.CoreWidget);
end;
function TGtkWSCalendar.GetDateTime(const ACalendar: TCustomCalendar): TDateTime;
var
Year, Month, Day: word; //used for csCalendar
begin
gtk_calendar_get_date(PGtkCalendar(ACalendar.Handle), @Year, @Month, @Day);
gtk_calendar_get_date(GetGtkCalendar(ACalendar), @Year, @Month, @Day);
//For some reason, the month is zero based.
Result := EncodeDate(Year,Month+1,Day);
end;
@ -67,7 +79,7 @@ var
Year, Month, Day: string;
GtkCalendar: PGtkCalendar;
begin
GtkCalendar := PGtkCalendar(ACalendar.Handle);
GtkCalendar := GetGtkCalendar(ACalendar);
Year := FormatDateTime('yyyy', ADateTime);
Month := FormatDateTime('mm', ADateTime);
Day := FormatDateTime('dd', ADateTime);
@ -98,14 +110,15 @@ begin
num := Num + (1 shl 4);
gtkCalendarDisplayOptions := TGtkCalendarDisplayOptions(num);
gtk_Calendar_Display_options(PGtkCalendar(ACalendar.Handle), gtkCalendarDisplayOptions);
gtk_Calendar_Display_options(GetGtkCalendar(ACalendar), gtkCalendarDisplayOptions);
end;
procedure TGtkWSCalendar.SetReadOnly(const ACalendar: TCustomCalendar; const AReadOnly: boolean);
procedure TGtkWSCalendar.SetReadOnly(const ACalendar: TCustomCalendar;
const AReadOnly: boolean);
var
GtkCalendar: PGtkCalendar;
begin
GtkCalendar := PGtkCalendar(ACalendar.Handle);
GtkCalendar := GetGtkCalendar(ACalendar);
if AReadOnly then
gtk_calendar_freeze(GtkCalendar)
else