Browse Source

* get units code complete to also work if browser disabled

pierre 23 years ago
parent
commit
c12f883d18
1 changed files with 44 additions and 25 deletions
  1. 44 25
      ide/fpcodcmp.pas

+ 44 - 25
ide/fpcodcmp.pas

@@ -45,15 +45,16 @@ procedure RegisterCodeComplete;
 
 implementation
 
-uses Views,MsgBox,Validate,
+uses App,Views,MsgBox,Validate,
 {$ifdef FVISION}
      FVConsts,
 {$else}
      Commands,
 {$endif}
      systems, BrowCol,
-     WEditor, FPCompil, FPVars, FPSymbol,
-     App,FPConst,FPString,FPViews;
+     WEditor, FPSwitch,
+     FPCompil, FPVars, FPSymbol,
+     FPConst,FPString,FPViews;
 
 {$ifndef NOOBJREG}
 const
@@ -82,19 +83,19 @@ begin
         St:=PString(CodeCompleteWords^.At(CIndex+1))^;
         if (UpCaseStr(Copy(St,1,length(WordS)))=UpWordS) then
           begin
-            if UpCase(st[Length(UpWordS)+1])<>Upcase(Text[Length(UpWordS)+1]) then
+            {if UpCase(st[Length(UpWordS)+1])<>Upcase(Text[Length(UpWordS)+1]) then}
               begin
                 Text:='';
                 FPCompleteCodeWord:=false;
                 exit;
-              end
+            (*  end
             else
               { only give the common part }
               begin
                 i:=Length(UpWordS)+1;
                 while (i<=length(st)) and (i<=length(text)) and (UpCase(st[i])=Upcase(Text[i])) do
                   inc(i);
-                SetLength(Text,i-1);
+                SetLength(Text,i-1);    *)
               end;
           end;
       end;
@@ -108,19 +109,19 @@ begin
         St:=PString(UnitsCodeCompleteWords^.At(Index+1))^;
         if UpCaseStr(Copy(St,1,length(WordS)))=UpWordS then
           begin
-            if UpCase(st[Length(UpWordS)+1])<>Upcase(Text[Length(UpWordS)+1]) then
+            {if UpCase(st[Length(UpWordS)+1])<>Upcase(Text[Length(UpWordS)+1]) then}
               begin
                 Text:='';
                 FPCompleteCodeWord:=false;
                 exit;
-              end
+            (*  end
             else
               { only give the common part }
               begin
                 i:=Length(UpWordS)+1;
                 while (i<=length(st)) and (i<=length(text)) and (UpCase(st[i])=Upcase(Text[i])) do
                   inc(i);
-                SetLength(Text,i-1);
+                SetLength(Text,i-1); *)
               end;
           end;
       end;
@@ -129,19 +130,19 @@ begin
   if ShowOnlyUnique and (Index<>-1) and (CIndex<>-1) then
     begin
       St:=PString(CodeCompleteWords^.At(CIndex+1))^;
-      if UpCase(st[Length(UpWordS)+1])<>Upcase(Text[Length(UpWordS)+1]) then
+      {if UpCase(st[Length(UpWordS)+1])<>Upcase(Text[Length(UpWordS)+1]) then}
         begin
           Text:='';
           FPCompleteCodeWord:=false;
           exit;
-        end
+      (*  end
       else
         { only give the common part }
         begin
           i:=Length(UpWordS)+1;
           while (i<=length(st)) and (i<=length(text)) and (UpCase(st[i])=Upcase(Text[i])) do
             inc(i);
-          SetLength(Text,i-1);
+          SetLength(Text,i-1); *)
         end;
     end;
   if OK=false then Text:=''
@@ -157,8 +158,8 @@ procedure InitCodeComplete;
 var I:integer;
     S: string;
 begin
-  if Assigned(CodeCompleteWords) then Exit;
-
+  if Assigned(CodeCompleteWords) then
+    Dispose(CodeCompleteWords, Done);
   New(CodeCompleteWords, Init(10,10));
   for I:=0 to GetReservedWordCount-1 do
     begin
