diff --git a/components/codetools/linkscanner.pas b/components/codetools/linkscanner.pas index ca04b3eec3..5fb98f0ab3 100644 --- a/components/codetools/linkscanner.pas +++ b/components/codetools/linkscanner.pas @@ -1583,9 +1583,13 @@ function TLinkScanner.CursorToCleanPos(ACursorPos: integer; ACode: pointer; // 0=valid CleanPos //-1=CursorPos was skipped, CleanPos is between two links // 1=CursorPos beyond scanned code -var i, j: integer; +var + i, j, SkippedCleanPos: integer; + SkippedPos: boolean; begin i:=0; + SkippedPos:=false; + SkippedCleanPos:=-1; while i0) and (r<>-1) then + if (r<>0) and (r<>-1) then RaiseException('Cursor outside of code'); GetLineInfo(CleanCursorPos,LineStart,LineEnd,FirstAtomStart,LastAtomEnd); if CleanCursorPosnil) and (ClassNode.Desc<>ctnClass) do diff --git a/ide/runparamsopts.pas b/ide/runparamsopts.pas index b509a42ccd..879a37d1cc 100644 --- a/ide/runparamsopts.pas +++ b/ide/runparamsopts.pas @@ -131,7 +131,9 @@ type procedure SetupEnvironmentPage; procedure SetOptions(NewOptions: TRunParamsOptions); procedure FillSystemVariablesListView; + procedure FillUserOverridesListView; procedure SaveToOptions; + procedure SaveUserOverrides; public constructor Create(AnOwner: TComponent); override; property Options: TRunParamsOptions read fOptions write SetOptions; @@ -542,7 +544,6 @@ begin Width:=100; Caption:='Add'; OnClick:=@UserOverridesAddButtonClick; - Enabled:=false; Visible:=true; end; @@ -555,7 +556,6 @@ begin Width:=100; Caption:='Edit'; OnClick:=@UserOverridesEditButtonClick; - Enabled:=false; Visible:=true; end; @@ -568,7 +568,6 @@ begin Width:=100; Caption:='Delete'; OnClick:=@UserOverridesDeleteButtonClick; - Enabled:=false; Visible:=true; end; @@ -635,24 +634,55 @@ begin end; procedure TRunParamsOptsDlg.UserOverridesAddButtonClick(Sender: TObject); -var Variable, Value: string; +var + Variable, Value: string; + NewLI, SelLI: TListItem; begin - Variable:=''; - Value:=''; + SelLI:=SystemVariablesListView.Selected; + if SelLI<>nil then begin + Variable:=SelLI.Caption; + Value:=SelLI.SubItems[0]; + end else begin + Variable:=''; + Value:=''; + end; if ShowSysVarUserOverrideDialog(Variable,Value)=mrOk then begin - - + NewLI:=UserOverridesListView.Items.Add; + NewLI.Caption:=Variable; + NewLI.SubItems[0]:=Value; + UserOverridesListView.Selected:=NewLI; end; end; procedure TRunParamsOptsDlg.UserOverridesEditButtonClick(Sender: TObject); +var + Variable, Value: string; + SelLI: TListItem; begin - + SelLI:=UserOverridesListView.Selected; + if SelLI=nil then exit; + Variable:=SelLI.Caption; + Value:=SelLI.SubItems[0]; + if ShowSysVarUserOverrideDialog(Variable,Value)=mrOk then begin + SelLI.Caption:=Variable; + SelLI.SubItems[0]:=Value; + end; end; procedure TRunParamsOptsDlg.UserOverridesDeleteButtonClick(Sender: TObject); +var + SelLI: TListItem; + OldIndex: integer; begin - + SelLI:=UserOverridesListView.Selected; + if SelLI<>nil then begin + OldIndex:=SelLI.Index; + SelLI.Delete; + if OldIndex=UserOverridesListView.Items.Count then + dec(OldIndex); + if OldIndex>=0 then + UserOverridesListView.Selected:=UserOverridesListView.Items[OldIndex]; + end; end; procedure TRunParamsOptsDlg.SaveToOptions; @@ -667,12 +697,21 @@ begin fOptions.Display:=Trim(DisplayEdit.Text); // environment - - // ToDo: User Overrides + SaveUserOverrides; fOptions.IncludeSystemVariables:=IncludeSystemVariablesCheckBox.Checked; end; +procedure TRunParamsOptsDlg.SaveUserOverrides; +var i: integer; +begin + Options.UserOverrides.Clear; + for i:=0 to UserOverridesListView.Items.Count-1 do begin + Options.UserOverrides.Values[UserOverridesListView.Items[i].Caption]:= + UserOverridesListView.Items[i].SubItems[0]; + end; +end; + procedure TRunParamsOptsDlg.SetOptions(NewOptions: TRunParamsOptions); begin fOptions:=NewOptions; @@ -687,7 +726,7 @@ begin // environment FillSystemVariablesListView; - // ToDo: User Overrides + FillUserOverridesListView; IncludeSystemVariablesCheckBox.Checked:=fOptions.IncludeSystemVariables; end; @@ -720,5 +759,29 @@ Begin end; end; +procedure TRunParamsOptsDlg.FillUserOverridesListView; +var + i: integer; + Variable, Value: string; +Begin + with UserOverridesListView.Items do begin + //BeginUpdate; + for i:=0 to Options.UserOverrides.Count-1 do begin + Variable:=Options.UserOverrides.Names[i]; + Value:=Options.UserOverrides.Values[Variable]; + if Count<=i then begin + // add line to listview + Add; + Item[i].SubItems.Add(''); + end; + Item[i].Caption:=Variable; + Item[i].SubItems[0]:=Value; + end; + while Count>Options.UserOverrides.Count do + Delete(Count-1); + //EndUpdate; + end; +end; + end. diff --git a/ide/sysvaruseroverridedlg.pas b/ide/sysvaruseroverridedlg.pas index e875dd27fe..c6d57efe67 100644 --- a/ide/sysvaruseroverridedlg.pas +++ b/ide/sysvaruseroverridedlg.pas @@ -59,7 +59,7 @@ begin ValueEdit.Text:=Value; Result:=ShowModal; if (Result=mrOk) then begin - Variable:=VariableEdit.Text; + Variable:=Trim(VariableEdit.Text); Value:=ValueEdit.Text; end; Free; @@ -69,7 +69,15 @@ end; { TSysVarUserOverrideDialog } procedure TSysVarUserOverrideDialog.OkButtonClick(Sender: TObject); +var v: string; begin + v:=Trim(VariableEdit.Text); + if not IsValidIdent(v) then begin + if MessageDlg('Invalid variable name', + '"'+v+'" is not a valid identifier.', + mtWarning,[mbCancel,mbIgnore],0)=mrCancel + then exit; + end; ModalResult:=mrOk; end; @@ -84,7 +92,9 @@ begin if LazarusResources.Find(ClassName)=nil then begin Caption:='Override system variable'; - SetBounds((Screen.Width-400) div 2,(Screen.Height-200) div 2,400,200); + Width:=400; + Height:=170; + Position:=poScreenCenter; VariableLabel:=TLabel.Create(Self); with VariableLabel do begin @@ -100,7 +110,7 @@ begin Name:='VariableEdit'; Parent:=Self; SetBounds(VariableLabel.Left,VariableLabel.Top+VariableLabel.Height+2, - Self.ClientWidth-2*Left,Height); + Self.ClientWidth-2*VariableLabel.Left,Height); Visible:=true; end; @@ -119,7 +129,7 @@ begin Name:='ValueEdit'; Parent:=Self; SetBounds(ValueLabel.Left,ValueLabel.Top+ValueLabel.Height+2, - Self.ClientWidth-2*Left,Height); + Self.ClientWidth-2*ValueLabel.Left,Height); Visible:=true; end;