PoChecker:

- Add capability to scan a folder for po-files.
- Add files to a listbox.
- Add filter for language to listbox with translated po-files.
- Save and restore contents of the file lists.
- Regenerate language files.

git-svn-id: trunk@46394 -
This commit is contained in:
bart 2014-10-01 19:06:15 +00:00
parent d6f255f9f6
commit 4f735c239c
15 changed files with 805 additions and 54 deletions

View File

@ -17,6 +17,10 @@ msgstr ""
msgid "PO File Checker"
msgstr "PO File Checker"
#: pocheckerconsts.salllanguages
msgid "All Languages"
msgstr ""
#: pocheckerconsts.scannotfindmaster
msgid ""
"Cannot find master po file:\n"
@ -53,6 +57,10 @@ msgstr "Zkontrolovat počet položek"
msgid "Check percentage of (un)translated and fuzzy strings"
msgstr "Spočítat procentuální zastoupení (ne)přeložených a nepřesných řetězců"
#: pocheckerconsts.sclearlistbox
msgid "Clear"
msgstr ""
#: pocheckerconsts.scopycaption
msgid "Copy to clipboard"
msgstr "Kopírovat do schránky"
@ -242,6 +250,10 @@ msgstr ""
"Chyba ukládání souboru:\n"
"%s\n"
#: pocheckerconsts.sscandir
msgid "Scan a folder"
msgstr ""
#: pocheckerconsts.sselectalltests
msgid "Select &All"
msgstr ""
@ -296,6 +308,10 @@ msgstr "Statistiky překladu pro:"
msgid "&Unselect All"
msgstr ""
#: pocheckerconsts.sunselectlistbox
msgid "Unselect"
msgstr ""
#: pocheckerconsts.suntranslated
msgid "Untranslated"
msgstr ""

View File

@ -14,6 +14,10 @@ msgstr ""
msgid "PO File Checker"
msgstr "po-Datei-Prüfer"
#: pocheckerconsts.salllanguages
msgid "All Languages"
msgstr ""
#: pocheckerconsts.scannotfindmaster
msgid ""
"Cannot find master po file:\n"
@ -50,6 +54,10 @@ msgstr "Überprüfung der Anzahl der Einträge"
msgid "Check percentage of (un)translated and fuzzy strings"
msgstr "Zeige Prozente (nicht) übersetzter und ungeklärter Zeichenketten"
#: pocheckerconsts.sclearlistbox
msgid "Clear"
msgstr ""
#: pocheckerconsts.scopycaption
msgid "Copy to clipboard"
msgstr "In Zwischenablage kopieren"
@ -236,6 +244,10 @@ msgstr ""
"Fehler beim Speichern von Datei:\n"
"%s\n"
#: pocheckerconsts.sscandir
msgid "Scan a folder"
msgstr ""
#: pocheckerconsts.sselectalltests
msgid "Select &All"
msgstr "&Alle auswählen"
@ -316,6 +328,10 @@ msgstr "Übersetzungsstatistikpro Sprache:"
msgid "&Unselect All"
msgstr "Alle abwählen"
#: pocheckerconsts.sunselectlistbox
msgid "Unselect"
msgstr ""
#: pocheckerconsts.suntranslated
msgid "Untranslated"
msgstr "Nicht übersetzt"

View File

@ -13,6 +13,10 @@ msgstr ""
msgid "PO File Checker"
msgstr "Comprobador de archivos de PO"
#: pocheckerconsts.salllanguages
msgid "All Languages"
msgstr ""
#: pocheckerconsts.scannotfindmaster
msgid ""
"Cannot find master po file:\n"
@ -49,6 +53,10 @@ msgstr "Compruebe el número de elementos"
msgid "Check percentage of (un)translated and fuzzy strings"
msgstr ""
#: pocheckerconsts.sclearlistbox
msgid "Clear"
msgstr ""
#: pocheckerconsts.scopycaption
msgid "Copy to clipboard"
msgstr "Copiar en el portapapeles"
@ -233,6 +241,10 @@ msgstr ""
"Error guardando archivo:\n"
"%s\n"
#: pocheckerconsts.sscandir
msgid "Scan a folder"
msgstr ""
#: pocheckerconsts.sselectalltests
msgid "Select &All"
msgstr ""
@ -285,6 +297,10 @@ msgstr ""
msgid "&Unselect All"
msgstr ""
#: pocheckerconsts.sunselectlistbox
msgid "Unselect"
msgstr ""
#: pocheckerconsts.suntranslated
msgid "Untranslated"
msgstr ""

View File

@ -15,6 +15,10 @@ msgstr ""
msgid "PO File Checker"
msgstr "PO Fájl Ellenőrző"
#: pocheckerconsts.salllanguages
msgid "All Languages"
msgstr ""
#: pocheckerconsts.scannotfindmaster
msgid ""
"Cannot find master po file:\n"
@ -51,6 +55,10 @@ msgstr "Elemek számának ellenőrzése"
msgid "Check percentage of (un)translated and fuzzy strings"
msgstr "A lefordított és lefordítatlan szövegek százalékának ellenőrzése"
#: pocheckerconsts.sclearlistbox
msgid "Clear"
msgstr ""
#: pocheckerconsts.scopycaption
msgid "Copy to clipboard"
msgstr "Másolás vágólapra"
@ -239,6 +247,10 @@ msgstr ""
"Hiba a fájl mentésekor:\n"
"%s\n"
#: pocheckerconsts.sscandir
msgid "Scan a folder"
msgstr ""
#: pocheckerconsts.sselectalltests
msgid "Select &All"
msgstr "Összes kijelölése"
@ -292,6 +304,10 @@ msgstr "Fordítási statisztika ehhez:"
msgid "&Unselect All"
msgstr "Kijelölések törlése"
#: pocheckerconsts.sunselectlistbox
msgid "Unselect"
msgstr ""
#: pocheckerconsts.suntranslated
msgid "Untranslated"
msgstr ""

View File

