summaryrefslogtreecommitdiff
path: root/src/gui/fpg_popupcalendar.pas
diff options
context:
space:
mode:
authorgraemeg <graemeg@ae50a9b5-8222-0410-bf8d-8a13f76226bf>2009-03-26 08:29:49 +0000
committergraemeg <graemeg@ae50a9b5-8222-0410-bf8d-8a13f76226bf>2009-03-26 08:29:49 +0000
commit9196c30d5247ffa4233fcc336df7709217210fce (patch)
tree0dcd004890c148a5d7311ccb414d06f76cafe720 /src/gui/fpg_popupcalendar.pas
parentc7e481d8dbf1d81467792ba416582a267ca0d98c (diff)
downloadfpGUI-9196c30d5247ffa4233fcc336df7709217210fce.tar.xz
* CalendarCheckCombo now handles checkbox clicking with mouse.
* CalendarCheckCombo now paints checkbox location correctly. * CalendarCheckCombo now has a new OnCheckboxChanged event.
Diffstat (limited to 'src/gui/fpg_popupcalendar.pas')
-rw-r--r--src/gui/fpg_popupcalendar.pas65
1 files changed, 49 insertions, 16 deletions
diff --git a/src/gui/fpg_popupcalendar.pas b/src/gui/fpg_popupcalendar.pas
index fc8a0393..a4c2fe94 100644
--- a/src/gui/fpg_popupcalendar.pas
+++ b/src/gui/fpg_popupcalendar.pas
@@ -57,7 +57,8 @@ uses
type
TfpgOnDateSetEvent = procedure(Sender: TObject; const ADate: TDateTime) of object;
-
+ TfpgOnCheckboxChangedEvent = procedure(Sender: TObject; const AIsChecked: Boolean) of object;
+
TfpgPopupCalendar = class(TfpgPopupWindow)
private
@@ -197,17 +198,23 @@ type
// FCheckBox: TfpgCheckbox;
FChecked: boolean;
FCheckBoxRect: TfpgRect;
+ FCheckboxChanged: TfpgOnCheckboxChangedEvent;
procedure InternalCheckBoxChanged(Sender: TObject);
procedure SetChecked(const AValue: Boolean);
+ procedure DoCheckboxChanged;
protected
procedure DoDrawText(const ARect: TfpgRect); override;
procedure InternalOnValueSet(Sender: TObject; const ADate: TDateTime); override;
procedure HandleKeyPress(var keycode: word; var shiftstate: TShiftState; var consumed: boolean); override;
procedure HandlePaint; override;
+ procedure HandleResize(AWidth, AHeight: TfpgCoord); override;
+ procedure HandleLMouseDown(x, y: integer; shiftstate: TShiftState); override;
+ procedure HandleLMouseUp(x, y: integer; shiftstate: TShiftState); override;
public
constructor Create(AOwner: TComponent); override;
published
property Checked: Boolean read FChecked write SetChecked;
+ property OnCheckboxChanged: TfpgOnCheckboxChangedEvent read FCheckboxChanged write FCheckboxChanged;
property OnKeyPress;
end;
@@ -1012,6 +1019,12 @@ begin
InternalCheckBoxChanged(nil);
end;
+procedure TfpgCalendarCheckCombo.DoCheckboxChanged;
+begin
+ if Assigned(FCheckboxChanged) then
+ FCheckboxChanged(self, FChecked);
+end;
+
procedure TfpgCalendarCheckCombo.DoDrawText(const ARect: TfpgRect);
var
lRect: TfpgRect;
@@ -1057,44 +1070,64 @@ begin
begin
consumed := True;
Checked := False;
+ DoCheckboxChanged;
end;
inherited HandleKeyPress(keycode, shiftstate, consumed);
end;
procedure TfpgCalendarCheckCombo.HandlePaint;
var
- r: TfpgRect;
img: TfpgImage;
ix: integer;
begin
inherited HandlePaint;
-
- r := FCheckBoxRect;
- OffsetRect(r, 2, 2);
-// r.SetRect(4, 4, 17, 17);
-// PrintRect(r);
-
// calculate which image to paint.
if Enabled then
- begin
- ix := Ord(FChecked);
- //if FIsPressed then
- //Inc(ix, 2);
- end
+ ix := Ord(FChecked)
else
ix := (2 + (Ord(FChecked) * 2)) - Ord(FChecked);
// paint the check (in this case a X)
-// tx := r.right + 8;
img := fpgImages.GetImage('sys.checkboxes'); // Do NOT localize
- Canvas.DrawImagePart(r.Left, r.Top, img, ix*13, 0, 13, 13);
+ Canvas.DrawImagePart(FCheckBoxRect.Left, FCheckBoxRect.Top, img, ix*13, 0, 13, 13);
+end;
+
+procedure TfpgCalendarCheckCombo.HandleResize(AWidth, AHeight: TfpgCoord);
+begin
+ inherited HandleResize(AWidth, AHeight);
+ FCheckBoxRect.Top := (AHeight - FCheckBoxRect.Height) div 2;
+ OffsetRect(FCheckboxRect, 0, 3); // frame border must be taken into consideration
+end;
+
+procedure TfpgCalendarCheckCombo.HandleLMouseDown(x, y: integer;
+ shiftstate: TShiftState);
+begin
+ if PtInRect(FCheckBoxRect, Point(x,y)) then
+ // do nothing
+ else
+ inherited HandleLMouseDown(x, y, shiftstate);
+end;
+
+procedure TfpgCalendarCheckCombo.HandleLMouseUp(x, y: integer;
+ shiftstate: TShiftState);
+begin
+ if PtInRect(FCheckBoxRect, Point(x,y)) then
+ begin
+ Checked := not FChecked;
+ DoCheckboxChanged;
+ end
+ else
+ inherited HandleLMouseUp(x, y, shiftstate);
end;
constructor TfpgCalendarCheckCombo.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FChecked := True;
- FCheckBoxRect.SetRect(2, 2, 17, 17);
+ FCheckBoxRect.SetRect(2, 0, 17, 17);
+ FCheckboxRect.Top := (FHeight - FCheckBoxRect.Height) div 2;
+ OffsetRect(FCheckboxRect, 2, 3); // frame border must be taken into consideration
+
{
FCheckBox := TfpgCheckBox.Create(self);
with FCheckbox do