From 3ef7eb18fbf36abadc254a65c742260083568ea1 Mon Sep 17 00:00:00 2001 From: bart <9132501-flyingsheep@users.noreply.gitlab.com> Date: Thu, 10 Mar 2016 17:22:11 +0000 Subject: [PATCH] =?UTF-8?q?PoChecker:=20Add=20function=20to=20check=20for?= =?UTF-8?q?=20troublesome=20po-files.=20Patch=20by=20P=C3=A9ter=20G=C3=A1b?= =?UTF-8?q?or.=20Issue=20#0027093.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: trunk@51904 - --- components/pochecker/pocheckerconsts.pas | 6 ++ components/pochecker/pocheckermain.lfm | 93 ++++++++++++++---------- components/pochecker/pocheckermain.pp | 61 ++++++++++++++++ 3 files changed, 120 insertions(+), 40 deletions(-) diff --git a/components/pochecker/pocheckerconsts.pas b/components/pochecker/pocheckerconsts.pas index ba16ddfdd3..13db6dd694 100644 --- a/components/pochecker/pocheckerconsts.pas +++ b/components/pochecker/pocheckerconsts.pas @@ -97,6 +97,12 @@ resourcestring sPercUntranslated = '%s: %4.1f%% untranslated strings.'; sPercFuzzy = '%s: %4.1f%% fuzzy strings.'; + sFindTroublesomeFiles = 'Find troublesome files'; + sNoTroublesomePoFilesFound = 'No troublesome .po files found'; + sTheFollowingMasterPoFileSAddedToTheList = 'The following %s master .po file(s) added to the list:'; + sTheFollowingOrphanedPoFileSFound = 'The following %s orphaned .po file(s) found:'; + sTroublesomeFiles = 'Troublesome files'; + const mrOpenEditorFile = mrNone+100; diff --git a/components/pochecker/pocheckermain.lfm b/components/pochecker/pocheckermain.lfm index d3614d426b..8fd21faa75 100644 --- a/components/pochecker/pocheckermain.lfm +++ b/components/pochecker/pocheckermain.lfm @@ -21,7 +21,7 @@ object PoCheckerForm: TPoCheckerForm AnchorSideTop.Side = asrBottom Left = 201 Height = 118 - Top = 29 + Top = 27 Width = 436 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 6 @@ -34,7 +34,7 @@ object PoCheckerForm: TPoCheckerForm 'sCheckForDuplicateUntranslatedValues' 'sCheckStatistics' ) - ItemHeight = 17 + ItemHeight = 19 TabOrder = 3 Data = { 06000000000000000000 @@ -44,9 +44,9 @@ object PoCheckerForm: TPoCheckerForm AnchorSideLeft.Control = OpenBtn AnchorSideLeft.Side = asrBottom Left = 201 - Height = 15 + Height = 13 Top = 8 - Width = 93 + Width = 82 BorderSpacing.Left = 9 Caption = 'Select test types' Font.Style = [fsBold] @@ -61,7 +61,7 @@ object PoCheckerForm: TPoCheckerForm AnchorSideBottom.Control = ScanDirBtn Left = 8 Height = 50 - Top = 29 + Top = 27 Width = 184 BorderSpacing.Bottom = 10 Caption = '&Open a po-file' @@ -111,7 +111,7 @@ object PoCheckerForm: TPoCheckerForm AnchorSideRight.Side = asrBottom Left = 8 Height = 50 - Top = 149 + Top = 147 Width = 184 BorderSpacing.Top = 5 Caption = '&Run Selected Tests' @@ -122,9 +122,9 @@ object PoCheckerForm: TPoCheckerForm end object NoErrLabel: TLabel Left = 8 - Height = 25 - Top = 451 - Width = 146 + Height = 23 + Top = 453 + Width = 145 Anchors = [akLeft, akBottom] Caption = 'No errors found' Font.Color = clGreen @@ -139,8 +139,8 @@ object PoCheckerForm: TPoCheckerForm AnchorSideTop.Side = asrBottom Left = 201 Height = 25 - Top = 153 - Width = 117 + Top = 151 + Width = 99 AutoSize = True BorderSpacing.Top = 6 Caption = 'Select Basic Tests' @@ -152,10 +152,10 @@ object PoCheckerForm: TPoCheckerForm AnchorSideLeft.Control = SelectBasicTestsBtn AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = SelectBasicTestsBtn - Left = 322 + Left = 304 Height = 25 - Top = 153 - Width = 104 + Top = 151 + Width = 85 AutoSize = True BorderSpacing.Left = 4 Caption = 'Select All Tests' @@ -167,10 +167,10 @@ object PoCheckerForm: TPoCheckerForm AnchorSideLeft.Control = SelectAllTestsBtn AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = SelectAllTestsBtn - Left = 430 + Left = 393 Height = 25 - Top = 153 - Width = 118 + Top = 151 + Width = 97 AutoSize = True BorderSpacing.Left = 4 Caption = 'Unselect All Tests' @@ -183,17 +183,17 @@ object PoCheckerForm: TPoCheckerForm AnchorSideTop.Control = SelectBasicTestsBtn AnchorSideTop.Side = asrBottom Left = 201 - Height = 19 - Top = 184 - Width = 152 + Height = 22 + Top = 182 + Width = 147 BorderSpacing.Top = 6 Caption = 'sIgnoreFuzzyTranslations' TabOrder = 7 end object StatusBar: TStatusBar Left = 0 - Height = 23 - Top = 490 + Height = 17 + Top = 496 Width = 644 Panels = <> end @@ -206,7 +206,7 @@ object PoCheckerForm: TPoCheckerForm AnchorSideBottom.Control = RunBtn Left = 8 Height = 50 - Top = 89 + Top = 87 Width = 184 BorderSpacing.Top = 5 BorderSpacing.Bottom = 10 @@ -257,8 +257,8 @@ object PoCheckerForm: TPoCheckerForm AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = NoErrLabel Left = 8 - Height = 185 - Top = 208 + Height = 186 + Top = 209 Width = 629 Anchors = [akTop, akLeft, akRight, akBottom] BorderSpacing.Top = 5 @@ -268,9 +268,11 @@ object PoCheckerForm: TPoCheckerForm OnDrawItem = MasterPoListBoxDrawItem OnResize = MasterPoListBoxResize OnSelectionChange = MasterPoListBoxSelectionChange + ScrollWidth = 627 Sorted = True Style = lbOwnerDrawFixed TabOrder = 8 + TopIndex = -1 end object LangFilter: TComboBox AnchorSideLeft.Control = MasterPoListBox @@ -278,12 +280,12 @@ object PoCheckerForm: TPoCheckerForm AnchorSideRight.Control = TestListBox AnchorSideRight.Side = asrBottom Left = 8 - Height = 23 - Top = 400 + Height = 25 + Top = 399 Width = 629 Anchors = [akLeft, akRight] BorderSpacing.Top = 5 - ItemHeight = 15 + ItemHeight = 0 ItemIndex = 0 Items.Strings = ( 'All languages' @@ -323,8 +325,8 @@ object PoCheckerForm: TPoCheckerForm AnchorSideBottom.Control = NoErrLabel Left = 8 Height = 25 - Top = 426 - Width = 53 + Top = 428 + Width = 37 Anchors = [akLeft, akBottom] AutoSize = True BorderSpacing.Top = 10 @@ -336,10 +338,10 @@ object PoCheckerForm: TPoCheckerForm AnchorSideLeft.Control = SelectAllMasterFilesBtn AnchorSideLeft.Side = asrBottom AnchorSideBottom.Control = NoErrLabel - Left = 167 + Left = 136 Height = 25 - Top = 426 - Width = 110 + Top = 428 + Width = 93 Anchors = [akLeft, akBottom] AutoSize = True BorderSpacing.Left = 5 @@ -352,10 +354,10 @@ object PoCheckerForm: TPoCheckerForm AnchorSideLeft.Control = ClearMasterFilesBtn AnchorSideLeft.Side = asrBottom AnchorSideBottom.Control = NoErrLabel - Left = 66 + Left = 50 Height = 25 - Top = 426 - Width = 96 + Top = 428 + Width = 81 Anchors = [akLeft, akBottom] AutoSize = True BorderSpacing.Left = 5 @@ -363,15 +365,26 @@ object PoCheckerForm: TPoCheckerForm OnClick = SelectAllMasterFilesBtnClick TabOrder = 11 end + object FindTroublesomeFilesBtn: TButton + Left = 514 + Height = 25 + Top = 428 + Width = 121 + Anchors = [akRight, akBottom] + AutoSize = True + Caption = 'Find troublesome files' + OnClick = FindTroublesomeFilesBtnClick + TabOrder = 14 + end object OpenDialog: TOpenDialog Filter = 'po-files (*.po)|*.po|all files|*' Options = [ofFileMustExist, ofEnableSizing, ofViewDetail] - left = 480 - top = 432 + left = 245 + top = 435 end object SelectDirectoryDialog: TSelectDirectoryDialog Options = [ofEnableSizing] - left = 584 - top = 432 + left = 355 + top = 435 end end diff --git a/components/pochecker/pocheckermain.pp b/components/pochecker/pocheckermain.pp index f29e78bbab..76aaf3a2b6 100644 --- a/components/pochecker/pocheckermain.pp +++ b/components/pochecker/pocheckermain.pp @@ -38,6 +38,7 @@ type { TPoCheckerForm } TPoCheckerForm = class(TForm) + FindTroublesomeFilesBtn: TButton; SelectAllMasterFilesBtn: TButton; SelectDirectoryDialog: TSelectDirectoryDialog; UnselectAllMasterFilesBtn: TButton; @@ -53,6 +54,7 @@ type procedure MasterPoListBoxDrawItem(Control: TWinControl; Index: Integer; ARect: TRect; State: TOwnerDrawState); procedure MasterPoListBoxSelectionChange(Sender: TObject; User: boolean); + procedure FindTroublesomeFilesBtnClick(Sender: TObject); procedure ScanDirBtnClick(Sender: TObject); procedure SelectAllMasterFilesBtnClick(Sender: TObject); procedure UnselectAllMasterFilesBtnClick(Sender: TObject); @@ -299,6 +301,63 @@ begin SelectAllMasterFilesBtn.Enabled := (MasterPoListBox.Items.Count > 0); end; +procedure TPoCheckerForm.FindTroublesomeFilesBtnClick(Sender: TObject); +var + SL,FL,OL:TStringList; + S, Mn: String; + I: Integer; + Cur: TCursor; +begin + Cur := Screen.Cursor; + Screen.Cursor := crHourGlass; + try + StatusBar.SimpleText := sScanningInProgress; + FL := TStringList.Create; + OL := TStringList.Create; + SL := FindAllFiles(SelectDirectoryDialog.FileName, '*.po',True); + for I := 0 to SL.Count - 1 do // we must check master .po files in a separate round first + begin + S := SL[I]; + if IsMasterPOName(S) and (MasterPoListBox.Items.IndexOf(S) = -1) + then + begin + AddToMasterPoList(S); + FL.Add(S); + end; + end; + for I := 0 to SL.Count - 1 do + begin + S := SL[I]; + if not IsMasterPOName(S) + then + begin + Mn:=ExtractMasterNameFromChildName(S); + if (Mn <> '') and (MasterPoListBox.Items.IndexOf(Mn) = -1) + then + OL.Add(S); + end; + end; + if(OL.Count = 0) and (FL.Count = 0) + then + S := sNoTroublesomePoFilesFound + else + begin + S:=''; + if (FL.Count > 0) then S := Format(sTheFollowingMasterPoFileSAddedToTheList, [IntToStr(FL.Count)]) + LineEnding + FL.Text; + if S <> '' then S := S + LineEnding + LineEnding; + if (OL.Count > 0) then S := S + Format(sTheFollowingOrphanedPoFileSFound, [IntToStr(OL.Count)]) + LineEnding + OL.Text; + end; + MemoDlg(sTroublesomeFiles, S); + UpdateGUI(MasterPoListBox.SelCount > 0); + finally + StatusBar.SimpleText := ''; + FL.Free; + OL.Free; + SL.Free; + end; + Screen.Cursor := Cur; +end; + procedure TPoCheckerForm.ScanDirBtnClick(Sender: TObject); begin if SelectDirectoryDialog.Execute then @@ -604,6 +663,7 @@ begin end; ClearMasterFilesBtn.Enabled := (MasterPoListBox.Items.Count > 0); SelectAllMasterFilesBtn.Enabled := (MasterPoListBox.Items.Count > 0); + FindTroublesomeFilesBtn.Enabled := (SelectDirectoryDialog.FileName <> ''); end; function TPoCheckerForm.GetSelectedMasterFiles: TStringList; @@ -928,6 +988,7 @@ begin SelectAllTestsBtn.Caption := sSelectAllTests; SelectBasicTestsBtn.Caption := sSelectBasicTests; UnselectAllTestsBtn.Caption := sUnselectAllTests; + FindTroublesomeFilesBtn.Caption:= sFindTroublesomeFiles; end;