lazarus/ide/frames/msgwnd_options.pas

318 lines
11 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. *
* *
***************************************************************************
Author: Mattias Gaertner
Abstract:
IDE option frame for Messages window.
}
unit MsgWnd_Options;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils,
// LazUtils
LazLoggerBase,
// LCL
Forms, Controls, Graphics, Dialogs, StdCtrls, ColorBox, ExtCtrls, Spin, Buttons,
// IdeIntf
IDEOptionsIntf, IDEOptEditorIntf, IDEExternToolIntf, IDEImagesIntf,
// IdeConfig
EnvironmentOpts,
// IDE
LazarusIDEStrConsts, editor_general_options, EnvGuiOptions;
type
{ TMsgWndOptionsFrame }
TMsgWndOptionsFrame = class(TAbstractIDEOptionsEditor)
MWCtrlLeftActionComboBox: TComboBox;
MsgColorBox: TColorBox;
MsgColorListBox: TColorListBox;
MsgColorGroupBox: TGroupBox;
MWAlwaysDrawFocusedCheckBox: TCheckBox;
MWFocusCheckBox: TCheckBox;
MWSetPastelColorsButton: TBitBtn;
MWShowFPCMsgLinesCompiledCheckBox: TCheckBox;
MWShowIconsCheckBox: TCheckBox;
MWMaxProcsLabel: TLabel;
MWMaxProcsSpinEdit: TSpinEdit;
MWOptsLeftBevel: TBevel;
MWColorBox: TColorBox;
MWColorListBox: TColorListBox;
MWColorsGroupBox: TGroupBox;
MWOptionsLabel: TLabel;
MWOptsRightBevel: TBevel;
MWSetDefaultColorsButton: TBitBtn;
MWSetEditorColorsButton: TButton;
MWSpeedSetColorsGroupBox: TGroupBox;
procedure MsgColorBoxChange(Sender: TObject);
procedure MsgColorListBoxGetColors(Sender: TCustomColorListBox; Items: TStrings);
procedure MsgColorListBoxSelectionChange(Sender: TObject; User: boolean);
procedure MWColorBoxChange(Sender: TObject);
procedure MWColorListBoxGetColors(Sender: TCustomColorListBox;
Items: TStrings);
procedure MWColorListBoxSelectionChange(Sender: TObject; User: boolean);
procedure MWSetDefaultColorsButtonClick(Sender: TObject);
procedure MWSetEditorColorsButtonClick(Sender: TObject);
procedure MWSetPastelColorsButtonClick(Sender: TObject);
private
fReady: boolean;
FDialog: TAbstractOptionsEditorDialog;
function GeneralPage: TEditorGeneralOptionsFrame;
public
constructor Create(AOwner: TComponent); override;
function GetTitle: String; override;
procedure Setup(ADialog: TAbstractOptionsEditorDialog); override;
procedure ReadSettings(AOptions: TAbstractIDEOptions); override;
procedure WriteSettings(AOptions: TAbstractIDEOptions); override;
class function SupportedOptionsClass: TAbstractIDEOptionsClass; override;
end;
var
MsgWndOptionsFrame: TMsgWndOptionsFrame;
implementation
{$R *.lfm}
{ TMsgWndOptionsFrame }
procedure TMsgWndOptionsFrame.MWColorListBoxGetColors(
Sender: TCustomColorListBox; Items: TStrings);
begin
Items.Add(dlgBackColor);
Items.Add(lisToolHeaderRunning);
Items.Add(lisToolHeaderSuccess);
Items.Add(lisToolHeaderFailed);
Items.Add(lisToolHeaderScrolledUp);
Items.Add(dlfMouseSimpleTextSect);
end;
procedure TMsgWndOptionsFrame.MWColorBoxChange(Sender: TObject);
var
i: Integer;
begin
i:=MWColorListBox.ItemIndex;
if not fReady or (i < 0) then
exit;
MWColorListBox.Colors[i]:=MWColorBox.Selected;
end;
procedure TMsgWndOptionsFrame.MsgColorBoxChange(Sender: TObject);
var
i: Integer;
begin
i:=MsgColorListBox.ItemIndex;
if not fReady or (i < 0) then
exit;
MsgColorListBox.Colors[i]:=MsgColorBox.Selected;
end;
procedure TMsgWndOptionsFrame.MsgColorListBoxGetColors(Sender: TCustomColorListBox;
Items: TStrings);
begin
(*
mluNone,
mluProgress, // time and statistics about the run
mluDebug, // extreme verbosity, only useful for tool authors
mluVerbose3, // all infos
mluVerbose2, // almost all infos
mluVerbose, // extra infos
mluHint, // tool found something unusual
mluNote, // maybe wrong or unnecessary
mluWarning, // probably something is wrong
mluImportant, // message has no urgency level, but should be shown
mluError, // tool could not finish, some tools can still continue
mluFatal, // critical error in input, tool had to abort
mluPanic // bug in tool
*)
Items.Add(dlgMsgWinColorUrgentNone);
Items.Add(dlgMsgWinColorUrgentProgress);
Items.Add(dlgMsgWinColorUrgentDebug);
Items.Add(dlgMsgWinColorUrgentVerbose3);
Items.Add(dlgMsgWinColorUrgentVerbose2);
Items.Add(dlgMsgWinColorUrgentVerbose);
Items.Add(dlgMsgWinColorUrgentHint);
Items.Add(dlgMsgWinColorUrgentNote);
Items.Add(dlgMsgWinColorUrgentWarning);
Items.Add(dlgMsgWinColorUrgentImportant);
Items.Add(dlgMsgWinColorUrgentError);
Items.Add(dlgMsgWinColorUrgentFatal);
Items.Add(dlgMsgWinColorUrgentPanic);
end;
procedure TMsgWndOptionsFrame.MsgColorListBoxSelectionChange(Sender: TObject; User: boolean);
begin
if not (fReady and User) then
Exit;
MsgColorBox.Selected := MsgColorListBox.Selected;
end;
procedure TMsgWndOptionsFrame.MWColorListBoxSelectionChange(Sender: TObject;
User: boolean);
begin
if not (fReady and User) then
Exit;
MWColorBox.Selected := MWColorListBox.Selected;
end;
procedure TMsgWndOptionsFrame.MWSetDefaultColorsButtonClick(Sender: TObject);
var
c: TMsgWndColor;
begin
for c in TMsgWndColor do
MWColorListBox.Colors[ord(c)]:=MsgWndDefaultColors[c];
MWColorBox.Selected := MWColorListBox.Selected;
end;
procedure TMsgWndOptionsFrame.MWSetEditorColorsButtonClick(Sender: TObject);
var
Page: TEditorGeneralOptionsFrame;
begin
Page:=GeneralPage;
if Page=nil then exit;
{MWColorListBox.Colors[mwBackground]:=aSynEdit.Color;
MWColorListBox.Colors[mwRunning]:=aSynEdit.
MWColorListBox.Colors[mwSuccess]:=aSynEdit.
MWColorListBox.Colors[mwFailed]:=aSynEdit.
MWColorListBox.Colors[mwAutoHeader]:=aSynEdit.}
MWColorBox.Selected := MWColorListBox.Selected;
end;
procedure TMsgWndOptionsFrame.MWSetPastelColorsButtonClick(Sender: TObject);
begin
MWColorListBox.Colors[ord(mwBackground)]:=clWindow;
MWColorListBox.Colors[ord(mwRunning)] :=TColor($00CBF3FF); // harmonic pastel yellow
MWColorListBox.Colors[ord(mwSuccess)] :=TColor($00BEEFC3); // harmonic pastel green
MWColorListBox.Colors[ord(mwFailed)] :=TColor($00CCCBFF); // harmonic pastel rose
MWColorListBox.Colors[ord(mwAutoHeader)]:=TColor($00EEC3BD); // harmonic pastel blue
MWColorBox.Selected := MWColorListBox.Selected;
end;
function TMsgWndOptionsFrame.GeneralPage: TEditorGeneralOptionsFrame;
begin
Result:=nil;
if FDialog<>nil then
Result := TEditorGeneralOptionsFrame(FDialog.FindEditor(TEditorGeneralOptionsFrame));
end;
constructor TMsgWndOptionsFrame.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
MWOptionsLabel.Caption:=lisOptions;
MWColorsGroupBox.Caption:= lisHeaderColors;
MsgColorGroupBox.Caption:= lisMsgColors;
MWSpeedSetColorsGroupBox.Caption:=lisSetAllColors;
MWSetDefaultColorsButton.Caption:=lisLazarusDefault;
IDEImages.AssignImage(MWSetDefaultColorsButton, 'restore_defaults');
MWSetPastelColorsButton.Caption:=lisPastelColors;
IDEImages.AssignImage(MWSetPastelColorsButton, 'pastel_colors');
MWSetEditorColorsButton.Caption:=lisEditorColors;
MWShowIconsCheckBox.Caption:=dlgShowMessagesIcons;
MWShowIconsCheckBox.Hint:=dlgAnIconForErrorWarningHintIsShown;
MWAlwaysDrawFocusedCheckBox.Caption:=lisAlwaysDrawSelectedItemsFocused;
MWAlwaysDrawFocusedCheckBox.Hint:=lisDrawTheSelectionFocusedEvenIfTheMessagesWindowHasN;
MWFocusCheckBox.Caption:=dlgEOFocusMessagesAtCompilation;
MWMaxProcsLabel.Caption:=Format(lisMaximumParallelProcesses0MeansDefault,
[IntToStr(DefaultMaxProcessCount)]);
MWShowFPCMsgLinesCompiledCheckBox.Caption:=lisShowFPCMessageLinesCompiled;
MWShowFPCMsgLinesCompiledCheckBox.Hint:=
lisElevateTheMessagePriorityToAlwaysShowItByDefaultIt;
end;
function TMsgWndOptionsFrame.GetTitle: String;
begin
Result:=lisMessagesWindow;
end;
procedure TMsgWndOptionsFrame.Setup(ADialog: TAbstractOptionsEditorDialog);
begin
fReady:=false;
FDialog := ADialog;
MWSetEditorColorsButton.Visible:=false;
end;
procedure TMsgWndOptionsFrame.ReadSettings(AOptions: TAbstractIDEOptions);
var
EnvOpt: TEnvironmentOptions;
EnvGui: TIDESubOptions;
c: TMsgWndColor;
u: TMessageLineUrgency;
begin
EnvOpt := AOptions as TEnvironmentOptions;
EnvGui := EnvOpt.GetSubConfigObj(TEnvGuiOptions);
Assert(Assigned(EnvGui), 'TMsgWndOptionsFrame.ReadSettings: EnvGui=Nil');
with EnvGui as TEnvGuiOptions do
begin
for c in TMsgWndColor do
MWColorListBox.Colors[ord(c)] := MsgViewColors[c];
for u in TMessageLineUrgency do
MsgColorListBox.Colors[ord(u)] := MsgColors[u];
MWShowIconsCheckBox.Checked := ShowMessagesIcons;
MWAlwaysDrawFocusedCheckBox.Checked := MsgViewAlwaysDrawFocused;
MWFocusCheckBox.Checked := MsgViewFocus;
end;
MWShowFPCMsgLinesCompiledCheckBox.Checked := EnvOpt.MsgViewShowFPCMsgLinesCompiled;
MWMaxProcsSpinEdit.Value := EnvOpt.MaxExtToolsInParallel;
fReady:=true;
end;
procedure TMsgWndOptionsFrame.WriteSettings(AOptions: TAbstractIDEOptions);
var
EnvOpt: TEnvironmentOptions;
EnvGui: TIDESubOptions;
c: TMsgWndColor;
u: TMessageLineUrgency;
begin
EnvOpt := AOptions as TEnvironmentOptions;
EnvGui := EnvOpt.GetSubConfigObj(TEnvGuiOptions);
with EnvGui as TEnvGuiOptions do
begin
for c in TMsgWndColor do
MsgViewColors[c] := MWColorListBox.Colors[ord(c)];
for u in TMessageLineUrgency do
MsgColors[u] := MsgColorListBox.Colors[ord(u)];
ShowMessagesIcons := MWShowIconsCheckBox.Checked;
MsgViewAlwaysDrawFocused := MWAlwaysDrawFocusedCheckBox.Checked;
MsgViewFocus := MWFocusCheckBox.Checked;
end;
EnvOpt.MsgViewShowFPCMsgLinesCompiled := MWShowFPCMsgLinesCompiledCheckBox.Checked;
EnvOpt.MaxExtToolsInParallel := MWMaxProcsSpinEdit.Value;
end;
class function TMsgWndOptionsFrame.SupportedOptionsClass: TAbstractIDEOptionsClass;
begin
Result := TEnvironmentOptions;
end;
initialization
RegisterIDEOptionsEditor(GroupEnvironment, TMsgWndOptionsFrame, EnvOptionsMessages);
end.