EditorPreferences.cpp 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254
  1. //---------------------------------------------------------------------------
  2. #include <FormsPCH.h>
  3. #pragma hdrstop
  4. #include "EditorPreferences.h"
  5. //---------------------------------------------------------------------------
  6. #pragma package(smart_init)
  7. #pragma link "HistoryComboBox"
  8. #pragma resource "*.dfm"
  9. //---------------------------------------------------------------------------
  10. bool __fastcall DoEditorPreferencesDialog(TEditorData * Editor,
  11. bool & Remember, TEditorPreferencesMode Mode, bool MayRemote)
  12. {
  13. bool Result;
  14. TEditorPreferencesDialog * Dialog = SafeFormCreate<TEditorPreferencesDialog>();
  15. try
  16. {
  17. Dialog->Init(Mode, MayRemote);
  18. Result = Dialog->Execute(Editor, Remember);
  19. }
  20. __finally
  21. {
  22. delete Dialog;
  23. }
  24. return Result;
  25. }
  26. //---------------------------------------------------------------------------
  27. __fastcall TEditorPreferencesDialog::TEditorPreferencesDialog(
  28. TComponent * Owner) :
  29. TForm(Owner)
  30. {
  31. SetCorrectFormParent(this);
  32. UseSystemSettings(this);
  33. UnicodeString ExecutableDescription;
  34. UnicodeString UsageState;
  35. bool TryNextTime;
  36. if (DetectSystemExternalEditor(true, FSystemExternalEditor, ExecutableDescription, UsageState, TryNextTime))
  37. {
  38. FSystemExternalEditor = FormatCommand(FSystemExternalEditor, L"");
  39. }
  40. }
  41. //---------------------------------------------------------------------------
  42. void __fastcall TEditorPreferencesDialog::Init(TEditorPreferencesMode Mode, bool MayRemote)
  43. {
  44. int CaptionId;
  45. switch (Mode)
  46. {
  47. case epmEdit:
  48. CaptionId = EDITOR_EDIT;
  49. break;
  50. case epmAdd:
  51. CaptionId = EDITOR_ADD;
  52. break;
  53. case epmAdHoc:
  54. CaptionId = EDITOR_AD_HOC;
  55. break;
  56. }
  57. Caption = LoadStr(CaptionId);
  58. if (Mode == epmAdHoc)
  59. {
  60. int Shift = ExternalEditorEdit->Left - MaskEdit->Left;
  61. ExternalEditorEdit->Left = MaskEdit->Left;
  62. ExternalEditorEdit->Width = ExternalEditorEdit->Width + Shift;
  63. Shift = ExternalEditorEdit->Top - MaskEdit->Top;
  64. ExternalEditorEdit->Top = MaskEdit->Top;
  65. ExternalEditorBrowseButton->Top = ExternalEditorBrowseButton->Top - Shift;
  66. Shift += (EditorExternalButton->Top - EditorInternalButton->Top);
  67. EditorGroup2->Height = EditorGroup2->Height - Shift;
  68. TLabel * ExternalEditorLabel = CreateLabel(this);
  69. ExternalEditorLabel->Caption = EditorExternalButton->Caption;
  70. ExternalEditorLabel->Parent = EditorGroup2;
  71. ExternalEditorLabel->Top = MaskLabel->Top;
  72. ExternalEditorLabel->Left = MaskLabel->Left;
  73. ExternalEditorLabel->FocusControl = ExternalEditorEdit;
  74. EditorInternalButton->Visible = false;
  75. EditorExternalButton->Visible = false;
  76. EditorOpenButton->Visible = false;
  77. DefaultButton->Top = DefaultButton->Top - Shift;
  78. DefaultButton->Left = ExternalEditorEdit->Left;
  79. Shift += ExternalEditorGroup->Top - MaskGroup->Top;
  80. MaskGroup->Visible = false;
  81. ExternalEditorGroup->Top = ExternalEditorGroup->Top - Shift;
  82. Height = Height - Shift;
  83. }
  84. else
  85. {
  86. int Shift = OkButton->Top - RememberCheck->Top;
  87. RememberCheck->Visible = false;
  88. Height = Height - Shift;
  89. }
  90. FMayRemote = MayRemote;
  91. }
  92. //---------------------------------------------------------------------------
  93. bool __fastcall TEditorPreferencesDialog::Execute(TEditorData * Editor, bool & Remember)
  94. {
  95. EditorInternalButton->Checked = (Editor->Editor == edInternal);
  96. EditorExternalButton->Checked = (Editor->Editor == edExternal);
  97. EditorOpenButton->Checked = (Editor->Editor == edOpen);
  98. UnicodeString ExternalEditor = Editor->ExternalEditor;
  99. if (!ExternalEditor.IsEmpty())
  100. {
  101. ReformatFileNameCommand(ExternalEditor);
  102. }
  103. ExternalEditorEdit->Text = ExternalEditor;
  104. ExternalEditorEdit->Items = CustomWinConfiguration->History[L"ExternalEditor"];
  105. FExternalEditorDefaults = GetExternalEditorDefaults();
  106. MaskEdit->Text = Editor->FileMask.Masks;
  107. MaskEdit->Items = CustomWinConfiguration->History[L"Mask"];
  108. ExternalEditorTextCheck->Checked = Editor->ExternalEditorText;
  109. SDIExternalEditorCheck->Checked = Editor->SDIExternalEditor;
  110. RememberCheck->Checked = Remember;
  111. UpdateControls();
  112. bool Result = (ShowModal() == DefaultResult(this));
  113. if (Result)
  114. {
  115. if (EditorExternalButton->Checked)
  116. {
  117. Editor->Editor = edExternal;
  118. }
  119. else if (EditorOpenButton->Checked)
  120. {
  121. Editor->Editor = edOpen;
  122. }
  123. else
  124. {
  125. Editor->Editor = edInternal;
  126. }
  127. Editor->ExternalEditor = ExternalEditorEdit->Text;
  128. ExternalEditorEdit->SaveToHistory();
  129. CustomWinConfiguration->History[L"ExternalEditor"] = ExternalEditorEdit->Items;
  130. Editor->FileMask = MaskEdit->Text;
  131. MaskEdit->SaveToHistory();
  132. CustomWinConfiguration->History[L"Mask"] = MaskEdit->Items;
  133. Editor->ExternalEditorText = ExternalEditorTextCheck->Checked;
  134. Editor->SDIExternalEditor = SDIExternalEditorCheck->Checked;
  135. Remember = RememberCheck->Checked;
  136. }
  137. return Result;
  138. }
  139. //---------------------------------------------------------------------------
  140. void __fastcall TEditorPreferencesDialog::ExternalEditorEditExit(
  141. TObject * Sender)
  142. {
  143. // duplicated in TPreferencesDialog::FilenameEditExit
  144. THistoryComboBox * FilenameEdit = dynamic_cast<THistoryComboBox *>(Sender);
  145. try
  146. {
  147. UnicodeString Filename = FilenameEdit->Text;
  148. if (!Filename.IsEmpty())
  149. {
  150. ReformatFileNameCommand(Filename);
  151. FilenameEdit->Text = Filename;
  152. }
  153. ControlChange(Sender);
  154. }
  155. catch(...)
  156. {
  157. FilenameEdit->SelectAll();
  158. FilenameEdit->SetFocus();
  159. throw;
  160. }
  161. ExternalEditorOptionsAutodetect();
  162. }
  163. //---------------------------------------------------------------------------
  164. TEditorData __fastcall TEditorPreferencesDialog::GetExternalEditorDefaults()
  165. {
  166. TEditorData Result;
  167. Result.ExternalEditor = ExternalEditorEdit->Text;
  168. Result.ExternalEditorOptionsAutodetect();
  169. return Result;
  170. }
  171. //---------------------------------------------------------------------------
  172. void __fastcall TEditorPreferencesDialog::ExternalEditorOptionsAutodetect()
  173. {
  174. DebugAssert(EditorExternalButton->Checked);
  175. TEditorData Defaults = GetExternalEditorDefaults();
  176. if (!(FExternalEditorDefaults == Defaults))
  177. {
  178. ExternalEditorTextCheck->Checked = Defaults.ExternalEditorText;
  179. SDIExternalEditorCheck->Checked = Defaults.SDIExternalEditor;
  180. FExternalEditorDefaults = Defaults;
  181. UpdateControls();
  182. }
  183. }
  184. //---------------------------------------------------------------------------
  185. void __fastcall TEditorPreferencesDialog::ExternalEditorBrowseButtonClick(
  186. TObject * /*Sender*/)
  187. {
  188. BrowseForExecutable(ExternalEditorEdit,
  189. LoadStr(PREFERENCES_SELECT_EXTERNAL_EDITOR),
  190. LoadStr(EXECUTABLE_FILTER), true, false);
  191. ExternalEditorOptionsAutodetect();
  192. }
  193. //---------------------------------------------------------------------------
  194. void __fastcall TEditorPreferencesDialog::HelpButtonClick(TObject * /*Sender*/)
  195. {
  196. FormHelp(this);
  197. }
  198. //---------------------------------------------------------------------------
  199. void __fastcall TEditorPreferencesDialog::ControlChange(TObject * /*Sender*/)
  200. {
  201. UpdateControls();
  202. }
  203. //---------------------------------------------------------------------------
  204. void __fastcall TEditorPreferencesDialog::UpdateControls()
  205. {
  206. EnableControl(OkButton,
  207. EditorInternalButton->Checked || EditorOpenButton->Checked ||
  208. !ExternalEditorEdit->Text.IsEmpty());
  209. EnableControl(ExternalEditorEdit, EditorExternalButton->Checked);
  210. EnableControl(ExternalEditorBrowseButton, EditorExternalButton->Checked);
  211. EnableControl(ExternalEditorGroup, EditorExternalButton->Checked && FMayRemote);
  212. EnableControl(DefaultButton, !FSystemExternalEditor.IsEmpty());
  213. }
  214. //---------------------------------------------------------------------------
  215. void __fastcall TEditorPreferencesDialog::FormCloseQuery(TObject * /*Sender*/,
  216. bool & /*CanClose*/)
  217. {
  218. if (ModalResult == DefaultResult(this))
  219. {
  220. ExitActiveControl(this);
  221. }
  222. }
  223. //---------------------------------------------------------------------------
  224. void __fastcall TEditorPreferencesDialog::MaskEditExit(TObject * /*Sender*/)
  225. {
  226. ValidateMaskEdit(MaskEdit);
  227. }
  228. //---------------------------------------------------------------------------
  229. void __fastcall TEditorPreferencesDialog::FormShow(TObject * /*Sender*/)
  230. {
  231. InstallPathWordBreakProc(ExternalEditorEdit);
  232. }
  233. //---------------------------------------------------------------------------
  234. void __fastcall TEditorPreferencesDialog::DefaultButtonClick(TObject * /*Sender*/)
  235. {
  236. EditorExternalButton->Checked = true;
  237. ExternalEditorEdit->Text = FSystemExternalEditor;
  238. UpdateControls();
  239. ExternalEditorOptionsAutodetect();
  240. }
  241. //---------------------------------------------------------------------------