예제 #1
0
        /// <summary>
        /// Updates the search parameter.
        /// </summary>
        /// <param name="node">The node.</param>
        /// <remarks>Documented by Dev08, 2009-03-05</remarks>
        private void UpdateSearchAndRefreshList()
        {
            if (lmIndex == null)
                return;

            SearchParameter param = new SearchParameter(textBoxSearchBox.Text);
            param.SelectedConnectionString = GetSelectedConnectionString();
            param.UncPath = GetSelectedSubPathFromUNC();
            param.ShowLearningModulesOfSubFolder = learningModulesTreeViewControl.ShowLearningModulesOfSubFolder;
            param.AreAllConnectionSelected = selectedTreeViewNode == null ? false : selectedTreeViewNode.IsMainNode;

            RefreshListView(param, false);
            ResetStatisticsAndPreview();
        }
예제 #2
0
        private List<IIndexEntry> FilterList(List<IIndexEntry> items, SearchParameter searchParameter)
        {
            List<IIndexEntry> textFilteredItems = new List<IIndexEntry>();
            if (searchParameter.FilterWords.Trim() == string.Empty)
                textFilteredItems.AddRange(items);
            else
            {
                string[] filterWords = searchParameter.FilterWords.ToLower().Split(' ');

                foreach (IIndexEntry entry in items)
                {
                    if (entry is FolderIndexEntry)
                    {
                        textFilteredItems.Add(entry);
                        continue;
                    }

                    bool wordLocatedInEntry = true;
                    foreach (string word in filterWords)
                    {
                        if (word == string.Empty)
                            continue;

                        if (!(entry as LearningModulesIndexEntry).Contains(word))
                        {
                            wordLocatedInEntry = false;
                            break;
                        }
                    }
                    if (wordLocatedInEntry)
                        textFilteredItems.Add(entry);
                }
            }

            return textFilteredItems;
        }
예제 #3
0
        private void RefreshListView(SearchParameter searchParameter, bool preserveSelection)
        {
            List<ListViewItem> oldSelection = new List<ListViewItem>();
            foreach (ListViewItem item in listViewLearningModules.SelectedItems)
                oldSelection.Add(item);

            List<ListViewItem> oldFeedSelection = new List<ListViewItem>();
            foreach (ListViewItem item in listViewFeed.SelectedItems)
                oldFeedSelection.Add(item);

            if (filterThread != null && filterThread.ThreadState == System.Threading.ThreadState.Running)
                filterThread.Abort();

            filterThread = new Thread(new ThreadStart((MethodInvoker)delegate
            {
                if (this.ParentForm.Visible)
                {
                    try
                    {
                        List<IIndexEntry> items = FilterList(actualItems, searchParameter);

                        if (listViewLearningModules.InvokeRequired)
                            listViewLearningModules.Invoke((MethodInvoker)delegate { LoadLearningModulesList(items, false); });
                        else
                            LoadLearningModulesList(items, false);

                        if (preserveSelection)
                            listViewLearningModules.Invoke((MethodInvoker)delegate { oldSelection.ForEach(i => i.Selected = true); });

                    }
                    catch (ThreadAbortException tae) { Trace.WriteLine(tae.Message); }
                    catch (Exception ex) { Trace.WriteLine(ex.Message); }

                    try
                    {
                        List<ListViewItem> items = FilterFeedList(actualModules, searchParameter);

                        if (listViewFeed.InvokeRequired)
                            listViewFeed.Invoke((MethodInvoker)delegate { LoadFeedList(items, false); });
                        else
                            LoadFeedList(items, false);

                        if (preserveSelection)
                            listViewFeed.Invoke((MethodInvoker)delegate { oldFeedSelection.ForEach(i => i.Selected = true); });

                    }
                    catch (ThreadAbortException tae) { Trace.WriteLine(tae.Message); }
                    catch (Exception ex) { Trace.WriteLine(ex.Message); }
                }
            }));
            filterThread.Name = "LMPage Filter Thread";
            filterThread.CurrentCulture = Thread.CurrentThread.CurrentCulture;
            filterThread.CurrentUICulture = Thread.CurrentThread.CurrentUICulture;
            filterThread.IsBackground = true;
            filterThread.Start();
        }
예제 #4
0
        private List<ListViewItem> FilterFeedList(List<ListViewItem> items, SearchParameter searchParameter)
        {
            List<ListViewItem> textFilteredItems = new List<ListViewItem>();
            List<ListViewItem> textFilteredItemsCategoryResults = new List<ListViewItem>();

            if (searchParameter.FilterWords.Trim() == string.Empty)
                textFilteredItems.AddRange(items);
            else
            {
                string[] filterWords = searchParameter.FilterWords.ToLower().Split(' ');

                foreach (ListViewItem entry in items)
                {
                    bool wordLocatedInEntry = true;
                    bool wordLocatedInCategory = true;

                    foreach (string word in filterWords)
                    {
                        if (word == string.Empty)
                            continue;

                        if (!(entry.SubItems[0].Text.ToLower().Contains(word) || entry.SubItems[1].Text.ToLower().Contains(word) ||
                            entry.SubItems[2].Text.ToLower().Contains(word) || entry.SubItems[3].Text.ToLower().Contains(word) ||
                            entry.SubItems[4].Text.ToLower().Contains(word)))
                        {
                            wordLocatedInEntry = false;
                        }

                        if (!(entry.SubItems[2].Text.ToLower().Contains(word) ||
                            ((ModuleInfo)entry.Tag).Categories.Exists(c => FindInParentCategories(Convert.ToInt32(c), word))))
                            wordLocatedInCategory = false;
                    }

                    if (wordLocatedInEntry && !wordLocatedInCategory)
                        textFilteredItems.Add(entry);
                    else if (wordLocatedInCategory)
                        textFilteredItemsCategoryResults.Add(entry);
                }
            }

            foreach (ListViewItem item in textFilteredItems)
                textFilteredItemsCategoryResults.Add(item);
            return textFilteredItemsCategoryResults;
        }