2008-02-03 12:05:55 +00:00
|
|
|
{*********************************************************}
|
|
|
|
{* VPALARMDLG.PAS 1.03 *}
|
|
|
|
{*********************************************************}
|
|
|
|
|
|
|
|
{* ***** BEGIN LICENSE BLOCK ***** *}
|
|
|
|
{* Version: MPL 1.1 *}
|
|
|
|
{* *}
|
|
|
|
{* The contents of this file are subject to the Mozilla Public License *}
|
|
|
|
{* Version 1.1 (the "License"); you may not use this file except in *}
|
|
|
|
{* compliance with the License. You may obtain a copy of the License at *}
|
|
|
|
{* http://www.mozilla.org/MPL/ *}
|
|
|
|
{* *}
|
|
|
|
{* Software distributed under the License is distributed on an "AS IS" basis, *}
|
|
|
|
{* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License *}
|
|
|
|
{* for the specific language governing rights and limitations under the *}
|
|
|
|
{* License. *}
|
|
|
|
{* *}
|
|
|
|
{* The Original Code is TurboPower Visual PlanIt *}
|
|
|
|
{* *}
|
|
|
|
{* The Initial Developer of the Original Code is TurboPower Software *}
|
|
|
|
{* *}
|
|
|
|
{* Portions created by TurboPower Software Inc. are Copyright (C) 2002 *}
|
|
|
|
{* TurboPower Software Inc. All Rights Reserved. *}
|
|
|
|
{* *}
|
|
|
|
{* Contributor(s): *}
|
|
|
|
{* *}
|
|
|
|
{* ***** END LICENSE BLOCK ***** *}
|
|
|
|
|
2016-06-22 07:59:17 +00:00
|
|
|
{$I vp.inc}
|
2008-02-03 12:05:55 +00:00
|
|
|
|
|
|
|
unit VpAlarmDlg;
|
|
|
|
{ Alarm Notification Dialog }
|
|
|
|
|
|
|
|
interface
|
|
|
|
|
|
|
|
uses
|
|
|
|
{$IFDEF LCL}
|
2016-07-12 18:00:32 +00:00
|
|
|
LCLProc, LCLType, LCLIntf, LResources,
|
2008-02-03 12:05:55 +00:00
|
|
|
{$ELSE}
|
2016-06-22 07:59:17 +00:00
|
|
|
Windows, Messages,
|
2008-02-03 12:05:55 +00:00
|
|
|
{$ENDIF}
|
2016-11-21 17:12:05 +00:00
|
|
|
SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls,
|
|
|
|
VpDlg, VpData, VpEvntEditDlg, VpBaseDS, VpConst;
|
2008-02-03 12:05:55 +00:00
|
|
|
|
|
|
|
type
|
|
|
|
{ forward declarations }
|
|
|
|
TVpNotificationDialog = class;
|
|
|
|
|
2008-02-08 15:07:26 +00:00
|
|
|
{ TAlarmNotifyForm }
|
|
|
|
|
2008-02-03 12:05:55 +00:00
|
|
|
TAlarmNotifyForm = class(TForm)
|
2017-05-19 12:36:30 +00:00
|
|
|
Bevel1: TBevel;
|
2008-02-08 15:07:26 +00:00
|
|
|
DismissBtn: TButton;
|
|
|
|
EventDialog: TVpEventEditDialog;
|
2008-02-13 00:13:01 +00:00
|
|
|
lTime: TLabel;
|
2008-02-12 06:51:55 +00:00
|
|
|
lSubject: TLabel;
|
|
|
|
lNotes: TLabel;
|
2008-02-08 15:07:26 +00:00
|
|
|
OpenItemBtn: TButton;
|
|
|
|
SnoozeBtn: TButton;
|
|
|
|
SnoozeCaption: TLabel;
|
2008-02-03 12:05:55 +00:00
|
|
|
SnoozeCombo: TComboBox;
|
2016-06-10 14:45:43 +00:00
|
|
|
procedure FormCreate(Sender: TObject);
|
2008-02-03 12:05:55 +00:00
|
|
|
procedure SnoozeComboChange(Sender: TObject);
|
|
|
|
procedure SnoozeBtnClick(Sender: TObject);
|
|
|
|
procedure DismissBtnClick(Sender: TObject);
|
|
|
|
procedure OpenItemBtnClick(Sender: TObject);
|
2016-07-12 18:00:32 +00:00
|
|
|
procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
|
2008-02-03 12:05:55 +00:00
|
|
|
procedure FormShow(Sender: TObject);
|
|
|
|
private
|
|
|
|
SnoozeDelay: TDateTime;
|
2017-06-07 22:37:51 +00:00
|
|
|
ShowTime: TDateTime;
|
2008-02-03 12:05:55 +00:00
|
|
|
procedure CalcSnooze;
|
2017-05-21 12:02:22 +00:00
|
|
|
protected
|
|
|
|
procedure PositionControls;
|
2008-02-03 12:05:55 +00:00
|
|
|
public
|
|
|
|
Event: TVpEvent;
|
|
|
|
DataStore: TVpCustomDataStore;
|
|
|
|
procedure PopulateSelf;
|
|
|
|
end;
|
|
|
|
|
|
|
|
TVpNotificationDialog = class(TVpBaseDialog)
|
|
|
|
protected {private}
|
|
|
|
FBGColor : TColor;
|
|
|
|
ceEditDlg : TAlarmNotifyForm;
|
|
|
|
ceTask : TVpTask;
|
|
|
|
public
|
|
|
|
constructor Create(AOwner : TComponent); override;
|
|
|
|
procedure Execute(Event: TVpEvent); reintroduce;
|
|
|
|
published
|
|
|
|
{properties}
|
|
|
|
property BackgroundColor: TColor
|
|
|
|
read FBGColor write FBGColor default clInfoBk;
|
|
|
|
property DataStore;
|
|
|
|
property Placement;
|
|
|
|
end;
|
|
|
|
|
|
|
|
implementation
|
|
|
|
|
2016-06-07 15:09:01 +00:00
|
|
|
{$IFDEF LCL}
|
2016-06-07 16:34:18 +00:00
|
|
|
{$R *.lfm}
|
2016-06-07 15:09:01 +00:00
|
|
|
{$ELSE}
|
2016-06-07 16:34:18 +00:00
|
|
|
{$R *.dfm}
|
2008-02-03 12:05:55 +00:00
|
|
|
{$ENDIF}
|
|
|
|
|
2016-06-11 14:09:10 +00:00
|
|
|
uses
|
2017-05-19 12:36:30 +00:00
|
|
|
StrUtils, Math,
|
2016-11-21 17:12:05 +00:00
|
|
|
VpMisc, VpSR;
|
2008-02-03 12:05:55 +00:00
|
|
|
|
|
|
|
{ TVpNotificationDialog }
|
|
|
|
|
|
|
|
constructor TVpNotificationDialog.Create(AOwner : TComponent);
|
|
|
|
begin
|
|
|
|
inherited Create(AOwner);
|
2008-02-20 21:13:06 +00:00
|
|
|
FBGColor := clWindow;
|
2008-02-03 12:05:55 +00:00
|
|
|
FPlacement.Position := mpCustom;
|
|
|
|
FPlacement.Width := 412;
|
|
|
|
end;
|
|
|
|
{=====}
|
|
|
|
|
|
|
|
|
|
|
|
procedure TVpNotificationDialog.Execute(Event: TVpEvent);
|
|
|
|
var
|
|
|
|
AlarmNotifyForm: TAlarmNotifyForm;
|
|
|
|
begin
|
|
|
|
if (Event <> nil) and (not Event.AlertDisplayed) then begin
|
2008-02-10 19:17:45 +00:00
|
|
|
AlarmNotifyForm := TAlarmNotifyForm.Create(Self);
|
2008-02-03 12:05:55 +00:00
|
|
|
try
|
|
|
|
try
|
2008-02-10 19:17:45 +00:00
|
|
|
Event.AlertDisplayed := true;
|
2008-02-11 01:09:19 +00:00
|
|
|
DoFormPlacement(AlarmNotifyForm);
|
2008-02-10 19:17:45 +00:00
|
|
|
AlarmNotifyForm.Color := BackgroundColor;
|
|
|
|
AlarmNotifyForm.DataStore := DataStore;
|
|
|
|
AlarmNotifyForm.Event := Event;
|
|
|
|
AlarmNotifyForm.PopulateSelf;
|
2008-02-03 12:05:55 +00:00
|
|
|
AlarmNotifyForm.ShowModal;
|
|
|
|
finally
|
|
|
|
Event.AlertDisplayed := false;
|
|
|
|
end;
|
|
|
|
if Event.Changed then
|
|
|
|
DataStore.PostEvents;
|
|
|
|
finally
|
|
|
|
AlarmNotifyForm.Release;
|
|
|
|
end;
|
|
|
|
end;
|
|
|
|
end;
|
|
|
|
{=====}
|
|
|
|
|
|
|
|
{ TAlarmNotifyForm }
|
|
|
|
|
|
|
|
procedure TAlarmNotifyForm.PopulateSelf;
|
2016-06-11 14:09:10 +00:00
|
|
|
var
|
|
|
|
fmt: String;
|
2008-02-03 12:05:55 +00:00
|
|
|
begin
|
|
|
|
if Event <> nil then begin
|
2008-02-12 06:51:55 +00:00
|
|
|
// SubjectCaption.Caption := RSSubjectCaption;
|
|
|
|
// NotesCaption.Caption := RSNotesCaption;
|
2008-02-03 12:05:55 +00:00
|
|
|
SnoozeCaption.Caption := RSSnoozeCaption;
|
|
|
|
DismissBtn.Caption := RSDismissBtn;
|
|
|
|
SnoozeBtn.Caption := RSSnoozeBtn;
|
|
|
|
OpenItemBtn.Caption := RSOpenItemBtn;
|
2016-06-11 14:09:10 +00:00
|
|
|
lNotes.Caption := Event.Notes;
|
2008-02-12 06:51:55 +00:00
|
|
|
lSubject.Caption := Event.Description;
|
2008-02-03 12:05:55 +00:00
|
|
|
|
2016-06-11 14:09:10 +00:00
|
|
|
fmt := IfThen(trunc(Event.StartTime) = Date(), 't', 'ddddd t');
|
|
|
|
lTime.Caption := Format('%s - %s', [
|
|
|
|
FormatDateTime(fmt, Event.StartTime),
|
|
|
|
FormatDateTime(fmt, Event.EndTime)] );
|
|
|
|
if Event.Location <> '' then
|
|
|
|
lTime.Caption := lTime.Caption + ' (' + Event.Location + ')';
|
2008-02-03 12:05:55 +00:00
|
|
|
|
2016-06-11 14:09:10 +00:00
|
|
|
Caption := Format('%s : %s', [
|
|
|
|
IfThen(Now > Event.StartTime, RSOverdue, RSReminder),
|
|
|
|
FormatDateTime(fmt, Event.StartTime) ]);
|
2008-02-03 12:05:55 +00:00
|
|
|
|
|
|
|
SnoozeCombo.Items.Clear;
|
2016-06-10 14:45:43 +00:00
|
|
|
SnoozeCombo.Items.Add(RS1Minute);
|
|
|
|
SnoozeCombo.Items.Add(Format(RSXMinutes, [5]));
|
|
|
|
SnoozeCombo.Items.Add(Format(RSXMinutes, [10]));
|
|
|
|
SnoozeCombo.Items.Add(Format(RSXMinutes, [15]));
|
|
|
|
SnoozeCombo.Items.Add(Format(RSXMinutes, [30]));
|
|
|
|
SnoozeCombo.Items.Add(Format(RSXMinutes, [45]));
|
2008-02-03 12:05:55 +00:00
|
|
|
SnoozeCombo.Items.Add(RS1Hour);
|
2016-06-10 14:45:43 +00:00
|
|
|
SnoozeCombo.Items.Add(Format(RSXHours, [2]));
|
|
|
|
SnoozeCombo.Items.Add(Format(RSXHours, [3]));
|
|
|
|
SnoozeCombo.Items.Add(Format(RSXHours, [4]));
|
|
|
|
SnoozeCombo.Items.Add(Format(RSXHours, [5]));
|
|
|
|
SnoozeCombo.Items.Add(Format(RSXHours, [6]));
|
|
|
|
SnoozeCombo.Items.Add(Format(RSXHours, [7]));
|
|
|
|
SnoozeCombo.Items.Add(Format(RSXHours, [8]));
|
|
|
|
SnoozeCombo.Items.Add(RS1Day);
|
|
|
|
SnoozeCombo.Items.Add(Format(RSXDays, [2]));
|
|
|
|
SnoozeCombo.Items.Add(Format(RSXDays, [3]));
|
|
|
|
SnoozeCombo.Items.Add(Format(RSXDays, [4]));
|
|
|
|
SnoozeCombo.Items.Add(Format(RSXDays, [5]));
|
|
|
|
SnoozeCombo.Items.Add(Format(RSXDays, [6]));
|
2008-02-03 12:05:55 +00:00
|
|
|
SnoozeCombo.Items.Add(RS1Week);
|
|
|
|
SnoozeCombo.ItemIndex := 0;
|
|
|
|
SnoozeDelay := 5 / MinutesInDay;
|
|
|
|
ShowTime := Now;
|
|
|
|
end;
|
|
|
|
end;
|
|
|
|
{=====}
|
|
|
|
|
|
|
|
|
|
|
|
procedure TAlarmNotifyForm.SnoozeComboChange(Sender: TObject);
|
|
|
|
begin
|
|
|
|
case SnoozeCombo.ItemIndex of
|
2017-05-19 12:36:30 +00:00
|
|
|
0 : SnoozeDelay := 1 / MinutesInDay; { 1 minute }
|
|
|
|
1 : SnoozeDelay := 5 / MinutesInDay; { 5 minutes }
|
|
|
|
2 : SnoozeDelay := 10 / MinutesInDay; {10 Minutes }
|
|
|
|
3 : SnoozeDelay := 15 / MinutesInDay; {15 Minutes }
|
|
|
|
4 : SnoozeDelay := 30 / MinutesInDay; {30 Minutes }
|
|
|
|
5 : SnoozeDelay := 45 / MinutesInDay; {45 Minutes }
|
|
|
|
6 : SnoozeDelay := 60 / MinutesInDay; {1 Hour }
|
2016-06-10 14:45:43 +00:00
|
|
|
7 : SnoozeDelay := 120 / MinutesInDay; {2 Hours }
|
|
|
|
8 : SnoozeDelay := 180 / MinutesInDay; {3 Hours }
|
|
|
|
9 : SnoozeDelay := 240 / MinutesInDay; {4 Hours }
|
|
|
|
10: SnoozeDelay := 300 / MinutesInDay; {5 Hours }
|
|
|
|
11: SnoozeDelay := 360 / MinutesInDay; {6 Hours }
|
|
|
|
12: SnoozeDelay := 420 / MinutesInDay; {7 Hours }
|
|
|
|
13: SnoozeDelay := 480 / MinutesInDay; {8 Hours }
|
|
|
|
14: SnoozeDelay := 1.0; {1 day }
|
|
|
|
15: SnoozeDelay := 2.0; {2 day }
|
|
|
|
16: SnoozeDelay := 3.0; {3 day }
|
|
|
|
17: SnoozeDelay := 4.0; {4 day }
|
|
|
|
18: SnoozeDelay := 5.0; {5 day }
|
|
|
|
19: SnoozeDelay := 6.0; {6 day }
|
|
|
|
20: SnoozeDelay := 7.0; {1 week }
|
2008-02-03 12:05:55 +00:00
|
|
|
end;
|
|
|
|
end;
|
|
|
|
{=====}
|
|
|
|
|
|
|
|
procedure TAlarmNotifyForm.SnoozeBtnClick(Sender: TObject);
|
|
|
|
begin
|
|
|
|
CalcSnooze;
|
|
|
|
Close;
|
|
|
|
end;
|
|
|
|
{=====}
|
|
|
|
|
|
|
|
procedure TAlarmNotifyForm.DismissBtnClick(Sender: TObject);
|
2016-06-12 12:53:26 +00:00
|
|
|
var
|
|
|
|
t0: TTime;
|
2008-02-03 12:05:55 +00:00
|
|
|
begin
|
2008-02-13 00:13:01 +00:00
|
|
|
if Event.RepeatCode = rtNone then
|
2008-02-21 11:50:30 +00:00
|
|
|
begin
|
|
|
|
Event.AlarmSet := false
|
|
|
|
end
|
2008-02-13 00:13:01 +00:00
|
|
|
else
|
|
|
|
begin
|
|
|
|
SnoozeDelay := 0;
|
2016-06-12 12:53:26 +00:00
|
|
|
t0 := Trunc(Now) + frac(Event.StartTime) - EncodeTime(0, Event.AlarmAdvance, 0, 0);
|
2008-02-13 00:13:01 +00:00
|
|
|
case Event.RepeatCode of
|
2016-06-12 12:53:26 +00:00
|
|
|
rtDaily:
|
|
|
|
Event.SnoozeTime := t0 + 1; //Trunc(Now)+1+(Frac(Event.StartTime)-EncodeTime(0,Event.AlarmAdvance,0,0));
|
|
|
|
rtWeekly:
|
|
|
|
Event.SnoozeTime := t0 + 7; //Trunc(Now)+7+(Frac(Event.StartTime)-EncodeTime(0,Event.AlarmAdvance,0,0));
|
2008-02-13 00:13:01 +00:00
|
|
|
//TODO: rtMonthlyByDay:
|
|
|
|
//TODO: rtMonthlyByDate:
|
|
|
|
//TODO: rtYearlyByDay:
|
|
|
|
//TODO: rtYearlyByDate:
|
|
|
|
//TODO: rtCustom:
|
|
|
|
else
|
|
|
|
Event.AlarmSet := false
|
|
|
|
end;
|
|
|
|
end;
|
2008-02-03 12:05:55 +00:00
|
|
|
Close;
|
|
|
|
end;
|
2016-06-10 14:45:43 +00:00
|
|
|
|
|
|
|
procedure TAlarmNotifyForm.FormCreate(Sender: TObject);
|
|
|
|
begin
|
2017-05-19 12:36:30 +00:00
|
|
|
// SnoozeCombo.Top := SnoozeBtn.Top + (SnoozeBtn.Height - SnoozeCombo.Height) div 2;
|
2016-06-10 14:45:43 +00:00
|
|
|
end;
|
|
|
|
|
2008-02-03 12:05:55 +00:00
|
|
|
{=====}
|
|
|
|
|
|
|
|
procedure TAlarmNotifyForm.OpenItemBtnClick(Sender: TObject);
|
|
|
|
begin
|
|
|
|
Self.Hide;
|
|
|
|
EventDialog.DataStore := DataStore;
|
|
|
|
EventDialog.Execute(Event);
|
|
|
|
Close;
|
|
|
|
end;
|
|
|
|
{=====}
|
|
|
|
|
|
|
|
procedure TAlarmNotifyForm.FormKeyDown(Sender: TObject; var Key: Word;
|
|
|
|
Shift: TShiftState);
|
|
|
|
begin
|
2016-07-12 18:00:32 +00:00
|
|
|
Unused(Shift);
|
2008-02-03 12:05:55 +00:00
|
|
|
if Key = VK_ESCAPE then begin
|
|
|
|
CalcSnooze;
|
|
|
|
Close;
|
|
|
|
end;
|
|
|
|
end;
|
|
|
|
{=====}
|
|
|
|
|
|
|
|
procedure TAlarmNotifyForm.CalcSnooze;
|
|
|
|
begin
|
|
|
|
Event.SnoozeTime := Now + SnoozeDelay;
|
|
|
|
end;
|
|
|
|
{=====}
|
2016-06-07 16:34:18 +00:00
|
|
|
|
2008-02-03 12:05:55 +00:00
|
|
|
procedure TAlarmNotifyForm.FormShow(Sender: TObject);
|
2017-05-21 12:02:22 +00:00
|
|
|
begin
|
|
|
|
PositionControls;
|
|
|
|
end;
|
|
|
|
|
|
|
|
procedure TAlarmNotifyForm.PositionControls;
|
2017-05-19 12:36:30 +00:00
|
|
|
var
|
|
|
|
w, h: Integer;
|
|
|
|
i: Integer;
|
|
|
|
cnv: TControlCanvas;
|
2008-02-03 12:05:55 +00:00
|
|
|
begin
|
2017-05-19 12:36:30 +00:00
|
|
|
cnv := TControlCanvas.Create;
|
|
|
|
try
|
|
|
|
cnv.Control := SnoozeCombo;
|
|
|
|
cnv.Font.Assign(SnoozeCombo.Font);
|
|
|
|
w := 0;
|
|
|
|
for i:=0 to SnoozeCombo.Items.Count-1 do
|
|
|
|
w := Max(w, cnv.TextWidth(SnoozeCombo.Items[i]));
|
|
|
|
w := w + GetSystemMetrics(SM_CXVSCROLL);
|
|
|
|
finally
|
|
|
|
cnv.Free;
|
|
|
|
end;
|
|
|
|
|
2017-05-21 12:02:22 +00:00
|
|
|
SnoozeBtn.AutoSize := true;
|
|
|
|
h := SnoozeBtn.Height;
|
|
|
|
if SnoozeBtn.Width > w then
|
|
|
|
w := SnoozeBtn.Width;
|
|
|
|
SnoozeBtn.AutoSize := false;
|
|
|
|
|
|
|
|
OpenItemBtn.AutoSize := true;
|
|
|
|
if OpenItemBtn.Width > w then
|
|
|
|
w := OpenItemBtn.Width;
|
|
|
|
OpenItemBtn.AutoSize := false;
|
|
|
|
|
|
|
|
DismissBtn.AutoSize := true;
|
|
|
|
if DismissBtn.Width > w then
|
|
|
|
w := DismissBtn.Width;
|
|
|
|
DismissBtn.AutoSize := false;
|
|
|
|
|
2017-05-19 12:36:30 +00:00
|
|
|
SnoozeBtn.Width := w;
|
|
|
|
SnoozeBtn.Height := h;
|
|
|
|
DismissBtn.Width := w;
|
|
|
|
DismissBtn.Height := h;
|
|
|
|
OpenItemBtn.Width := w;
|
|
|
|
OpenItemBtn.Height := h;
|
|
|
|
SnoozeCombo.Width := w;
|
|
|
|
|
|
|
|
AutoSize := true;
|
|
|
|
|
2008-02-03 12:05:55 +00:00
|
|
|
OpenItemBtn.SetFocus;
|
|
|
|
end;
|
2008-02-08 15:07:26 +00:00
|
|
|
|
2008-02-03 12:05:55 +00:00
|
|
|
end.
|
|
|
|
|