示例#1
0
        private void ToggleButtons()
        {
            bool temp = algorithmPicker.IsEnabled;

            algorithmPicker.IsEnabled  = !temp;
            SpeedPicker.IsEnabled      = !temp;
            ResetToolBarItem.IsEnabled = !temp;
            SortBtn.IsEnabled          = !temp;
            SpeedPicker.IsEnabled      = !temp;
            randomCaseBtn.IsVisible    = !temp;
            worstCaseBtn.IsVisible     = !temp;
            SortingGraphObject SGObj = (SortingGraphObject)BindingContext;

            switch (SGObj.Case)
            {
            case GraphCaseEnum.Worst:
                worstCaseBtn.IsVisible = temp;
                worstCaseBtn.IsEnabled = !temp;
                break;

            case GraphCaseEnum.Random:
                randomCaseBtn.IsVisible = temp;
                randomCaseBtn.IsEnabled = !temp;
                break;
            }
        }
示例#2
0
        private void ResetGraph()
        {
            SortingGraphObject SGObj = (SortingGraphObject)BindingContext;

            switch (SGObj.Case)
            {
            case GraphCaseEnum.Worst:
                if (SGObj.GraphElementNumber > 0)
                {
                    CurrentEntriesOnGraph = service.GetWostCaseEntriesForSort(1, SGObj.GraphElementNumber);
                }
                else
                {
                    CurrentEntriesOnGraph = service.GetWostCaseEntriesForSort(1, 20);
                }
                DisplayGraph(CurrentEntriesOnGraph);
                break;

            case GraphCaseEnum.Random:
                if (SGObj.GraphElementNumber > 0)
                {
                    CurrentEntriesOnGraph = service.GetRandomEntries(1, SGObj.GraphElementNumber, 0);
                }
                else
                {
                    CurrentEntriesOnGraph = service.GetRandomEntries(1, 20, 0);
                }
                DisplayGraph(CurrentEntriesOnGraph);
                break;
            }
        }
示例#3
0
        private async void CarryOutOperations <T>(List <T> operations) where T : ISortOperation
        {
            SortingGraphObject SGObj = (SortingGraphObject)BindingContext;
            int speed = SGObj.SpeedDictionary[SGObj.Speed];

            foreach (T operation in operations)
            {
                int index;
                foreach (Entry entry in operation.EntriesToChange)
                {
                    index = CurrentEntriesOnGraph.IndexOf(entry);
                    if (index > 0)
                    {
                        CurrentEntriesOnGraph.ToArray()[index].Color = SKColor.Parse(operation.ChangeToColour);
                    }
                }
                DisplayGraph(operation.NewEntries);
                await Task.Delay(speed);

                CurrentEntriesOnGraph = (Entry[])operation.NewEntries;
                DisplayGraph(CurrentEntriesOnGraph);
                foreach (Entry entry in operation.EntriesToChange)
                {
                    // change colour back to red
                    index = CurrentEntriesOnGraph.IndexOf(entry);
                    CurrentEntriesOnGraph.ToArray()[index].Color = SKColor.Parse(App.GraphColour);
                }
            }
            ToggleButtons();
            DisplayCaseBtns();
        }
示例#4
0
 private void SetBindingContext()
 {
     BindingContext = new SortingGraphObject
     {
         Case = GraphCaseEnum.Random,
         GraphElementNumber = 20
     };
 }
示例#5
0
        private void DisplayGraph(IEnumerable <Entry> entries)
        {
            SortingGraphObject SGObj = (SortingGraphObject)BindingContext;
            int margin = 0;

            switch (SGObj.GraphElementNumber)
            {
            case 5:
                margin = 30;
                break;

            case 25:
                margin = 15;
                break;

            case 30:
                margin = 15;
                break;

            case 35:
                margin = 12;
                break;

            case 40:
                margin = 10;
                break;

            case 45:
                margin = 8;
                break;

            case 50:
                margin = 6;
                break;
            }
            if (margin == 0)
            {
                SortGraph.Chart = new BarChart
                {
                    Entries         = entries,
                    BackgroundColor = SKColors.Transparent
                };
            }
            else
            {
                SortGraph.Chart = new BarChart
                {
                    Entries         = entries,
                    Margin          = margin,
                    BackgroundColor = SKColors.Transparent
                };
            }
        }