@ -13,6 +13,10 @@ msgstr ""
msgid "PO File Checker"
msgstr "Verificatore di files PO"
#: pocheckerconsts.salllanguages
msgid "All Languages"
msgstr ""
#: pocheckerconsts.scannotfindmaster
msgid ""
"Cannot find master po file:\n"
@ -49,6 +53,10 @@ msgstr "Verifica il numero di voci"
msgid "Check percentage of (un)translated and fuzzy strings"
msgstr "Verifica le percentuali di stringhe tradotte o incerte"
#: pocheckerconsts.sclearlistbox
msgid "Clear"
msgstr ""
#: pocheckerconsts.scopycaption
msgid "Copy to clipboard"
msgstr "Copia negli appunti"
@ -237,6 +245,10 @@ msgstr ""
"Errore nel salvare il file:\n"
"%s\n"
#: pocheckerconsts.sscandir
msgid "Scan a folder"
msgstr ""
#: pocheckerconsts.sselectalltests
msgid "Select &All"
msgstr "Seleziona &Tutto"
@ -289,6 +301,10 @@ msgstr "Statistiche di traduzione per:"
msgid "&Unselect All"
msgstr "&Deseleziona tutto"
#: pocheckerconsts.sunselectlistbox
msgid "Unselect"
msgstr ""
#: pocheckerconsts.suntranslated
msgid "Untranslated"
msgstr ""

View File

@ -15,6 +15,10 @@ msgstr ""
msgid "PO File Checker"
msgstr "PO ファイルチェッカー"
#: pocheckerconsts.salllanguages
msgid "All Languages"
msgstr ""
#: pocheckerconsts.scannotfindmaster
msgid ""
"Cannot find master po file:\n"
@ -51,6 +55,10 @@ msgstr "項目数の検査"
msgid "Check percentage of (un)translated and fuzzy strings"
msgstr "翻訳/未翻訳、未確定文字列の割合を検査"
#: pocheckerconsts.sclearlistbox
msgid "Clear"
msgstr ""
#: pocheckerconsts.scopycaption
msgid "Copy to clipboard"
msgstr "クリップボードへコピー"
@ -239,6 +247,10 @@ msgstr ""
"ファイル保存中のエラー:\n"
"%s\n"
#: pocheckerconsts.sscandir
msgid "Scan a folder"
msgstr ""
#: pocheckerconsts.sselectalltests
msgid "Select &All"
msgstr ""
@ -293,6 +305,10 @@ msgstr "翻訳状況:"
msgid "&Unselect All"
msgstr ""
#: pocheckerconsts.sunselectlistbox
msgid "Unselect"
msgstr ""
#: pocheckerconsts.suntranslated
msgid "Untranslated"
msgstr ""

View File

@ -15,6 +15,10 @@ msgstr ""
msgid "PO File Checker"
msgstr "PO failų tikrintuvė"
#: pocheckerconsts.salllanguages
msgid "All Languages"
msgstr ""
#: pocheckerconsts.scannotfindmaster
msgid ""
"Cannot find master po file:\n"
@ -51,6 +55,10 @@ msgstr "Tikrinti ar tinkamas elementų kiekis"
msgid "Check percentage of (un)translated and fuzzy strings"
msgstr ""
#: pocheckerconsts.sclearlistbox
msgid "Clear"
msgstr ""
#: pocheckerconsts.scopycaption
msgid "Copy to clipboard"
msgstr "Kopijuoti į iškarpinę"
@ -235,6 +243,10 @@ msgstr ""
"Rašant į failą įvyko klaida:\n"
"%s\n"
#: pocheckerconsts.sscandir
msgid "Scan a folder"
msgstr ""
#: pocheckerconsts.sselectalltests
msgid "Select &All"
msgstr ""
@ -285,6 +297,10 @@ msgstr ""
msgid "&Unselect All"
msgstr ""
#: pocheckerconsts.sunselectlistbox
msgid "Unselect"
msgstr ""
#: pocheckerconsts.suntranslated
msgid "Untranslated"
msgstr ""

View File

@ -5,6 +5,10 @@ msgstr "Content-Type: text/plain; charset=UTF-8"
msgid "PO File Checker"
msgstr ""
#: pocheckerconsts.salllanguages
msgid "All Languages"
msgstr ""
#: pocheckerconsts.scannotfindmaster
msgid ""
"Cannot find master po file:\n"
@ -37,6 +41,10 @@ msgstr ""
msgid "Check percentage of (un)translated and fuzzy strings"
msgstr ""
#: pocheckerconsts.sclearlistbox
msgid "Clear"
msgstr ""
#: pocheckerconsts.scopycaption
msgid "Copy to clipboard"
msgstr ""
@ -209,6 +217,10 @@ msgid ""
"%s\n"
msgstr ""
#: pocheckerconsts.sscandir
msgid "Scan a folder"
msgstr ""
#: pocheckerconsts.sselectalltests
msgid "Select &All"
msgstr ""
@ -257,6 +269,10 @@ msgstr ""
msgid "&Unselect All"
msgstr ""
#: pocheckerconsts.sunselectlistbox
msgid "Unselect"
msgstr ""
#: pocheckerconsts.suntranslated
msgid "Untranslated"
msgstr ""

View File

@ -14,6 +14,10 @@ msgstr ""
msgid "PO File Checker"
msgstr "Verificador de arquivos PO"
#: pocheckerconsts.salllanguages
msgid "All Languages"
msgstr ""
#: pocheckerconsts.scannotfindmaster
msgid ""
"Cannot find master po file:\n"
@ -50,6 +54,10 @@ msgstr "Verificar número de itens"
msgid "Check percentage of (un)translated and fuzzy strings"
msgstr ""
#: pocheckerconsts.sclearlistbox
msgid "Clear"
msgstr ""
#: pocheckerconsts.scopycaption
msgid "Copy to clipboard"
msgstr "Copiar para área de transferência"
@ -233,6 +241,10 @@ msgstr ""
"Erro ao salvar arquivo:\n"
"%s\n"
#: pocheckerconsts.sscandir
msgid "Scan a folder"
msgstr ""
#: pocheckerconsts.sselectalltests
msgid "Select &All"
msgstr ""
@ -285,6 +297,10 @@ msgstr ""
msgid "&Unselect All"
msgstr ""
#: pocheckerconsts.sunselectlistbox
msgid "Unselect"
msgstr ""
#: pocheckerconsts.suntranslated
msgid "Untranslated"
msgstr ""

View File

