UPD: Update operations viewer and panel when operations moved.

This commit is contained in:
cobines 2012-03-21 06:35:47 +00:00
commit a7534d3d7e
3 changed files with 38 additions and 23 deletions

View file

@ -120,7 +120,7 @@ type
function GetFocusedItem: TViewBaseItem;
procedure SetFocusItem(AOperationHandle: TOperationHandle);
procedure SetNewQueue(Item: TViewOperationItem; NewQueue: TOperationsManagerQueueIdentifier);
procedure UpdateView(Operation: TFileSourceOperation; Event: TOperationManagerEvent);
procedure UpdateView(Item: TOperationsManagerItem; Event: TOperationManagerEvent);
procedure UpdateCounters;
procedure UpdateControls;
procedure UpdateItems;
@ -379,7 +379,8 @@ begin
UpdateControls;
UpdateItems;
OperationsManager.AddEventsListener([omevOperationAdded, omevOperationRemoved],
OperationsManager.AddEventsListener(
[omevOperationAdded, omevOperationRemoved, omevOperationMoved],
@UpdateView);
end;
@ -421,7 +422,8 @@ end;
procedure TfrmViewOperations.FormDestroy(Sender: TObject);
begin
OperationsManager.RemoveEventsListener([omevOperationAdded, omevOperationRemoved],
OperationsManager.RemoveEventsListener(
[omevOperationAdded, omevOperationRemoved, omevOperationMoved],
@UpdateView);
end;
@ -852,8 +854,7 @@ begin
end;
end;
procedure TfrmViewOperations.UpdateView(Operation: TFileSourceOperation;
Event: TOperationManagerEvent);
procedure TfrmViewOperations.UpdateView(Item: TOperationsManagerItem; Event: TOperationManagerEvent);
begin
UpdateCounters;
UpdateItems;

View file

@ -113,12 +113,11 @@ type
TOperationManagerEvent =
(omevOperationAdded,
omevOperationRemoved,
omevOperationStarted,
omevOperationFinished);
omevOperationMoved);
TOperationManagerEvents = set of TOperationManagerEvent;
TOperationManagerEventNotify = procedure(Operation: TFileSourceOperation;
TOperationManagerEventNotify = procedure(Item: TOperationsManagerItem;
Event: TOperationManagerEvent) of object;
{en
@ -157,7 +156,7 @@ type
{en
Notifies all listeners that an event has occurred (or multiple events).
}
procedure NotifyEvents(Operation: TFileSourceOperation; Events: TOperationManagerEvents);
procedure NotifyEvents(Item: TOperationsManagerItem; Events: TOperationManagerEvents);
public
constructor Create;
@ -257,6 +256,7 @@ begin
begin
FQueue := NewQueue;
NewQueue.Insert(Self, InsertAtFront);
OperationsManager.NotifyEvents(Self, [omevOperationMoved]);
end;
end;
end;
@ -340,7 +340,10 @@ begin
if FromIndex >= 0 then
begin
if not Assigned(TargetItem) then
FList.Move(FromIndex, FList.Count - 1)
begin
FList.Move(FromIndex, FList.Count - 1);
OperationsManager.NotifyEvents(SourceItem, [omevOperationMoved]);
end
else
begin
ToIndex := GetIndexByHandle(TargetItem.Handle);
@ -357,6 +360,7 @@ begin
Inc(ToIndex);
end;
FList.Move(FromIndex, ToIndex);
OperationsManager.NotifyEvents(SourceItem, [omevOperationMoved]);
end;
end;
end;
@ -475,7 +479,7 @@ begin
Item.SetQueue(GetOrCreateQueue(QueueIdentifier), InsertAtFrontOfQueue);
NotifyEvents(Operation, [omevOperationAdded]);
NotifyEvents(Item, [omevOperationAdded]);
Thread.Resume;
except
@ -627,8 +631,6 @@ begin
Item := TOperationsManagerItem(Queue.Items[OperIndex]);
if Item.Thread = Thread then
begin
NotifyEvents(Item.Operation, [omevOperationFinished]);
Queue.Remove(Item);
if Queue.Count = 0 then
@ -637,7 +639,7 @@ begin
Queue.Free;
end;
NotifyEvents(Item.Operation, [omevOperationRemoved]);
NotifyEvents(Item, [omevOperationRemoved]);
// Here the operation should not be used anymore
// (by the thread and by any operations viewer).
@ -652,7 +654,6 @@ end;
procedure TOperationsManager.StartOperation(Item: TOperationsManagerItem);
begin
Item.Operation.Start;
NotifyEvents(Item.Operation, [omevOperationStarted]);
end;
procedure TOperationsManager.CancelAll;
@ -802,10 +803,9 @@ begin
end;
end;
procedure TOperationsManager.NotifyEvents(Operation: TFileSourceOperation;
Events: TOperationManagerEvents);
procedure TOperationsManager.NotifyEvents(Item: TOperationsManagerItem; Events: TOperationManagerEvents);
var
Item: PEventsListItem;
EventItem: PEventsListItem;
Event: TOperationManagerEvent;
i: Integer;
begin
@ -816,8 +816,8 @@ begin
// Call each listener function.
for i := 0 to FEventsListeners[Event].Count - 1 do
begin
Item := PEventsListItem(FEventsListeners[Event].Items[i]);
Item^.EventFunction(Operation, Event);
EventItem := PEventsListItem(FEventsListeners[Event].Items[i]);
EventItem^.EventFunction(Item, Event);
end;
end;
end;

View file

@ -28,7 +28,7 @@ interface
uses
Classes, SysUtils, Controls, Forms, Graphics,
uFileSourceOperation;
uFileSourceOperation, uOperationsManager;
type
@ -43,6 +43,7 @@ type
function GetProgressString(Progress: Double): String;
function GetOperationDescription(Operation: TFileSourceOperation): String;
procedure GetStateColor(State: TFileSourceOperationState; out ColorFrom, ColorTo: TColor);
procedure OperationsManagerEvent(Item: TOperationsManagerItem; Event: TOperationManagerEvent);
procedure StartPauseOperation(Operation: TFileSourceOperation);
procedure UpdateItems;
public
@ -60,7 +61,6 @@ uses
LCLIntf, LCLType, LCLProc, Math,
fViewOperations, fFileOpDlg,
uDCUtils, uLng,
uOperationsManager,
uFileSourceOperationTypes;
const
@ -157,6 +157,12 @@ begin
end;
end;
procedure TOperationsPanel.OperationsManagerEvent(Item: TOperationsManagerItem; Event: TOperationManagerEvent);
begin
UpdateItems;
UpdateView;
end;
procedure TOperationsPanel.UpdateItems;
var
OpManItem: TOperationsManagerItem;
@ -236,10 +242,18 @@ begin
inherited Create(AOwner);
FOperations := TFPList.Create;
FQueues := TFPList.Create;
OperationsManager.AddEventsListener(
[omevOperationAdded, omevOperationRemoved, omevOperationMoved],
@OperationsManagerEvent);
end;
destructor TOperationsPanel.Destroy;
begin
OperationsManager.RemoveEventsListener(
[omevOperationAdded, omevOperationRemoved, omevOperationMoved],
@OperationsManagerEvent);
inherited Destroy;
FOperations.Free;
FQueues.Free;
@ -434,7 +448,7 @@ end;
procedure TOperationsPanel.UpdateView;
begin
UpdateItems;
UpdateItems; //
Invalidate;
end;