1
0

EditorPreferences.cpp 8.3 KB

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