Componentes.Terceros.DevExp.../internal/x.44/1/ExpressSpellChecker/Sources/dxSpellCheckerAutoCorrectOptionsDialog.pas
2009-06-29 12:09:02 +00:00

278 lines
8.9 KiB
ObjectPascal

unit dxSpellCheckerAutoCorrectOptionsDialog;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, dxSpellCheckerBaseForm, dxSpellChecker, cxLookAndFeelPainters,
cxControls, cxContainer, cxEdit, cxGroupBox, Menus, StdCtrls, cxButtons,
cxCheckBox, cxLabel, cxTextEdit, ComCtrls, cxListView;
type
{ TdxCustomSpellCheckerAutoCorrectForm }
TdxCustomSpellCheckerAutoCorrectForm = class(TfmSpellCheckerBaseForm)
private
FOptions: TdxSpellCheckerAutoCorrectOptions;
protected
procedure ApplyChanges; virtual;
property Options: TdxSpellCheckerAutoCorrectOptions read FOptions;
public
constructor CreateEx(AOptions: TdxSpellCheckerAutoCorrectOptions); virtual;
function ShowModal: Integer; override;
end;
TdxCustomSpellCheckerAutoCorrectFormClass = class of TdxCustomSpellCheckerAutoCorrectForm;
{ TfmSpellCheckerAutoCorrectExceptionsForm }
TfmSpellCheckerAutoCorrectOptionsForm = class(TdxCustomSpellCheckerAutoCorrectForm)
btnOk: TcxButton;
btnCancel: TcxButton;
gbCapitalize: TcxGroupBox;
cbCorrectInitialCaps: TcxCheckBox;
cbCorrectSentenceCaps: TcxCheckBox;
cbCorrectCapsLock: TcxCheckBox;
cbReplaceTextAsYouType: TcxCheckBox;
btnExceptions: TcxButton;
gbReplaceTextAsYouType: TcxGroupBox;
lbReplace: TcxLabel;
lbWith: TcxLabel;
teReplace: TcxTextEdit;
teWith: TcxTextEdit;
lvReplacements: TcxListView;
btnDelete: TcxButton;
btnOperation: TcxButton;
cbDisableCapsLock: TcxCheckBox;
cbAutomaticallyUseSuggestions: TcxCheckBox;
procedure btnExceptionsClick(Sender: TObject);
procedure teReplacePropertiesChange(Sender: TObject);
procedure lvReplacementsClick(Sender: TObject);
procedure btnOperationClick(Sender: TObject);
procedure btnDeleteClick(Sender: TObject);
private
function IsAddOperation: Boolean;
procedure PopulateReplaces;
procedure SelectItem;
procedure SynchronizeDialogWithOptions;
procedure SynchronizeOptionsWithDialog;
procedure UpdateButtonsState;
procedure UpdateButtonsCaption;
protected
procedure ApplyChanges; override;
procedure Initialize; virtual;
procedure Localize; override;
public
constructor CreateEx(AOptions: TdxSpellCheckerAutoCorrectOptions); override;
end;
implementation
uses
cxClasses, dxSpellCheckerStrs, dxSpellCheckerUtils, dxSpellCheckerDialogs,
DateUtils;
{$R *.dfm}
{ TdxCustomSpellCheckerAutoCorrectForm }
constructor TdxCustomSpellCheckerAutoCorrectForm.CreateEx(
AOptions: TdxSpellCheckerAutoCorrectOptions);
begin
inherited Create(Application);
FOptions := AOptions;
Localize;
end;
function TdxCustomSpellCheckerAutoCorrectForm.ShowModal: Integer;
begin
Result := inherited ShowModal;
if Result = mrOk then
ApplyChanges;
end;
procedure TdxCustomSpellCheckerAutoCorrectForm.ApplyChanges;
begin
end;
{ TfmSpellCheckerAutoCorrectExceptionsForm }
constructor TfmSpellCheckerAutoCorrectOptionsForm.CreateEx(AOptions: TdxSpellCheckerAutoCorrectOptions);
begin
inherited CreateEx(AOptions);
Initialize;
end;
procedure TfmSpellCheckerAutoCorrectOptionsForm.ApplyChanges;
begin
SynchronizeOptionsWithDialog;
end;
procedure TfmSpellCheckerAutoCorrectOptionsForm.Initialize;
begin
SynchronizeDialogWithOptions;
PopulateReplaces;
UpdateButtonsState;
UpdateButtonsCaption;
end;
procedure TfmSpellCheckerAutoCorrectOptionsForm.Localize;
begin
Caption := cxGetResourceString(@sdxSpellCheckerAutoCorrectOptionsFormCaption);
btnOk.Caption := cxGetResourceString(@sdxSpellCheckerOkButton);
btnCancel.Caption := cxGetResourceString(@sdxSpellCheckerCancelButton);
gbCapitalize.Caption := cxGetResourceString(@sdxSpellCheckerAutoCorrectCapitalize);
cbCorrectSentenceCaps.Caption := cxGetResourceString(@sdxSpellCheckerAutoCorrectCorrectSentenceCaps);
cbCorrectInitialCaps.Caption := cxGetResourceString(@sdxSpellCheckerAutoCorrectCorrectInitialCaps);
cbCorrectCapsLock.Caption := cxGetResourceString(@sdxSpellCheckerAutoCorrectCorrectCapsLock);
cbDisableCapsLock.Caption := cxGetResourceString(@sdxSpellCheckerAutoCorrectDisableCapsLock);
cbAutomaticallyUseSuggestions.Caption := cxGetResourceString(@sdxSpellCheckerAutoCorrectAutomaticallyUseSuggestions);
gbReplaceTextAsYouType.Caption := cxGetResourceString(@sdxSpellCheckerAutoCorrectReplaceTextAsYouType);
cbReplaceTextAsYouType.Caption := cxGetResourceString(@sdxSpellCheckerActive);
btnExceptions.Caption := cxGetResourceString(@sdxSpellCheckerExceptionsButton);
lbReplace.Caption := cxGetResourceString(@sdxSpellCheckerAutoCorrectReplace);
lbWith.Caption := cxGetResourceString(@sdxSpellCheckerAutoCorrectWith);
btnOperation.Caption := cxGetResourceString(@sdxSpellCheckerAddButton);
btnDelete.Caption := cxGetResourceString(@sdxSpellCheckerDeleteButton);
end;
function TfmSpellCheckerAutoCorrectOptionsForm.IsAddOperation: Boolean;
begin
Result := Options.Replacements.FindReplacement(teReplace.Text) = nil;
end;
procedure TfmSpellCheckerAutoCorrectOptionsForm.PopulateReplaces;
var
I: Integer;
begin
lvReplacements.Items.BeginUpdate;
try
lvReplacements.Items.Clear;
for I := 0 to Options.Replacements.Count - 1 do
with lvReplacements.Items.Add do
begin
Caption := Options.Replacements[I].Text;
SubItems.Add(Options.Replacements[I].Replacement);
end;
finally
lvReplacements.Items.EndUpdate;
end;
end;
procedure TfmSpellCheckerAutoCorrectOptionsForm.SelectItem;
var
I: Integer;
begin
for I := 0 to lvReplacements.Items.Count - 1 do
if WideCompareText(teReplace.Text, lvReplacements.Items[I].Caption) = 0 then
lvReplacements.ItemIndex := I;
end;
procedure TfmSpellCheckerAutoCorrectOptionsForm.SynchronizeDialogWithOptions;
begin
with Options do
begin
cbCorrectSentenceCaps.Checked := CorrectSentenceCaps;
cbCorrectCapsLock.Checked := CorrectCapsLock;
cbCorrectInitialCaps.Checked := CorrectInitialCaps;
cbDisableCapsLock.Checked := DisableCapsLock;
cbReplaceTextAsYouType.Checked := ReplaceTextAsYouType;
cbAutomaticallyUseSuggestions.Checked := AutomaticallyUseSuggestions;
end;
end;
procedure TfmSpellCheckerAutoCorrectOptionsForm.SynchronizeOptionsWithDialog;
begin
with Options do
begin
CorrectSentenceCaps := cbCorrectSentenceCaps.Checked;
CorrectCapsLock := cbCorrectCapsLock.Checked;
CorrectInitialCaps := cbCorrectInitialCaps.Checked;
DisableCapsLock := cbDisableCapsLock.Checked;
ReplaceTextAsYouType := cbReplaceTextAsYouType.Checked;
AutomaticallyUseSuggestions := cbAutomaticallyUseSuggestions.Checked;
end;
end;
procedure TfmSpellCheckerAutoCorrectOptionsForm.UpdateButtonsState;
var
AItem: TdxSpellCheckerReplacement;
begin
AItem := Options.Replacements.FindReplacement(teReplace.Text);
btnDelete.Enabled := AItem <> nil;
btnOperation.Enabled := (Length(teReplace.Text) > 0) and
(not btnDelete.Enabled or (WideCompareStr(AItem.Replacement, teWith.Text) <> 0));
end;
procedure TfmSpellCheckerAutoCorrectOptionsForm.UpdateButtonsCaption;
begin
if IsAddOperation then
btnOperation.Caption := cxGetResourceString(@sdxSpellCheckerAddButton)
else
btnOperation.Caption := cxGetResourceString(@sdxSpellCheckerReplaceButton);
end;
procedure TfmSpellCheckerAutoCorrectOptionsForm.btnExceptionsClick(
Sender: TObject);
begin
dxShowAutoCorrectExceptionsDialog(Options.SpellChecker, gbCapitalize.LookAndFeel);
end;
procedure TfmSpellCheckerAutoCorrectOptionsForm.teReplacePropertiesChange(
Sender: TObject);
begin
SelectItem;
UpdateButtonsState;
UpdateButtonsCaption;
end;
procedure TfmSpellCheckerAutoCorrectOptionsForm.lvReplacementsClick(
Sender: TObject);
var
AItem: TListItem;
begin
AItem := lvReplacements.ItemFocused;
if AItem <> nil then
begin
teReplace.Text := AItem.Caption;
if AItem.SubItems.Count > 0 then
teWith.Text := AItem.SubItems[0];
UpdateButtonsState;
UpdateButtonsCaption;
end;
end;
procedure TfmSpellCheckerAutoCorrectOptionsForm.btnOperationClick(
Sender: TObject);
var
AItem: TdxSpellCheckerReplacement;
begin
AItem := Options.Replacements.FindReplacement(teReplace.Text);
if AItem <> nil then
AItem.ChangeReplacement(teWith.Text)
else
Options.Replacements.Add(teReplace.Text, teWith.Text);
PopulateReplaces;
UpdateButtonsState;
UpdateButtonsCaption;
end;
procedure TfmSpellCheckerAutoCorrectOptionsForm.btnDeleteClick(
Sender: TObject);
var
AItem: TdxSpellCheckerReplacement;
begin
AItem := Options.Replacements.FindReplacement(teReplace.Text);
if AItem <> nil then
begin
Options.Replacements.Delete(Options.Replacements.IndexOf(AItem));
AItem.Free;
end;
PopulateReplaces;
UpdateButtonsState;
UpdateButtonsCaption;
end;
end.