public HexSelectionImpl(WpfHexView hexView, HexAdornmentLayer selectionLayer, VSTC.IEditorFormatMap editorFormatMap) { if (hexView == null) throw new ArgumentNullException(nameof(hexView)); if (selectionLayer == null) throw new ArgumentNullException(nameof(selectionLayer)); if (editorFormatMap == null) throw new ArgumentNullException(nameof(editorFormatMap)); HexView = hexView; HexView.GotAggregateFocus += HexView_GotAggregateFocus; HexView.LostAggregateFocus += HexView_LostAggregateFocus; hexSelectionLayer = new HexSelectionLayer(this, selectionLayer, editorFormatMap); ActivationTracksFocus = true; }
public HexSelectionLayer(HexSelectionImpl hexSelection, HexAdornmentLayer layer, VSTC.IEditorFormatMap editorFormatMap) { if (hexSelection == null) throw new ArgumentNullException(nameof(hexSelection)); if (layer == null) throw new ArgumentNullException(nameof(layer)); if (editorFormatMap == null) throw new ArgumentNullException(nameof(editorFormatMap)); markerElementRemovedCallBack = (tag, element) => OnMarkerElementRemoved(); this.hexSelection = hexSelection; this.layer = layer; this.editorFormatMap = editorFormatMap; hexSelection.HexView.Options.OptionChanged += Options_OptionChanged; hexSelection.SelectionChanged += TextSelection_SelectionChanged; hexSelection.HexView.LayoutChanged += TextView_LayoutChanged; editorFormatMap.FormatMappingChanged += EditorFormatMap_FormatMappingChanged; UpdateUseReducedOpacityForHighContrastOption(); UpdateBackgroundBrush(); }
void UpdateEnabled() { var newEnabled = wpfHexView.Options.ShowColumnLines(); if (newEnabled == enabled) return; enabled = newEnabled; if (enabled) { if (adornmentLayer == null) adornmentLayer = wpfHexView.GetAdornmentLayer(PredefinedHexAdornmentLayers.ColumnLineSeparator); HookEnabledEvents(); } else UnhookEnabledEvents(); DelayRecreateColumnLines(); }
public HexCaretLayer(HexCaretImpl hexCaret, HexAdornmentLayer layer, VSTC.IClassificationFormatMap classificationFormatMap, VSTC.IClassificationTypeRegistryService classificationTypeRegistryService) { if (hexCaret == null) throw new ArgumentNullException(nameof(hexCaret)); if (layer == null) throw new ArgumentNullException(nameof(layer)); if (classificationFormatMap == null) throw new ArgumentNullException(nameof(classificationFormatMap)); if (classificationTypeRegistryService == null) throw new ArgumentNullException(nameof(classificationTypeRegistryService)); overwriteMode = true; this.hexCaret = hexCaret; this.layer = layer; this.classificationFormatMap = classificationFormatMap; activeCaretClassificationType = classificationTypeRegistryService.GetClassificationType(CTC.ThemeClassificationTypeNames.HexCaret); inactiveCaretClassificationType = classificationTypeRegistryService.GetClassificationType(CTC.ThemeClassificationTypeNames.HexInactiveCaret); valuesCaretGeometry = new CaretGeometry(); asciiCaretGeometry = new CaretGeometry(); layer.HexView.Selection.SelectionChanged += Selection_SelectionChanged; layer.HexView.VisualElement.AddHandler(GotKeyboardFocusEvent, new KeyboardFocusChangedEventHandler(VisualElement_GotKeyboardFocus), true); layer.HexView.VisualElement.AddHandler(LostKeyboardFocusEvent, new KeyboardFocusChangedEventHandler(VisualElement_LostKeyboardFocus), true); layer.HexView.VisualElement.IsVisibleChanged += VisualElement_IsVisibleChanged; classificationFormatMap.ClassificationFormatMappingChanged += ClassificationFormatMap_ClassificationFormatMappingChanged; AddAdornment(); }
void UpdateEnabled() { var newEnabled = wpfHexView.Options.HighlightActiveColumn(); if (newEnabled == enabled) return; enabled = newEnabled; if (enabled) { if (adornmentLayer == null) adornmentLayer = wpfHexView.GetAdornmentLayer(PredefinedHexAdornmentLayers.ActiveColumnHighlighter); HookEnabledEvents(); } else UnhookEnabledEvents(); DelayRecreateRectangles(); }
protected override void OnEnabledCore() { if (adornmentLayer == null) adornmentLayer = wpfHexView.GetAdornmentLayer(PredefinedHexAdornmentLayers.BackgroundImage); wpfHexView.LayoutChanged += WpfHexView_LayoutChanged; }
public TextLayer(HexAdornmentLayer adornmentLayer) { if (adornmentLayer == null) throw new ArgumentNullException(nameof(adornmentLayer)); lines = new List<LineInfo>(); adornmentLayer.AddAdornment(VSTE.AdornmentPositioningBehavior.OwnerControlled, (HexBufferSpan?)null, null, this, null); }
void UpdateEnableState() { enabled = wpfHexView.Options.IsHighlightCurrentLineEnabled(); if (enabled) { if (adornmentLayer == null) adornmentLayer = wpfHexView.GetAdornmentLayer(PredefinedHexAdornmentLayers.CurrentLineHighlighter); if (!hasHookedEvents) { RegisterEnabledEvents(); isActive = wpfHexView.HasAggregateFocus; selectionIsEmpty = wpfHexView.Selection.IsEmpty; isActive = wpfHexView.HasAggregateFocus; UpdateLineElementBrushes(); PositionLineElement(); } } else { adornmentLayer?.RemoveAllAdornments(); if (hasHookedEvents) UnregisterEnabledEvents(); } }
void ShowSearchControl(SearchKind searchKind, bool canOverwriteSearchString) { UseGlobalSettingsIfUiIsHidden(canOverwriteSearchString); bool wasShown = IsSearchControlVisible; if (searchControl == null) { searchControl = new SearchControl { DataContext = this }; searchControl.InputBindings.Add(new KeyBinding(new RelayCommand(a => CloseSearchControl()), new KeyGesture(Key.Escape, ModifierKeys.None))); searchControl.InputBindings.Add(new KeyBinding(new RelayCommand(a => ShowFind()), new KeyGesture(Key.F, ModifierKeys.Control))); searchControl.InputBindings.Add(new KeyBinding(new RelayCommand(a => ShowReplace()), new KeyGesture(Key.H, ModifierKeys.Control))); searchControl.InputBindings.Add(new KeyBinding(new RelayCommand(a => FindNext(true)), new KeyGesture(Key.F, ModifierKeys.Alt))); searchControl.InputBindings.Add(new KeyBinding(new RelayCommand(a => FindNext(true)), new KeyGesture(Key.Enter, ModifierKeys.None))); searchControl.InputBindings.Add(new KeyBinding(new RelayCommand(a => FindNext(false)), new KeyGesture(Key.Enter, ModifierKeys.Shift))); searchControl.InputBindings.Add(new KeyBinding(new RelayCommand(a => FindNext(true)), new KeyGesture(Key.F3, ModifierKeys.None))); searchControl.InputBindings.Add(new KeyBinding(new RelayCommand(a => FindNext(false)), new KeyGesture(Key.F3, ModifierKeys.Shift))); searchControl.InputBindings.Add(new KeyBinding(new RelayCommand(a => FindNextSelected(true)), new KeyGesture(Key.F3, ModifierKeys.Control))); searchControl.InputBindings.Add(new KeyBinding(new RelayCommand(a => FindNextSelected(false)), new KeyGesture(Key.F3, ModifierKeys.Control | ModifierKeys.Shift))); searchControl.InputBindings.Add(new KeyBinding(new RelayCommand(a => FocusSearchStringTextBox()), new KeyGesture(Key.N, ModifierKeys.Alt))); searchControl.InputBindings.Add(new KeyBinding(new RelayCommand(a => FocusReplaceStringTextBox(), a => IsReplaceMode), new KeyGesture(Key.P, ModifierKeys.Alt))); searchControl.InputBindings.Add(new KeyBinding(new RelayCommand(a => MatchCase = !MatchCase), new KeyGesture(Key.C, ModifierKeys.Alt))); searchControl.InputBindings.Add(new KeyBinding(new RelayCommand(a => IsBigEndian = !IsBigEndian), new KeyGesture(Key.B, ModifierKeys.Alt))); searchControl.InputBindings.Add(new KeyBinding(new RelayCommand(a => DataKind = HexDataKind.Bytes), new KeyGesture(Key.H, ModifierKeys.Alt))); searchControl.InputBindings.Add(new KeyBinding(new RelayCommand(a => DataKind = HexDataKind.Utf16String), new KeyGesture(Key.U, ModifierKeys.Alt))); searchControl.InputBindings.Add(new KeyBinding(new RelayCommand(a => DataKind = HexDataKind.Utf8String), new KeyGesture(Key.D8, ModifierKeys.Alt))); searchControl.InputBindings.Add(new KeyBinding(ReplaceNextCommand, new KeyGesture(Key.R, ModifierKeys.Alt))); searchControl.InputBindings.Add(new KeyBinding(ReplaceAllCommand, new KeyGesture(Key.A, ModifierKeys.Alt))); searchControl.AddHandler(UIElement.GotKeyboardFocusEvent, new KeyboardFocusChangedEventHandler(SearchControl_GotKeyboardFocus), true); searchControl.AddHandler(UIElement.LostKeyboardFocusEvent, new KeyboardFocusChangedEventHandler(SearchControl_LostKeyboardFocus), true); searchControl.AddHandler(UIElement.MouseDownEvent, new MouseButtonEventHandler(SearchControl_MouseDown), true); SelectAllWhenFocused(searchControl.searchStringTextBox); SelectAllWhenFocused(searchControl.replaceStringTextBox); searchControl.SizeChanged += SearchControl_SizeChanged; searchControl.Measure(new Size(double.PositiveInfinity, double.PositiveInfinity)); } if (layer == null) layer = wpfHexView.GetAdornmentLayer(PredefinedHexAdornmentLayers.Search); if (layer.IsEmpty) { layer.AddAdornment(VSTE.AdornmentPositioningBehavior.OwnerControlled, (HexBufferSpan?)null, null, searchControl, null); wpfHexView.LayoutChanged += WpfHexView_LayoutChanged; wpfHexView.BufferLinesChanged += WpfHexView_BufferLinesChanged; wpfHexView.Buffer.BufferSpanInvalidated += Buffer_BufferSpanInvalidated; } SetSearchKind(searchKind); RepositionControl(); if (!wasShown) UpdateHexMarkerSearch(); }
public HexMarkerService(WpfHexView wpfHexView, HexTagAggregator<HexMarkerTag> tagAggregator, VSTC.IEditorFormatMap editorFormatMap, IThemeService themeService) { if (wpfHexView == null) throw new ArgumentNullException(nameof(wpfHexView)); if (tagAggregator == null) throw new ArgumentNullException(nameof(tagAggregator)); if (editorFormatMap == null) throw new ArgumentNullException(nameof(editorFormatMap)); if (themeService == null) throw new ArgumentNullException(nameof(themeService)); this.wpfHexView = wpfHexView; this.tagAggregator = tagAggregator; this.editorFormatMap = editorFormatMap; this.themeService = themeService; textMarkerAdornmentLayer = wpfHexView.GetAdornmentLayer(PredefinedHexAdornmentLayers.TextMarker); negativeTextMarkerAdornmentLayer = wpfHexView.GetAdornmentLayer(PredefinedHexAdornmentLayers.NegativeTextMarker); markerElements = new List<MarkerElement>(); useReducedOpacityForHighContrast = wpfHexView.Options.GetOptionValue(DefaultWpfHexViewOptions.UseReducedOpacityForHighContrastOptionId); onRemovedDelegate = OnRemoved; wpfHexView.Closed += WpfHexView_Closed; wpfHexView.LayoutChanged += WpfHexView_LayoutChanged; wpfHexView.Options.OptionChanged += Options_OptionChanged; tagAggregator.BatchedTagsChanged += TagAggregator_BatchedTagsChanged; editorFormatMap.FormatMappingChanged += EditorFormatMap_FormatMappingChanged; }