lazarus/ide/frames/desktop_options.pas
juha 7f7e7ada81 Format and clean uses sections.
git-svn-id: trunk@58629 -
2018-07-25 13:38:35 +00:00

365 lines
12 KiB
ObjectPascal

{
***************************************************************************
* *
* This source is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
* This code is distributed in the hope that it will be useful, but *
* WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
* General Public License for more details. *
* *
* A copy of the GNU General Public License is available on the World *
* Wide Web at <http://www.gnu.org/copyleft/gpl.html>. You can also *
* obtain it by writing to the Free Software Foundation, *
* Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1335, USA. *
* *
***************************************************************************
}
unit desktop_options;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils,
// LazUtils
FileUtil,
// LCL
Forms, StdCtrls, Dialogs, LCLProc, ExtCtrls,
// LazControls
DividerBevel,
// IdeIntf
IDEOptionsIntf, IDEOptEditorIntf, IDEWindowIntf, IDEUtils,
// IDE
EnvironmentOpts, LazarusIDEStrConsts, IDETranslations, InputHistory;
type
{ TDesktopOptionsFrame }
TDesktopOptionsFrame = class(TAbstractIDEOptionsEditor)
AskSavingOnlySessionCheckBox: TCheckBox;
AutoSaveEditorFilesCheckBox: TCheckBox;
AutoSaveIntervalInSecsComboBox: TComboBox;
AutoSaveIntervalInSecsLabel: TLabel;
AutoSaveProjectCheckBox: TCheckBox;
lblCheckAndAutoSave: TDividerBevel;
lblImportExport: TDividerBevel;
lblGlyphs: TDividerBevel;
lblHints: TDividerBevel;
lblLanguage: TDividerBevel;
lblMouseAction: TDividerBevel;
PreferDoubleClickCheckBox: TCheckBox;
CheckDiskChangesWithLoadingCheckBox: TCheckBox;
lblButtons: TLabel;
lblCenter: TLabel;
lblMenus: TLabel;
LanguageComboBox: TComboBox;
ImportDesktopButton: TButton;
PanelGlyphsButtonsOptions: TPanel;
PanelGlyphsMenusOptions: TPanel;
rbMenuGlyphShowAlways: TRadioButton;
rbMenuGlyphShowNever: TRadioButton;
rbMenuGlyphShowSystem: TRadioButton;
rbBtnGlyphShowAlways: TRadioButton;
rbBtnGlyphShowNever: TRadioButton;
rbBtnGlyphShowSystem: TRadioButton;
ExportDesktopButton: TButton;
ShowHintsForComponentPaletteCheckBox: TCheckBox;
ShowHintsForMainSpeedButtonsCheckBox: TCheckBox;
procedure ExportDesktopButtonClick(Sender: TObject);
procedure ImportDesktopButtonClick(Sender: TObject);
private
function LangIDToCaption(const LangID: string): string;
function CaptionToLangID(const ACaption: string): string;
procedure DoLoadSettings(AOptions: TAbstractIDEOptions);
procedure DoSaveSettings(AOptions: TAbstractIDEOptions);
public
function GetTitle: String; override;
procedure Setup({%H-}ADialog: TAbstractOptionsEditorDialog); override;
procedure ReadSettings(AOptions: TAbstractIDEOptions); override;
procedure WriteSettings(AOptions: TAbstractIDEOptions); override;
class function SupportedOptionsClass: TAbstractIDEOptionsClass; override;
end;
implementation
{$R *.lfm}
{ TDesktopOptionsFrame }
function TDesktopOptionsFrame.GetTitle: String;
begin
Result := lisGeneral;
end;
procedure TDesktopOptionsFrame.Setup(ADialog: TAbstractOptionsEditorDialog);
var
i: Integer;
LangID: String;
sl: TStringList;
begin
// language
lblLanguage.Caption := dlgEnvLanguage;
LanguageComboBox.Hint := dlgEnvLanguageHint;
// languages: first the automatic, then sorted the rest
sl:=TStringList.Create;
for i:=0 to LazarusTranslations.Count-1 do
begin
LangID:=LazarusTranslations[i].ID;
if LangID<>'' then
sl.Add(LangIDToCaption(LangID));
end;
sl.Sort;
sl.Insert(0,GetLazarusLanguageLocalizedName(''));
LanguageComboBox.Items.Assign(sl);
sl.Free;
// mouse action
lblMouseAction.Caption := dlgMouseAction;
PreferDoubleClickCheckBox.Caption := dlgPreferDoubleClickOverSingleClick;
PreferDoubleClickCheckBox.Hint := dlgCurrentlyRespectedByMessagesWindow;
// hints
lblHints.Caption := dlgDesktopHints;
ShowHintsForMainSpeedButtonsCheckBox.Caption := dlgSpBHints;
ShowHintsForComponentPaletteCheckBox.Caption := dlgPalHints;
// button glyphs
lblGlyphs.Caption := lisShowGlyphsFor;
lblButtons.Caption := dlgDesktopButtons;
lblMenus.Caption := dlgDesktopMenus;
rbBtnGlyphShowAlways.Caption := lisAlways;
rbBtnGlyphShowNever.Caption := lisNever;
rbBtnGlyphShowSystem.Caption := lisDefault;
rbMenuGlyphShowAlways.Caption := lisAlways;
rbMenuGlyphShowNever.Caption := lisNever;
rbMenuGlyphShowSystem.Caption := lisDefault;
// check and auto save files
lblCheckAndAutoSave.Caption := dlgCheckAndAutoSaveFiles;
CheckDiskChangesWithLoadingCheckBox.Caption := lisCheckForDiskFileChangesViaContent;
CheckDiskChangesWithLoadingCheckBox.Hint := lisSlowerButMoreAccurate;
AskSavingOnlySessionCheckBox.Caption := lisAskBeforeSavingProjectSSession;
AskSavingOnlySessionCheckBox.Hint := lisIfOnlySessionInfoChangedThenAsk;
// The following 3 are now hidden.
AutoSaveEditorFilesCheckBox.Caption := dlgEdFiles;
AutoSaveProjectCheckBox.Caption := dlgProject;
AutoSaveIntervalInSecsLabel.Caption := dlgIntvInSec;
// desktop files
lblImportExport.Caption := lisExportImport;
ExportDesktopButton.Caption := lisExport;
ImportDesktopButton.Caption := lisImport;
ExportDesktopButton.Hint := lisExportEnvironmentOptions;
ImportDesktopButton.Hint := lisImportEnvironmentOptions;
end;
procedure TDesktopOptionsFrame.ReadSettings(AOptions: TAbstractIDEOptions);
begin
with AOptions as TEnvironmentOptions do
begin
// language
LanguageComboBox.Text:=LangIDToCaption(LanguageID);
//debugln('TEnvironmentOptionsDialog.ReadSettings LanguageComboBox.ItemIndex=',dbgs(LanguageComboBox.ItemIndex),' LanguageID="',LanguageID,'" LanguageComboBox.Text="',LanguageComboBox.Text,'"');
// mouse action
PreferDoubleClickCheckBox.Checked := MsgViewDblClickJumps;
// hints
ShowHintsForMainSpeedButtonsCheckBox.Checked:=ShowHintsForMainSpeedButtons;
ShowHintsForComponentPaletteCheckBox.Checked:=ShowHintsForComponentPalette;
// glyphs
case ShowButtonGlyphs of
sbgAlways: rbBtnGlyphShowAlways.Checked := True;
sbgNever: rbBtnGlyphShowNever.Checked := True;
sbgSystem: rbBtnGlyphShowSystem.Checked := True;
end;
case ShowMenuGlyphs of
sbgAlways: rbMenuGlyphShowAlways.Checked := True;
sbgNever: rbMenuGlyphShowNever.Checked := True;
sbgSystem: rbMenuGlyphShowSystem.Checked := True;
end;
// check and auto save files
CheckDiskChangesWithLoadingCheckBox.Checked:=CheckDiskChangesWithLoading;
AskSavingOnlySessionCheckBox.Checked:=AskSaveSessionOnly;
AutoSaveEditorFilesCheckBox.Checked:=AutoSaveEditorFiles;
AutoSaveProjectCheckBox.Checked:=AutoSaveProject;
SetComboBoxText(AutoSaveIntervalInSecsComboBox
,IntToStr(AutoSaveIntervalInSecs),cstCaseInsensitive);
end;
end;
procedure TDesktopOptionsFrame.WriteSettings(AOptions: TAbstractIDEOptions);
begin
with AOptions as TEnvironmentOptions do
begin
// language
LanguageID:=CaptionToLangID(LanguageComboBox.Text);
//debugln('TEnvironmentOptionsDialog.WriteSettings A LanguageID="',LanguageID,'" LanguageComboBox.ItemIndex=',dbgs(LanguageComboBox.ItemIndex),' LanguageComboBox.Text=',LanguageComboBox.Text);
// mouse action
MsgViewDblClickJumps := PreferDoubleClickCheckBox.Checked;
// hints
ShowHintsForMainSpeedButtons:=ShowHintsForMainSpeedButtonsCheckBox.Checked;
ShowHintsForComponentPalette:=ShowHintsForComponentPaletteCheckBox.Checked;
// glyphs
if rbBtnGlyphShowAlways.Checked then
ShowButtonGlyphs := sbgAlways
else
if rbBtnGlyphShowNever.Checked then
ShowButtonGlyphs := sbgNever
else
ShowButtonGlyphs := sbgSystem;
if rbMenuGlyphShowAlways.Checked then
ShowMenuGlyphs := sbgAlways
else
if rbMenuGlyphShowNever.Checked then
ShowMenuGlyphs := sbgNever
else
ShowMenuGlyphs := sbgSystem;
// check and auto save files
CheckDiskChangesWithLoading:=CheckDiskChangesWithLoadingCheckBox.Checked;
AskSaveSessionOnly:=AskSavingOnlySessionCheckBox.Checked;
AutoSaveEditorFiles:=AutoSaveEditorFilesCheckBox.Checked;
AutoSaveProject:=AutoSaveProjectCheckBox.Checked;
AutoSaveIntervalInSecs:=StrToIntDef(
AutoSaveIntervalInSecsComboBox.Text,AutoSaveIntervalInSecs);
end;
end;
procedure TDesktopOptionsFrame.ExportDesktopButtonClick(Sender: TObject);
var
AnEnvironmentOptions: TEnvironmentOptions;
SaveDialog: TSaveDialog;
AFilename: String;
begin
//debugln('TDesktopOptionsFrame.ExportDesktopButtonClick A');
SaveDialog := TSaveDialog.Create(nil);
try
try
InputHistories.ApplyFileDialogSettings(SaveDialog);
SaveDialog.Filter:=dlgFilterLazarusDesktopSettings+' (*.lds)|*.lds'
//+'|'+dlgFilterXML+' (*.xml)|*.xml'
+'|'+dlgFilterAll+' ('+GetAllFilesMask+')|' + GetAllFilesMask;
if SaveDialog.Execute then
begin
AFilename:=SaveDialog.Filename;
if ExtractFileExt(AFilename)='' then
AFilename:=AFilename+'.lds';
AnEnvironmentOptions := TEnvironmentOptions.Create;
try
AnEnvironmentOptions.Filename := AFilename;
DoSaveSettings(AnEnvironmentOptions);
AnEnvironmentOptions.Save(true);
ShowMessageFmt(lisSuccessfullyExported, [SaveDialog.Filename]);
finally
AnEnvironmentOptions.Free;
end;
end;
InputHistories.StoreFileDialogSettings(SaveDialog);
except
on E: Exception do
begin
DebugLn('ERROR: [TDesktopOptionsFrame.ExportDesktopButtonClick] ', E.Message);
end;
end;
finally
SaveDialog.Free;
end;
end;
procedure TDesktopOptionsFrame.ImportDesktopButtonClick(Sender: TObject);
var
AnEnvironmentOptions: TEnvironmentOptions;
OpenDialog: TOpenDialog;
begin
//debugln('TDesktopOptionsFrame.ImportDesktopButtonClick A');
OpenDialog := TOpenDialog.Create(nil);
try
try
InputHistories.ApplyFileDialogSettings(OpenDialog);
OpenDialog.Filter:=dlgFilterLazarusDesktopSettings+' (*.lds)|*.lds'
//+'|'+dlgFilterXML+' (*.xml)|*.xml'
+'|'+dlgFilterAll+' ('+GetAllFilesMask+')|' + GetAllFilesMask;
if OpenDialog.Execute then
begin
AnEnvironmentOptions := TEnvironmentOptions.Create;
try
AnEnvironmentOptions.Filename := OpenDialog.Filename;
AnEnvironmentOptions.Load(true);
DoLoadSettings(AnEnvironmentOptions);
IDEWindowCreators.RestoreSimpleLayout;
ShowMessageFmt(lisSuccessfullyImported, [OpenDialog.Filename]);
finally
AnEnvironmentOptions.Free;
end;
end;
InputHistories.StoreFileDialogSettings(OpenDialog);
except
on E: Exception do
begin
// ToDo
DebugLn('ERROR: [TDesktopOptionsFrame.ImportDesktopButtonClick] ', E.Message);
end;
end;
finally
OpenDialog.Free;
end;
end;
function TDesktopOptionsFrame.LangIDToCaption(const LangID: string): string;
begin
if LangID <> '' then
Result := GetLazarusLanguageLocalizedName(LangID)+' ['+LangID+']'
else
//No [] if automatic
Result := GetLazarusLanguageLocalizedName(LangID);
end;
function TDesktopOptionsFrame.CaptionToLangID(const ACaption: string): string;
var
i: Integer;
begin
for i := 0 to LazarusTranslations.Count-1 do
begin
Result := LazarusTranslations[i].ID;
if ACaption = LangIDToCaption(Result) then
Exit;
end;
Result := '';
end;
procedure TDesktopOptionsFrame.DoLoadSettings(AOptions: TAbstractIDEOptions);
begin
if Assigned(OnLoadIDEOptions) then
OnLoadIDEOptions(Self, AOptions);
end;
procedure TDesktopOptionsFrame.DoSaveSettings(AOptions: TAbstractIDEOptions);
begin
if Assigned(OnSaveIDEOptions) then
OnSaveIDEOptions(Self, AOptions);
end;
class function TDesktopOptionsFrame.SupportedOptionsClass: TAbstractIDEOptionsClass;
begin
Result := TEnvironmentOptions;
end;
initialization
RegisterIDEOptionsEditor(GroupEnvironment, TDesktopOptionsFrame, EnvOptionsDesktop);
end.