private void CheckTextInFile(SearchResultsHolder.SearchComponentDescriptor ProjectDesc, BuildFileWrapper file, string what, bool MatchCase, bool MatchWholeWord)
        {
            if (!File.Exists(file.FullPath)) return;
            
            m_SearchResults.TotalComponentsSearched++;

            using (StreamReader tr = new StreamReader(file.FullPath))
            {

                int LineNum = 0;

                while (!tr.EndOfStream)
                {
                    LineNum++;
                    string Line = tr.ReadLine();

                    SearchResultsHolder.SearchComponentDescriptor CompDesc = new SearchResultsHolder.SearchComponentDescriptor(file);
                    if (ProjectDesc != null)
                        CompDesc.Parent = ProjectDesc;

                    CompDesc.Line = new SearchResultsHolder.SearchComponentDescriptor.LineDescriptor(LineNum, Line);

                    //if (MatchWholeWord)
                    //{
                    //    if (MatchCase)
                    //    {
                    //        if (file.Name == what)
                    //        {
                    //            m_SearchResults.FindedComponents.Add(CompDesc);
                    //            OnElementFinded(CompDesc);
                    //        }
                    //    }
                    //    else
                    //    {
                    //        if (file.Name.ToLower() == what.ToLower())
                    //        {
                    //            m_SearchResults.FindedComponents.Add(CompDesc);
                    //            OnElementFinded(CompDesc);
                    //        }
                    //    }
                    //}
                    //else
                    //{
                    if (MatchCase)
                    {
                        if (Line.Contains(what))
                        {
                            m_SearchResults.FindedComponents.Add(CompDesc);
                            OnElementFinded(CompDesc);
                        }
                    }
                    else
                    {
                        if (Line.ToLower().Contains(what.ToLower()))
                        {
                            m_SearchResults.FindedComponents.Add(CompDesc);
                            OnElementFinded(CompDesc);
                        }
                    }
                    //}
                }
            }
        }
        private void SearchTextInFiles(SearchWhere where, string what, bool MatchCase, bool MatchWholeWord)
        {
            List<BuildFileWrapper> FilesList = new List<BuildFileWrapper>();

            List<LibraryWrapper> CheckedLibrariesList = new List<LibraryWrapper>();

            if ((where == SearchWhere.All) || (where == SearchWhere.PKDatabase))
            {
                foreach (LibraryWrapper LW in m_inv.Libraries)
                {
                    FilesList.Clear();

                    if (Solution != null)
                    {
                        if (Solution.IsReference(LW))
                        {
                            FilesList.AddRange(LW.FastCompileFiles);
                            FilesList.AddRange(LW.HeaderFiles);
                            FilesList.AddRange(LW.OtherFiles);
                            FilesList.AddRange(LW.SourceFiles);
                        }
                    }
                    else
                    {
                        FilesList.AddRange(LW.FastCompileFiles);
                        FilesList.AddRange(LW.HeaderFiles);
                        FilesList.AddRange(LW.OtherFiles);
                        FilesList.AddRange(LW.SourceFiles);
                    }

                    SearchResultsHolder.SearchComponentDescriptor LibraryDesc = new SearchResultsHolder.SearchComponentDescriptor(ComponentWrapper.GetComponentWrapper(LW));

                    foreach (BuildFileWrapper file in FilesList)
                    {
                        this.CheckTextInFile(LibraryDesc, file, what, MatchCase, MatchWholeWord);
                    }
                }
            }

            if ((where == SearchWhere.All) || (where == SearchWhere.Solution))
            {
                if (Solution != null)
                {
                    foreach (ProjectWrapper PW in Solution.Projects)
                    {
                        foreach (ComponentWrapper CW in PW.Libraries)
                        {
                            LibraryWrapper LW = this.FindLibrary(CW.Guid);
                            if ((LW != null))// && (!Libs.Contains(LW)))
                            {
                                if (CheckedLibrariesList.Contains(LW)) continue;

                                CheckedLibrariesList.Add(LW);

                                FilesList.Clear();
                                FilesList.AddRange(LW.FastCompileFiles);
                                FilesList.AddRange(LW.HeaderFiles);
                                FilesList.AddRange(LW.OtherFiles);
                                FilesList.AddRange(LW.SourceFiles);

                                //SearchResultsHolder.ComponentDescriptor ProjectDesc = new SearchResultsHolder.ComponentDescriptor();
                                //ProjectDesc.Component = ComponentWrapper.GetComponentWrapper(PW);
                                //ProjectDesc.Parent = new SearchResultsHolder.ComponentDescriptor(null, ComponentWrapper.GetComponentWrapper(Solution));

                                //SearchResultsHolder.ComponentDescriptor LibraryDesc = new SearchResultsHolder.ComponentDescriptor(ProjectDesc, ComponentWrapper.GetComponentWrapper(LW));

                                SearchResultsHolder.SearchComponentDescriptor LibraryDesc = new SearchResultsHolder.SearchComponentDescriptor(new SearchResultsHolder.SearchComponentDescriptor(null, ComponentWrapper.GetComponentWrapper(Solution)), ComponentWrapper.GetComponentWrapper(LW));

                                if (!Solution.IsReference(LW))
                                {
                                    foreach (BuildFileWrapper file in FilesList)
                                    {
                                        this.CheckTextInFile(LibraryDesc, file, what, MatchCase, MatchWholeWord);
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
        private void CheckFile(SearchResultsHolder.SearchComponentDescriptor ProjectDesc, BuildFileWrapper file, string what, bool MatchCase, bool MatchWholeWord)
        {
            SearchResultsHolder.SearchComponentDescriptor CompDesc = new SearchResultsHolder.SearchComponentDescriptor(file);
            if (ProjectDesc != null)
                CompDesc.Parent = ProjectDesc;

            m_SearchResults.TotalComponentsSearched++;

            if (MatchWholeWord)
            {
                if (MatchCase)
                {
                    if (file.Name == what)
                    {
                        if (!m_SearchResults.FindedComponents.Contains(CompDesc))
                        {
                            m_SearchResults.FindedComponents.Add(CompDesc);
                            OnElementFinded(CompDesc);
                        }
                    }
                }
                else
                {
                    if (file.Name.ToLower() == what.ToLower())
                    {
                        if (!m_SearchResults.FindedComponents.Contains(CompDesc))
                        {
                            m_SearchResults.FindedComponents.Add(CompDesc);
                            OnElementFinded(CompDesc);
                        }
                    }
                }
            }
            else
            {
                if (MatchCase)
                {
                    if (file.Name.Contains(what))
                    {
                        if (!m_SearchResults.FindedComponents.Contains(CompDesc))
                        {
                            m_SearchResults.FindedComponents.Add(CompDesc);
                            OnElementFinded(CompDesc);
                        }
                    }
                }
                else
                {
                    if (file.Name.ToLower().Contains(what.ToLower()))
                    {
                        if (!m_SearchResults.FindedComponents.Contains(CompDesc))
                        {
                            m_SearchResults.FindedComponents.Add(CompDesc);
                            OnElementFinded(CompDesc);
                        }
                    }
                }
            }
        }
        /// <summary>
        /// Searchs in Features
        /// </summary>
        /// <param name="what"></param>
        /// <param name="MatchCase"></param>
        /// <param name="MatchWholeWord"></param>
        private void SearchInFeatures(SearchWhere where, string what, bool MatchCase, bool MatchWholeWord)
        {
            if ((where == SearchWhere.All) || (where == SearchWhere.PKDatabase))
            {
                foreach (FeatureWrapper FW in m_inv.Features)
                {
                    this.CheckFeature(FW, what, MatchCase, MatchWholeWord);
                }
            }

            if ((where == SearchWhere.All) || (where == SearchWhere.Solution))
            {
                if (Solution != null)
                {
                    foreach (ProjectWrapper PW in Solution.Projects)
                    {
                        foreach (ComponentWrapper CW in PW.Features)
                        {
                            FeatureWrapper FW = this.FindFeature(CW.Guid);
                            if ((FW != null))// && (!Libs.Contains(LW)))
                            {
                                SearchResultsHolder.SearchComponentDescriptor ProjectDesc = new SearchResultsHolder.SearchComponentDescriptor();
                                ProjectDesc.Component = ComponentWrapper.GetComponentWrapper(PW);
                                ProjectDesc.Parent = new SearchResultsHolder.SearchComponentDescriptor(null, ComponentWrapper.GetComponentWrapper(Solution));
                                this.CheckFeature(ProjectDesc, FW, what, MatchCase, MatchWholeWord);
                            }
                        }
                    }
                }
            }
        }
        private void CheckLibraryCategory(SearchResultsHolder.SearchComponentDescriptor ProjectDesc, LibraryCategoryWrapper libcat, string what, bool MatchCase, bool MatchWholeWord)
        {
            SearchResultsHolder.SearchComponentDescriptor CompDesc = new SearchResultsHolder.SearchComponentDescriptor(ComponentWrapper.GetComponentWrapper(libcat));
            if (ProjectDesc != null)
                CompDesc.Parent = ProjectDesc;

            m_SearchResults.TotalComponentsSearched++;

            if (MatchWholeWord)
            {
                if (MatchCase)
                {
                    if (libcat.Name == what)
                    {
                        m_SearchResults.FindedComponents.Add(CompDesc);
                        OnElementFinded(CompDesc);
                    }
                }
                else
                {
                    if (libcat.Name.ToLower() == what.ToLower())
                    {
                        m_SearchResults.FindedComponents.Add(CompDesc);
                        OnElementFinded(CompDesc);
                    }
                }
            }
            else
            {
                if (MatchCase)
                {
                    if (libcat.Name.Contains(what))
                    {
                        m_SearchResults.FindedComponents.Add(CompDesc);
                        OnElementFinded(CompDesc);
                    }
                }
                else
                {
                    if (libcat.Name.ToLower().Contains(what.ToLower()))
                    {
                        m_SearchResults.FindedComponents.Add(CompDesc);
                        OnElementFinded(CompDesc);
                    }
                }
            }
        }
        /// <summary>
        /// Searchs in LibraryCategories
        /// </summary>
        /// <param name="what"></param>
        /// <param name="MatchCase"></param>
        /// <param name="MatchWholeWord"></param>
        private void SearchInLibraryCategories(SearchWhere where, string what, bool MatchCase, bool MatchWholeWord)
        {
            if ((where == SearchWhere.All) || (where == SearchWhere.PKDatabase))
            {
                foreach (LibraryCategoryWrapper LCW in m_inv.LibraryCategories)
                {
                    this.CheckLibraryCategory(LCW, what, MatchCase, MatchWholeWord);
                }
            }

            if ((where == SearchWhere.All) || (where == SearchWhere.Solution))
            {
                if (Solution != null)
                {
                    foreach (ProjectWrapper PW in Solution.Projects)
                    {
                        foreach (ComponentWrapper CW in PW.LibraryCategories)
                        {
                            LibraryCategoryWrapper LCW = this.FindLibraryCategory(CW.Guid);
                            if ((LCW != null))// && (!Libs.Contains(LW)))
                            {
                                SearchResultsHolder.SearchComponentDescriptor ProjectDesc = new SearchResultsHolder.SearchComponentDescriptor();
                                ProjectDesc.Component = ComponentWrapper.GetComponentWrapper(PW);
                                ProjectDesc.Parent = new SearchResultsHolder.SearchComponentDescriptor(null, ComponentWrapper.GetComponentWrapper(Solution));
                                this.CheckLibraryCategory(ProjectDesc, LCW, what, MatchCase, MatchWholeWord);
                            }
                        }
                    }
                }
            }
        }