НАСТРОЙКИ

Отображение формы настроек переделано. Теперь она создаётся только 1 раз при первом вызове.
Добавлен выпадающий списк для выбора локализаций. Кнопка сброса к дефолту изменена.
Чтение настроек из abtool.ini (кроме локализаций). Сброс контроллов к актуальным настройкам при каждом показе формы настроек.
Считанные настройки хранятся в глобальной переменной внутри uOptions. Таким образом:
- исключены циклические ссылки с участием dMain ради доступа к настройкам
- теперь можно только вызвать конструктор TOptions, а сам созданный объект нигде не сохранять: объект GlobalOptions уже будет доступен
Новая функция dMain.GetLocalesIniFileList для получения списка файлов локализаций.
Обновлены ini-файлы. Мелочи по оформлению кода.
This commit is contained in:
2019-01-26 01:37:22 +08:00
parent e968856a55
commit 685274a356
15 changed files with 1325 additions and 194 deletions
+62 -15
View File
@@ -5,15 +5,14 @@ unit fOptions;
interface
uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ButtonPanel,
ComCtrls, ExtCtrls, StdCtrls, Menus, Types;
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs,
ComCtrls, ExtCtrls, StdCtrls, Menus, Buttons, uOptions;
type
{ TfmOptions }
TfmOptions = class(TForm)
btnSetDefault: TButton;
btnSave: TButton;
btnClose: TButton;
btnCheckUpdates: TButton;
@@ -33,6 +32,7 @@ type
cbHideOnTool: TCheckBox;
cbDrawOutlines: TCheckBox;
cbScreenSnap: TCheckBox;
cmbLanguage: TComboBox;
grpOptMainform: TGroupBox;
grpOptInstall: TGroupBox;
grpOptTools: TGroupBox;
@@ -40,18 +40,20 @@ type
labAboutTitle: TLabel;
labCopyright: TLabel;
labDescription: TLabel;
Label1: TLabel;
mmLicenseText: TMemo;
PageControl: TPageControl;
pnLanguage: TPanel;
btnSetDefault: TSpeedButton;
tabCommon: TTabSheet;
tabPackages: TTabSheet;
tabAbout: TTabSheet;
tabLicense: TTabSheet;
procedure btnCloseClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure tabAboutContextPopup(Sender: TObject; MousePos: TPoint;
var Handled: Boolean);
procedure btnSaveClick(Sender: TObject);
procedure FormClose(Sender: TObject; var CloseAction: TCloseAction);
procedure FormShow(Sender: TObject);
private
procedure ResetControlls;
public
end;
@@ -65,20 +67,65 @@ implementation
{ TfmOptions }
procedure TfmOptions.FormCreate(Sender: TObject);
{------------------------------------------------------------------------------
Процедура: TfmOptions.btnSaveClick()
Назначение: Закрытие формы настроек и возврат модального результата при клике
по кнопке "Сохранить"
Описание: Закрытие формы происходит автоматически благодаря свойству
ModalResult = mrOK, заданному кнопке в инспекторе объектов.
------------------------------------------------------------------------------}
procedure TfmOptions.btnSaveClick(Sender: TObject);
begin
//TODO сохранение настроек
end;
procedure TfmOptions.btnCloseClick(Sender: TObject);
{------------------------------------------------------------------------------
Процедура: TfmOptions.FormClose()
Назначение: Закрытие формы при её закрытии через кнопку в заголовке и возврат
модального результата
------------------------------------------------------------------------------}
procedure TfmOptions.FormClose(Sender: TObject; var CloseAction: TCloseAction);
begin
Self.Destroy;
ModalResult := mrClose;
end;
procedure TfmOptions.tabAboutContextPopup(Sender: TObject; MousePos: TPoint;
var Handled: Boolean);
{------------------------------------------------------------------------------
Процедура: TfmOptions.FormShow()
Назначение: Показ окна настроек
Описание: Форма настроек создаётся однажды при её первом вызове. При закрытии
она не уничтожается. Она может быть закрыта без сохранения настроек. При
повторном открытии окна контроллы должны принять состояние, соответствущее
текущим (при запуске или прошлом сохранении) настройкам. В противном случае,
повторное открытие окна отобразит прошлые несохранённые изменения - это
введёт пользователя в заблуждение и он примет эти настройки как текущие.
------------------------------------------------------------------------------}
procedure TfmOptions.FormShow(Sender: TObject);
begin
ResetControlls;
end;
{------------------------------------------------------------------------------
Процедура: TfmOptions.ResetControlls()
Назначение: Сброс состояния контроллов в сооответствии с текущими настройками
------------------------------------------------------------------------------}
procedure TfmOptions.ResetControlls;
begin
cmbLanguage.Items := GlobalOptions.ReadAvailableLocales(false);
cbScreenSnap.Checked := GlobalOptions.ScreenSnap;
cbShowPkgDesc.Checked := GlobalOptions.ShowPkgDesc;
cbDrawOutlines.Checked := GlobalOptions.DrawOutlines;
cbOnTop.Checked := GlobalOptions.OnTop;
cbChkExitCodes.Checked := GlobalOptions.ChkExitCodes;
cbDntUnChkItems.Checked := GlobalOptions.DntUnChkItems;
cbColorSoftTree.Checked := GlobalOptions.ColorSoftTree;
cbShowProgress.Checked := GlobalOptions.ShowProgress;
cbQuietREG.Checked := GlobalOptions.QuietREG;
cbExpandSoft.Checked := GlobalOptions.ExpandSoft;
cbHideOnTool.Checked := GlobalOptions.HideOnTool;
cbExpandTools.Checked := GlobalOptions.ExpandTools;
end;
end.