diff --git a/editor/studio/AMXX_Studio.dof b/editor/studio/AMXX_Studio.dof index 32cfaed8..962f80d9 100755 --- a/editor/studio/AMXX_Studio.dof +++ b/editor/studio/AMXX_Studio.dof @@ -115,7 +115,7 @@ AutoIncBuild=1 MajorVer=1 MinorVer=3 Release=0 -Build=31 +Build=32 Debug=0 PreRelease=0 Special=0 @@ -126,7 +126,7 @@ CodePage=1252 [Version Info Keys] CompanyName=AMX Mod X Dev Team FileDescription= -FileVersion=1.3.0.31 +FileVersion=1.3.0.32 InternalName= LegalCopyright= LegalTrademarks= diff --git a/editor/studio/AMXX_Studio.exe b/editor/studio/AMXX_Studio.exe index a5ac2d63..6603a1fe 100755 Binary files a/editor/studio/AMXX_Studio.exe and b/editor/studio/AMXX_Studio.exe differ diff --git a/editor/studio/AMXX_Studio.res b/editor/studio/AMXX_Studio.res index ed07626d..ab82884a 100755 Binary files a/editor/studio/AMXX_Studio.res and b/editor/studio/AMXX_Studio.res differ diff --git a/editor/studio/UnitCodeUtils.pas b/editor/studio/UnitCodeUtils.pas index 718b0481..ce5ff22d 100755 --- a/editor/studio/UnitCodeUtils.pas +++ b/editor/studio/UnitCodeUtils.pas @@ -19,6 +19,8 @@ function CountChars(eIn: String; eChar: Char): Integer; function RemoveStringsAndComments(eLine: String; eRemoveStrings: Boolean; eRemoveComments: Boolean): String; function GetMatchingBrace(eString: String): Integer; function GetColoredLine(eLine: Integer): String; +function GetFunctionPos: Integer; +function GetCurrFunc: String; function GetRTFText(ARichEdit: TRichedit): string; procedure SetRTFText(ARichEdit: TRichedit; ARTFText: String); @@ -448,4 +450,30 @@ begin end; end; +function GetFunctionPos: Integer; +var eStr: String; + i: integer; +begin + Result := 0; + eStr := StringReplace(frmMain.sciEditor.Lines[frmMain.sciEditor.GetCurrentLineNumber], '^"', '', [rfReplaceAll]); + while Between(eStr, '"', '"') <> '' do + eStr := StringReplace(eStr, Between(eStr, '"', '"'), '', [rfReplaceAll]); + while Between(eStr, '{', '}') <> '' do + eStr := StringReplace(eStr, Between(eStr, '"', '"'), '', [rfReplaceAll]); + for i := 0 to Length(eStr) -1 do begin + if eStr[i] = ',' then + Result := Result +1; + end; +end; + +function GetCurrFunc: String; +var eStr: String; +begin + eStr := frmMain.sciEditor.Lines[frmMain.sciEditor.GetCurrentLineNumber]; + if Pos('(', eStr) = 0 then + Result := '' + else + Result := Trim(Copy(eStr, 1, Pos('(', eStr))); +end; + end. diff --git a/editor/studio/UnitMenuGenerators.pas b/editor/studio/UnitMenuGenerators.pas index 7ba39ecf..db55cd96 100755 --- a/editor/studio/UnitMenuGenerators.pas +++ b/editor/studio/UnitMenuGenerators.pas @@ -6,8 +6,8 @@ uses SysUtils, Classes, Windows, Forms, Graphics; procedure GenerateSimpleMenu; -{ Yes, this is from AMXX-Edit v2. I'm too lazy to rewrite it... } -{ >:( } +{ Yes, a part is copied from AMXX-Edit v2. I'm too lazy to rewrite everything... } +{ gaben } function AddOldMenu: Boolean; function AddOldPlayerMenu: Boolean; @@ -20,7 +20,8 @@ function PluginInitLine: Integer; implementation -uses UnitCodeUtils, UnitfrmMain, UnitfrmMenuGenerator, UnitLanguages; +uses UnitCodeUtils, UnitfrmMain, UnitfrmMenuGenerator, UnitLanguages, + UnitMainTools; function GetLine(eExpression: String; eAllowFunction, eBreak: Boolean): Integer; var i: integer; @@ -99,6 +100,9 @@ begin end else MessageBox(frmMenuGenerator.Handle, PChar(lInvalidPlugin), PChar(Application.Title), MB_ICONERROR); + + ActiveDoc.Modified := True; + frmMain.mnuModified.Caption := lModified; end; { Normal Menu } @@ -159,11 +163,9 @@ begin eStr.Add('}'); // Insert AddIfDoesntExist('amxmodx'); - i := GetFirst('#define', True) +2; - if i = 1 then - i := GetFirst('#include', True) +2; - if i = 1 then - i := 0; + i := GetLast('#define', True) +1; + if i = 0 then + i := GetLast('#include', True) +1; frmMain.sciEditor.Lines.Insert(i, Format('#define Keys%s %s', [frmMenuGenerator.txtMenuName.Text, DefinedKeys])); frmMain.sciEditor.Lines.Text := frmMain.sciEditor.Lines.Text + #13 + eStr.Text; @@ -183,6 +185,8 @@ begin frmMain.sciEditor.Lines.Insert(i, ' register_menucmd(register_menuid("' + frmMenuGenerator.txtMenuName.Text + '"), Keys' + frmMenuGenerator.txtMenuName.Text + ', "Pressed' + frmMenuGenerator.txtMenuName.Text + '")'); end; eStr.Free; + ActiveDoc.Modified := True; + frmMain.mnuModified.Caption := lModified; end; { Player Menu } @@ -312,14 +316,14 @@ begin end; Delete(DefinedKeys, 1, 1); end; - i := GetLast('#define', True) +2; - if i = 1 then - i := GetLast('#include', True) +2; - if i = 1 then - i := 0; + i := GetLast('#define', True) +1; + if i = 0 then + i := GetLast('#include', True) +1; + frmMain.sciEditor.Lines.Insert(i, Format('#define Keys%s %s', [frmMenuGenerator.txtMenuName.Text, DefinedKeys])); - frmMain.sciEditor.Lines.Insert(i +1, 'new MenuPos' + frmMenuGenerator.txtMenuName.Text); - frmMain.sciEditor.Lines.Insert(i +2, 'new MenuPlayers' + frmMenuGenerator.txtMenuName.Text + '[32]'); + frmMain.sciEditor.Lines.Insert(i +1, ''); + frmMain.sciEditor.Lines.Insert(i +2, 'new MenuPos' + frmMenuGenerator.txtMenuName.Text); + frmMain.sciEditor.Lines.Insert(i +3, 'new MenuPlayers' + frmMenuGenerator.txtMenuName.Text + '[32]'); { Register } i := GetFirst('register_plugin', True) +2; if i = 1 then @@ -344,7 +348,7 @@ begin eStr.Add('public ShowMenu' + frmMenuGenerator.txtMenuName.Text + '(id, position) {'); if frmMenuGenerator.chkAddComment.Checked then eStr.Add(' // Menu stuff //'); - eStr.Add(' if (position < 0) { return 0 }-/*'); + eStr.Add(' if (position < 0) { return 0; }'); eStr.Add(' '); eStr.Add(' new i, k'); eStr.Add(' new MenuBody[255]'); @@ -356,8 +360,8 @@ begin eStr.Add(' get_players(MenuPlayers' + frmMenuGenerator.txtMenuName.Text + ', Num)'); eStr.Add(' if (Start >= Num) { Start = position = MenuPos' + frmMenuGenerator.txtMenuName.Text + ' = 0; }'); eCurLine := GetColoredMenu; - eCurLine := Copy(eCurLine, 1, Pos('$players', eCurLine) -3); - Insert('\R%d/%d^n\w', eCurLine, Pos('^n', eCurLine)); + eCurLine := Copy(eCurLine, 1, Pos('$players', eCurLine) -5); + Insert('\R%d/%d', eCurLine, Pos('^n', eCurLine)); eStr.Add(' new Len = format(MenuBody, 255, "' + eCurLine + '", position+1, (Num / ' + IntToStr(ePlayersTo - ePlayersFrom) + ' + ((Num % ' + IntToStr(ePlayersTo - ePlayersFrom) + ') ? 1 : 0 )) )'); eStr.Add(' new End = Start + ' + IntToStr(ePlayersTo - ePlayersFrom)); if eExit = 0 then @@ -386,7 +390,7 @@ begin // eStr.Add(' }'); // end // else begin - eStr.Add(' Keys |= (i<') <> '' then begin - eString := Between(eString, '<', '>'); - if ExtractFileExt(eString) <> '' then - ChangeFileExt(eString, ''); - end - else if Between(eString, '"', '"') <> '' then begin + if Between(eString, '<', '>') <> '' then + eString := Between(eString, '<', '>') + else if Between(eString, '"', '"') <> '' then eString := Between(eString, '"', '"'); - if ExtractFileExt(eString) <> '' then - ChangeFileExt(eString, ''); - end - else begin - eString := Trim(eString); - if ExtractFileExt(eString) <> '' then - ChangeFileExt(eString, ''); - end; eString := Trim(eString); Result.Included.AddObject(eString, TObject(i)); @@ -273,6 +265,7 @@ begin if Pos('operator', eTemp) = 1 then k := 6; + eTemp := RemoveSemicolon(eTemp); if k < 5 then begin case k of 0: Result.CallTips.Add(eTemp + '-> ' + FileName + ', function'); @@ -360,6 +353,7 @@ begin if (Pos(':', eTemp) <> 0) and (Pos(':', eTemp) < Pos('(', eTemp)) then Delete(eTemp, 1, Pos(':', eTemp)); + eTemp := RemoveSemicolon(eTemp); if (Pos('enum', eTemp) = Pos('operator', eTemp)) and (Pos('enum', eTemp) = 0) then Result.CallTips.Add(eTemp + '-> ' + FileName + ', ' + Trim(Copy(eString, 1, Pos(#32, eString) -1))); diff --git a/editor/studio/UnitfrmMain.dfm b/editor/studio/UnitfrmMain.dfm index 7f9413e8..f2833d1f 100755 --- a/editor/studio/UnitfrmMain.dfm +++ b/editor/studio/UnitfrmMain.dfm @@ -1,6 +1,6 @@ object frmMain: TfrmMain Left = 257 - Top = 302 + Top = 297 Width = 888 Height = 646 Caption = 'AMXX-Studio' @@ -756,6 +756,7 @@ object frmMain: TfrmMain Align = alClient OnModified = sciEditorModified OnDblClick = sciEditorDblClick + OnCallTipClick = sciEditorCallTipClick OnKeyUp = sciEditorKeyUp OnKeyDown = sciEditorKeyDown OnKeyPress = sciEditorKeyPress diff --git a/editor/studio/UnitfrmMain.pas b/editor/studio/UnitfrmMain.pas index 62dea17f..a5f49221 100755 --- a/editor/studio/UnitfrmMain.pas +++ b/editor/studio/UnitfrmMain.pas @@ -1704,6 +1704,8 @@ begin eStr := Format(GetIndents + 'set_hudmessage(%u, %u, %u, %s, %s, 0, 6.0, %s)', [GetRValue(frmHudMsgGenerator.CurrColor), GetGValue(frmHudMsgGenerator.CurrColor), GetBValue(frmHudMsgGenerator.CurrColor), Dot(frmHudMsgGenerator.txtXPos.Text), Dot(frmHudMsgGenerator.txtYPos.Text), Dot(frmHudMsgGenerator.txtTimeToShow.Text)]); eStr := eStr + #13#10 + GetIndents + 'show_hudmessage(id, "' + frmHudMsgGenerator.txtText.Text + '")'; sciEditor.Lines.Insert(sciEditor.GetCurrentLineNumber, eStr); + mnuModified.Caption := lModified; + ActiveDoc.Modified := True; end; end; @@ -1968,22 +1970,6 @@ end; procedure TfrmMain.sciAutoCompleteBeforeShow(Sender: TObject; const Position: Integer; ListToDisplay: TStrings; var CancelDisplay: Boolean); -function GetFunctionPos: Integer; -var eStr: String; - i: integer; -begin - Result := 0; - eStr := StringReplace(sciEditor.Lines[sciEditor.GetCurrentLineNumber], '^"', '', [rfReplaceAll]); - while Between(eStr, '"', '"') <> '' do - eStr := StringReplace(eStr, Between(eStr, '"', '"'), '', [rfReplaceAll]); - while Between(eStr, '{', '}') <> '' do - eStr := StringReplace(eStr, Between(eStr, '"', '"'), '', [rfReplaceAll]); - for i := 0 to Length(eStr) -1 do begin - if eStr[i] = ',' then - Result := Result +1; - end; -end; - var eCurrStyle: Integer; eFunction: String; i: integer; @@ -1997,15 +1983,9 @@ begin eCurrStyle := GetStyleAt(sciEditor.SelStart).StyleNumber; if (ActiveDoc.Highlighter = 'Pawn') or (ActiveDoc.Highlighter = 'C++') then begin - eFunction := ''; - for i := 0 to jviCode.Root.Count -1 do begin - if jviCode.Root.Items[i].DisplayName = 'Function Call' then begin - eFunction := jviCode.Root.Items[i].Items[0].DisplayValue; - break; - end; - end; + eFunction := GetCurrFunc; if eFunction <> '' then begin - eFunction := LowerCase(Trim(eFunction)); + eFunction := LowerCase(eFunction); for i := 0 to eACList.Count -1 do begin if eFunction = LowerCase(Trim(TACFunction(eACList.Items[i]).Name)) then begin if TACFunction(eACList.Items[i]).Items.Count > GetFunctionPos then begin @@ -2106,6 +2086,7 @@ end; procedure TfrmMain.mnuMenuGeneratorClick(Sender: TObject); begin + frmMenuGenerator.jplMain.ActivePage := frmMenuGenerator.jspSelectType; frmMenuGenerator.ShowModal; end; @@ -2153,36 +2134,14 @@ end; procedure TfrmMain.sciCallTipsBeforeShow(Sender: TObject; const Position: Integer; ListToDisplay: TStrings; var CancelDisplay: Boolean); -function GetFunctionPos: Integer; -var eStr: String; - i: integer; -begin - Result := 0; - eStr := StringReplace(sciEditor.Lines[sciEditor.GetCurrentLineNumber], '^"', '', [rfReplaceAll]); - while Between(eStr, '"', '"') <> '' do - eStr := StringReplace(eStr, Between(eStr, '"', '"'), '', [rfReplaceAll]); - while Between(eStr, '{', '}') <> '' do - eStr := StringReplace(eStr, Between(eStr, '"', '"'), '', [rfReplaceAll]); - for i := 0 to Length(eStr) -1 do begin - if eStr[i] = ',' then - Result := Result +1; - end; -end; - var i: integer; eFunction: String; begin CancelDisplay := not Plugin_CallTipShow(ListToDisplay.GetText); if (frmSettings.chkAutoHideCT.Checked) and (jviCode.Root.Items[0].DisplayName = 'Function Call') then begin - for i := 0 to jviCode.Root.Count -1 do begin - if jviCode.Root.Items[i].DisplayName = 'Function Call' then begin - eFunction := jviCode.Root.Items[i].Items[0].DisplayValue; - break; - end; - end; - + eFunction := GetCurrFunc; if eFunction <> '' then begin - eFunction := LowerCase(Trim(eFunction)); + eFunction := LowerCase(eFunction); for i := 0 to eACList.Count -1 do begin if eFunction = LowerCase(Trim(TACFunction(eACList.Items[i]).Name)) then begin if TACFunction(eACList.Items[i]).Items.Count > GetFunctionPos then begin @@ -2197,9 +2156,26 @@ end; procedure TfrmMain.sciEditorCallTipClick(Sender: TObject; const position: Integer); +var i: integer; + eFunc: String; begin - if not Plugin_CallTipClick(position) then + if not Plugin_CallTipClick(position) then begin sciEditor.CallTipCancel; + exit; + end; + + eFunc := LowerCase(GetCurrFunc); + for i := 0 to sciCallTips.ApiStrings.Count -1 do begin + if Pos(eFunc, LowerCase(sciCallTips.ApiStrings[i])) = 1 then begin + eFunc := UpdateIncPath(Between(sciCallTips.ApiStrings[i], '-> ', ',')); + if eFunc <> '' then begin + sciEditor.CallTipCancel; + PawnProjects.Open(eFunc); + end; + + break; + end; + end; end; procedure TfrmMain.sciEditorAutoCSelection(Sender: TObject; @@ -2313,6 +2289,9 @@ begin sciEditor.Lines.Add(#9 + 'return nIdx'); sciEditor.Lines.Add('}'); end; + + mnuModified.Caption := lModified; + ActiveDoc.Modified := True; end; end; @@ -2960,7 +2939,6 @@ begin end; procedure TfrmMain.FormCreate(Sender: TObject); -var i: integer; begin sciEditor.StreamClass := TSciMyStream; eACList := TmxJsCollection.Create(TACFunction);