Ignore:
Timestamp:
Mar 17, 2007, 9:50:38 PM (18 years ago)
Author:
RBRi
Message:

many small updates/commens/logging changes
fix for #16

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/NewView/GlobalSearchForm.pas

    r94 r98  
    7171    Procedure ResultsOutlineOnEnter (Sender: TObject);
    7272    Procedure SearchTextEditOnEnter (Sender: TObject);
    73     Procedure ViewHelpPathsButtonOnClick (Sender: TObject);
    7473    Procedure SelectDrivesButtonOnClick (Sender: TObject);
    7574    Procedure GlobalSearchFormOnSetupShow (Sender: TObject);
     
    197196End;
    198197
    199 Procedure TGlobalSearchForm.ViewHelpPathsButtonOnClick (Sender: TObject);
    200 var
    201   Dirs: TStringList;
    202 Begin
    203   Dirs := TStringList.Create;
    204 
    205   with InformationForm.InformationMemo do
    206   begin
    207     Lines.Clear;
    208 
    209     Lines.Add( 'HELP:' );
    210     GetDirsInPath( 'HELP', Dirs );
    211     Lines.AddStrings( Dirs );
    212 
    213     Lines.Add( '' );
    214     Lines.Add( 'BOOKSHELF:' );
    215     GetDirsInPath( 'BOOKSHELF', Dirs );
    216     Lines.AddStrings( Dirs );
    217   end;
    218   InformationForm.ShowModal;
    219 
    220   Dirs.Destroy;
    221 End;
    222 
    223 Procedure TGlobalSearchForm.GetSelectedDirectories( List: TStringList );
     198
     199Procedure TGlobalSearchForm.GetSelectedDirectories(List: TStringList);
    224200Var
     201  tmpDirectories : TStringList;
     202
    225203  DriveNumber: longint;
    226204  DriveType: TDriveType;
    227205  DriveLetter: char;
    228   Dirs: TStringList;
    229206  i: longint;
    230207  Dir: string;
     
    242219    Ord( gsSelectedHelpPaths ): // standard or selected help paths
    243220    Begin
    244       Dirs := TStringList.Create;
     221      tmpDirectories := TStringList.Create;
    245222      List.Sorted := true;
    246223      List.Duplicates := dupIgnore;
    247224
    248       GetDirsInPath( 'HELP', Dirs );
    249       List.AddStrings( Dirs );
    250 
    251       GetDirsInPath( 'BOOKSHELF', Dirs );
    252       List.AddStrings( Dirs );
    253 
    254       Dirs.Destroy;
    255 
     225      // GetDirsInPath clears the list tmpDirectories
     226      GetDirsInPath(HelpPathEnvironmentVar, tmpDirectories);
     227      List.AddStrings(tmpDirectories);
     228
     229      GetDirsInPath(BookshelfEnvironmentVar, tmpDirectories);
     230      List.AddStrings(tmpDirectories);
     231
     232      tmpDirectories.Destroy;
     233
     234      // for selected paths we have to adjust the selection
    256235      if SearchLocationComboBox.ItemIndex = Ord( gsSelectedHelpPaths ) then
    257236      begin
     
    259238        for i := 0 to List.Count - 1 do
    260239        begin
    261           Dir := List[ i ];
     240          Dir := List[i];
    262241          if not Settings.SearchDirectories.Find( Dir, FoundIndex ) then
    263             List.Objects[ i ] := pointer( 1 );
     242            List.Objects[i] := pointer(1);
    264243        end;
    265244      end;
    266245    end;
     246
    267247
    268248    Ord( gsFixedDrives ):
     
    284264    begin
    285265      // already custom...
    286       List.Assign( Settings.SearchDirectories );
     266      List.Assign(Settings.SearchDirectories);
    287267    end;
    288268  end;
     
    290270
    291271Procedure TGlobalSearchForm.SelectDrivesButtonOnClick (Sender: TObject);
    292 Begin
    293   GetSelectedDirectories( SearchDirectoriesForm.SelectedFolders );
     272begin
     273  GetSelectedDirectories(SearchDirectoriesForm.SelectedFolders);
    294274
    295275  SearchDirectoriesForm.ShowModal;
     
    297277    exit;
    298278
     279  // there was a selection, so we have to change the dropdown
    299280  if SearchLocationComboBox.ItemIndex = Ord( gsHelpPaths ) then
    300281    SearchLocationComboBox.ItemIndex := Ord( gsSelectedHelpPaths );
     
    306287    SearchLocationComboBox.ItemIndex := Ord( gsCustom );
    307288
     289  // update the settings
    308290  Settings.SearchDirectories.Assign( SearchDirectoriesForm.SelectedFolders );
    309 
    310291  SaveSettings;
    311292End;
     
    477458Function TGlobalSearchForm.Search( Parameters: TObject ): TObject;
    478459var
    479   Files: TStringList;
     460  Files : TStringList;
    480461  FileIndex: longint;
    481462  Filename: string;
     
    484465  MatchingTopics: TList;
    485466
    486   SearchParameters: TSearchParameters;
     467  tmpSearchParameters : TSearchParameters;
    487468  Query: TTextSearchQuery;
    488469  i: longint;
     
    490471
    491472Begin
    492 //  StartProfile( GetLogFilesDir + 'NewViewSearch.prf' );
    493 
    494   SearchParameters := Parameters as TSearchParameters;
    495 
    496   Query := SearchParameters.Query;
     473  tmpSearchParameters := Parameters as TSearchParameters;
     474
     475  Query := tmpSearchParameters.Query;
    497476  Files := TStringList.Create;
    498477
    499   // MatchingTopics.Add( nil ); // artificial crash
    500478  MatchingTopics := TList.Create;
    501 
    502   LogEvent(LogParse, 'Getting files');
     479  LogEvent(LogParse, 'Creating file list');
    503480
    504481  // make sure we ignore duplicate files...
     
    507484  Files.Duplicates := dupIgnore;
    508485
    509   for i := 0 to SearchParameters.Directories.Count - 1 do
     486  for i := 0 to tmpSearchParameters.Directories.Count - 1 do
    510487  begin
    511488    if ThreadManager.StopRequested then
     489    begin
    512490      break;
    513     ThreadManager.UpdateProgress( i * 10 div SearchParameters.Directories.Count,
     491    end;
     492
     493    ThreadManager.UpdateProgress( i * 10 div tmpSearchParameters.Directories.Count,
    514494                                  100,
    515495                                  ScanDirectoriesMsg );
    516     Dir := SearchParameters.Directories[ i ];
     496    Dir := tmpSearchParameters.Directories[ i ];
    517497    if StrEnds( '...', Dir ) then
    518498    begin
     
    521501                                       Dir,
    522502                                       '*.inf;*.hlp',
     503                                       true,
    523504                                       Files,
    524505                                       ThreadManager.StopRequested,
     
    527508    else
    528509    begin
    529       ListFilesInDirectory( Dir,
    530                             '*.inf;*.hlp',
    531                             Files);
    532     end;
    533   end;
    534 
    535   LogEvent(LogParse, ' Searching ' + IntToStr( Files.Count ) + ' files');
     510      ListFilesInDirectory( Dir, '*.inf;*.hlp', true, Files);
     511    end;
     512  end;
     513
    536514  for FileIndex := 0 to Files.Count - 1 do
    537515  begin
    538516    if ThreadManager.StopRequested then
     517    begin
    539518      break;
    540     Filename := Files[ FileIndex ];
    541     LogEvent(LogParse, Filename);
     519    end;
     520
     521    Filename := Files[FileIndex];
     522
    542523    ThreadManager.UpdateProgress( 10 + FileIndex * 95 div Files.Count,
    543524                                  100,
     
    551532
    552533    try
    553       LogEvent(LogParse, ' Create THelpFile');
    554534      HelpFile := THelpFile.Create( FileName );
    555 
    556       LogEvent(LogParse, ' Helpfile created');
    557535      MatchingTopics.Clear;
    558 
    559       LogEvent(LogParse, ' Search file');
    560536      SearchHelpFile( HelpFile,
    561537                      Query,
     
    566542      if MatchingTopics.Count > 0 then
    567543      begin
    568         LogEvent(LogParse, '  Sort results');
    569544        // Create a searchresult object to send back to main thread.
    570545        SearchResult := TSearchResult.Create;
     
    575550
    576551        SearchResult.MatchingTopics.Sort( TopicRelevanceCompare );
    577         LogEvent(LogParse, '  Display results');
    578 
    579552        ThreadManager.SendData( '', SearchResult );
    580553      end;
    581554
    582       LogEvent(LogParse, 'Unload helpfile');
    583555      HelpFile.Destroy;
    584556
     
    596568
    597569  end;
    598   LogEvent(LogParse, 'search completed');
    599570  ThreadManager.UpdateProgress( 100, 100, DoneMsg );
    600571  Files.Destroy;
     
    602573  Query.Destroy;
    603574
    604   SearchParameters.Directories.Destroy;
    605   SearchParameters.Destroy;
     575  tmpSearchParameters.Directories.Destroy;
     576  tmpSearchParameters.Destroy;
    606577
    607578  Result := nil;
    608   LogEvent(LogParse, 'done');
    609579End;
    610580
     
    626596Procedure TGlobalSearchForm.DoSearch;
    627597var
     598  tmpSelectedDirectories : TStringList;
     599  i : integer;
     600
    628601  SearchText: string;
    629602  Query: TTextSearchQuery;
     
    641614
    642615  try
    643     Query := TTextSearchQuery.Create( SearchText );
     616    Query := TTextSearchQuery.Create(SearchText);
    644617  except
    645618    on e: ESearchSyntaxError do
     
    655628
    656629  SearchParameters := TSearchParameters.Create;
     630
     631  SearchParameters.Query := Query;
     632
     633  // now the directories to search in
    657634  SearchParameters.Directories := TStringList.Create;
    658635
    659   SearchParameters.Query := Query;
    660 
    661   GetSelectedDirectories( SearchParameters.Directories );
     636  tmpSelectedDirectories := TStringList.Create;
     637  GetSelectedDirectories(tmpSelectedDirectories);
     638
     639  // clear the list and add only the selected ones
     640  for i := 0 to tmpSelectedDirectories.Count - 1 do
     641  begin
     642    if tmpSelectedDirectories.Objects[i] = nil then
     643    begin
     644      SearchParameters.Directories.add(tmpSelectedDirectories[i]);
     645    end;
     646  end;
     647  tmpSelectedDirectories.Destroy;
    662648
    663649  ThreadManager.StartJob( Search, SearchParameters );
Note: See TracChangeset for help on using the changeset viewer.