private void CodeSourceTree_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs <object> e) { if (CodeSourceTreeIsCollapsing) { return; } TreeViewItem selected = (TreeViewItem)e.NewValue; selected.BringIntoView(); selected.Focus(); if (PreFilterLock.IsChecked == false) { AbstractXPathBuilder xpath = Parser.SuggestXPathFor(selected, String.Empty); XPathInput2.Text = string.Empty; XPathInput1.Text = xpath.ToString(); ClickHistory.Add(xpath); } else { string root = XPathInput1.Text; AbstractXPathBuilder xpath = Parser.SuggestXPathFor(selected, root); XPathInput2.Text = xpath.ToString(); ClickHistory.Add(xpath); } }
private void ClickHistory_XPathSolutionClick(object sender, AbstractXPathBuilder e) { if (e != null) { XPathInput1.Text = e.ToString(); } }
public void Add(AbstractXPathBuilder xpath) { if (History.Contains(xpath) == false) { History.Insert(0, xpath); } }
public void AbstractXPathBuilder_Synthetize_ExactSamePathsButDifferentHierarchies() { HtmlDocument doc = new HtmlDocument(); doc.LoadHtml(GenerateHtmlPageForSynthetizeTests()); HtmlNode article1 = doc.DocumentNode.SelectSingleNode("//*[@id=\"article1\"]/h2"); AbstractXPathBuilder xpath1 = new HtmlXPathBuilder(); xpath1.Build(article1); HtmlNode article2 = doc.DocumentNode.SelectSingleNode("//*[@id=\"article2\"]/h2"); AbstractXPathBuilder xpath2 = new HtmlXPathBuilder(); xpath2.Build(article2); List <AbstractXPathBuilder> list = new List <AbstractXPathBuilder>(); list.Add(xpath1); list.Add(xpath2); AbstractXPathBuilder synthetisis = HtmlXPathBuilder.Synthetize(list); string expectedResult = "/html/body/div/section/article[@id]/h2"; string actualResult = synthetisis.ToString(); Assert.AreEqual(expectedResult, actualResult); synthetisis.Optimize(); string expectedOptimization = "//article[@id]/h2"; string optimizedResult = synthetisis.ToString(); Assert.AreEqual(expectedOptimization, optimizedResult); }
private void TextBoxWithValidation_PreviewDrop(object sender, DragEventArgs e) { if (e.Data.GetDataPresent("AbstractXPathBuilder")) { AbstractXPathBuilder xp = e.Data.GetData("AbstractXPathBuilder") as AbstractXPathBuilder; this.Text = xp.ToString(); e.Handled = true; } }
private void TrySumUp_Click(object sender, RoutedEventArgs e) { AbstractXPathBuilder xp = AbstractXPathBuilder.SynthetizeAndOptimize(History); if (xp != null) { XPathSolutionClick?.Invoke(this, xp); } }
// Helper to search up the VisualTree /*private static T FindAnchestor<T>(DependencyObject current) * where T : DependencyObject * { * do * { * if (current is T) * { * return (T)current; * } * current = VisualTreeHelper.GetParent(current); * } * while (current != null); * return null; * }*/ #endregion private void RemoveEntryButton_Click(object sender, RoutedEventArgs e) { AbstractXPathBuilder xp = HistoryListBox.SelectedItem as AbstractXPathBuilder; if (xp != null) { History.Remove(xp); } }
private void HistoryListBox_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e) { // Store the mouse position startPoint = e.GetPosition(null); // Get the dragged item FrameworkElement tb = (FrameworkElement)e.OriginalSource; dragSource = tb.DataContext as AbstractXPathBuilder; }
private void HistoryListBox_MouseDoubleClick(object sender, MouseButtonEventArgs e) { AbstractXPathBuilder xp = HistoryListBox.SelectedItem as AbstractXPathBuilder; XPathEntryDoubleClick?.Invoke(this, xp); }