📄 ftasklist.pas
字号:
procedure TfmTaskList.SetFilter(FilterType: TTaskFilterType;
AFilter: string);
begin
lvTasks.FilterType := FilterType;
lvTasks.FilterKey := AFilter;
end;
procedure TfmTaskList.FormShow(Sender: TObject);
begin
UpdateWorkflowDiagram;
TabControl1.TabIndex := 0;
end;
procedure TfmTaskList.AddAttachmentTab(AAttach: TWorkflowAttachment;
APermissions: TAttachmentPermissions);
var
AFrame: TfrAttachmentFrame;
begin
AFrame := TfrAttachmentFrame.Create(Self);
AFrame.Align := alClient;
AFrame.Visible := false;
AFrame.Parent := TabControl1;
TabControl1.Tabs.AddObject(AAttach.Name, AFrame);
AFrame.Name := 'AttachFrame' + IntToStr(TabControl1.Tabs.Count);
AFrame.lvItems.Attachments := AAttach.Items;
{if the selected task is open, than allow normal permissions. Otherwise, cannot change attachments}
if Assigned(lvTasks.SelectedTask) and not lvTasks.SelectedTask.Completed then
AFrame.Permissions := APermissions
else
AFrame.Permissions := [];
AFrame.SendToBack;
AFrame.Visible := true;
end;
procedure TfmTaskList.UpdateAttachmentTabs;
var
AWorkIns: TWorkflowInstance;
c: integer;
begin
{Delete the previous tabs}
c := 0;
while c < TabControl1.Tabs.Count do
begin
{$WARNINGS OFF}
if integer(TabControl1.Tabs.Objects[c]) > _MaxFixedTab then
{$WARNINGS ON}
begin
TfrAttachmentFrame(TabControl1.Tabs.Objects[c]).Free;
TabControl1.Tabs.Delete(c);
end else
inc(c);
end;
if (lvTasks.SelectedTask <> nil) and (lvTasks.SelectedTask.TaskDef.ShowAttachments) then
begin
AWorkIns := GetWorkIns;
for c := 0 to AWorkIns.Diagram.Attachments.Count - 1 do
AddAttachmentTab(AWorkIns.Diagram.Attachments[c], lvTasks.SelectedTask.TaskDef.AttachmentPermissions);
end;
end;
procedure TfmTaskList.UpdateFieldsTab;
var
i: integer;
MustShow: boolean;
AWorkIns: TWorkflowInstance;
begin
MustShow := (lvTasks.SelectedTask <> nil) and (lvTasks.SelectedTask.TaskDef.Fields.Count > 0);
i := FindTabByType(_FieldTabIndex);
{Create or destroy the tab, depending if it must be shown or not}
if MustShow and (i = -1) then
TabControl1.Tabs.InsertObject(2, _str(STabFields), TObject(_FieldTabIndex));
if not MustShow and (i > -1) then
TabControl1.Tabs.Delete(i);
{update fields tab}
if lvTasks.SelectedTask <> nil then
begin
FFieldPanel.Fields := lvTasks.SelectedTask.TaskDef.Fields;
AWorkIns := GetWorkIns;
FFieldPanel.LoadDiagramVariables(AWorkIns.Diagram);
end;
FFieldPanel.ReadOnly := not Assigned(lvTasks.SelectedTask) or lvTasks.SelectedTask.Completed;
end;
function TfmTaskList.FindTabByType(AType: integer): integer;
var
c: integer;
begin
result := -1;
for c := 0 to TabControl1.Tabs.Count - 1 do
{$WARNINGS OFF}
if integer(TabControl1.Tabs.Objects[c]) = AType then
{$WARNINGS ON}
begin
result := c;
exit;
end;
end;
procedure TfmTaskList.UpdateFixedTabs;
begin
With TabControl1.Tabs do
begin
if FindTabByType(_TaskTabIndex) = -1 then
InsertObject(0, _str(STabTask), TObject(_TaskTabIndex));
if FindTabByType(_WorkflowTabIndex) = -1 then
InsertObject(1, _str(STabWorkflow), TObject(_WorkflowTabIndex));
end;
end;
procedure TfmTaskList.UpdateLogTab;
var
i: integer;
begin
With TabControl1.Tabs do
begin
i := FindTabByType(_TaskLogIndex);
if i = - 1 then
AddObject(_str(STabLog), TObject(_TaskLogIndex))
else
Move(i, TabControl1.Tabs.Count - 1);
end;
end;
procedure TfmTaskList.FormDestroy(Sender: TObject);
begin
if FWorkIns <> nil then
begin
FWorkIns.Free;
FWorkIns := nil;
end;
end;
function TfmTaskList.GetWorkIns: TWorkflowInstance;
begin
{Check if WorkIns is already loaded}
if FWorkIns <> nil then
begin
Case lvTasks.FilterType of
tfWorkIns:
if FWorkIns.Key = lvTasks.FilterKey then
begin
result := FWorkIns;
exit;
end;
else
begin
if (lvTasks.SelectedTask <> nil) and (FWorkIns.Key = lvTasks.SelectedTask.WorkInsKey) then
begin
result := FWorkIns;
exit;
end;
end;
end;
end;
{FWorkIns must be reloaded}
if FWorkIns <> nil then
FWorkIns.Free;
FWorkIns := TWorkflowInstance.Create(nil);
if lvTasks.FilterType = tfWorkIns then
FWorkIns.Key := lvTasks.FilterKey {workInskey}
else
if lvTasks.SelectedTask <> nil then
FWorkIns.Key := lvTasks.SelectedTask.WorkInsKey
else
begin
FWorkIns.Free;
FWorkIns := nil;
end;
WorkflowStudio.WorkflowManager.LoadWorkflowInstance(FWorkIns);
result := FWorkIns;
end;
procedure TfmTaskList.btSaveChangesClick(Sender: TObject);
begin
SaveChanges;
end;
procedure TfmTaskList.WorkflowDiagram1Click(Sender: TObject);
begin
WorkflowDiagram1.SetFocus;
end;
procedure TfmTaskList.TabControl1Change(Sender: TObject);
begin
UpdateActivePage;
end;
procedure TfmTaskList.BeginUpdateTabs;
begin
inc(FUpdatingTabs);
end;
procedure TfmTaskList.EndUpdateTabs;
begin
dec(FUpdatingTabs);
end;
procedure TfmTaskList.lvTasksSelectItem(Sender: TObject; Item: TListItem;
Selected: Boolean);
begin
Timer1.Enabled := false;
Timer1.Enabled := true;
end;
procedure TfmTaskList.Localize;
begin
Self.Caption := _str('fmTaskList.Self.Caption');
btSaveChanges.Caption := _str('fmTaskList.btSaveChanges.Caption');
acShowOnlyOpen.Caption := _str('fmTaskList.acShowOnlyOpen.Caption');
acShowAllTasks.Caption := _str('fmTaskList.acShowAllTasks.Caption');
miView.Caption := _str('fmTaskList.miView.Caption');
end;
procedure TfmTaskList.Loaded;
begin
inherited;
Localize;
end;
procedure TfmTaskList.acShowOnlyOpenExecute(Sender: TObject);
begin
lvTasks.OnlyCompleted := true;
LoadData;
end;
procedure TfmTaskList.acShowOnlyOpenUpdate(Sender: TObject);
begin
acShowOnlyOpen.Checked := lvTasks.OnlyCompleted;
end;
procedure TfmTaskList.acShowAllTasksExecute(Sender: TObject);
begin
lvTasks.OnlyCompleted := false;
LoadData;
end;
procedure TfmTaskList.acShowAllTasksUpdate(Sender: TObject);
begin
acShowAllTasks.Checked := not lvTasks.OnlyCompleted;
end;
procedure TfmTaskList.lvTasksCustomDrawItem(Sender: TCustomListView;
Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
var
ATask: TTaskInstance;
begin
ATask := nil;
if Item <> nil then
ATask := lvTasks.TaskFromItem(Item);
if ATask <> nil then
begin
if ATask.Completed then
lvTasks.Canvas.Font.Color := clGray;
end;
DefaultDraw := true;
end;
procedure TfmTaskList.Timer1Timer(Sender: TObject);
begin
Timer1.Enabled := false;
if (not (csDestroying in ComponentState)) then
begin
{Save last active page name}
if TabControl1.TabIndex > -1 then
FLastActivePageName := TabControl1.Tabs[TabControl1.TabIndex];
BeginUpdateTabs;
try
frTaskView.Task := lvTasks.SelectedTask;
UpdateWorkflowDiagram;
UpdateAttachmentTabs;
{The following methods *must* be called in that order}
UpdateFixedTabs;
UpdateFieldsTab;
UpdateLogTab;
if lvTasks.SelectedTask <> nil then
begin
{Recover the active page}
TabControl1.TabIndex := TabControl1.Tabs.IndexOf(FLastActivePageName);
{for c := 0 to TabContro1.PageCount - 1 do
if CompareText(PageControl1.Pages[c].Caption, FLastActivePageName) = 0 then
begin
PageControl1.ActivePage := PageControl1.Pages[c];
break;
end;}
end;
btSaveChanges.Enabled := (lvTasks.SelectedTask <> nil) and not lvTasks.SelectedTask.Completed
and lvTasks.SelectedTask.CanUpdate(WorkflowStudio.UserManager.LoggedUserId);
finally
EndUpdateTabs;
end;
UpdateActivePage;
{if TabControl1.TabIndex > -1 then
FLastActivePageName := TabControl1.Tabs[TabControl1.TabIndex];}
end;
end;
procedure TfmTaskList.FormClose(Sender: TObject; var Action: TCloseAction);
begin
if FFreeOnClose then
Action := caFree;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -