EditorPreferences.cpp 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215
  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. #ifndef NO_RESOURCES
  16. #pragma resource "*.dfm"
  17. #endif
  18. //---------------------------------------------------------------------------
  19. bool __fastcall DoEditorPreferencesDialog(TEditorData * Editor,
  20. bool & Remember, TEditorPreferencesMode Mode, bool MayRemote)
  21. {
  22. bool Result;
  23. TEditorPreferencesDialog * Dialog = SafeFormCreate<TEditorPreferencesDialog>();
  24. try
  25. {
  26. Dialog->Init(Mode, MayRemote);
  27. Result = Dialog->Execute(Editor, Remember);
  28. }
  29. __finally
  30. {
  31. delete Dialog;
  32. }
  33. return Result;
  34. }
  35. //---------------------------------------------------------------------------
  36. __fastcall TEditorPreferencesDialog::TEditorPreferencesDialog(
  37. TComponent * Owner) :
  38. TForm(Owner)
  39. {
  40. SetCorrectFormParent(this);
  41. UseSystemSettings(this);
  42. InstallPathWordBreakProc(ExternalEditorEdit);
  43. }
  44. //---------------------------------------------------------------------------
  45. void __fastcall TEditorPreferencesDialog::Init(TEditorPreferencesMode Mode, bool MayRemote)
  46. {
  47. int CaptionId;
  48. switch (Mode)
  49. {
  50. case epmEdit:
  51. CaptionId = EDITOR_EDIT;
  52. break;
  53. case epmAdd:
  54. CaptionId = EDITOR_ADD;
  55. break;
  56. case epmAdHoc:
  57. CaptionId = EDITOR_AD_HOC;
  58. break;
  59. }
  60. Caption = LoadStr(CaptionId);
  61. if (Mode == epmAdHoc)
  62. {
  63. int Shift = ExternalEditorEdit->Left - MaskEdit->Left;
  64. ExternalEditorEdit->Left = MaskEdit->Left;
  65. ExternalEditorEdit->Width = ExternalEditorEdit->Width + Shift;
  66. Shift = ExternalEditorEdit->Top - MaskEdit->Top;
  67. ExternalEditorEdit->Top = MaskEdit->Top;
  68. ExternalEditorBrowseButton->Top = ExternalEditorBrowseButton->Top - Shift;
  69. Shift += (EditorExternalButton->Top - EditorInternalButton->Top);
  70. EditorGroup2->Height = EditorGroup2->Height - Shift;
  71. TLabel * ExternalEditorLabel = new TLabel(this);
  72. ExternalEditorLabel->Caption = EditorExternalButton->Caption;
  73. ExternalEditorLabel->Parent = EditorGroup2;
  74. ExternalEditorLabel->Top = MaskLabel->Top;
  75. ExternalEditorLabel->Left = MaskLabel->Left;
  76. ExternalEditorLabel->FocusControl = ExternalEditorEdit;
  77. EditorInternalButton->Visible = false;
  78. EditorExternalButton->Visible = false;
  79. EditorOpenButton->Visible = false;
  80. Shift += ExternalEditorGroup->Top - MaskGroup->Top;
  81. MaskGroup->Visible = false;
  82. ExternalEditorGroup->Top = ExternalEditorGroup->Top - Shift;
  83. Height = Height - Shift;
  84. }
  85. else
  86. {
  87. int Shift = OkButton->Top - RememberCheck->Top;
  88. RememberCheck->Visible = false;
  89. Height = Height - Shift;
  90. }
  91. FMayRemote = MayRemote;
  92. }
  93. //---------------------------------------------------------------------------
  94. bool __fastcall TEditorPreferencesDialog::Execute(TEditorData * Editor, bool & Remember)
  95. {
  96. EditorInternalButton->Checked = (Editor->Editor == edInternal);
  97. EditorExternalButton->Checked = (Editor->Editor == edExternal);
  98. EditorOpenButton->Checked = (Editor->Editor == edOpen);
  99. AnsiString ExternalEditor = Editor->ExternalEditor;
  100. if (!ExternalEditor.IsEmpty())
  101. {
  102. ReformatFileNameCommand(ExternalEditor);
  103. }
  104. ExternalEditorEdit->Text = ExternalEditor;
  105. ExternalEditorEdit->Items = CustomWinConfiguration->History["ExternalEditor"];
  106. MaskEdit->Text = Editor->FileMask.Masks;
  107. MaskEdit->Items = CustomWinConfiguration->History["Mask"];
  108. ExternalEditorTextCheck->Checked = Editor->ExternalEditorText;
  109. SDIExternalEditorCheck->Checked = Editor->SDIExternalEditor;
  110. RememberCheck->Checked = Remember;
  111. UpdateControls();
  112. bool Result = (ShowModal() == mrOk);
  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["ExternalEditor"] = ExternalEditorEdit->Items;
  130. Editor->FileMask = MaskEdit->Text;
  131. MaskEdit->SaveToHistory();
  132. CustomWinConfiguration->History["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. AnsiString 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. }
  162. //---------------------------------------------------------------------------
  163. void __fastcall TEditorPreferencesDialog::ExternalEditorBrowseButtonClick(
  164. TObject * /*Sender*/)
  165. {
  166. BrowseForExecutable(ExternalEditorEdit,
  167. LoadStr(PREFERENCES_SELECT_EXTERNAL_EDITOR),
  168. LoadStr(EXECUTABLE_FILTER), true, false);
  169. }
  170. //---------------------------------------------------------------------------
  171. void __fastcall TEditorPreferencesDialog::HelpButtonClick(TObject * /*Sender*/)
  172. {
  173. FormHelp(this);
  174. }
  175. //---------------------------------------------------------------------------
  176. void __fastcall TEditorPreferencesDialog::ControlChange(TObject * /*Sender*/)
  177. {
  178. UpdateControls();
  179. }
  180. //---------------------------------------------------------------------------
  181. void __fastcall TEditorPreferencesDialog::UpdateControls()
  182. {
  183. EnableControl(OkButton,
  184. EditorInternalButton->Checked || EditorOpenButton->Checked ||
  185. !ExternalEditorEdit->Text.IsEmpty());
  186. EnableControl(ExternalEditorEdit, EditorExternalButton->Checked);
  187. EnableControl(ExternalEditorBrowseButton, EditorExternalButton->Checked);
  188. EnableControl(ExternalEditorGroup, EditorExternalButton->Checked && FMayRemote);
  189. }
  190. //---------------------------------------------------------------------------
  191. void __fastcall TEditorPreferencesDialog::FormCloseQuery(TObject * /*Sender*/,
  192. bool & /*CanClose*/)
  193. {
  194. if (ModalResult != mrCancel)
  195. {
  196. ExitActiveControl(this);
  197. }
  198. }
  199. //---------------------------------------------------------------------------
  200. void __fastcall TEditorPreferencesDialog::MaskEditExit(TObject * /*Sender*/)
  201. {
  202. ValidateMaskEdit(MaskEdit);
  203. }
  204. //---------------------------------------------------------------------------