@ -13,6 +13,10 @@ msgstr ""
msgid "PO File Checker"
msgstr "Проверка файлов PO"
#: pocheckerconsts.salllanguages
msgid "All Languages"
msgstr ""
#: pocheckerconsts.scannotfindmaster
msgid ""
"Cannot find master po file:\n"
@ -49,6 +53,10 @@ msgstr "Проверка числа строк"
msgid "Check percentage of (un)translated and fuzzy strings"
msgstr "Вывод статистики по (не)переведённым и неточным строкам"
#: pocheckerconsts.sclearlistbox
msgid "Clear"
msgstr ""
#: pocheckerconsts.scopycaption
msgid "Copy to clipboard"
msgstr "Копировать в буфер обмена"
@ -237,6 +245,10 @@ msgstr ""
"Ошибка сохранения файла:\n"
"%s\n"
#: pocheckerconsts.sscandir
msgid "Scan a folder"
msgstr ""
#: pocheckerconsts.sselectalltests
#| msgid "Select &All Tests"
msgid "Select &All"
@ -323,6 +335,10 @@ msgstr "Статистика переводов по языкам:"
msgid "&Unselect All"
msgstr "&Снять выбор"
#: pocheckerconsts.sunselectlistbox
msgid "Unselect"
msgstr ""
#: pocheckerconsts.suntranslated
msgid "Untranslated"
msgstr "Непереведённые строки"

View File

@ -12,6 +12,10 @@ msgstr ""
msgid "PO File Checker"
msgstr "Перевірка PO Файлів"
#: pocheckerconsts.salllanguages
msgid "All Languages"
msgstr ""
#: pocheckerconsts.scannotfindmaster
msgid ""
"Cannot find master po file:\n"
@ -48,6 +52,10 @@ msgstr "Перевірити кількість елементів"
msgid "Check percentage of (un)translated and fuzzy strings"
msgstr ""
#: pocheckerconsts.sclearlistbox
msgid "Clear"
msgstr ""
#: pocheckerconsts.scopycaption
msgid "Copy to clipboard"
msgstr "Копіювати в буфер"
@ -232,6 +240,10 @@ msgstr ""
"Помилка збереження файлу:\n"
"%s\n"
#: pocheckerconsts.sscandir
msgid "Scan a folder"
msgstr ""
#: pocheckerconsts.sselectalltests
msgid "Select &All"
msgstr ""
@ -282,6 +294,10 @@ msgstr ""
msgid "&Unselect All"
msgstr ""
#: pocheckerconsts.sunselectlistbox
msgid "Unselect"
msgstr ""
#: pocheckerconsts.suntranslated
msgid "Untranslated"
msgstr ""

View File

@ -15,7 +15,11 @@ resourcestring
sGUIPoFileCheckingTool = 'GUI Po-file checking tool';
sSelectTestTypes = 'Select test types';
sOpenAPoFile = '&Open a po-file';
sScanDir = 'Scan a folder';
sRunSelectedTests = '&Run Selected Tests';
sClearListBox = 'Clear';
sUnselectListBox = 'Unselect';
sAllLanguages = 'All Languages';
sCannotFindMaster = 'Cannot find master po file:' + LineEnding + '%s' + LineEnding + 'for selected file' + LineEnding + '%s';
sNotAProperFileName = 'Selected filename' + LineEnding + '%s' + LineEnding + 'does not seem to be a proper name for a po-file';
sErrorOnCreate = 'Error creating an instance of TPoFamily:' + LineEnding + '%s';

View File

