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;
|
2017-05-19 10:40:32 +00:00
|
|
|
procedure CancelBtnClick(Sender: TObject);
|
2008-02-03 12:05:55 +00:00
|
|
|
procedure FormCreate(Sender: TObject);
|
2017-05-19 10:40:32 +00:00
|
|
|
procedure FormShow(Sender: TObject);
|
2008-02-03 12:05:55 +00:00
|
|
|
procedure OnChange(Sender: TObject);
|
|
|
|
procedure OKBtnClick(Sender: TObject);
|
|
|
|
private
|
|
|
|
FReturnCode: TVpEditorReturnCode;
|
|
|
|
FTask: TVpTask;
|
|
|
|
FResource: TVpResource;
|
2017-05-19 10:40:32 +00:00
|
|
|
// FBtnHeight: Integer;
|
|
|
|
// FBtnWidth: Integer;
|
2017-05-21 12:02:22 +00:00
|
|
|
// 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;
|
2017-05-19 10:40:32 +00:00
|
|
|
// FBtnHeight := ScaleY(OKBtn.Height, DesignTimeDPI);
|
2017-05-21 12:02:22 +00:00
|
|
|
// 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
|
2017-05-19 10:40:32 +00:00
|
|
|
LblCompletedOn.Caption := RSCompletedOn + ' ' + FormatDateTime('ddddd', Task.CompletedOn);
|
2016-09-17 15:14:53 +00:00
|
|
|
LblCompletedOn.Visible := CbComplete.Checked;
|
|
|
|
LblCreatedOn.Caption := RSCreatedOn + ' ' + FormatDateTime('ddddd', Task.CreatedOn);
|
|
|
|
CbPriority.ItemIndex := Task.Priority + 1;
|
|
|
|
CbCategory.ItemIndex := Task.Category;
|
2016-07-14 11:07:26 +00:00
|
|
|
end;
|
|
|
|
|
|
|
|
procedure TTaskEditForm.PositionControls;
|
|
|
|
var
|
2017-05-21 12:02:22 +00:00
|
|
|
i, w: Integer;
|
2016-08-06 22:18:53 +00:00
|
|
|
cnv: TControlCanvas;
|
2016-07-14 11:07:26 +00:00
|
|
|
begin
|
2017-05-21 12:02:22 +00:00
|
|
|
AutoSize := false;
|
2017-05-19 16:22:42 +00:00
|
|
|
DueDateEdit.ButtonWidth := DueDateEdit.Height;
|
2016-09-17 15:14:53 +00:00
|
|
|
|
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;
|
2017-05-21 12:02:22 +00:00
|
|
|
DueDateEdit.Width := w;
|
2016-08-06 22:18:53 +00:00
|
|
|
finally
|
|
|
|
cnv.Free;
|
|
|
|
end;
|
|
|
|
|
2017-05-21 12:02:22 +00:00
|
|
|
cnv := TControlCanvas.Create;
|
|
|
|
try
|
|
|
|
cnv.Control := CbCategory;
|
|
|
|
cnv.Font.Assign(CbCategory.Font);
|
|
|
|
w := 0;
|
|
|
|
for i :=0 to CbCategory.Items.Count - 1 do
|
|
|
|
w := max(w, cnv.TextWidth(CbCategory.Items[i]));
|
|
|
|
inc(w, GetSystemMetrics(SM_CXVSCROLL)*2);
|
|
|
|
w := Max(w, DueDateEdit.Width);
|
|
|
|
CbCategory.Width := w;
|
|
|
|
finally
|
|
|
|
cnv.Free;
|
|
|
|
end;
|
2016-09-17 15:14:53 +00:00
|
|
|
|
2017-05-21 12:02:22 +00:00
|
|
|
cnv := TControlCanvas.Create;
|
|
|
|
try
|
|
|
|
cnv.Control := CbPriority;
|
|
|
|
cnv.Font.Assign(CbPriority.Font);
|
|
|
|
w := 0;
|
|
|
|
for i :=0 to CbPriority.Items.Count - 1 do
|
|
|
|
w := max(w, cnv.TextWidth(CbPriority.Items[i]));
|
|
|
|
inc(w, GetSystemMetrics(SM_CXVSCROLL)*2);
|
|
|
|
CbPriority.Width := w;
|
|
|
|
finally
|
|
|
|
cnv.Free;
|
|
|
|
end;
|
2016-09-17 15:14:53 +00:00
|
|
|
|
2017-05-19 16:22:42 +00:00
|
|
|
AlignOKCancel(OKBtn, CancelBtn, ButtonPanel);
|
|
|
|
|
2017-05-23 17:39:54 +00:00
|
|
|
{$IFDEF NEW_ICONS}
|
2017-05-25 10:55:40 +00:00
|
|
|
LoadImageFromRCDATA(imgCalendar, 'VpAlarmClock', 24, 32, 48);
|
|
|
|
LoadImageFromRCDATA(imgCompleted, 'VpFinished', 24, 32, 48);
|
2017-05-23 17:39:54 +00:00
|
|
|
LoadGlyphFromRCDATA(DueDateEdit.Button.Glyph, 'VpDateEdit', 16, 24, 32);
|
|
|
|
{$ENDIF}
|
|
|
|
|
2017-05-19 10:40:32 +00:00
|
|
|
AutoSize := true;
|
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
|
2017-05-19 21:19:28 +00:00
|
|
|
PositionControls;
|
2008-02-03 12:05:55 +00:00
|
|
|
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.
|
|
|
|
|