2008-02-03 12:05:55 +00:00
|
|
|
{*********************************************************}
|
|
|
|
{* VPTASKEDITDLG.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-07 15:09:01 +00:00
|
|
|
{$I vp.inc}
|
2008-02-03 12:05:55 +00:00
|
|
|
|
|
|
|
unit VpTaskEditDlg;
|
|
|
|
{ default task editing dialog }
|
|
|
|
|
|
|
|
interface
|
|
|
|
|
|
|
|
uses
|
|
|
|
{$IFDEF LCL}
|
2016-11-21 17:12:05 +00:00
|
|
|
LCLProc, LCLType, LCLIntf, LResources, EditBtn,
|
2008-02-03 12:05:55 +00:00
|
|
|
{$ELSE}
|
2016-07-12 18:00:32 +00:00
|
|
|
Windows, Messages, VpEdPop, VpDateEdit,
|
2008-02-03 12:05:55 +00:00
|
|
|
{$ENDIF}
|
2016-06-22 07:59:17 +00:00
|
|
|
SysUtils,
|
2008-02-03 12:05:55 +00:00
|
|
|
{$IFDEF VERSION6} Variants, {$ENDIF}
|
2016-11-21 17:12:05 +00:00
|
|
|
Classes, Graphics, Controls, Forms, Dialogs, VpData, StdCtrls, ExtCtrls, ComCtrls,
|
|
|
|
VpBase, VpSR, VpDlg;
|
2008-02-03 12:05:55 +00:00
|
|
|
|
|
|
|
type
|
|
|
|
{ forward declarations }
|
|
|
|
TVpTaskEditDialog = class;
|
|
|
|
|
2016-06-09 15:25:29 +00:00
|
|
|
{ TTaskEditForm }
|
|
|
|
|
2008-02-03 12:05:55 +00:00
|
|
|
TTaskEditForm = class(TForm)
|
2016-07-14 12:20:59 +00:00
|
|
|
ButtonPanel: TPanel;
|
2016-09-17 15:14:53 +00:00
|
|
|
CbCategory: TComboBox;
|
|
|
|
CbPriority: TComboBox;
|
|
|
|
LblCategory: TLabel;
|
|
|
|
LblPriority: TLabel;
|
2008-02-03 12:05:55 +00:00
|
|
|
OKBtn: TButton;
|
|
|
|
CancelBtn: TButton;
|
|
|
|
PageControl1: TPageControl;
|
|
|
|
tabTask: TTabSheet;
|
|
|
|
DescriptionEdit: TEdit;
|
|
|
|
DueDateLbl: TLabel;
|
2016-06-09 15:25:29 +00:00
|
|
|
DueDateEdit: TDateEdit;
|
2016-09-17 15:14:53 +00:00
|
|
|
CbComplete: TCheckBox;
|
|
|
|
LblCreatedOn: TLabel;
|
|
|
|
LblCompletedOn: TLabel;
|
2008-02-03 12:05:55 +00:00
|
|
|
DetailsMemo: TMemo;
|
|
|
|
ResourceNameLbl: TLabel;
|
|
|
|
Bevel1: TBevel;
|
|
|
|
imgCalendar: TImage;
|
|
|
|
imgCompleted: TImage;
|
|
|
|
procedure FormCreate(Sender: TObject);
|
|
|
|
procedure OnChange(Sender: TObject);
|
|
|
|
procedure OKBtnClick(Sender: TObject);
|
|
|
|
procedure CancelBtnClick(Sender: TObject);
|
|
|
|
procedure FormShow(Sender: TObject);
|
|
|
|
private
|
|
|
|
FReturnCode: TVpEditorReturnCode;
|
|
|
|
FTask: TVpTask;
|
|
|
|
FResource: TVpResource;
|
2016-09-17 15:14:53 +00:00
|
|
|
FBtnHeight: Integer;
|
|
|
|
FEditHeight: Integer;
|
2016-07-14 11:07:26 +00:00
|
|
|
procedure PositionControls;
|
2016-09-17 15:14:53 +00:00
|
|
|
procedure SetCaptions;
|
2008-02-03 12:05:55 +00:00
|
|
|
public
|
|
|
|
procedure PopulateSelf;
|
|
|
|
procedure DePopulateSelf;
|
|
|
|
property Task: TVpTask
|
|
|
|
read FTask write FTask;
|
|
|
|
property Resource: TVpResource
|
|
|
|
read FResource write FResource;
|
|
|
|
property ReturnCode: TVpEditorReturnCode
|
|
|
|
read FReturnCode;
|
|
|
|
end;
|
|
|
|
|
|
|
|
TVpTaskEditDialog = class(TVpBaseDialog)
|
|
|
|
protected {private}
|
2016-06-18 21:03:53 +00:00
|
|
|
teEditDlg: TTaskEditForm;
|
|
|
|
teTask: TVpTask;
|
2008-02-03 12:05:55 +00:00
|
|
|
public
|
2016-06-18 21:03:53 +00:00
|
|
|
constructor Create(AOwner: TComponent); override;
|
2008-02-03 12:05:55 +00:00
|
|
|
function AddNewTask: Boolean;
|
2016-09-17 15:14:53 +00:00
|
|
|
function Execute(Task: TVpTask): Boolean; reintroduce;
|
2008-02-03 12:05:55 +00:00
|
|
|
published
|
|
|
|
{properties}
|
|
|
|
property DataStore;
|
|
|
|
property Options;
|
|
|
|
property Placement;
|
|
|
|
end;
|
|
|
|
|
|
|
|
implementation
|
|
|
|
|
2016-06-10 16:12:14 +00:00
|
|
|
uses
|
2016-07-14 12:20:59 +00:00
|
|
|
Math, VpMisc;
|
2016-06-10 16:12:14 +00:00
|
|
|
|
2016-06-07 16:34:18 +00:00
|
|
|
{$IFDEF LCL}
|
|
|
|
{$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}
|
|
|
|
|
|
|
|
{ TTaskEditForm }
|
|
|
|
|
|
|
|
procedure TTaskEditForm.FormCreate(Sender: TObject);
|
|
|
|
begin
|
|
|
|
FReturnCode := rtAbandon;
|
2016-09-17 15:14:53 +00:00
|
|
|
FBtnHeight := ScaleY(OKBtn.Height, DesignTimeDPI);
|
|
|
|
FEditHeight := ScaleY(DueDateEdit.Height, DesignTimeDPI);
|
2008-02-03 12:05:55 +00:00
|
|
|
end;
|
|
|
|
|
|
|
|
procedure TTaskEditForm.DePopulateSelf;
|
|
|
|
begin
|
|
|
|
Task.Description := DescriptionEdit.Text;
|
|
|
|
Task.DueDate := DueDateEdit.Date;
|
|
|
|
Task.Details := DetailsMemo.Text;
|
2016-09-17 15:14:53 +00:00
|
|
|
Task.Complete := CbComplete.Checked;
|
|
|
|
Task.Priority := CbPriority.ItemIndex-1;
|
|
|
|
Task.Category := CbCategory.ItemIndex;
|
|
|
|
// DueDateLbl.Caption := RSDueDateLabel;
|
2008-02-03 12:05:55 +00:00
|
|
|
end;
|
|
|
|
{=====}
|
|
|
|
|
2016-09-17 15:14:53 +00:00
|
|
|
procedure TTaskEditForm.SetCaptions;
|
|
|
|
var
|
|
|
|
ct: TVpCategoryType;
|
|
|
|
tp: TVpTaskPriority;
|
2008-02-03 12:05:55 +00:00
|
|
|
begin
|
|
|
|
ResourceNameLbl.Caption := Resource.Description;
|
2016-09-17 15:14:53 +00:00
|
|
|
CbComplete.Caption := RSTaskComplete;
|
|
|
|
DueDateLbl.Caption := RSDueDateLabel;
|
2008-02-03 12:05:55 +00:00
|
|
|
OKBtn.Caption := RSOKBtn;
|
|
|
|
CancelBtn.Caption := RSCancelBtn;
|
2016-06-19 13:00:19 +00:00
|
|
|
TabTask.Caption := RSDlgTaskEdit;
|
2016-09-17 15:14:53 +00:00
|
|
|
LblPriority.Caption := RSPriorityLabel;
|
|
|
|
LblCategory.Caption := RSCategoryLabel;
|
|
|
|
|
|
|
|
CbCategory.Items.Clear;
|
|
|
|
for ct in TVpCategoryType do
|
|
|
|
CbCategory.Items.Add(CategoryLabel(ct));
|
|
|
|
|
|
|
|
CbPriority.Items.Clear;
|
|
|
|
for tp in TVpTaskPriority do
|
|
|
|
CbPriority.Items.Add(TaskPriorityToStr(tp));
|
|
|
|
end;
|
|
|
|
|
|
|
|
procedure TTaskEditForm.PopulateSelf;
|
|
|
|
begin
|
|
|
|
SetCaptions;
|
2008-02-03 12:05:55 +00:00
|
|
|
|
|
|
|
DescriptionEdit.Text := Task.Description;
|
|
|
|
DueDateEdit.Date := Task.DueDate;
|
|
|
|
DetailsMemo.Text := Task.Details;
|
2016-09-17 15:14:53 +00:00
|
|
|
CbComplete.Checked := Task.Complete;
|
2008-02-03 12:05:55 +00:00
|
|
|
if Task.CompletedOn <> 0 then
|
2016-09-17 15:14:53 +00:00
|
|
|
LblCompletedOn.Caption := RSCompletedOn + ' ' + FormatDateTime('ddddd', Task.CompletedOn)
|
|
|
|
// 'ddddd' = DefaultFormatSettings.ShortDateFormat
|
2008-02-03 12:05:55 +00:00
|
|
|
else
|
2016-09-17 15:14:53 +00:00
|
|
|
LblCompletedOn.Visible := False;
|
|
|
|
LblCompletedOn.Visible := CbComplete.Checked;
|
|
|
|
LblCreatedOn.Caption := RSCreatedOn + ' ' + FormatDateTime('ddddd', Task.CreatedOn);
|
|
|
|
CbPriority.ItemIndex := Task.Priority + 1;
|
|
|
|
CbCategory.ItemIndex := Task.Category;
|
2016-06-10 16:12:14 +00:00
|
|
|
|
2016-07-14 11:07:26 +00:00
|
|
|
PositionControls;
|
|
|
|
end;
|
|
|
|
|
|
|
|
procedure TTaskEditForm.PositionControls;
|
|
|
|
var
|
2016-08-06 22:18:53 +00:00
|
|
|
VBevelDist: Integer = 8; // Distance bevel-to-control
|
|
|
|
VDist: Integer = 8; // Vertical distance between controls
|
|
|
|
HDist: Integer = 8; // Horizontal distance between controls:
|
|
|
|
w: Integer;
|
|
|
|
cnv: TControlCanvas;
|
2016-07-14 11:07:26 +00:00
|
|
|
begin
|
2016-08-06 22:18:53 +00:00
|
|
|
VBevelDist := ScaleY(VBevelDist, DesignTimeDPI);
|
|
|
|
VDist := ScaleY(VDist, DesignTimeDPI);
|
|
|
|
HDist := ScaleX(HDist, DesignTimeDPI);
|
|
|
|
|
2016-09-17 15:14:53 +00:00
|
|
|
DescriptionEdit.Height := FEditHeight;
|
|
|
|
DueDateEdit.Height := FEditHeight;
|
|
|
|
DueDateEdit.ButtonWidth := FEditHeight;
|
|
|
|
CbCategory.Height := FEditHeight;
|
|
|
|
CbPriority.Height := FEditHeight;
|
|
|
|
|
|
|
|
OKBtn.Height := FBtnHeight;
|
2016-08-06 22:18:53 +00:00
|
|
|
OKBtn.Top := VDist;
|
|
|
|
CancelBtn.Height := OKBtn.Height;
|
|
|
|
CancelBtn.Top := OKBtn.Top;
|
|
|
|
ButtonPanel.Height := OKBtn.Height + VDIST*2;
|
|
|
|
ResourceNameLbl.Font.Size := ScaleY(ResourceNameLbl.Font.Size, DesignTimeDPI);
|
|
|
|
ResourceNameLbl.Top := OKBtn.Top + (OKBtn.Height - ScaleY(ResourceNameLbl.Height, DesignTimeDPI)) div 2;
|
2016-07-14 11:07:26 +00:00
|
|
|
|
2016-07-14 12:20:59 +00:00
|
|
|
DueDateEdit.Left := DueDateLbl.Left + GetLabelWidth(DueDateLbl) + HDist;
|
2016-08-06 22:18:53 +00:00
|
|
|
cnv := TControlCanvas.Create;
|
|
|
|
try
|
|
|
|
cnv.Control := DueDateEdit;
|
|
|
|
cnv.Font.Assign(DueDateEdit.Font);
|
|
|
|
w := cnv.TextWidth(' 99-99-9999 ') + DueDateEdit.ButtonWidth + 10;
|
|
|
|
finally
|
|
|
|
cnv.Free;
|
|
|
|
end;
|
|
|
|
DueDateEdit.Width := w;
|
|
|
|
|
|
|
|
if RightOf(DueDateEdit) + 3*HDist > ImgCompleted.Left then begin
|
|
|
|
ImgCompleted.Left := RightOf(DueDateEdit) + 3*HDist;
|
2016-09-17 15:14:53 +00:00
|
|
|
CbComplete.Left := RightOf(ImgCompleted) + HDist;
|
|
|
|
LblCompletedOn.Left := CbComplete.Left;
|
2016-08-06 22:18:53 +00:00
|
|
|
|
|
|
|
cnv := TControlCanvas.Create;
|
|
|
|
try
|
2016-09-17 15:14:53 +00:00
|
|
|
cnv.Control := CbComplete;
|
|
|
|
cnv.Font.Assign(CbComplete.Font);
|
|
|
|
w := cnv.TextWidth(CbComplete.Caption) + GetSystemMetrics(SM_CXMENUCHECK);
|
2016-08-06 22:18:53 +00:00
|
|
|
finally
|
|
|
|
cnv.Free;
|
|
|
|
end;
|
2016-09-17 15:14:53 +00:00
|
|
|
w := Max(GetlabelWidth(LblCompletedOn), w);
|
|
|
|
ClientWidth := ClientWidth - tabTask.ClientWidth + CbComplete.Left + w + HDist*2;
|
2016-08-06 22:18:53 +00:00
|
|
|
end;
|
|
|
|
|
2016-09-17 15:14:53 +00:00
|
|
|
CbCategory.Left := DueDateEdit.Left;
|
|
|
|
LblCategory.Left := CbCategory.Left - HDist - GetLabelWidth(LblCategory);
|
|
|
|
|
|
|
|
if RightOf(CbCategory) + 3*HDist + GetLabelWidth(LblPriority) + HDist > CbComplete.Left then
|
|
|
|
CbPriority.Left := CbPriority.Parent.ClientWidth - HDist - CbPriority.Width
|
|
|
|
else
|
|
|
|
CbPriority.Left := CbComplete.Left;
|
|
|
|
LblPriority.Left := CbPriority.Left - HDist - GetLabelWidth(LblPriority);
|
|
|
|
|
2016-07-14 12:20:59 +00:00
|
|
|
OKBtn.Width := Max(GetButtonWidth(OKBtn), GetButtonWidth(CancelBtn));
|
|
|
|
CancelBtn.Width := OKBtn.Width;
|
2016-08-13 12:24:22 +00:00
|
|
|
{$IFDEF MSWINDOWS}
|
2016-07-14 12:20:59 +00:00
|
|
|
CancelBtn.Left := ButtonPanel.ClientWidth - ResourcenameLbl.Left - CancelBtn.Width;
|
|
|
|
OKBtn.Left := CancelBtn.Left - HDist - OKBtn.Width;
|
2016-08-13 12:24:22 +00:00
|
|
|
OKBtn.TabOrder := 0;
|
|
|
|
CancelBtn.TabOrder := 1;
|
|
|
|
{$ELSE}
|
|
|
|
OKBtn.Left := ButtonPanel.ClientWidth - ResourcenameLbl.Left - OKBtn.Width;
|
|
|
|
CancelBtn.Left := OKBtn.Left - HDist - CancelBtn.Width;
|
|
|
|
CancelBtn.TabOrder := 0;
|
|
|
|
OKBtn.TabOrder := 1;
|
|
|
|
{$ENDIF}
|
2016-07-14 11:07:26 +00:00
|
|
|
|
2016-09-17 15:14:53 +00:00
|
|
|
CbCategory.Top := BottomOf(DescriptionEdit) + VDist;
|
|
|
|
LblCategory.Top := CbCategory.Top + (CbCategory.Height - LblCategory.Height) div 2;
|
|
|
|
CbPriority.Top := CbCategory.Top;
|
|
|
|
LblPriority.Top := LblCategory.Top;
|
|
|
|
|
|
|
|
//Bevel1.Top := DescriptionEdit.Top + editHeight + VBevelDist; //BottomOf(DescriptionEdit) + VBevelDist;
|
2016-07-14 11:07:26 +00:00
|
|
|
|
|
|
|
ImgCalendar.Top := Bevel1.Top + 2 + VBevelDist;
|
|
|
|
ImgCompleted.Top := ImgCalendar.Top;
|
2016-08-06 22:18:53 +00:00
|
|
|
DueDateEdit.Top := ImgCalendar.Top; // + (ImgCalendar.Height - DueDateEdit.Height) div 2;
|
2016-07-14 11:07:26 +00:00
|
|
|
DueDateLbl.Top := DueDateEdit.Top + (DueDateEdit.Height - DueDateLbl.Height) div 2;
|
2016-09-17 15:14:53 +00:00
|
|
|
CbComplete.Top := ImgCompleted.Top; // + (ImgCompleted.Height - CbComplete.Height) div 2;
|
2016-07-14 11:07:26 +00:00
|
|
|
|
2016-09-17 15:14:53 +00:00
|
|
|
LblCreatedOn.Top := DueDateEdit.Top + FEditHeight + VDist; //BottomOf(DueDateEdit) + VDist;
|
|
|
|
LblCompletedOn.Top := LblCreatedOn.Top;
|
2016-07-14 11:07:26 +00:00
|
|
|
|
2016-09-17 15:14:53 +00:00
|
|
|
DetailsMemo.Top := BottomOf(LblCreatedOn) + VBevelDist;
|
2016-07-14 11:07:26 +00:00
|
|
|
DetailsMemo.Height := tabTask.ClientHeight - DetailsMemo.Top - DescriptionEdit.Top;
|
2008-02-03 12:05:55 +00:00
|
|
|
end;
|
|
|
|
{=====}
|
|
|
|
|
|
|
|
procedure TTaskEditForm.OnChange(Sender: TObject);
|
|
|
|
begin
|
|
|
|
Task.Changed := true;
|
|
|
|
end;
|
2016-06-09 23:49:35 +00:00
|
|
|
|
2008-02-03 12:05:55 +00:00
|
|
|
{=====}
|
|
|
|
|
|
|
|
procedure TTaskEditForm.OKBtnClick(Sender: TObject);
|
|
|
|
begin
|
|
|
|
FReturnCode := rtCommit;
|
|
|
|
Close;
|
|
|
|
end;
|
|
|
|
{=====}
|
|
|
|
|
|
|
|
procedure TTaskEditForm.CancelBtnClick(Sender: TObject);
|
|
|
|
begin
|
|
|
|
Close;
|
|
|
|
end;
|
|
|
|
{=====}
|
|
|
|
|
|
|
|
procedure TTaskEditForm.FormShow(Sender: TObject);
|
|
|
|
begin
|
|
|
|
DescriptionEdit.SetFocus;
|
|
|
|
end;
|
|
|
|
{=====}
|
|
|
|
|
|
|
|
{ TVpTaskEditDialog }
|
|
|
|
|
|
|
|
constructor TVpTaskEditDialog.Create(AOwner : TComponent);
|
|
|
|
begin
|
|
|
|
inherited Create(AOwner);
|
2016-06-18 21:03:53 +00:00
|
|
|
FPlacement.Height := 340;
|
|
|
|
FPlacement.Width := 545;
|
2008-02-03 12:05:55 +00:00
|
|
|
end;
|
|
|
|
|
|
|
|
function TVpTaskEditDialog.Execute(Task: TVpTask): Boolean;
|
|
|
|
var
|
|
|
|
TaskEditForm: TTaskEditForm;
|
|
|
|
begin
|
|
|
|
Result := false;
|
|
|
|
teTask := Task;
|
2016-06-18 21:03:53 +00:00
|
|
|
if (teTask <> nil) and (DataStore <> nil) and (DataStore.Resource <> nil) then
|
|
|
|
begin
|
2008-02-03 12:05:55 +00:00
|
|
|
Application.CreateForm(TTaskEditForm, TaskEditForm);
|
|
|
|
try
|
|
|
|
DoFormPlacement(TaskEditForm);
|
|
|
|
SetFormCaption(TaskEditForm, Task.Description, RSDlgTaskEdit);
|
|
|
|
TaskEditForm.Task := Task;
|
|
|
|
TaskEditForm.Resource := DataStore.Resource;
|
|
|
|
TaskEditForm.PopulateSelf;
|
|
|
|
TaskEditForm.ShowModal;
|
|
|
|
Result := (TaskEditForm.ReturnCode = rtCommit);
|
|
|
|
Task.Changed := Result;
|
|
|
|
if Result then begin
|
|
|
|
TaskEditForm.DePopulateSelf;
|
2016-06-18 19:45:43 +00:00
|
|
|
// DataStore.PostTasks;
|
|
|
|
// DataStore.NotifyDependents;
|
2008-02-03 12:05:55 +00:00
|
|
|
end;
|
|
|
|
finally
|
|
|
|
TaskEditForm.Release;
|
|
|
|
end;
|
|
|
|
end;
|
|
|
|
end;
|
|
|
|
{=====}
|
|
|
|
|
|
|
|
function TVpTaskEditDialog.AddNewTask: Boolean;
|
|
|
|
begin
|
|
|
|
result := false;
|
|
|
|
if DataStore <> nil then begin
|
|
|
|
teTask := DataStore.Resource.Tasks.AddTask(DataStore.GetNextID('Tasks'));
|
|
|
|
if teTask <> nil then begin
|
|
|
|
Result := Execute(teTask);
|
|
|
|
if not Result then
|
|
|
|
teTask.Free;
|
|
|
|
end;
|
|
|
|
end;
|
|
|
|
end;
|
|
|
|
{=====}
|
2016-06-07 16:34:18 +00:00
|
|
|
|
2008-02-03 12:05:55 +00:00
|
|
|
end.
|
|
|
|
|