mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-04-27 04:53:39 +02:00
262 lines
6.5 KiB
ObjectPascal
262 lines
6.5 KiB
ObjectPascal
{
|
|
Author: Mattias Gaertner
|
|
}
|
|
unit SimpleWebSrvOptionsFrame;
|
|
|
|
{$mode ObjFPC}{$H+}
|
|
|
|
interface
|
|
|
|
uses
|
|
Classes, SysUtils, Controls, Graphics, Dialogs, StdCtrls,
|
|
FileUtil, LazFileUtils, IDEOptEditorIntf, IDEDialogs,
|
|
FileProcs, IDEOptionsIntf,
|
|
SimpleWebSrvStrConsts, SimpleWebSrvOptions, SimpleWebSrvController;
|
|
|
|
type
|
|
{ TSimpleWebSrvOptsFrame }
|
|
|
|
TSimpleWebSrvOptsFrame = class(TAbstractIDEOptionsEditor)
|
|
BindAnyCheckBox: TCheckBox;
|
|
ServerAddrLabel: TLabel;
|
|
ServerAddrComboBox: TComboBox;
|
|
PortComboBox: TComboBox;
|
|
PortLabel: TLabel;
|
|
ServerExeBrowseButton: TButton;
|
|
ServerExeComboBox: TComboBox;
|
|
ServerExeLabel: TLabel;
|
|
procedure ServerExeBrowseButtonClick(Sender: TObject);
|
|
private
|
|
FOldOptions: TSimpleWebServerOptions;
|
|
procedure SetCombobox(aComboBox: TComboBox; const aValue: string; ListItems: TStrings);
|
|
procedure SetComboBoxText(aComboBox: TComboBox; const aValue: string);
|
|
public
|
|
constructor Create(TheOwner: TComponent); override;
|
|
destructor Destroy; override;
|
|
function GetTitle: String; override;
|
|
procedure ReadSettings({%H-}AOptions: TAbstractIDEOptions); override;
|
|
procedure Setup({%H-}ADialog: TAbstractOptionsEditorDialog); override;
|
|
class function SupportedOptionsClass: TAbstractIDEOptionsClass; override;
|
|
procedure WriteSettings({%H-}AOptions: TAbstractIDEOptions); override;
|
|
procedure RestoreSettings({%H-}AOptions: TAbstractIDEOptions); override;
|
|
property OldOptions: TSimpleWebServerOptions read FOldOptions;
|
|
end;
|
|
|
|
var
|
|
SimpleWebSrvOptsFrame: TSimpleWebSrvOptsFrame;
|
|
SimpleWebServerOptionID: integer = 1000; // IDE frame ID, set by Register
|
|
|
|
implementation
|
|
|
|
{$R *.lfm}
|
|
|
|
procedure SetComboBoxText(Box: TComboBox; NewText: string; CaseSensitive: boolean; aCapacity: integer = 30);
|
|
|
|
function IsSame(const A,B: string): boolean;
|
|
begin
|
|
if CaseSensitive then
|
|
Result:=A=B
|
|
else
|
|
Result:=SameText(A,B);
|
|
end;
|
|
|
|
var
|
|
i: Integer;
|
|
begin
|
|
if IsSame(Box.Text,NewText) then exit;
|
|
i:=0;
|
|
while (i<Box.Items.Count) and not IsSame(Box.Items[i],NewText) do inc(i);
|
|
if i=Box.Items.Count then
|
|
begin
|
|
Box.Items.Insert(0,NewText);
|
|
i:=0;
|
|
if Box.Items.Count>aCapacity then
|
|
Box.Items.Delete(Box.Items.Count-1);
|
|
end else begin
|
|
// move to top
|
|
Box.Items.Move(i,0);
|
|
i:=0;
|
|
end;
|
|
|
|
Box.ItemIndex:=i;
|
|
Box.Text:=NewText;
|
|
end;
|
|
|
|
{ TSimpleWebSrvOptsFrame }
|
|
|
|
procedure TSimpleWebSrvOptsFrame.ServerExeBrowseButtonClick(Sender: TObject);
|
|
var
|
|
Dlg: TOpenDialog;
|
|
ExpExe, ErrMsg: String;
|
|
begin
|
|
Dlg:=TOpenDialog.Create(nil);
|
|
try
|
|
Dlg.Title:='Select compileserver'+GetExeExt;
|
|
Dlg.Options:=Dlg.Options+[ofFileMustExist];
|
|
if not Dlg.Execute then exit;
|
|
ExpExe:=ExpandFileNameUTF8(Dlg.FileName);
|
|
ServerExeComboBox.Text:=ExpExe;
|
|
ErrMsg:=CheckCompileServerExeQuality(ExpExe,'',true);
|
|
if ErrMsg<>'' then
|
|
IDEMessageDialog('Invalid compileserver'+GetExeExt,
|
|
ErrMsg,mtError,[mbOk]);
|
|
finally
|
|
Dlg.Free;
|
|
end;
|
|
end;
|
|
|
|
procedure TSimpleWebSrvOptsFrame.SetCombobox(aComboBox: TComboBox;
|
|
const aValue: string; ListItems: TStrings);
|
|
begin
|
|
aComboBox.Items.Assign(ListItems);
|
|
SetComboBoxText(aComboBox,aValue);
|
|
end;
|
|
|
|
procedure TSimpleWebSrvOptsFrame.SetComboBoxText(aComboBox: TComboBox;
|
|
const aValue: string);
|
|
var
|
|
i: Integer;
|
|
begin
|
|
for i:=0 to aComboBox.Items.Count-1 do
|
|
if aComboBox.Items[i]=aValue then
|
|
begin
|
|
aComboBox.ItemIndex:=i;
|
|
exit;
|
|
end;
|
|
aComboBox.Items.Insert(0,aValue);
|
|
aComboBox.ItemIndex:=0;
|
|
end;
|
|
|
|
constructor TSimpleWebSrvOptsFrame.Create(TheOwner: TComponent);
|
|
begin
|
|
inherited Create(TheOwner);
|
|
FOldOptions:=TSimpleWebServerOptions.Create;
|
|
end;
|
|
|
|
destructor TSimpleWebSrvOptsFrame.Destroy;
|
|
begin
|
|
FreeAndNil(FOldOptions);
|
|
inherited Destroy;
|
|
end;
|
|
|
|
function TSimpleWebSrvOptsFrame.GetTitle: String;
|
|
begin
|
|
Result:=rsSWSTitle;
|
|
end;
|
|
|
|
procedure TSimpleWebSrvOptsFrame.ReadSettings(AOptions: TAbstractIDEOptions);
|
|
|
|
procedure AddDefault(sl: TStringList; aValue: string);
|
|
begin
|
|
if sl.IndexOf(aValue)<0 then
|
|
sl.Add(aValue);
|
|
end;
|
|
|
|
var
|
|
sl: TStringList;
|
|
Options: TSimpleWebServerOptions;
|
|
begin
|
|
if not (AOptions is SupportedOptionsClass) then exit;
|
|
|
|
Options:=SimpleWebServerController.Options;
|
|
OldOptions.Assign(Options);
|
|
|
|
sl:=TStringList.Create;
|
|
try
|
|
sl.Assign(Options.RecentLists[swsrlServerExe]);
|
|
AddDefault(sl,Options.GetDefaultServerExe);
|
|
SetCombobox(ServerExeComboBox,Options.ServerExe,sl);
|
|
|
|
sl.Assign(Options.RecentLists[swsrlServerAddr]);
|
|
AddDefault(sl,SWSDefaultServerAddr);
|
|
SetCombobox(ServerAddrComboBox,Options.ServerAddr,sl);
|
|
|
|
BindAnyCheckBox.Checked:=Options.BindAny;
|
|
|
|
sl.Assign(Options.RecentLists[swsrlServerPort]);
|
|
AddDefault(sl,IntToStr(SWSDefaultServerPort));
|
|
SetCombobox(PortComboBox,IntToStr(Options.Port),sl);
|
|
finally
|
|
sl.Free;
|
|
end;
|
|
end;
|
|
|
|
procedure TSimpleWebSrvOptsFrame.Setup(ADialog: TAbstractOptionsEditorDialog);
|
|
begin
|
|
ServerExeLabel.Caption:=rsSWSPathOfCompileserver;
|
|
ServerAddrLabel.Caption:=rsSWSAddress;
|
|
BindAnyCheckBox.Caption:=rsSWSBindAny+' (0.0.0.0)';
|
|
PortLabel.Caption:=rsSWSPort;
|
|
end;
|
|
|
|
class function TSimpleWebSrvOptsFrame.SupportedOptionsClass: TAbstractIDEOptionsClass;
|
|
begin
|
|
Result:=TAbstractIDEEnvironmentOptions;
|
|
end;
|
|
|
|
procedure TSimpleWebSrvOptsFrame.WriteSettings(AOptions: TAbstractIDEOptions);
|
|
var
|
|
Options: TSimpleWebServerOptions;
|
|
|
|
procedure SetRecentList(List: TSWSRecentList; Items: TStrings; const aValue: string);
|
|
var
|
|
i: Integer;
|
|
begin
|
|
i:=Items.Count-1;
|
|
while i>=0 do
|
|
begin
|
|
if Items[i]=aValue then
|
|
begin
|
|
Items.Move(i,0);
|
|
break;
|
|
end;
|
|
dec(i);
|
|
end;
|
|
if i<0 then
|
|
begin
|
|
Items.Insert(0,aValue);
|
|
if Items.Count>30 then
|
|
Items.Delete(Items.Count-1);
|
|
end;
|
|
Options.RecentLists[List]:=Items;
|
|
end;
|
|
|
|
var
|
|
s: string;
|
|
i: LongInt;
|
|
begin
|
|
Options:=SimpleWebServerController.Options;
|
|
|
|
s:=Trim(ServerExeComboBox.Text);
|
|
if s<>'' then
|
|
Options.ServerExe:=s;
|
|
SetRecentList(swsrlServerExe,ServerExeComboBox.Items,Options.ServerExe);
|
|
|
|
s:=Trim(ServerAddrComboBox.Text);
|
|
if s<>'' then
|
|
Options.ServerAddr:=s;
|
|
SetRecentList(swsrlServerAddr,ServerAddrComboBox.Items,Options.ServerAddr);
|
|
|
|
Options.BindAny:=BindAnyCheckBox.Checked;
|
|
|
|
s:=Trim(PortComboBox.Text);
|
|
i:=StrToIntDef(s,0);
|
|
if (i>0) and (i<=65535) then
|
|
Options.Port:=i;
|
|
SetRecentList(swsrlServerPort,PortComboBox.Items,IntToStr(Options.Port));
|
|
|
|
if Options.Modified then
|
|
begin
|
|
Options.SaveSafe;
|
|
Options.Apply;
|
|
end;
|
|
end;
|
|
|
|
procedure TSimpleWebSrvOptsFrame.RestoreSettings(AOptions: TAbstractIDEOptions);
|
|
begin
|
|
inherited RestoreSettings(AOptions);
|
|
end;
|
|
|
|
end.
|
|
|