@ -1,11 +1,12 @@
object PoCheckerForm: TPoCheckerForm
Left = 318
Height = 342
Height = 511
Top = 163
Width = 581
Width = 644
Anchors = []
Caption = 'GUI Po-file checking tool'
ClientHeight = 342
ClientWidth = 581
ClientHeight = 511
ClientWidth = 644
OnCreate = FormCreate
OnDestroy = FormDestroy
ShowInTaskBar = stAlways
@ -15,20 +16,31 @@ object PoCheckerForm: TPoCheckerForm
AnchorSideLeft.Control = SelectTestLabel
AnchorSideTop.Control = SelectTestLabel
AnchorSideTop.Side = asrBottom
Left = 201
Height = 154
Left = 212
Height = 118
Top = 29
Width = 373
Anchors = [akTop, akLeft, akRight, akBottom]
Width = 425
Anchors = [akTop, akLeft, akRight]
BorderSpacing.Top = 6
Enabled = False
ItemHeight = 0
Items.Strings = (
'sCheckNumberOfItems'
'sCheckForIncompatibleFormatArguments'
'sCheckMissingIdentifiers'
'sCheckForMismatchesInUntranslatedStrings'
'sCheckForDuplicateUntranslatedValues'
'sCheckStatistics'
)
ItemHeight = 17
TabOrder = 0
Data = {
06000000000000000000
}
end
object SelectTestLabel: TLabel
AnchorSideLeft.Control = OpenBtn
AnchorSideLeft.Side = asrBottom
Left = 201
Left = 212
Height = 15
Top = 8
Width = 93
@ -40,15 +52,16 @@ object PoCheckerForm: TPoCheckerForm
end
object OpenBtn: TBitBtn
AnchorSideLeft.Control = RunBtn
AnchorSideTop.Control = TestListBox
AnchorSideRight.Control = RunBtn
AnchorSideRight.Side = asrBottom
AnchorSideBottom.Control = RunBtn
Left = 8
Height = 63
Top = 33
AnchorSideBottom.Control = ScanDirBtn
Left = 19
Height = 50
Top = 29
Width = 184
Anchors = [akLeft, akRight, akBottom]
BorderSpacing.Bottom = 6
Anchors = [akTop]
BorderSpacing.Bottom = 10
Caption = '&Open a po-file'
Glyph.Data = {
36040000424D3604000000000000360000002800000010000000100000000100
@ -90,13 +103,15 @@ object PoCheckerForm: TPoCheckerForm
TabOrder = 1
end
object RunBtn: TBitBtn
AnchorSideTop.Control = ScanDirBtn
AnchorSideTop.Side = asrBottom
AnchorSideRight.Side = asrBottom
Left = 8
Height = 63
Top = 102
Left = 19
Height = 50
Top = 149
Width = 184
BorderSpacing.Top = 6
Anchors = [akTop]
BorderSpacing.Top = 5
Caption = '&Run Selected Tests'
Enabled = False
Kind = bkOK
@ -106,7 +121,7 @@ object PoCheckerForm: TPoCheckerForm
object NoErrLabel: TLabel
Left = 8
Height = 25
Top = 280
Top = 449
Width = 146
Anchors = [akLeft, akBottom]
Caption = 'No errors found'
@ -120,9 +135,9 @@ object PoCheckerForm: TPoCheckerForm
AnchorSideLeft.Control = TestListBox
AnchorSideTop.Control = SelectBasicBtn
AnchorSideTop.Side = asrBottom
Left = 201
Left = 212
Height = 19
Top = 220
Top = 184
Width = 156
BorderSpacing.Top = 6
Caption = 'Find all translated PO files'
@ -132,9 +147,9 @@ object PoCheckerForm: TPoCheckerForm
AnchorSideLeft.Control = TestListBox
AnchorSideTop.Control = TestListBox
AnchorSideTop.Side = asrBottom
Left = 201
Left = 212
Height = 25
Top = 189
Top = 153
Width = 115
BorderSpacing.Top = 6
Caption = 'Select Basic Tests'
@ -146,9 +161,9 @@ object PoCheckerForm: TPoCheckerForm
AnchorSideLeft.Control = SelectBasicBtn
AnchorSideLeft.Side = asrBottom
AnchorSideTop.Control = SelectBasicBtn
Left = 320
Left = 331
Height = 25
Top = 189
Top = 153
Width = 115
BorderSpacing.Left = 4
Caption = 'Select All Tests'
@ -160,9 +175,9 @@ object PoCheckerForm: TPoCheckerForm
AnchorSideLeft.Control = SelectAllBtn
AnchorSideLeft.Side = asrBottom
AnchorSideTop.Control = SelectAllBtn
Left = 439
Left = 450
Height = 25
Top = 189
Top = 153
Width = 115
BorderSpacing.Left = 4
Caption = 'Unselect All Tests'
@ -174,9 +189,9 @@ object PoCheckerForm: TPoCheckerForm
AnchorSideLeft.Control = TestListBox
AnchorSideTop.Control = FindAllPOsCheckBox
AnchorSideTop.Side = asrBottom
Left = 201
Left = 212
Height = 19
Top = 245
Top = 209
Width = 152
BorderSpacing.Top = 6
Caption = 'sIgnoreFuzzyTranslations'
@ -185,14 +200,178 @@ object PoCheckerForm: TPoCheckerForm
object StatusBar: TStatusBar
Left = 0
Height = 23
Top = 319
Width = 581
Top = 488
Width = 644
Panels = <>
end
object ScanDirBtn: TBitBtn
AnchorSideLeft.Control = OpenBtn
AnchorSideTop.Control = OpenBtn
AnchorSideTop.Side = asrBottom
AnchorSideRight.Control = RunBtn
AnchorSideRight.Side = asrBottom
AnchorSideBottom.Control = RunBtn
Left = 19
Height = 50
Top = 89
Width = 184
Anchors = [akTop]
BorderSpacing.Top = 5
BorderSpacing.Bottom = 10
Caption = 'Scan a folder'
OnClick = ScanDirBtnClick
TabOrder = 9
end
object MasterPoListBox: TListBox
AnchorSideTop.Control = IgnoreFuzzyCheckBox
AnchorSideTop.Side = asrBottom
AnchorSideBottom.Control = NoErrLabel
Left = 8
Height = 181
Top = 233
Width = 272
Anchors = [akTop, akLeft, akBottom]
BorderSpacing.Top = 5
BorderSpacing.Bottom = 35
ItemHeight = 0
OnDrawItem = MasterPoListBoxDrawItem
OnSelectionChange = MasterPoListBoxSelectionChange
Sorted = True
Style = lbOwnerDrawFixed
TabOrder = 10
end
object ChildPoListBox: TListBox
AnchorSideLeft.Control = MasterPoListBox
AnchorSideLeft.Side = asrBottom
AnchorSideTop.Control = MasterPoListBox
AnchorSideRight.Control = TestListBox
AnchorSideRight.Side = asrBottom
AnchorSideBottom.Control = ClearChildBtn
Left = 290
Height = 151
Top = 233
Width = 347
Anchors = [akTop, akLeft, akRight, akBottom]
BorderSpacing.Left = 10
BorderSpacing.Bottom = 40
ItemHeight = 0
OnDrawItem = MasterPoListBoxDrawItem
OnResize = ChildPoListBoxResize
OnSelectionChange = ChildPoListBoxSelectionChange
Style = lbOwnerDrawFixed
TabOrder = 11
end
object LangFilter: TComboBox
AnchorSideLeft.Control = ChildPoListBox
AnchorSideTop.Control = ChildPoListBox
AnchorSideTop.Side = asrBottom
AnchorSideRight.Control = TestListBox
AnchorSideRight.Side = asrBottom
AnchorSideBottom.Control = ClearChildBtn
Left = 290
Height = 23
Top = 394
Width = 347
Anchors = [akLeft, akRight]
BorderSpacing.Top = 5
ItemHeight = 15
ItemIndex = 0
Items.Strings = (
'All languages'
'af_ZA'
'ar'
'ca'
'cs'
'de'
'es'
'fi'
'fr'
'he'
'hu'
'id'
'it'
'ja'
'lt'
'nl'
'pl'
'pt_BR'
'ru'
'sk'
'tr'
'uk'
'zh_CN'
)
OnChange = LangFilterChange
Style = csDropDownList
TabOrder = 12
Text = 'All languages'
end
object ClearMasterBtn: TButton
AnchorSideLeft.Control = MasterPoListBox
AnchorSideTop.Control = MasterPoListBox
AnchorSideTop.Side = asrBottom
AnchorSideBottom.Control = NoErrLabel
Left = 8
Height = 25
Top = 424
Width = 75
Anchors = [akLeft, akBottom]
BorderSpacing.Top = 10
Caption = 'Clear'
OnClick = ClearMasterBtnClick
TabOrder = 13
end
object UnselectMasterBtn: TButton
AnchorSideLeft.Control = ClearMasterBtn
AnchorSideLeft.Side = asrBottom
AnchorSideBottom.Control = NoErrLabel
Left = 93
Height = 25
Top = 424
Width = 75
Anchors = [akLeft, akBottom]
BorderSpacing.Left = 10
Caption = 'Unselect'
Enabled = False
OnClick = UnselectMasterBtnClick
TabOrder = 14
end
object ClearChildBtn: TButton
AnchorSideLeft.Control = ChildPoListBox
AnchorSideBottom.Control = NoErrLabel
Left = 290
Height = 25
Top = 424
Width = 75
Anchors = [akLeft, akBottom]
Caption = 'Clear'
OnClick = ClearChildBtnClick
TabOrder = 15
end
object UnselectChildBtn: TButton
AnchorSideLeft.Control = ClearChildBtn
AnchorSideLeft.Side = asrBottom
AnchorSideBottom.Control = NoErrLabel
Left = 375
Height = 25
Top = 424
Width = 75
Anchors = [akLeft, akBottom]
BorderSpacing.Left = 10
Caption = 'Unselect'
Enabled = False
OnClick = UnselectChildBtnClick
TabOrder = 16
end
object OpenDialog: TOpenDialog
Filter = 'po-files (*.po)|*.po|all files|*'
Options = [ofFileMustExist, ofEnableSizing, ofViewDetail]
left = 40
top = 512
left = 480
top = 432
end
object SelectDirectoryDialog: TSelectDirectoryDialog
Options = [ofEnableSizing]
left = 584
top = 432
end
end

View File

@ -25,7 +25,8 @@ interface
uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs,
StdCtrls, LCLProc, CheckLst, Buttons, ExtCtrls, ComCtrls,
StdCtrls, LCLProc, CheckLst, Buttons, ExtCtrls, ComCtrls, Masks, Types,
LCLType,
{$IFDEF POCHECKERSTANDALONE}
Translations,
{$ELSE}
@ -38,13 +39,34 @@ type
{ TPoCheckerForm }
TPoCheckerForm = class(TForm)
SelectDirectoryDialog: TSelectDirectoryDialog;
UnselectChildBtn: TButton;
ClearChildBtn: TButton;
UnselectMasterBtn: TButton;
ClearMasterBtn: TButton;
LangFilter: TComboBox;
ChildPoListBox: TListBox;
MasterPoListBox: TListBox;
ScanDirBtn: TBitBtn;
StatusBar: TStatusBar;
procedure ChildPoListBoxResize(Sender: TObject);
procedure ChildPoListBoxSelectionChange(Sender: TObject; User: boolean);
procedure ClearChildBtnClick(Sender: TObject);
procedure ClearMasterBtnClick(Sender: TObject);
procedure LangFilterChange(Sender: TObject);
procedure MasterPoListBoxDrawItem(Control: TWinControl; Index: Integer;
ARect: TRect; State: TOwnerDrawState);
procedure MasterPoListBoxSelectionChange(Sender: TObject; User: boolean);
procedure ScanDirBtnClick(Sender: TObject);
procedure UnselectChildBtnClick(Sender: TObject);
procedure UnselectMasterBtnClick(Sender: TObject);
private
PoFamily: TPoFamily;
FSelectedPoName: String;
FPoCheckerSettings: TPoCheckerSettings;
FChildPoList: TStringList;
procedure OnTestStart(const ATestName, APoFileName: string);
procedure OnTestEnd(const ATestName: string; const ErrorCount: integer);
procedure OnTestEnd(const {%H-}ATestName: string; const {%H-}ErrorCount: integer);
procedure FillTestListBox;
function GetTestTypesFromListBox: TPoTestTypes;
function GetTestOptions: TPoTestOptions;
@ -52,10 +74,15 @@ type
procedure SetTestOptionCheckBoxes(TestOptions: TPoTestOptions);
procedure ShowError(const Msg: string);
function TrySelectFile(out Filename: String): Boolean;
procedure ScanDirectory(ADir: String);
function TryCreatePoFamily(Filename: String): Boolean;
procedure RunSelectedTests;
procedure ClearStatusBar;
procedure SetSelectedPoName(AFilename: String);
procedure AddToMasterPoList(Fn: String);
procedure AddToMasterPoList(S: TStrings);
procedure AddToChildPoList(Fn: String);
procedure AddToChildPoList(S: TStrings);
procedure LoadConfig;
procedure SaveConfig;
published
@ -124,13 +151,21 @@ begin
'lclstrconsts.' + Lang + '.po');
end;
{$ENDIF}
FChildPoList := TStringList.Create;
FChildPoList.Sorted := True;
FChildPoList.Duplicates := dupIgnore;
Caption := sGUIPoFileCheckingTool;
SelectTestLabel.Caption := sSelectTestTypes;
FindAllPOsCheckBox.Caption := sFindAllTranslatedPoFiles;
IgnoreFuzzyCheckBox.Caption := sIgnoreFuzzyTranslations;
OpenBtn.Caption := sOpenAPoFile;
ScanDirBtn.Caption := sScanDir;
RunBtn.Caption := sRunSelectedTests;
ClearMasterBtn.Caption := sClearListBox;
ClearChildBtn.Caption := sClearListBox;
UnselectMasterBtn.Caption := sUnselectListBox;
UnselectChildBtn.Caption := sUnselectListBox;
LangFilter.Items[0] := sAllLanguages;
NoErrLabel.Caption := sNoErrorsFound;
FillTestListBox;
ClearStatusBar;
@ -139,6 +174,7 @@ begin
SelectBasicBtn.Caption := sSelectBasicTests;
UnselectAllBtn.Caption := sUnselectAllTests;
LoadConfig;
LangFilter.Invalidate; //Items[0] may have been changed
end;
@ -149,6 +185,7 @@ begin
SaveConfig;
if Assigned(FPoCheckerSettings) then
FPoCheckerSettings.Free;
FChildPoList.Free;
end;
@ -158,6 +195,10 @@ var
begin
if TrySelectFile(Fn) then
begin
if IsMasterPoName(Fn) then
AddToMasterPoList(Fn)
else
AddToChildPoList(Fn);
SetSelectedPoName(Fn);
end
else
@ -197,6 +238,137 @@ begin
TestListBox.CheckAll(cbUnchecked, False, False);
end;
procedure TPoCheckerForm.LangFilterChange(Sender: TObject);
var
Filter, Mask, PrevItem: String;
Idx, i: Integer;
begin
Idx := ChildPoListBox.ItemIndex;
if (Idx > -1) then
PrevItem := ChildPoListBox.Items[Idx]
else
PrevItem := '';
debugln('TPoCheckerForm.LangFilterChange: PrevItem = "',PrevItem,'"');
Filter := LangFilter.Items.Strings[LangFilter.ItemIndex];
if (LangFilter.ItemIndex > 0) then
begin
Mask := '*.'+Filter+'.po';
ChildPoListBox.Clear;
ChildPoListBox.Items.BeginUpdate;
try
for i := 0 to FChildPoList.Count - 1 do
begin
if MatchesMask(FChildPoList.Strings[i], Mask, False) then
ChildPoListBox.Items.Add(FChildPoList.Strings[i]);
end;
finally
ChildPoListBox.Items.EndUpdate;
end;
end
else
ChildPoListBox.Items.Assign(FChildPoList);
if (Idx <> -1) then
begin
Idx := ChildPoListBox.Items.IndexOf(PrevItem);
debugln('TPoCheckerForm.LangFilterChange: IndexOf(PrevItem) = ',DbgS(Idx));
if (Idx <> -1) then
begin
ChildPoListBox.ItemIndex := Idx;
end
else
begin
if (MasterPoListBox.ItemIndex = -1) then
SetSelectedPoName('');
end;
end;
UnselectChildBtn.Enabled := (Idx <> -1);
end;
procedure TPoCheckerForm.ChildPoListBoxSelectionChange(Sender: TObject;
User: boolean);
begin
//debugln('TPoCheckerForm.ChildPoListBoxSelectionChange: User = ',DbgS(User));
if User then
begin
SetSelectedPoName(ChildPoListBox.Items[ChildPoListBox.ItemIndex]);
end;
UnselectChildBtn.Enabled := (ChildPoListBox.ItemIndex <> -1);
end;
procedure TPoCheckerForm.ChildPoListBoxResize(Sender: TObject);
begin
//Can't seem to get this to work with just Anchors
LangFilter.Top := ChildPoListBox.Top + ChildPoListBox.Height + 10;
end;
procedure TPoCheckerForm.ClearChildBtnClick(Sender: TObject);
begin
FChildPoList.Clear;
LangFilterChange(LangFilter);
if (MasterPoListBox.ItemIndex = -1) then
SetSelectedPoName('');
end;
procedure TPoCheckerForm.ClearMasterBtnClick(Sender: TObject);
begin
MasterPoListBox.Clear;
if (ChildPoListBox.ItemIndex = -1) then
SetSelectedPoName('');
end;
procedure TPoCheckerForm.MasterPoListBoxDrawItem(Control: TWinControl;
Index: Integer; ARect: TRect; State: TOwnerDrawState);
var
LB: TListBox;
AText: String;
begin
LB := TListBox(Control);
with LB.Canvas do
begin
//if odSelected in State then Brush.Color := $00FFD2A6;
FillRect(ARect);
AText := ExtractFilename(LB.Items[Index]);
TextOut(ARect.Left, ARect.Top, AText);
if (odFocused in State) then
begin
Brush.Color := LB.Color;
DrawFocusRect(ARect);
end;
end;
end;
procedure TPoCheckerForm.MasterPoListBoxSelectionChange(Sender: TObject;
User: boolean);
begin
//debugln('TPoCheckerForm.MasterPoListBoxSelectionChange: User = ',DbgS(User));
if User then
begin
SetSelectedPoName(MasterPoListBox.Items[MasterPoListBox.ItemIndex]);
end;
UnselectMasterBtn.Enabled := (MasterPoListBox.ItemIndex <> -1);
end;
procedure TPoCheckerForm.ScanDirBtnClick(Sender: TObject);
begin
if SelectDirectoryDialog.Execute then
begin
ScanDirectory(SelectDirectoryDialog.FileName);
end;
end;
procedure TPoCheckerForm.UnselectChildBtnClick(Sender: TObject);
begin
ChildpoListBox.ItemIndex := -1;
if (MasterPoListBox.ItemIndex = -1) then
SetSelectedPoName('');
end;
procedure TPoCheckerForm.UnselectMasterBtnClick(Sender: TObject);
begin
MasterPoListBox.ItemIndex := -1;
if (ChildPoListBox.ItemIndex = -1) then
SetSelectedPoName('');
end;
procedure TPoCheckerForm.OnTestStart(const ATestName, APoFileName: string);
begin
@ -220,6 +392,7 @@ procedure TPoCheckerForm.FillTestListBox;
var
Typ: TPoTestType;
begin
TestListBox.Items.Clear;
for Typ := Low(PoTestTypeNames) to High(PoTestTypeNames) do
case Typ of
pttCheckNrOfItems:
@ -306,6 +479,34 @@ begin
end;
end;
procedure TPoCheckerForm.ScanDirectory(ADir: String);
var
SL, ML, CL: TStringList;
i: Integer;
S: String;
begin
SL := FindAllFiles(ADir, '*.po',True);
try
ML := TStringList.Create;
CL := TStringList.Create;
for i := 0 to SL.Count - 1 do
begin
S := SL[i];
//debugln('TPoCheckerForm.ScanDirectory: S = "',ExtractFilename(S),'"');
if IsMasterPoName(S) then
ML.Add(S)
else
CL.Add(S);
end;
if (ML.Count > 0) then AddToMasterPoList(ML);
if (CL.Count > 0) then AddToChildPoList(CL);
finally
SL.Free;
ML.Free;
CL.Free;
end;
end;
function TPoCheckerForm.TryCreatePoFamily(Filename: String): Boolean;
var
ChosenMasterName, ChosenChildName, ShortFn: String;
@ -429,9 +630,12 @@ begin
end;
procedure TPoCheckerForm.SetSelectedPoName(AFilename: String);
var
Idx: Integer;
begin
//debugln('TPoCheckerForm.SetSelectedPoName: ((FSelectedPoName = AFilename)) = ',DbgS((FSelectedPoName = AFilename)));
NoErrLabel.Visible := False;
if (FSelectedPoName = AFilename) then Exit;
//if (FSelectedPoName = AFilename) then Exit;
FSelectedPoName := AFilename;
if (AFilename <> '') then
begin
@ -442,6 +646,18 @@ begin
UnselectAllBtn.Enabled := True;
Caption := sGUIPoFileCheckingTool + ' [' + ExtractFileName(AFilename) + ']';
OpenDialog.InitialDir:= ExtractFileDir(AFilename);
if IsMasterPoName(AFilename) then
begin
Idx := MasterPoListBox.Items.IndexOf(AFilename);
MasterPoListBox.ItemIndex := Idx;
ChildPoListBox.ItemIndex := -1;
end
else
begin
Idx := ChildPoListBox.Items.IndexOf(AFilename);
ChildPoListBox.ItemIndex := Idx;
MasterPoListBox.ItemIndex := -1;
end;
end
else
begin
@ -451,9 +667,75 @@ begin
SelectBasicBtn.Enabled := False;
UnselectAllBtn.Enabled := False;
Caption := sGUIPoFileCheckingTool;
ChildPoListBox.ItemIndex := -1;
MasterPoListBox.ItemIndex := -1;
end;
end;
procedure TPoCheckerForm.AddToMasterPoList(Fn: String);
var
Idx: Integer;
begin
Idx := MasterPoListBox.Items.IndexOf(Fn);
if (Idx = -1) then
begin
MasterPoListBox.Items.Add(Fn);
end;
end;
procedure TPoCheckerForm.AddToMasterPoList(S: TStrings);
var
i, Idx: Integer;
Str, PrevItem: String;
begin
Idx := MasterPoListBox.ItemIndex;
if (Idx <> -1) then
PrevItem := MasterPoListBox.Items[Idx]
else
PrevItem := '';
MasterPoListBox.Items.BeginUpdate;
try
for i := 0 to S.Count - 1 do
begin
Str := S[i];
Idx := MasterPoListBox.Items.IndexOf(Str);
if (Idx = -1) then
MasterPoListBox.Items.Add(Str);
end;
if (PrevItem <> '') then
begin
Idx := MasterPoListBox.Items.IndexOf(PrevItem);
MasterPoListBox.ItemIndex := Idx;
end;
finally
MasterPoListBox.Items.EndUpdate;
end;
end;
procedure TPoCheckerForm.AddToChildPoList(Fn: String);
var
Idx: Integer;
begin
Idx := FChildPoList.Add(Fn);
if (Idx > -1) then
LangFilterChange(LangFilter);
end;
procedure TPoCheckerForm.AddToChildPoList(S: TStrings);
var
i, Idx: Integer;
Str: String;
begin
for i := 0 to S.Count - 1 do
begin
Str := S[i];
Idx := FChildPoList.IndexOf(Str);
if (Idx = -1) then
FChildPoList.Add(Str);
end;
LangFilterChange(LangFilter);
end;
procedure TPoCheckerForm.LoadConfig;
var
@ -474,8 +756,18 @@ begin
//DebugLn(' ',DbgS(FPoCheckerSettings.TestTypes));
SetTestTypeCheckBoxes(FPoCheckerSettings.TestTypes);
SetTestOptionCheckBoxes(FPoCheckerSettings.TestOptions);
SelectDirectoryDialog.Filename := FPoCheckerSettings.SelectDirectoryFilename;
OpenDialog.FileName := FPoCheckerSettings.OpenDialogFilename;
AddToMasterPoList(FPoCheckerSettings.MasterPoList);
AddToChildPoList(FPoCheckerSettings.ChildPoList);
if (CompareText(ExtractFileExt(FPoCheckerSettings.LastSelectedFile), '.po') = 0) then
begin
if IsMasterPoName(FPoCheckerSettings.LastSelectedFile) then
AddToMasterPoList(FPoCheckerSettings.LastSelectedFile)
else
AddToChildPoList(FPoCheckerSettings.LastSelectedFile);
SetSelectedPoName(FPoCheckerSettings.LastSelectedFile)
end
else
SetSelectedPoName('');
end;
@ -484,9 +776,13 @@ procedure TPoCheckerForm.SaveConfig;
begin
FPoCheckerSettings.SaveSettingsOnExit := True; //ToDo: create a checkbox for this
FPoCheckerSettings.LastSelectedFile := FSelectedPoName;
FPoCheckerSettings.SelectDirectoryFilename := SelectDirectoryDialog.Filename;
FPoCheckerSettings.OpenDialogFilename := OpenDialog.FileName;
FPoCheckerSettings.TestTypes := GetTestTypesFromListBox;
FPoCheckerSettings.TestOptions := GetTestOptions;
FPoCheckerSettings.MainFormGeometry := BoundsRect;
FPoCheckerSettings.MasterPoList := MasterPoListBox.Items;
FPoCheckerSettings.ChildPoList := FChildPoList;
FPoCheckerSettings.SaveConfig;
end;

