diff options
| author | Tomas Bzatek <tbzatek@users.sourceforge.net> | 2009-12-13 20:20:55 +0100 |
|---|---|---|
| committer | Tomas Bzatek <tbzatek@users.sourceforge.net> | 2009-12-13 20:20:55 +0100 |
| commit | 4cdfa1d463b2f33436aea8f1ca8a4f75f5938ddf (patch) | |
| tree | 967c1f615854984b9b0dd4ffa8ca28f73b603f5a /UMain.pas | |
| parent | 0f7616a007edaa1d19c4672a4fd390c072b1eba6 (diff) | |
| download | tuxcmd-4cdfa1d463b2f33436aea8f1ca8a4f75f5938ddf.tar.xz | |
Consolidate ProcessProgressThread, make it more universal
Diffstat (limited to 'UMain.pas')
| -rw-r--r-- | UMain.pas | 181 |
1 files changed, 18 insertions, 163 deletions
@@ -1737,7 +1737,6 @@ var ListView: TGTKListView; s: string; i, Sel: integer; b: boolean; - tt: TDateTime; DataList, DirList: TList; SelectedFiles: TStringList; ANotebook: TEphyNotebook; @@ -1768,6 +1767,7 @@ var ListView: TGTKListView; OpenDirThread.ASelItem := ''; OpenDirThread.AAutoFallBack := AutoFallback; OpenDirThread.ADirList := DirList; + OpenDirThread.DialogsParentWindow := Self; if Plugin <> nil then begin DebugMsg(['Plugin <> nil']); OpenDirThread.APlugin := Plugin; @@ -1775,51 +1775,8 @@ var ListView: TGTKListView; OpenDirThread.AHighlightItem := HiliString2; end; DebugMsg(['(II) TFMain.ChangingDir: begin thread']); - tt := Now; - b := False; - FRemoteWait := TFRemoteWait.Create(Application); - FRemoteWait.ParentForm := FMain; - - // WARNING: For an unknown reason, there's a race condition in Kylix (FPC is fine). - // The thread must be started *after* the FRemoteWait is created. OpenDirThread.Resume; - repeat - Sleep(ConstInternalProgressTimer); -// DebugMsg([' (II) TFMain.ChangingDir: sleep.']); - Application.ProcessMessages; - if not b and (MilliSecondsBetween(tt, Now) >= ConstRemoteWaitDialogDelay) then begin - FRemoteWait.ShowModal; - b := True; - end; - if FRemoteWait.Cancelled then OpenDirThread.CancelIt := True; - if OpenDirThread.VFSAskQuestion_Display then begin - OpenDirThread.VFSAskQuestion_Display := False; - DebugMsg(['Main thread: displaying question dialog']); - if FRemoteWait.Visible then DialogParent := FRemoteWait.FWidget - else DialogParent := FWidget; - HandleVFSAskQuestionCallback(DialogParent, OpenDirThread.VFSAskQuestion_Message, OpenDirThread.VFSAskQuestion_Choices, OpenDirThread.VFSAskQuestion_Choice); - OpenDirThread.VFSCallbackEvent.SetEvent; - end; - if OpenDirThread.VFSAskPassword_Display then begin - OpenDirThread.VFSAskPassword_Display := False; - DebugMsg(['Main thread: displaying password prompt']); - if FRemoteWait.Visible then DialogParent := FRemoteWait.FWidget - else DialogParent := FWidget; - OpenDirThread.VFSAskPassword_Result := HandleVFSAskPasswordCallback(DialogParent, - OpenDirThread.VFSAskPassword_Message, - OpenDirThread.VFSAskPassword_default_user, - OpenDirThread.VFSAskPassword_default_domain, - OpenDirThread.VFSAskPassword_default_password, - OpenDirThread.VFSAskPassword_flags, - OpenDirThread.VFSAskPassword_username, - OpenDirThread.VFSAskPassword_password, - OpenDirThread.VFSAskPassword_anonymous, - OpenDirThread.VFSAskPassword_domain, - OpenDirThread.VFSAskPassword_password_save); - OpenDirThread.VFSCallbackEvent.SetEvent; - end; - until OpenDirThread.Finished; - FRemoteWait.Free; + ProcessThreadEvents(OpenDirThread); DebugMsg(['(II) TFMain.ChangingDir: end thread, running time = ', OpenDirThread.RunningTime, 'ms']); except on E: Exception do DebugMsg(['*** Exception raised in TFMain.ChangingDir:DoThread (', E.ClassName, '): ', E.Message]); @@ -2447,7 +2404,6 @@ var i, j : integer; s, s2, smsg, NextItem1, NextItem2: string; Data: PDataItem; AWorkingThread: TWorkerThread; - AFProgress: TFProgress; begin try InternalLock; @@ -2489,40 +2445,16 @@ begin FindNextSelected(ListView, DataList, NextItem1, NextItem2); AWorkingThread := TWorkerThread.Create; DebugMsg(['TFMain.DoDelete: Creating thread...']); - AFProgress := TFProgress.Create(Self); try - AFProgress.SetNumBars(False); -// AFProgress.ProgressBar.Max := 100; - AFProgress.ProgressBar.Value := 0; - AWorkingThread.ProgressForm := AFProgress; + AWorkingThread.DialogsParentWindow := Self; if Assigned(ListView.Selected) then AWorkingThread.SelectedItem := ListView.Selected.Data; AWorkingThread.Engine := Engine; AWorkingThread.LeftPanel := LeftPanel; AWorkingThread.DataList := DataList; AWorkingThread.WorkerProcedure := DeleteFilesWorker; AWorkingThread.Resume; - -// AFProgress.Run; - - AFProgress.ParentForm := FMain; - AFProgress.ShowModal; - ProcessProgressThread(AWorkingThread, AFProgress); - AFProgress.Close; - - -{ FProgress.ShowModal; - Application.ProcessMessages; - repeat - Sleep(100); - Application.ProcessMessages; -// FProgress.Run; - until False; } - -{ FProgress.ShowModal; - DeleteFiles(FProgress, ListView, Engine, LeftPanel, DataList); } - + ProcessThreadEvents(AWorkingThread); finally - AFProgress.Free; AWorkingThread.Free; DebugMsg(['TFMain.DoDelete: Freeing thread...']); end; @@ -2610,7 +2542,6 @@ var i: integer; SelCount: longint; NewPath, NewPathx, SelSingle, NextItem1, NextItem2: string; AWorkingThread: TWorkerThread; - AFProgress: TFProgress; OppositeEngine: TPanelEngine; p: PChar; BypassSelAll: boolean; @@ -2683,13 +2614,8 @@ begin AWorkingThread := TWorkerThread.Create; DebugMsg(['TFMain.DoCopyMove: Creating thread...']); - AFProgress := TFProgress.Create(Self); try - if CopyMode then AFProgress.Label1.Caption := LANGCopySC - else AFProgress.Label1.Caption := LANGMoveRenameSC; - AFProgress.SetNumBars(True); - AFProgress.ProgressBar.Value := 0; - AWorkingThread.ProgressForm := AFProgress; + AWorkingThread.DialogsParentWindow := Self; if Assigned(ListView.Selected) then AWorkingThread.SelectedItem := ListView.Selected.Data; // Determine target engine according to absolute/relative path if (NewPath[1] = '/') or (NewPath[1] = '~') then AWorkingThread.DestEngine := OppositeEngine @@ -2715,11 +2641,6 @@ begin end; end; } - if AWorkingThread = nil then begin // Something went terribly wrong - Application.MessageBox(LANGCannotDetermineDestinationEngine, [mbOK], mbError, mbOK, mbOK); - Exit; - end; - // Strip the engine prefix // if Pos(ConstPathDelim, NewPath) > 0 then Delete(NewPath, 1, Pos(ConstPathDelim, NewPath)); @@ -2732,22 +2653,11 @@ begin AWorkingThread.ParamString1 := NewPath; AWorkingThread.ParamDataItem1 := nil; - AFProgress.ParentForm := FMain; - AFProgress.ShowModal; - Application.ProcessMessages; - DebugMsg(['*** Copy: AWorkingThread.Resume']); -// DebugMsg(['*** Copy: xg_thread_supported = ', xg_thread_supported()]); AWorkingThread.Resume; -// AWorkingThread.WorkerProcedure(AWorkingThread); DebugMsg(['*** Copy: AWorkingThread.Resumed.']); - ProcessProgressThread(AWorkingThread, AFProgress); -// DebugMsg(['***************************x1']); - AFProgress.Close; -// Beep; + ProcessThreadEvents(AWorkingThread); finally -// DebugMsg(['** ddddddddddddddd ???']); - AFProgress.Free; DebugMsg(['TFMain.DoCopyMove: Freeing thread...']); AWorkingThread.Free; end; @@ -2944,7 +2854,6 @@ var AListView: TGTKListView; DataList: TList; Engine: TPanelEngine; AWorkingThread: TWorkerThread; - AFProgress: TFProgress; i: integer; s1, s2: string; begin @@ -2970,12 +2879,8 @@ begin begin AWorkingThread := TWorkerThread.Create; DebugMsg(['TFMain.ListViewEdited: Creating thread...']); - AFProgress := TFProgress.Create(Self); try - AFProgress.SetNumBars(True); - AFProgress.ProgressBar.Value := 0; - AFProgress.Label1.Caption := LANGMoveRenameSC; - AWorkingThread.ProgressForm := AFProgress; + AWorkingThread.DialogsParentWindow := Self; if Assigned(AListView.Selected) then AWorkingThread.SelectedItem := AListView.Selected.Data; AWorkingThread.SrcEngine := Engine; AWorkingThread.DestEngine := Engine; @@ -2987,13 +2892,8 @@ begin AWorkingThread.ParamString1 := UTF8ToStr(NewText); AWorkingThread.ParamDataItem1 := InplaceEditItem.Data; AWorkingThread.Resume; -// AWorkingThread.WorkerProcedure(AWorkingThread); - AFProgress.ParentForm := FMain; - AFProgress.ShowModal; - ProcessProgressThread(AWorkingThread, AFProgress); - AFProgress.Close; + ProcessThreadEvents(AWorkingThread); finally - AFProgress.Free; DebugMsg(['TFMain.ListViewEdited: Freeing thread...']); AWorkingThread.Free; end; @@ -3300,7 +3200,6 @@ var LeftPanel, HasInitialCRC: boolean; TargetCRC: LongWord; TargetSize: Int64; AWorkingThread: TWorkerThread; - AFProgress: TFProgress; begin try InternalLock; @@ -3341,8 +3240,8 @@ begin AWorkingThread := TWorkerThread.Create; DebugMsg(['TFMain.miMergeFilesClick: Creating thread...']); - AFProgress := TFProgress.Create(Self); try + AWorkingThread.DialogsParentWindow := Self; AWorkingThread.ParamString1 := FilePath; AWorkingThread.ParamString2 := IncludeTrailingPathDelimiter(Engine.Path) + PDataItem(AListView.Selected.Data)^.FName; HasInitialCRC := CRCGetInfo(AWorkingThread.ParamString2, Engine, TargetName, TargetCRC, TargetSize); @@ -3350,21 +3249,13 @@ begin AWorkingThread.ParamBool1 := HasInitialCRC; AWorkingThread.ParamLongWord1 := TargetCRC; AWorkingThread.ParamInt64 := TargetSize; - AFProgress.SetNumBars(HasInitialCRC); - AFProgress.ProgressBar.Value := 0; - AFProgress.Label1.Caption := LANGMergeSC; - AWorkingThread.ProgressForm := AFProgress; AWorkingThread.Engine := Engine; AWorkingThread.LeftPanel := LeftPanel; AWorkingThread.WorkerProcedure := MergeFilesWorker; AWorkingThread.Resume; - AFProgress.ParentForm := FMain; - AFProgress.ShowModal; - ProcessProgressThread(AWorkingThread, AFProgress); - AFProgress.Close; + ProcessThreadEvents(AWorkingThread); s := AWorkingThread.ParamString3; finally - AFProgress.Free; DebugMsg(['TFMain.miMergeFilesClick: Freeing thread...']); AWorkingThread.Free; end; @@ -3387,7 +3278,6 @@ var LeftPanel: boolean; MaxSize: Int64; i: integer; AWorkingThread: TWorkerThread; - AFProgress: TFProgress; begin try InternalLock; @@ -3436,26 +3326,18 @@ begin AWorkingThread := TWorkerThread.Create; DebugMsg(['TFMain.miSplitFileClick: Creating thread...']); - AFProgress := TFProgress.Create(Self); try + AWorkingThread.DialogsParentWindow := Self; AWorkingThread.ParamString1 := IncludeTrailingPathDelimiter(Engine.Path) + PDataItem(AListView.Selected.Data)^.FName; AWorkingThread.ParamString2 := FilePath; AWorkingThread.ParamBool1 := DeleteTarget; AWorkingThread.ParamInt64 := MaxSize; - AFProgress.SetNumBars(MaxSize > 0); - AFProgress.ProgressBar.Value := 0; - AFProgress.Label1.Caption := LANGSplitSC; - AWorkingThread.ProgressForm := AFProgress; AWorkingThread.Engine := Engine; AWorkingThread.LeftPanel := LeftPanel; AWorkingThread.WorkerProcedure := SplitFilesWorker; AWorkingThread.Resume; - AFProgress.ParentForm := FMain; - AFProgress.ShowModal; - ProcessProgressThread(AWorkingThread, AFProgress); - AFProgress.Close; + ProcessThreadEvents(AWorkingThread); finally - AFProgress.Free; DebugMsg(['TFMain.miSplitFileClick: Freeing thread...']); AWorkingThread.Free; end; @@ -4044,7 +3926,6 @@ var LeftPanel: boolean; Stat: PDataItem; UsrManager: TUserManager; AWorkingThread: TWorkerThread; - AFProgress: TFProgress; begin try InternalLock; @@ -4096,12 +3977,8 @@ begin FindNextSelected(AListView, DataList, NextItem1, NextItem2); AWorkingThread := TWorkerThread.Create; - AFProgress := TFProgress.Create(Self); try - AFProgress.SetNumBars(False); - AFProgress.ProgressBar.Value := 0; - AFProgress.Label1.Caption := LANGChmodProgress; - AWorkingThread.ProgressForm := AFProgress; + AWorkingThread.DialogsParentWindow := Self; if Assigned(AListView.Selected) then AWorkingThread.SelectedItem := AListView.Selected.Data; AWorkingThread.ParamBool1 := FChmod.RecursiveCheckButton.Checked; AWorkingThread.ParamInt1 := FChmod.RecursiveOptionMenu.ItemIndex; @@ -4111,12 +3988,8 @@ begin AWorkingThread.DataList := DataList; AWorkingThread.WorkerProcedure := ChmodFilesWorker; AWorkingThread.Resume; - AFProgress.ParentForm := FMain; - if (SelCount > 1) or FChmod.RecursiveCheckButton.Checked then AFProgress.ShowModal; - ProcessProgressThread(AWorkingThread, AFProgress); - AFProgress.Close; + ProcessThreadEvents(AWorkingThread); finally - AFProgress.Free; AWorkingThread.Free; end; ChangingDir(LeftPanel, Engine.Path, NextItem1, NextItem2); @@ -4142,7 +4015,6 @@ var LeftPanel: boolean; AFile, NextItem1, NextItem2: string; Stat: PDataItem; AWorkingThread: TWorkerThread; - AFProgress: TFProgress; begin try InternalLock; @@ -4189,12 +4061,8 @@ begin FindNextSelected(AListView, DataList, NextItem1, NextItem2); AWorkingThread := TWorkerThread.Create; - AFProgress := TFProgress.Create(Self); try - AFProgress.SetNumBars(False); - AFProgress.ProgressBar.Value := 0; - AFProgress.Label1.Caption := LANGChownProgress; - AWorkingThread.ProgressForm := AFProgress; + AWorkingThread.DialogsParentWindow := Self; if Assigned(AListView.Selected) then AWorkingThread.SelectedItem := AListView.Selected.Data; AWorkingThread.ParamBool1 := FChown.RecursiveCheckButton.Checked; AWorkingThread.ParamCardinal1 := FChown.LastUID; @@ -4204,12 +4072,8 @@ begin AWorkingThread.DataList := DataList; AWorkingThread.WorkerProcedure := ChownFilesWorker; AWorkingThread.Resume; - AFProgress.ParentForm := FMain; - if (SelCount > 1) or FChown.RecursiveCheckButton.Checked then AFProgress.ShowModal; - ProcessProgressThread(AWorkingThread, AFProgress); - AFProgress.Close; + ProcessThreadEvents(AWorkingThread); finally - AFProgress.Free; AWorkingThread.Free; end; @@ -6565,7 +6429,6 @@ end; function TFMain.ExtractFromArchive(var NewPath: string; Engine: TPanelEngine; const FilePath: string; ExtractAll: boolean): boolean; var s: string; AWorkingThread: TWorkerThread; - AFProgress: TFProgress; tmp: PChar; LocalEngine: TLocalTreeEngine; DataList: TList; @@ -6588,15 +6451,11 @@ begin else DataList := RightPanelData; LocalEngine := TLocalTreeEngine.Create; - AFProgress := TFProgress.Create(Self); AWorkingThread := TWorkerThread.Create; try DebugMsg(['TFMain.ExtractFromArchive: Creating thread...']); - AFProgress.Label1.Caption := LANGCopySC; - AFProgress.SetNumBars(True); - AFProgress.ProgressBar.Value := 0; - AWorkingThread.ProgressForm := AFProgress; LocalEngine.SetPath(tmp); + AWorkingThread.DialogsParentWindow := Self; AWorkingThread.ExtractFromVFSMode := True; AWorkingThread.DestEngine := LocalEngine; AWorkingThread.SrcEngine := Engine; @@ -6613,15 +6472,11 @@ begin DebugMsg(['*** Copy: AWorkingThread.Resume']); AWorkingThread.Resume; DebugMsg(['*** Copy: AWorkingThread.Resumed.']); - AFProgress.ParentForm := FMain; - AFProgress.ShowModal; - ProcessProgressThread(AWorkingThread, AFProgress); - AFProgress.Close; + ProcessThreadEvents(AWorkingThread); Result := (not AWorkingThread.FCancelled) and (not AWorkingThread.ErrorHappened); finally DebugMsg(['TFMain.ExtractFromArchive: Freeing thread...']); LocalEngine.Free; - AFProgress.Free; AWorkingThread.Free; end; |