示例#6
0
        void SpeedPicker_SelectedIndexChanged(object sender, EventArgs e)
        {
            SortingGraphObject SGObj = (SortingGraphObject)BindingContext;

            if (SpeedPicker.SelectedIndex > 0)
            {
                SGObj.Speed = SpeedPicker.SelectedItem.ToString();
            }
            else
            {
                SGObj.Speed = "";
            }
            ToggleSortBtn();
        }
示例#7
0
        private void ChangeToWorstCase()
        {
            SortingGraphObject SGObj = (SortingGraphObject)BindingContext;

            SGObj.Case = GraphCaseEnum.Worst;
            if (SGObj.GraphElementNumber > 0)
            {
                CurrentEntriesOnGraph = service.GetWostCaseEntriesForSort(1, SGObj.GraphElementNumber);
            }
            else
            {
                CurrentEntriesOnGraph = service.GetWostCaseEntriesForSort(1, 20);
            }
            DisplayGraph(CurrentEntriesOnGraph);
            UpdateCaseBtnAppearance();
        }
示例#8
0
        private void ChangeToRandomCase()
        {
            SortingGraphObject SGObj = (SortingGraphObject)BindingContext;

            SGObj.Case = GraphCaseEnum.Random;
            if (SGObj.GraphElementNumber > 0)
            {
                CurrentEntriesOnGraph = service.GetRandomEntries(1, SGObj.GraphElementNumber, 0);
            }
            else
            {
                CurrentEntriesOnGraph = service.GetRandomEntries(1, 20, 0);
            }
            DisplayGraph(CurrentEntriesOnGraph);
            UpdateCaseBtnAppearance();
        }
示例#9
0
        void GraphElementsPicker_SelectedIndexChanged(object sender, EventArgs e)
        {
            SortingGraphObject SGObj = (SortingGraphObject)BindingContext;

            if (GraphElementsPicker.SelectedIndex > 0)
            {
                SGObj.GraphElementNumber = SGObj.GraphElementNumDictionary[
                    GraphElementsPicker.SelectedItem.
                    ToString()];
                ResetGraph();
            }
            else
            {
                SGObj.GraphElementNumber = 0;
            }
            ToggleSortBtn();
        }
示例#10
0
        void AlgorithmPicker_SelectedIndexChanged(object sender, EventArgs e)
        {
            SortingGraphObject SGObj = (SortingGraphObject)BindingContext;

            if (algorithmPicker.SelectedIndex > 0)
            {
                SGObj.CurrentAlg = algorithmPicker.SelectedItem.ToString();
                Title            = SGObj.CurrentAlg;
            }
            else
            {
                Title            = "Searches";
                SGObj.CurrentAlg = "";
            }
            ToggleSortBtn();
            ResetGraph();
        }