@@ -189,18 +190,22 @@ var
       for I:=0 to P^.Count-1 do
         InsertInS(P^.At(I));
     end;
+  Var
+    st : string;
 
   begin
     Inc(level);
     if UnitsCodeCompleteWords^.Count=MaxCollectionSize then
        begin Overflow:=true; Exit; end;
-    UnitsCodeCompleteWords^.Insert(NewStr(P^.GetName));
+    st:=P^.GetName;
+    if Length(st)>=CodeCompleteMinLen then
+      UnitsCodeCompleteWords^.Insert(NewStr(Lowcasestr(st)));
     { this is wrong because it inserted args or locals of proc
       in the globals list !! PM}
     if (P^.Items<>nil) and (level=1) and
-        (not OnlyStandard or (Pos(P^.GetName+',',UpStandardUnits)>0) or
+        ((not OnlyStandard or (Pos(P^.GetName+',',UpStandardUnits)>0) or
         { don't exclude system unit ... }
-        (Pos('SYS',P^.GetName)>0)) then
+        (Pos('SYS',P^.GetName)>0))) then
       InsertItemsInS(P^.Items);
     Dec(level);
   end;
@@ -229,9 +234,13 @@ procedure AddStandardUnitsToCodeComplete;
 var
   HiddenSource : PSourceWindow;
   R : TRect;
+  StoreBrowserSwitchesConfig : string;
 begin
   Desktop^.GetExtent(R);
-  New(HiddenSource,init(R,''));
+  New(HiddenSource,init(R,'*'));
+  HiddenSource^.NoNameCount:=0;
+  HiddenSource^.UpdateTitle;
+  HiddenSource^.Hide;
   CompilingHiddenFile:=HiddenSource;
   { compile a dummy file to get symbol info }
   with HiddenSource^.Editor^ do
@@ -240,13 +249,17 @@ begin
       if StandardUnits<>'' then
         begin
           AddLine('uses');
-          Addline(StandardUnits+';');
+          Addline(StandardUnits);
+          Addline('  ;');
         end;
       Addline('begin');
       Addline('end.');
       SaveFile;
     end;
+  StoreBrowserSwitchesConfig:=BrowserSwitches^.GetCurrSelParam;
+  BrowserSwitches^.ReadItemsCfg('+');
   DoCompile(cCompile);
+  BrowserSwitches^.SetCurrSelParam(StoreBrowserSwitchesConfig);
   AddAvailableUnitsToCodeComplete(true);
   { Now add the interface declarations to the Code Complete list }
   CompilingHiddenFile:=nil;
@@ -300,8 +313,11 @@ end;
 
 procedure DoneCodeComplete;
 begin
-  if Assigned(CodeCompleteWords) then Dispose(CodeCompleteWords, Done);
-  CodeCompleteWords:=nil;
+  if Assigned(CodeCompleteWords) then
+    begin
+      Dispose(CodeCompleteWords, Done);
+      CodeCompleteWords:=nil;
+    end;
   if Assigned(UnitsCodeCompleteWords) then
     begin
       Dispose(UnitsCodeCompleteWords,done);
@@ -444,6 +460,13 @@ begin
       if Assigned(CodeCompleteWords) then Dispose(CodeCompleteWords, Done);
       CodeCompleteWords:=C;
       CodeCompleteCase:=TCodeCompleteCase(RB^.Value);
+      MinInputL^.GetData(NewValStr);
+      NewVal:=StrToInt(NewValStr);
+      if (NewVal>0) and (NewVal<>CodeCompleteMinLen) then
+        begin
+          CodeCompleteMinLen:=NewVal;
+          InitCodeComplete;
+        end;
       ShowOnlyUnique:=CB^.Mark(0);
       UseAllUnitsInCodeComplete:=CB^.Mark(1);
       UseStandardUnitsInCodeComplete:=CB^.Mark(2);
@@ -455,10 +478,6 @@ begin
         end
       else
         InputL^.GetData(StandardUnits);
-      MinInputL^.GetData(NewValStr);
-      NewVal:=StrToInt(NewValStr);
-      if NewVal>0 then
-        CodeCompleteMinLen:=NewVal;
     end
   else
     Dispose(C, Done);