Example #1
0
        /// <summary> Перезаполнение плитками панель. </summary>
        private void FillPlates(GroupModes grpMode, bool ascend = true, string atrName = "")
        {
            // зачищаем имеющееся
            ClearPanel();

            // группируем
            var readyMap = FilterSorterModule.GroupProcess(srcList, grpMode, ascend, atrName);

            bool isSeparable = readyMap.Count() > 1;

            // заполняем в соотвествии с группами
            foreach (var dirEnt in readyMap)
            {
                UniformGrid newGrid = new UniformGrid();
                newGrid.VerticalAlignment = VerticalAlignment.Top;
                newGrid.Margin            = new Thickness(0, 2, 0, 15);
                // разделитель с названием подпапки
                if (isSeparable)
                {
                    entPlates.Children.Add(CreateSeparator(dirEnt.Key, newGrid));
                }

                if (ListMode)
                {
                    newGrid.Columns = 1;
                    foreach (var entry in dirEnt.Value)
                    {
                        entry.CreateListPlate();
                        entry.ListHeight = (int)(oneLineHeight * sliderListHeight.Value) + 4;
                        if (entry.lp.Parent != null)
                        {
                            MainWindow.RemoveChild(entry.lp.Parent, entry.lp);
                        }
                        newGrid.Children.Add(entry.lp);
                    }
                }
                else
                {
                    newGrid.Columns = (int)sliderGridCol.Value;
                    foreach (var entry in dirEnt.Value)
                    {
                        entry.CreatePlate();
                        if (entry.vp.Parent != null)
                        {
                            MainWindow.RemoveChild(entry.vp.Parent, entry.vp);
                        }
                        newGrid.Children.Add(entry.vp);
                    }
                }



                entPlates.Children.Add(newGrid);
            }

            readyMap.Clear();

            Application.Current.Dispatcher.BeginInvoke((Action)(() => {
                SetTotalCountText($"Total: {srcList.Count()}");
            }));
        }
Example #2
0
        ///<summary> Обновление после изменения одного из контролов фильтра. </summary>
        private void FilterChanged(object sender, RoutedEventArgs e)
        {
            Stopwatch sw = new Stopwatch();

            sw.Start();

            string     atrName = "";            // для проброса имени атрибута из названия пункта комбобокса сортировки
            GroupModes grpMode = GroupModes.NONE;

            switch (filterPanel.sortModeComBox.SelectedIndex)
            {
            case 0: {
                sortMode = FilterSorterModule.SortMode.NAME;
                grpMode  = GroupModes.FIRST_CHAR;
                break;
            }

            case 1: {
                sortMode = FilterSorterModule.SortMode.DATE_ADD;
                grpMode  = GroupModes.DATE_ADD;
                break;
            }

            case 2: {
                sortMode = FilterSorterModule.SortMode.DATE_CREATE;
                grpMode  = GroupModes.DATE_CREATE;
                break;
            }

            case 3: {
                sortMode = FilterSorterModule.SortMode.DATE_MODIFIED;
                grpMode  = GroupModes.DATE_MODIFIED;
                break;
            }

            case 4: {
                sortMode = FilterSorterModule.SortMode.RESOLUTION;
                grpMode  = GroupModes.RESOLUTION;
                break;
            }

            case 5: {
                sortMode = FilterSorterModule.SortMode.ENTRYS_COUNT;
                grpMode  = GroupModes.ENTRYS_COUNT;
                break;
            }

            case -1: goto case 0;

            default: {
                sortMode = FilterSorterModule.SortMode.ATTRIBUTE;
                grpMode  = GroupModes.ATTRIBUTE;
                string selItemName = (filterPanel.sortModeComBox.SelectedItem as TextBlock).Text;
                atrName = selItemName.Substring(selItemName.IndexOf(" ") + 1);                          // отрезаем слово аттрибут
                break;
            }
            }

            bool grpEnabled = filterPanel.grpChkBox.IsChecked ?? false;
            bool ascend     = filterPanel.ascendChkBox.IsChecked ?? false;
            bool broken     = filterPanel.brokenChkBox.IsChecked ?? false;
            bool excepted   = filterPanel.exceptedChkBox.IsChecked ?? false;

            if (!grpEnabled)
            {
                grpMode = GroupModes.FOLDER;
            }

            loadingPanel.Visibility = Visibility.Visible;
            Application.Current.Dispatcher.BeginInvoke((Action)(() => SetInfoText("Loading Plates!")));

            pBar.Value = 50d;

            var filtStr = filterPanel.filterBox.Text;

            BackgroundWorker bw = new BackgroundWorker();

            bw.WorkerReportsProgress = true;
            bw.DoWork += (s, a) => {
                srcList = FilterSorterModule.FilterAndSort(baseList, filtStr, CatalogRoot.tagsList, sortMode, ascend, broken, excepted, atrName);
            };

            bw.RunWorkerCompleted += (s, a) => {
                FillPlates(grpMode, ascend, atrName);
                filterPanel.FillSortCombo();
                SetUiStateOpened();
                Console.WriteLine($"FilterChanged {sw.ElapsedMilliseconds}ms");
                sw.Stop();
            };

            bw.RunWorkerAsync();
        }