示例#11
0
        private async void CarryOutMergeOperations(List <MergeSortOperation> operations)
        {
            foreach (MergeSortOperation operation in operations)
            {
                SortingGraphObject SGObj = (SortingGraphObject)BindingContext;
                int speed = SGObj.SpeedDictionary[SGObj.Speed];
                if (!operation.IsFinalMergeOperation)
                {
                    foreach (Entry entry in operation.LeftEntries)
                    {
                        Entry tempEntry = CurrentEntriesOnGraph.Where(hr => hr.Value == entry.Value).FirstOrDefault();
                        if (tempEntry != null)
                        {
                            continue;                           // doesn't f*cking work
                        }
                    }

                    DisplayGraph(CurrentEntriesOnGraph);
                    await Task.Delay(speed);
                }
                else
                {
                    CurrentEntriesOnGraph = operation.LeftEntries
                                            .Concat(operation.RightEntries)
                                            .ToList();
                    DisplayGraph(CurrentEntriesOnGraph);
                    await Task.Delay(speed);

                    int   resultValue = (int)operation.ResultsEntries.Last().Value;
                    Entry entry       = CurrentEntriesOnGraph.Where(hr => hr.Value == resultValue)
                                        .FirstOrDefault();
                    if (entry != null)
                    {
                        List <Entry> entries = CurrentEntriesOnGraph.Select(hr => hr).ToList();
                        entries.Remove(entry);
                        entries.Add(entry);
                        CurrentEntriesOnGraph = entries;
                        DisplayGraph(CurrentEntriesOnGraph);
                        await Task.Delay(speed);
                    }
                }
            }
            ToggleButtons();
            DisplayCaseBtns();
        }
示例#12
0
        private void UpdateCaseBtnAppearance()
        {
            SortingGraphObject SGObj = (SortingGraphObject)BindingContext;

            randomCaseBtn.TextColor = Color.FromHex("#AAAAAA");
            worstCaseBtn.TextColor  = Color.FromHex("#AAAAAA");
            switch (SGObj.Case)
            {
            case GraphCaseEnum.Random:
                randomCaseBtn.FontAttributes = FontAttributes.Bold;
                worstCaseBtn.FontAttributes  = FontAttributes.None;
                randomCaseBtn.TextColor      = Color.FromHex("#007EFA");
                break;

            case GraphCaseEnum.Worst:
                worstCaseBtn.FontAttributes  = FontAttributes.Bold;
                randomCaseBtn.FontAttributes = FontAttributes.None;
                worstCaseBtn.TextColor       = Color.FromHex("#007EFA");
                break;
            }
        }
示例#13
0
        void SortBtnIsClicked(object sender, EventArgs e)
        {
            SortingGraphObject SGObj = (SortingGraphObject)BindingContext;

            if (IsSorted(CurrentEntriesOnGraph) is true)
            {
                ResetGraph();
            }
            if (SGObj.CurrentAlg != "" ||
                SGObj.CurrentAlg != null)
            {
                ToggleButtons();
                switch (SGObj.CurrentAlg)
                {
                case "Bubble Sort":
                {
                    IEnumerable <SortOperation> operations = algorithms.BubbleSort(CurrentEntriesOnGraph.ToArray());
                    CarryOutOperations(operations.ToList());
                    break;
                }

                case "Heap Sort":
                {
                    IEnumerable <SortOperation> operations = algorithms.HeapSort(CurrentEntriesOnGraph.ToArray());
                    CarryOutOperations(operations.ToList());
                    break;
                }

                case "Insertion Sort":
                {
                    IEnumerable <SortOperation> operations = algorithms.InsertionSort(CurrentEntriesOnGraph.ToArray());
                    CarryOutOperations(operations.ToList());
                    break;
                }

                case "Merge Sort":
                {
                    IEnumerable <MergeSortOperation> operations = algorithms.MergeSort(CurrentEntriesOnGraph.ToArray());
                    CarryOutMergeOperations(operations.ToList());
                    break;
                }

                case "Quick Sort":
                {
                    List <SortOperation> ops        = new List <SortOperation>();
                    List <SortOperation> operations = algorithms.QuickSort(CurrentEntriesOnGraph.ToArray(),
                                                                           0,
                                                                           SGObj.GraphElementNumber - 1,
                                                                           ops);
                    CarryOutOperations(operations);
                    break;
                }

                case "Selection Sort":
                {
                    IEnumerable <SortOperation> operations = algorithms.SelectionSort(CurrentEntriesOnGraph.ToArray());
                    CarryOutOperations(operations.ToList());
                    break;
                }

                default:
                    break;
                }
            }
        }