/ide/frames/desktop_options.pas

http://github.com/graemeg/lazarus · Pascal · 356 lines · 269 code · 37 blank · 50 comment · 14 complexity · 649cc3b89592c57b965f40e08f6940b0 MD5 · raw file

  1. {
  2. ***************************************************************************
  3. * *
  4. * This source is free software; you can redistribute it and/or modify *
  5. * it under the terms of the GNU General Public License as published by *
  6. * the Free Software Foundation; either version 2 of the License, or *
  7. * (at your option) any later version. *
  8. * *
  9. * This code is distributed in the hope that it will be useful, but *
  10. * WITHOUT ANY WARRANTY; without even the implied warranty of *
  11. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
  12. * General Public License for more details. *
  13. * *
  14. * A copy of the GNU General Public License is available on the World *
  15. * Wide Web at <http://www.gnu.org/copyleft/gpl.html>. You can also *
  16. * obtain it by writing to the Free Software Foundation, *
  17. * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
  18. * *
  19. ***************************************************************************
  20. }
  21. unit desktop_options;
  22. {$mode objfpc}{$H+}
  23. interface
  24. uses
  25. Classes, SysUtils, FileUtil, Forms, StdCtrls, Dialogs, LCLProc, ExtCtrls,
  26. Buttons, EnvironmentOpts, LazarusIDEStrConsts, IDETranslations, InputHistory,
  27. IDEProcs, IDEOptionsIntf, IDEWindowIntf, IDEUtils, DividerBevel;
  28. type
  29. { TDesktopOptionsFrame }
  30. TDesktopOptionsFrame = class(TAbstractIDEOptionsEditor)
  31. AskSavingOnlySessionCheckBox: TCheckBox;
  32. AutoSaveEditorFilesCheckBox: TCheckBox;
  33. AutoSaveIntervalInSecsComboBox: TComboBox;
  34. AutoSaveIntervalInSecsLabel: TLabel;
  35. AutoSaveProjectCheckBox: TCheckBox;
  36. lblCheckAndAutoSave: TDividerBevel;
  37. lblImportExport: TDividerBevel;
  38. lblGlyphs: TDividerBevel;
  39. lblHints: TDividerBevel;
  40. lblLanguage: TDividerBevel;
  41. lblMouseAction: TDividerBevel;
  42. PreferDoubleClickCheckBox: TCheckBox;
  43. CheckDiskChangesWithLoadingCheckBox: TCheckBox;
  44. lblButtons: TLabel;
  45. lblCenter: TLabel;
  46. lblMenus: TLabel;
  47. LanguageComboBox: TComboBox;
  48. ImportDesktopButton: TButton;
  49. PanelGlyphsButtonsOptions: TPanel;
  50. PanelGlyphsMenusOptions: TPanel;
  51. rbMenuGlyphShowAlways: TRadioButton;
  52. rbMenuGlyphShowNever: TRadioButton;
  53. rbMenuGlyphShowSystem: TRadioButton;
  54. rbBtnGlyphShowAlways: TRadioButton;
  55. rbBtnGlyphShowNever: TRadioButton;
  56. rbBtnGlyphShowSystem: TRadioButton;
  57. ExportDesktopButton: TButton;
  58. ShowHintsForComponentPaletteCheckBox: TCheckBox;
  59. ShowHintsForMainSpeedButtonsCheckBox: TCheckBox;
  60. procedure ExportDesktopButtonClick(Sender: TObject);
  61. procedure ImportDesktopButtonClick(Sender: TObject);
  62. private
  63. function LangIDToCaption(const LangID: string): string;
  64. function CaptionToLangID(const ACaption: string): string;
  65. procedure DoLoadSettings(AOptions: TAbstractIDEOptions);
  66. procedure DoSaveSettings(AOptions: TAbstractIDEOptions);
  67. public
  68. function GetTitle: String; override;
  69. procedure Setup({%H-}ADialog: TAbstractOptionsEditorDialog); override;
  70. procedure ReadSettings(AOptions: TAbstractIDEOptions); override;
  71. procedure WriteSettings(AOptions: TAbstractIDEOptions); override;
  72. class function SupportedOptionsClass: TAbstractIDEOptionsClass; override;
  73. end;
  74. implementation
  75. {$R *.lfm}
  76. { TDesktopOptionsFrame }
  77. function TDesktopOptionsFrame.GetTitle: String;
  78. begin
  79. Result := lisGeneral;
  80. end;
  81. procedure TDesktopOptionsFrame.Setup(ADialog: TAbstractOptionsEditorDialog);
  82. var
  83. i: Integer;
  84. LangID: String;
  85. sl: TStringList;
  86. begin
  87. // language
  88. lblLanguage.Caption := dlgEnvLanguage;
  89. LanguageComboBox.Hint := dlgEnvLanguageHint;
  90. // languages: first the automatic, then sorted the rest
  91. sl:=TStringList.Create;
  92. for i:=0 to LazarusTranslations.Count-1 do
  93. begin
  94. LangID:=LazarusTranslations[i].ID;
  95. if LangID<>'' then
  96. sl.Add(LangIDToCaption(LangID));
  97. end;
  98. sl.Sort;
  99. sl.Insert(0,GetLazarusLanguageLocalizedName(''));
  100. LanguageComboBox.Items.Assign(sl);
  101. sl.Free;
  102. // mouse action
  103. lblMouseAction.Caption := dlgMouseAction;
  104. PreferDoubleClickCheckBox.Caption := dlgPreferDoubleClickOverSingleClick;
  105. PreferDoubleClickCheckBox.Hint := dlgCurrentlyRespectedByMessagesWindow;
  106. // hints
  107. lblHints.Caption := dlgDesktopHints;
  108. ShowHintsForMainSpeedButtonsCheckBox.Caption := dlgSpBHints;
  109. ShowHintsForComponentPaletteCheckBox.Caption := dlgPalHints;
  110. // button glyphs
  111. lblGlyphs.Caption := lisShowGlyphsFor;
  112. lblButtons.Caption := dlgDesktopButtons;
  113. lblMenus.Caption := dlgDesktopMenus;
  114. rbBtnGlyphShowAlways.Caption := lisAlways;
  115. rbBtnGlyphShowNever.Caption := lisNever;
  116. rbBtnGlyphShowSystem.Caption := lisDefault;
  117. rbMenuGlyphShowAlways.Caption := lisAlways;
  118. rbMenuGlyphShowNever.Caption := lisNever;
  119. rbMenuGlyphShowSystem.Caption := lisDefault;
  120. // check and auto save files
  121. lblCheckAndAutoSave.Caption := dlgCheckAndAutoSaveFiles;
  122. CheckDiskChangesWithLoadingCheckBox.Caption := lisCheckForDiskFileChangesViaContent;
  123. CheckDiskChangesWithLoadingCheckBox.Hint := lisSlowerButMoreAccurate;
  124. AskSavingOnlySessionCheckBox.Caption := lisAskBeforeSavingProjectSSession;
  125. AskSavingOnlySessionCheckBox.Hint := lisIfOnlySessionInfoChangedThenAsk;
  126. // The following 3 are now hidden.
  127. AutoSaveEditorFilesCheckBox.Caption := dlgEdFiles;
  128. AutoSaveProjectCheckBox.Caption := dlgProject;
  129. AutoSaveIntervalInSecsLabel.Caption := dlgIntvInSec;
  130. // desktop files
  131. lblImportExport.Caption := lisExportImport;
  132. ExportDesktopButton.Caption := lisExport;
  133. ImportDesktopButton.Caption := lisImport;
  134. ExportDesktopButton.Hint := lisExportEnvironmentOptions;
  135. ImportDesktopButton.Hint := lisImportEnvironmentOptions;
  136. end;
  137. procedure TDesktopOptionsFrame.ReadSettings(AOptions: TAbstractIDEOptions);
  138. begin
  139. with AOptions as TEnvironmentOptions do
  140. begin
  141. // language
  142. LanguageComboBox.Text:=LangIDToCaption(LanguageID);
  143. //debugln('TEnvironmentOptionsDialog.ReadSettings LanguageComboBox.ItemIndex=',dbgs(LanguageComboBox.ItemIndex),' LanguageID="',LanguageID,'" LanguageComboBox.Text="',LanguageComboBox.Text,'"');
  144. // mouse action
  145. PreferDoubleClickCheckBox.Checked := MsgViewDblClickJumps;
  146. // hints
  147. ShowHintsForMainSpeedButtonsCheckBox.Checked:=ShowHintsForMainSpeedButtons;
  148. ShowHintsForComponentPaletteCheckBox.Checked:=ShowHintsForComponentPalette;
  149. // glyphs
  150. case ShowButtonGlyphs of
  151. sbgAlways: rbBtnGlyphShowAlways.Checked := True;
  152. sbgNever: rbBtnGlyphShowNever.Checked := True;
  153. sbgSystem: rbBtnGlyphShowSystem.Checked := True;
  154. end;
  155. case ShowMenuGlyphs of
  156. sbgAlways: rbMenuGlyphShowAlways.Checked := True;
  157. sbgNever: rbMenuGlyphShowNever.Checked := True;
  158. sbgSystem: rbMenuGlyphShowSystem.Checked := True;
  159. end;
  160. // check and auto save files
  161. CheckDiskChangesWithLoadingCheckBox.Checked:=CheckDiskChangesWithLoading;
  162. AskSavingOnlySessionCheckBox.Checked:=AskSaveSessionOnly;
  163. AutoSaveEditorFilesCheckBox.Checked:=AutoSaveEditorFiles;
  164. AutoSaveProjectCheckBox.Checked:=AutoSaveProject;
  165. SetComboBoxText(AutoSaveIntervalInSecsComboBox
  166. ,IntToStr(AutoSaveIntervalInSecs),cstCaseInsensitive);
  167. end;
  168. end;
  169. procedure TDesktopOptionsFrame.WriteSettings(AOptions: TAbstractIDEOptions);
  170. begin
  171. with AOptions as TEnvironmentOptions do
  172. begin
  173. // language
  174. LanguageID:=CaptionToLangID(LanguageComboBox.Text);
  175. //debugln('TEnvironmentOptionsDialog.WriteSettings A LanguageID="',LanguageID,'" LanguageComboBox.ItemIndex=',dbgs(LanguageComboBox.ItemIndex),' LanguageComboBox.Text=',LanguageComboBox.Text);
  176. // mouse action
  177. MsgViewDblClickJumps := PreferDoubleClickCheckBox.Checked;
  178. // hints
  179. ShowHintsForMainSpeedButtons:=ShowHintsForMainSpeedButtonsCheckBox.Checked;
  180. ShowHintsForComponentPalette:=ShowHintsForComponentPaletteCheckBox.Checked;
  181. // glyphs
  182. if rbBtnGlyphShowAlways.Checked then
  183. ShowButtonGlyphs := sbgAlways
  184. else
  185. if rbBtnGlyphShowNever.Checked then
  186. ShowButtonGlyphs := sbgNever
  187. else
  188. ShowButtonGlyphs := sbgSystem;
  189. if rbMenuGlyphShowAlways.Checked then
  190. ShowMenuGlyphs := sbgAlways
  191. else
  192. if rbMenuGlyphShowNever.Checked then
  193. ShowMenuGlyphs := sbgNever
  194. else
  195. ShowMenuGlyphs := sbgSystem;
  196. // check and auto save files
  197. CheckDiskChangesWithLoading:=CheckDiskChangesWithLoadingCheckBox.Checked;
  198. AskSaveSessionOnly:=AskSavingOnlySessionCheckBox.Checked;
  199. AutoSaveEditorFiles:=AutoSaveEditorFilesCheckBox.Checked;
  200. AutoSaveProject:=AutoSaveProjectCheckBox.Checked;
  201. AutoSaveIntervalInSecs:=StrToIntDef(
  202. AutoSaveIntervalInSecsComboBox.Text,AutoSaveIntervalInSecs);
  203. end;
  204. end;
  205. procedure TDesktopOptionsFrame.ExportDesktopButtonClick(Sender: TObject);
  206. var
  207. AnEnvironmentOptions: TEnvironmentOptions;
  208. SaveDialog: TSaveDialog;
  209. AFilename: String;
  210. begin
  211. //debugln('TDesktopOptionsFrame.ExportDesktopButtonClick A');
  212. SaveDialog := TSaveDialog.Create(nil);
  213. try
  214. try
  215. InputHistories.ApplyFileDialogSettings(SaveDialog);
  216. SaveDialog.Filter:=dlgFilterLazarusDesktopSettings+' (*.lds)|*.lds'
  217. //+'|'+dlgFilterXML+' (*.xml)|*.xml'
  218. +'|'+dlgFilterAll+' ('+GetAllFilesMask+')|' + GetAllFilesMask;
  219. if SaveDialog.Execute then
  220. begin
  221. AFilename:=SaveDialog.Filename;
  222. if ExtractFileExt(AFilename)='' then
  223. AFilename:=AFilename+'.lds';
  224. AnEnvironmentOptions := TEnvironmentOptions.Create;
  225. try
  226. AnEnvironmentOptions.Filename := AFilename;
  227. DoSaveSettings(AnEnvironmentOptions);
  228. AnEnvironmentOptions.Save(true);
  229. ShowMessageFmt(lisSuccessfullyExported, [SaveDialog.Filename]);
  230. finally
  231. AnEnvironmentOptions.Free;
  232. end;
  233. end;
  234. InputHistories.StoreFileDialogSettings(SaveDialog);
  235. except
  236. on E: Exception do
  237. begin
  238. DebugLn('ERROR: [TDesktopOptionsFrame.ExportDesktopButtonClick] ', E.Message);
  239. end;
  240. end;
  241. finally
  242. SaveDialog.Free;
  243. end;
  244. end;
  245. procedure TDesktopOptionsFrame.ImportDesktopButtonClick(Sender: TObject);
  246. var
  247. AnEnvironmentOptions: TEnvironmentOptions;
  248. OpenDialog: TOpenDialog;
  249. begin
  250. //debugln('TDesktopOptionsFrame.ImportDesktopButtonClick A');
  251. OpenDialog := TOpenDialog.Create(nil);
  252. try
  253. try
  254. InputHistories.ApplyFileDialogSettings(OpenDialog);
  255. OpenDialog.Filter:=dlgFilterLazarusDesktopSettings+' (*.lds)|*.lds'
  256. //+'|'+dlgFilterXML+' (*.xml)|*.xml'
  257. +'|'+dlgFilterAll+' ('+GetAllFilesMask+')|' + GetAllFilesMask;
  258. if OpenDialog.Execute then
  259. begin
  260. AnEnvironmentOptions := TEnvironmentOptions.Create;
  261. try
  262. AnEnvironmentOptions.Filename := OpenDialog.Filename;
  263. AnEnvironmentOptions.Load(true);
  264. DoLoadSettings(AnEnvironmentOptions);
  265. IDEWindowCreators.RestoreSimpleLayout;
  266. ShowMessageFmt(lisSuccessfullyImported, [OpenDialog.Filename]);
  267. finally
  268. AnEnvironmentOptions.Free;
  269. end;
  270. end;
  271. InputHistories.StoreFileDialogSettings(OpenDialog);
  272. except
  273. on E: Exception do
  274. begin
  275. // ToDo
  276. DebugLn('ERROR: [TDesktopOptionsFrame.ImportDesktopButtonClick] ', E.Message);
  277. end;
  278. end;
  279. finally
  280. OpenDialog.Free;
  281. end;
  282. end;
  283. function TDesktopOptionsFrame.LangIDToCaption(const LangID: string): string;
  284. begin
  285. if LangID <> '' then
  286. Result := GetLazarusLanguageLocalizedName(LangID)+' ['+LangID+']'
  287. else
  288. //No [] if automatic
  289. Result := GetLazarusLanguageLocalizedName(LangID);
  290. end;
  291. function TDesktopOptionsFrame.CaptionToLangID(const ACaption: string): string;
  292. var
  293. i: Integer;
  294. begin
  295. for i := 0 to LazarusTranslations.Count-1 do
  296. begin
  297. Result := LazarusTranslations[i].ID;
  298. if ACaption = LangIDToCaption(Result) then
  299. Exit;
  300. end;
  301. Result := '';
  302. end;
  303. procedure TDesktopOptionsFrame.DoLoadSettings(AOptions: TAbstractIDEOptions);
  304. begin
  305. if Assigned(OnLoadIDEOptions) then
  306. OnLoadIDEOptions(Self, AOptions);
  307. end;
  308. procedure TDesktopOptionsFrame.DoSaveSettings(AOptions: TAbstractIDEOptions);
  309. begin
  310. if Assigned(OnSaveIDEOptions) then
  311. OnSaveIDEOptions(Self, AOptions);
  312. end;
  313. class function TDesktopOptionsFrame.SupportedOptionsClass: TAbstractIDEOptionsClass;
  314. begin
  315. Result := TEnvironmentOptions;
  316. end;
  317. initialization
  318. RegisterIDEOptionsEditor(GroupEnvironment, TDesktopOptionsFrame, EnvOptionsDesktop);
  319. end.