pas2js: fixed setting combobox

This commit is contained in:
mattias 2024-01-27 10:23:23 +01:00
parent 2734600c27
commit b69afbdd4f
2 changed files with 124 additions and 32 deletions

View File

@ -196,6 +196,7 @@ object SimpleWebSrvOptsFrame: TSimpleWebSrvOptsFrame
ItemHeight = 0 ItemHeight = 0
TabOrder = 7 TabOrder = 7
Text = 'BrowserCmdComboBox' Text = 'BrowserCmdComboBox'
OnChange = BrowserCmdComboBoxChange
end end
object BrowseBrowserButton: TButton object BrowseBrowserButton: TButton
AnchorSideTop.Control = BrowserCmdComboBox AnchorSideTop.Control = BrowserCmdComboBox

View File

@ -10,7 +10,7 @@ interface
uses uses
Classes, SysUtils, Controls, Graphics, Dialogs, StdCtrls, Classes, SysUtils, Controls, Graphics, Dialogs, StdCtrls,
FileUtil, LazFileUtils, IDEOptEditorIntf, IDEDialogs, FileUtil, LazFileUtils, IDEOptEditorIntf, IDEDialogs,
FileProcs, IDEOptionsIntf, FileProcs, IDEOptionsIntf, MacroIntf,
SimpleWebSrvStrConsts, SimpleWebSrvOptions, SimpleWebSrvController; SimpleWebSrvStrConsts, SimpleWebSrvOptions, SimpleWebSrvController;
type type
@ -33,6 +33,7 @@ type
ServerExeComboBox: TComboBox; ServerExeComboBox: TComboBox;
ServerExeLabel: TLabel; ServerExeLabel: TLabel;
procedure BrowseBrowserButtonClick(Sender: TObject); procedure BrowseBrowserButtonClick(Sender: TObject);
procedure BrowserCmdComboBoxChange(Sender: TObject);
procedure BrowserKindComboBoxSelect(Sender: TObject); procedure BrowserKindComboBoxSelect(Sender: TObject);
procedure ServerExeBrowseButtonClick(Sender: TObject); procedure ServerExeBrowseButtonClick(Sender: TObject);
private private
@ -40,9 +41,12 @@ type
procedure SetCombobox(aComboBox: TComboBox; const aValue: string; ListItems: TStrings); procedure SetCombobox(aComboBox: TComboBox; const aValue: string; ListItems: TStrings);
procedure SetComboBoxText(aComboBox: TComboBox; const aValue: string); procedure SetComboBoxText(aComboBox: TComboBox; const aValue: string);
procedure BrowserKindComboBoxChanged; procedure BrowserKindComboBoxChanged;
procedure SetRecentList(Options: TSimpleWebServerOptions; List: TSWSRecentList;
aComboBox: TComboBox; const aValue: string);
public public
constructor Create(TheOwner: TComponent); override; constructor Create(TheOwner: TComponent); override;
destructor Destroy; override; destructor Destroy; override;
function Check: Boolean; override;
function GetTitle: String; override; function GetTitle: String; override;
procedure ReadSettings({%H-}AOptions: TAbstractIDEOptions); override; procedure ReadSettings({%H-}AOptions: TAbstractIDEOptions); override;
procedure Setup({%H-}ADialog: TAbstractOptionsEditorDialog); override; procedure Setup({%H-}ADialog: TAbstractOptionsEditorDialog); override;
@ -165,6 +169,11 @@ begin
end; end;
end; end;
procedure TSimpleWebSrvOptsFrame.BrowserCmdComboBoxChange(Sender: TObject);
begin
end;
procedure TSimpleWebSrvOptsFrame.SetCombobox(aComboBox: TComboBox; procedure TSimpleWebSrvOptsFrame.SetCombobox(aComboBox: TComboBox;
const aValue: string; ListItems: TStrings); const aValue: string; ListItems: TStrings);
begin begin
@ -195,6 +204,42 @@ begin
BrowserCmdComboBox.Enabled:=Kind=swsbkCustom; BrowserCmdComboBox.Enabled:=Kind=swsbkCustom;
end; end;
procedure TSimpleWebSrvOptsFrame.SetRecentList(
Options: TSimpleWebServerOptions; List: TSWSRecentList; aComboBox: TComboBox;
const aValue: string);
var
i: Integer;
sl: TStringList;
begin
sl:=TStringList.Create;
try
sl.Assign(aComboBox.Items);
i:=sl.Count-1;
while i>=0 do
begin
if sl[i]=aValue then
begin
if i=0 then exit;
sl.Move(i,0);
break;
end;
dec(i);
end;
if i<0 then
begin
sl.Insert(0,aValue);
if sl.Count>30 then
sl.Delete(sl.Count-1);
end;
aComboBox.Items.Assign(sl);
aComboBox.ItemIndex:=0;
finally
Options.RecentLists[List]:=sl;
sl.Free;
end;
end;
constructor TSimpleWebSrvOptsFrame.Create(TheOwner: TComponent); constructor TSimpleWebSrvOptsFrame.Create(TheOwner: TComponent);
begin begin
inherited Create(TheOwner); inherited Create(TheOwner);
@ -207,6 +252,71 @@ begin
inherited Destroy; inherited Destroy;
end; end;
function TSimpleWebSrvOptsFrame.Check: Boolean;
var
NewBrowserKind: TSWSBrowserKind;
NewBrowserCmd, Cmd: TCaption;
Options: TSimpleWebServerOptions;
Params: TStringList;
ExeFilename: String;
begin
Result:=inherited Check;
if not Result then exit;
Options:=SimpleWebServerController.Options;
NewBrowserKind:=StrToBrowserKind(BrowserKindComboBox.Text);
NewBrowserCmd:=BrowserCmdComboBox.Text;
SetRecentList(Options,swsrlBrowserCmd,BrowserCmdComboBox,NewBrowserCmd);
if (NewBrowserKind<>Options.BrowserKind) or (NewBrowserCmd<>Options.BrowserCmd) then
begin
// browser changed -> check
case NewBrowserKind of
swsbkDefault: ;
swsbkFirefox: ;
swsbkChrome: ;
swsbkOpera: ;
swsbkVivaldi: ;
swsbkCustom:
begin
Cmd:=SimpleWebServerController.SubstituteURLMacro(NewBrowserCmd,'Test.html');
if not IDEMacros.SubstituteMacros(Cmd) then
begin
if IDEMessageDialog(rsSWError, rsSWInvalidMacroSee+sLineBreak +
rsSWToolsOptionsSimpleWebServerBrowser,mtError,[mbIgnore,mbCancel])=mrIgnore then
exit(true)
else
exit(false);
end;
Params:=TStringList.Create;
try
SplitCmdLineParams(Cmd,Params);
if Params.Count=0 then begin
if IDEMessageDialog(rsSWError, 'Missing browser filename'+sLineBreak +
rsSWToolsOptionsSimpleWebServerBrowser,mtError,[mbIgnore,mbCancel])=mrIgnore then
exit(true)
else
exit(false);
end;
ExeFilename:=Params[0];
if not FilenameIsAbsolute(ExeFilename) then begin
ExeFilename:=FindDefaultExecutablePath(ExeFilename);
end;
if not FileExists(ExeFilename) then begin
if IDEMessageDialog(rsSWError, 'Browser file not found "'+Params[0]+'"'+sLineBreak +
rsSWToolsOptionsSimpleWebServerBrowser,mtError,[mbIgnore,mbCancel])=mrIgnore then
exit(true)
else
exit(false);
end;
finally
Params.Free;
end;
end;
end;
end;
end;
function TSimpleWebSrvOptsFrame.GetTitle: String; function TSimpleWebSrvOptsFrame.GetTitle: String;
begin begin
Result:=rsSWSTitle; Result:=rsSWSTitle;
@ -225,6 +335,7 @@ var
Options: TSimpleWebServerOptions; Options: TSimpleWebServerOptions;
bk: TSWSBrowserKind; bk: TSWSBrowserKind;
i: Integer; i: Integer;
s: String;
begin begin
if not (AOptions is SupportedOptionsClass) then exit; if not (AOptions is SupportedOptionsClass) then exit;
@ -259,9 +370,11 @@ begin
for i:=sl.Count-1 downto 0 do for i:=sl.Count-1 downto 0 do
if Trim(sl[i])='' then if Trim(sl[i])='' then
sl.Delete(i); sl.Delete(i);
AddDefault(sl,Options.BrowserCmd); s:=Options.BrowserCmd;
SetCombobox(BrowserCmdComboBox,Options.BrowserCmd,sl); if Trim(s)='' then
s:=SWSDefaultBrowserCmd;
AddDefault(sl,s);
SetCombobox(BrowserCmdComboBox,s,sl);
finally finally
sl.Free; sl.Free;
end; end;
@ -292,45 +405,23 @@ end;
procedure TSimpleWebSrvOptsFrame.WriteSettings(AOptions: TAbstractIDEOptions); procedure TSimpleWebSrvOptsFrame.WriteSettings(AOptions: TAbstractIDEOptions);
var var
Options: TSimpleWebServerOptions; 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 var
s: string; s: string;
i: LongInt; i: LongInt;
begin begin
if not (AOptions is SupportedOptionsClass) then exit;
Options:=SimpleWebServerController.Options; Options:=SimpleWebServerController.Options;
s:=Trim(ServerExeComboBox.Text); s:=Trim(ServerExeComboBox.Text);
if s<>'' then if s<>'' then
Options.ServerExe:=s; Options.ServerExe:=s;
SetRecentList(swsrlServerExe,ServerExeComboBox.Items,Options.ServerExe); SetRecentList(Options,swsrlServerExe,ServerExeComboBox,Options.ServerExe);
s:=Trim(ServerAddrComboBox.Text); s:=Trim(ServerAddrComboBox.Text);
if s<>'' then if s<>'' then
Options.ServerAddr:=s; Options.ServerAddr:=s;
SetRecentList(swsrlServerAddr,ServerAddrComboBox.Items,Options.ServerAddr); SetRecentList(Options,swsrlServerAddr,ServerAddrComboBox,Options.ServerAddr);
Options.BindAny:=BindAnyCheckBox.Checked; Options.BindAny:=BindAnyCheckBox.Checked;
@ -338,11 +429,11 @@ begin
i:=StrToIntDef(s,0); i:=StrToIntDef(s,0);
if (i>0) and (i<=65535) then if (i>0) and (i<=65535) then
Options.ServerPort:=i; Options.ServerPort:=i;
SetRecentList(swsrlServerPort,PortComboBox.Items,IntToStr(Options.ServerPort)); SetRecentList(Options,swsrlServerPort,PortComboBox,IntToStr(Options.ServerPort));
Options.BrowserKind:=StrToBrowserKind(BrowserKindComboBox.Text); Options.BrowserKind:=StrToBrowserKind(BrowserKindComboBox.Text);
Options.BrowserCmd:=BrowserCmdComboBox.Text; Options.BrowserCmd:=BrowserCmdComboBox.Text;
SetRecentList(swsrlBrowserCmd,BrowserCmdComboBox.Items,Options.BrowserCmd); SetRecentList(Options,swsrlBrowserCmd,BrowserCmdComboBox,Options.BrowserCmd);
if Options.Modified then if Options.Modified then
begin begin