123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254 |
- //---------------------------------------------------------------------------
- #include <FormsPCH.h>
- #pragma hdrstop
- #include "EditorPreferences.h"
- //---------------------------------------------------------------------------
- #pragma package(smart_init)
- #pragma link "HistoryComboBox"
- #pragma resource "*.dfm"
- //---------------------------------------------------------------------------
- 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 = CreateLabel(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"];
- FExternalEditorDefaults = GetExternalEditorDefaults();
- 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;
- }
- ExternalEditorOptionsAutodetect();
- }
- //---------------------------------------------------------------------------
- TEditorData __fastcall TEditorPreferencesDialog::GetExternalEditorDefaults()
- {
- TEditorData Result;
- Result.ExternalEditor = ExternalEditorEdit->Text;
- Result.ExternalEditorOptionsAutodetect();
- return Result;
- }
- //---------------------------------------------------------------------------
- void __fastcall TEditorPreferencesDialog::ExternalEditorOptionsAutodetect()
- {
- DebugAssert(EditorExternalButton->Checked);
- TEditorData Defaults = GetExternalEditorDefaults();
- if (!(FExternalEditorDefaults == Defaults))
- {
- ExternalEditorTextCheck->Checked = Defaults.ExternalEditorText;
- SDIExternalEditorCheck->Checked = Defaults.SDIExternalEditor;
- FExternalEditorDefaults = Defaults;
- UpdateControls();
- }
- }
- //---------------------------------------------------------------------------
- void __fastcall TEditorPreferencesDialog::ExternalEditorBrowseButtonClick(
- TObject * /*Sender*/)
- {
- BrowseForExecutable(ExternalEditorEdit,
- LoadStr(PREFERENCES_SELECT_EXTERNAL_EDITOR),
- LoadStr(EXECUTABLE_FILTER), true, false);
- ExternalEditorOptionsAutodetect();
- }
- //---------------------------------------------------------------------------
- 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();
- ExternalEditorOptionsAutodetect();
- }
- //---------------------------------------------------------------------------
|