View File

@ -22,30 +22,40 @@ type
FConfig: TConfigStorage;
FExternalEditorName: String;
FFilename: String;
FOpenDialogFilename: String;
FSelectDirectoryFilename: String;
FTestTypes: TPoTestTypes;
FTestOptions: TPoTestOptions;
FLoadSettings: Boolean;
FSaveSettingsOnExit: Boolean;
FMasterPoList: TStrings;
FChildrenPoList: TStrings;
FMasterPoList: TStringList;
FChildPoList: TStringList;
FLastSelectedFile: String;
FMainFormGeometry: TRect;
FGraphFormGeometry: TRect;
FResultsFormGeometry: TRect;
function GetChildPoList: TStrings;
function GetMasterPoList: TStrings;
function LoadLastSelectedFile: String;
function LoadTestTypes: TPoTestTypes;
function LoadTestOptions: TPoTestOptions;
procedure LoadWindowsGeometry;
function LoadExternalEditorName: String;
function LoadSelectDirectoryFilename: String;
function LoadOpenDialogFilename: String;
procedure LoadMasterPoList(List: TStrings);
procedure LoadChildrenPoList(List: TStrings);
procedure LoadChildPoList(List: TStrings);
procedure SaveLastSelectedFile;
procedure SaveTestTypes;
procedure SaveTestOptions;
procedure SaveWindowsGeometry;
procedure SaveExternalEditorName;
procedure SaveSelectDirectoryFilename;
procedure SaveOpenDialogFilename;
procedure SaveMasterPoList;
procedure SaveChildrenPoList;
procedure SetChildPoList(AValue: TStrings);
procedure SetMasterPoList(AValue: TStrings);
public
constructor Create;
@ -59,9 +69,11 @@ type
property TestTypes: TPoTestTypes read FTestTypes write FTestTypes;
property TestOptions: TPoTestOptions read FTestOptions write FTestOptions;
property ExternalEditorName: String read FExternalEditorName write FExternalEditorName;
property MasterPoList: TStrings read FMasterPoList write FMasterPoList;
property ChildrenPoList: TStrings read FChildrenPoList write FChildrenPoList;
property MasterPoList: TStrings read GetMasterPoList write SetMasterPoList;
property ChildPoList: TStrings read GetChildPoList write SetChildPoList;
property LastSelectedFile: String read FLastSelectedFile write FLastSelectedFile;
property SelectDirectoryFilename: String read FSelectDirectoryFilename write FSelectDirectoryFilename;
property OpenDialogFilename: String read FOpenDialogFilename write FOpenDialogFilename;
property MainFormGeometry: TRect read FMainFormGeometry write FMainFormGeometry;
property ResultsFormGeometry: TRect read FResultsFormGeometry write FResultsFormGeometry;
property GraphFormGeometry: TRect read FGraphFormGeometry write FGraphFormGeometry;
@ -136,12 +148,14 @@ const
pLoadSettings = 'General/LoadSettings/';
pLastSelected = 'LastSelected/';
pSelectDirectoryFilename = 'SelectDirectoryFilename/';
pOpenDialogFilename = 'OpenDialogFilename/';
pTestTypes = 'TestTypes/';
pTestOptions = 'TestOptions/';
pWindowsGeometry = 'General/WindowsGeometry/';
pExternalEditor = 'ExternalEditor/';
pMasterPoFiles = 'MasterPoFiles/';
pChildrenPoFiles = 'ChildrenPoFiles/';
pChildPoFiles = 'ChildPoFiles/';
var
DefaultRect: TRect;
@ -218,6 +232,16 @@ begin
Result := FConfig.GetValue(pLastSelected+'Value','');
end;
function TPoCheckerSettings.GetMasterPoList: TStrings;
begin
Result := FMasterPoList;
end;
function TPoCheckerSettings.GetChildPoList: TStrings;
begin
Result := FChildPoList;
end;
function TPoCheckerSettings.LoadTestTypes: TPoTestTypes;
var
tt: TPoTestType;
@ -268,17 +292,45 @@ begin
{$eNDIF}
end;
procedure TPoCheckerSettings.LoadMasterPoList(List: TStrings);
function TPoCheckerSettings.LoadSelectDirectoryFilename: String;
begin
if not Assigned(List) then Exit;
List.Clear;
Result := FConfig.GetValue(pSelectDirectoryFilename+'Value','');
end;
procedure TPoCheckerSettings.LoadChildrenPoList(List: TStrings);
function TPoCheckerSettings.LoadOpenDialogFilename: String;
begin
Result := FConfig.GetValue(pOpenDialogFilename+'Value','');
end;
procedure TPoCheckerSettings.LoadMasterPoList(List: TStrings);
var
Cnt, i: Integer;
Fn: String;
begin
if not Assigned(List) then Exit;
List.Clear;
Cnt := Fconfig.GetValue(pMasterpoFiles+'Count',0);
//debugln('TPoCheckerSettings.LoadMasterPoList: Cnt = ',DbgS(Cnt));
for i := 0 to Cnt - 1 do
begin
Fn := FConfig.GetValue(pMasterpoFiles+Format('Item_%d/Value',[i]),'');
if (Fn <> '') then List.Add(Fn);
end;
end;
procedure TPoCheckerSettings.LoadChildPoList(List: TStrings);
var
Cnt, i: Integer;
Fn: String;
begin
List.Clear;
Cnt := Fconfig.GetValue(pChildPoFiles+'Count',0);
//debugln('TPoCheckerSettings.LoadChildPoList: Cnt = ',DbgS(Cnt));
for i := 0 to Cnt - 1 do
begin
Fn := FConfig.GetValue(pChildPoFiles+Format('Item_%d/Value',[i]),'');
if (Fn <> '') then List.Add(Fn);
end;
end;
procedure TPoCheckerSettings.SaveLastSelectedFile;
@ -324,14 +376,46 @@ begin
{$ENDIF}
end;
procedure TPoCheckerSettings.SaveSelectDirectoryFilename;
begin
FConfig.SetDeleteValue(pSelectDirectoryFilename+'Value',FSelectDirectoryFilename,'');
end;
procedure TPoCheckerSettings.SaveOpenDialogFilename;
begin
FConfig.SetDeleteValue(pOpenDialogFilename+'Value',FOpenDialogFilename,'');
end;
procedure TPoCheckerSettings.SaveMasterPoList;
var
Cnt, i: Integer;
begin
FConfig.DeletePath(pMasterPoFiles);
Cnt := FMasterPoList.Count;
FConfig.SetDeleteValue(pMasterPoFiles+'Count',Cnt,0);
for i := 0 to Cnt - 1 do
FConfig.SetDeleteValue(pMasterPoFiles+Format('Item_%d/Value',[i]),FMasterPoList[i],'');
end;
procedure TPoCheckerSettings.SaveChildrenPoList;
var
Cnt, i: Integer;
begin
FConfig.DeletePath(pChildrenPoFiles);
FConfig.DeletePath(pChildPoFiles);
Cnt := FChildPoList.Count;
FConfig.SetDeleteValue(pChildPoFiles+'Count',Cnt,0);
for i := 0 to Cnt - 1 do
FConfig.SetDeleteValue(pChildPoFiles+Format('Item_%d/Value',[i]),FChildPoList[i],'');
end;
procedure TPoCheckerSettings.SetChildPoList(AValue: TStrings);
begin
FChildPoList.Assign(AValue);
end;
procedure TPoCheckerSettings.SetMasterPoList(AValue: TStrings);
begin
FMasterPoList.Assign(AValue);
end;
constructor TPoCheckerSettings.Create;
@ -340,6 +424,12 @@ begin
FTestTypes := [];
FTestOptions := [];
FMainFormGeometry := Rect(-1,-1,-1,-1);
FMasterPoList := TStringList.Create;
FMasterPoList.Sorted := True;
FMasterPoList.Duplicates := dupIgnore;
FChildPoList := TStringList.Create;
FChildPoList.Sorted := True;
FChildPoList.Duplicates := dupIgnore;
{$ifdef POCHECKERSTANDALONE}
FFilename := GetAndCreateConfigPath;
if (FFilename <> '') then FFilename := AppendPathDelim(FFilename);
@ -365,6 +455,8 @@ end;
destructor TPoCheckerSettings.Destroy;
begin
if Assigned(FConfig) then FConfig.Free;
FMasterPoList.Free;
FChildPoList.Free;
inherited Destroy;
end;
@ -377,10 +469,12 @@ begin
FTestTypes := LoadTestTypes;
FTestOptions := LoadTestOptions;
FLastSelectedFile := LoadLastSelectedFile;
FSelectDirectoryFilename := LoadSelectDirectoryFilename;
FOpenDialogFilename := LoadOpenDialogFilename;
FExternalEditorName := LoadExternalEditorName;
LoadWindowsGeometry;
LoadMasterPoList(FMasterPoList);
LoadChildrenPoList(FChildrenPoList);
LoadChildPoList(FChildPoList);
end;
except
FTestTypes := [];
@ -400,6 +494,8 @@ begin
SaveTestTypes;
SaveTestOptions;
SaveExternalEditorName;
SaveSelectDirectoryFilename;
SaveOpenDialogFilename;
SaveWindowsGeometry;
SaveMasterPoList;
SaveChildrenPoList;
@ -407,7 +503,7 @@ begin
else
begin
FConfig.DeletePath(pMasterPoFiles);
FConfig.DeletePath(pChildrenPoFiles);
FConfig.DeletePath(pChildPoFiles);
end;
FConfig.WriteToDisk;
except