예제 #1
0
        public HexEditor()
        {
            BackgroundColor              = Color.FromBytes(0, 0, 0);
            CanGetFocus                  = true;
            HexEditorData                = new HexEditorData();
            HexEditorData.EditMode       = new SimpleEditMode();
            HexEditorData.Caret.Changed += delegate {
                if (!HexEditorData.Caret.PreserveSelection)
                {
                    HexEditorData.ClearSelection();
                }
                RequestResetCaretBlink();
                if (HexEditorData.Caret.AutoScrollToCaret)
                {
                    ScrollToCaret();
                }
                RepaintLine(HexEditorData.Caret.Line);
            };
            HexEditorData.Caret.OffsetChanged += delegate(object sender, CaretLocationEventArgs e) {
                if (!HexEditorData.Caret.PreserveSelection)
                {
                    HexEditorData.ClearSelection();
                }
                RequestResetCaretBlink();
                if (HexEditorData.Caret.AutoScrollToCaret)
                {
                    ScrollToCaret();
                }
                RepaintLine(e.OldOffset / BytesInRow);
                RepaintLine(HexEditorData.Caret.Line);
            };
            HexEditorData.Undone += delegate {
                PurgeLayoutCaches();
                Repaint();
            };
            HexEditorData.Redone += delegate {
                PurgeLayoutCaches();
                Repaint();
            };
            HexEditorData.SelectionChanged += HexEditorDataSelectionChanged;
            HexEditorData.Replaced         += delegate(object sender, ReplaceEventArgs e) {
                if (e.Count > 0)
                {
                    PurgeLayoutCaches();
                    Repaint();
                }
            };
            style = new HexEditorStyle();

            iconMargin = new IconMargin(this);
            margins.Add(iconMargin);

            gutterMargin = new GutterMargin(this);
            margins.Add(gutterMargin);

            hexEditorMargin = new HexEditorMargin(this);
            margins.Add(hexEditorMargin);

            textEditorMargin = new TextEditorMargin(this);
            margins.Add(textEditorMargin);

            margins.Add(new EmptySpaceMargin(this));

            HexEditorData.UpdateRequested += delegate {
                HexEditorData.Updates.ForEach(update => update.AddRedraw(this));
                HexEditorData.Updates.Clear();
            };

            Options          = HexEditorOptions.DefaultOptions;
            Options.Changed += OptionsChanged;
        }