| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249 | //---------------------------------------------------------------------------#include <vcl.h>#pragma hdrstop#include <Common.h>#include <WinConfiguration.h>#include <WinInterface.h>#include <VCLCommon.h>#include <TextsWin.h>#include <Tools.h>#include <CoreMain.h>#include "EditorPreferences.h"//---------------------------------------------------------------------------#pragma package(smart_init)#pragma link "HistoryComboBox"#ifndef NO_RESOURCES#pragma resource "*.dfm"#endif//---------------------------------------------------------------------------bool __fastcall DoEditorPreferencesDialog(TEditorData * Editor,  bool & Remember, TEditorPreferencesMode Mode, bool MayRemote){  bool Result;  TEditorPreferencesDialog * Dialog = SafeFormCreate<TEditorPreferencesDialog>();  try  {    Dialog->Init(Mode, MayRemote);    Result = Dialog->Execute(Editor, Remember);  }  __finally  {    delete Dialog;  }  return Result;}//---------------------------------------------------------------------------__fastcall TEditorPreferencesDialog::TEditorPreferencesDialog(  TComponent * Owner) :  TForm(Owner){  SetCorrectFormParent(this);  UseSystemSettings(this);  UnicodeString ExecutableDescription;  UnicodeString UsageState;  bool TryNextTime;  if (DetectSystemExternalEditor(true, FSystemExternalEditor, ExecutableDescription, UsageState, TryNextTime))  {    FSystemExternalEditor = FormatCommand(FSystemExternalEditor, L"");  }}//---------------------------------------------------------------------------void __fastcall TEditorPreferencesDialog::Init(TEditorPreferencesMode Mode, bool MayRemote){  int CaptionId;  switch (Mode)  {    case epmEdit:      CaptionId = EDITOR_EDIT;      break;    case epmAdd:      CaptionId = EDITOR_ADD;      break;    case epmAdHoc:      CaptionId = EDITOR_AD_HOC;      break;  }  Caption = LoadStr(CaptionId);  if (Mode == epmAdHoc)  {    int Shift = ExternalEditorEdit->Left - MaskEdit->Left;    ExternalEditorEdit->Left = MaskEdit->Left;    ExternalEditorEdit->Width = ExternalEditorEdit->Width + Shift;    Shift = ExternalEditorEdit->Top - MaskEdit->Top;    ExternalEditorEdit->Top = MaskEdit->Top;    ExternalEditorBrowseButton->Top = ExternalEditorBrowseButton->Top - Shift;    Shift += (EditorExternalButton->Top - EditorInternalButton->Top);    EditorGroup2->Height = EditorGroup2->Height - Shift;    TLabel * ExternalEditorLabel = new TLabel(this);    ExternalEditorLabel->Caption = EditorExternalButton->Caption;    ExternalEditorLabel->Parent = EditorGroup2;    ExternalEditorLabel->Top = MaskLabel->Top;    ExternalEditorLabel->Left = MaskLabel->Left;    ExternalEditorLabel->FocusControl = ExternalEditorEdit;    EditorInternalButton->Visible = false;    EditorExternalButton->Visible = false;    EditorOpenButton->Visible = false;    DefaultButton->Top = DefaultButton->Top - Shift;    DefaultButton->Left = ExternalEditorEdit->Left;    Shift += ExternalEditorGroup->Top - MaskGroup->Top;    MaskGroup->Visible = false;    ExternalEditorGroup->Top = ExternalEditorGroup->Top - Shift;    Height = Height - Shift;  }  else  {    int Shift = OkButton->Top - RememberCheck->Top;    RememberCheck->Visible = false;    Height = Height - Shift;  }  FMayRemote = MayRemote;}//---------------------------------------------------------------------------bool __fastcall TEditorPreferencesDialog::Execute(TEditorData * Editor, bool & Remember){  EditorInternalButton->Checked = (Editor->Editor == edInternal);  EditorExternalButton->Checked = (Editor->Editor == edExternal);  EditorOpenButton->Checked = (Editor->Editor == edOpen);  UnicodeString ExternalEditor = Editor->ExternalEditor;  if (!ExternalEditor.IsEmpty())  {    ReformatFileNameCommand(ExternalEditor);  }  ExternalEditorEdit->Text = ExternalEditor;  ExternalEditorEdit->Items = CustomWinConfiguration->History[L"ExternalEditor"];  MaskEdit->Text = Editor->FileMask.Masks;  MaskEdit->Items = CustomWinConfiguration->History[L"Mask"];  ExternalEditorTextCheck->Checked = Editor->ExternalEditorText;  SDIExternalEditorCheck->Checked = Editor->SDIExternalEditor;  RememberCheck->Checked = Remember;  UpdateControls();  bool Result = (ShowModal() == DefaultResult(this));  if (Result)  {    if (EditorExternalButton->Checked)    {      Editor->Editor = edExternal;    }    else if (EditorOpenButton->Checked)    {      Editor->Editor = edOpen;    }    else    {      Editor->Editor = edInternal;    }    Editor->ExternalEditor = ExternalEditorEdit->Text;    ExternalEditorEdit->SaveToHistory();    CustomWinConfiguration->History[L"ExternalEditor"] = ExternalEditorEdit->Items;    Editor->FileMask = MaskEdit->Text;    MaskEdit->SaveToHistory();    CustomWinConfiguration->History[L"Mask"] = MaskEdit->Items;    Editor->ExternalEditorText = ExternalEditorTextCheck->Checked;    Editor->SDIExternalEditor = SDIExternalEditorCheck->Checked;    Remember = RememberCheck->Checked;  }  return Result;}//---------------------------------------------------------------------------void __fastcall TEditorPreferencesDialog::ExternalEditorEditExit(  TObject * Sender){  // duplicated in TPreferencesDialog::FilenameEditExit  THistoryComboBox * FilenameEdit = dynamic_cast<THistoryComboBox *>(Sender);  try  {    UnicodeString Filename = FilenameEdit->Text;    if (!Filename.IsEmpty())    {      ReformatFileNameCommand(Filename);      FilenameEdit->Text = Filename;    }    ControlChange(Sender);  }  catch(...)  {    FilenameEdit->SelectAll();    FilenameEdit->SetFocus();    throw;  }  DecideExternalEditorText();}//---------------------------------------------------------------------------void __fastcall TEditorPreferencesDialog::DecideExternalEditorText(){  if (TEditorData::DecideExternalEditorText(ExternalEditorEdit->Text))  {    ExternalEditorTextCheck->Checked = true;    UpdateControls();  }}//---------------------------------------------------------------------------void __fastcall TEditorPreferencesDialog::ExternalEditorBrowseButtonClick(  TObject * /*Sender*/){  BrowseForExecutable(ExternalEditorEdit,    LoadStr(PREFERENCES_SELECT_EXTERNAL_EDITOR),    LoadStr(EXECUTABLE_FILTER), true, false);  DecideExternalEditorText();}//---------------------------------------------------------------------------void __fastcall TEditorPreferencesDialog::HelpButtonClick(TObject * /*Sender*/){  FormHelp(this);}//---------------------------------------------------------------------------void __fastcall TEditorPreferencesDialog::ControlChange(TObject * /*Sender*/){  UpdateControls();}//---------------------------------------------------------------------------void __fastcall TEditorPreferencesDialog::UpdateControls(){  EnableControl(OkButton,    EditorInternalButton->Checked || EditorOpenButton->Checked ||    !ExternalEditorEdit->Text.IsEmpty());  EnableControl(ExternalEditorEdit, EditorExternalButton->Checked);  EnableControl(ExternalEditorBrowseButton, EditorExternalButton->Checked);  EnableControl(ExternalEditorGroup, EditorExternalButton->Checked && FMayRemote);  EnableControl(DefaultButton, !FSystemExternalEditor.IsEmpty());}//---------------------------------------------------------------------------void __fastcall TEditorPreferencesDialog::FormCloseQuery(TObject * /*Sender*/,  bool & /*CanClose*/){  if (ModalResult == DefaultResult(this))  {    ExitActiveControl(this);  }}//---------------------------------------------------------------------------void __fastcall TEditorPreferencesDialog::MaskEditExit(TObject * /*Sender*/){  ValidateMaskEdit(MaskEdit);}//---------------------------------------------------------------------------void __fastcall TEditorPreferencesDialog::FormShow(TObject * /*Sender*/){  InstallPathWordBreakProc(ExternalEditorEdit);}//---------------------------------------------------------------------------void __fastcall TEditorPreferencesDialog::DefaultButtonClick(TObject * /*Sender*/){  EditorExternalButton->Checked = true;  ExternalEditorEdit->Text = FSystemExternalEditor;  UpdateControls();  DecideExternalEditorText();}//---------------------------------------------------------------------------
 |