Exemple #1
0
        public SearchAndReplaceWidget(SourceEditorWidget widget, Widget container)
        {
            this.container = container;
            widget.TextEditorContainer.SizeAllocated += HandleViewTextEditorhandleSizeAllocated;
            widget.TextEditor.TextViewMargin.SearchRegionsUpdated += HandleWidgetTextEditorTextViewMarginSearchRegionsUpdated;
            widget.TextEditor.Caret.PositionChanged += HandleWidgetTextEditorCaretPositionChanged;
            this.SizeAllocated += HandleViewTextEditorhandleSizeAllocated;
            this.Name           = "SearchAndReplaceWidget";
            this.Events         = Gdk.EventMask.AllEventsMask;
            widget.DisableAutomaticSearchPatternCaseMatch = false;
            Build();
            this.buttonReplace.TooltipText        = GettextCatalog.GetString("Replace");
            this.buttonSearchForward.TooltipText  = GettextCatalog.GetString("Find next");
            this.buttonSearchBackward.TooltipText = GettextCatalog.GetString("Find previous");
            this.buttonSearchMode.TooltipText     = GettextCatalog.GetString("Toggle between search and replace mode");
            this.searchEntry.Ready                    = true;
            this.searchEntry.Visible                  = true;
            this.searchEntry.WidthRequest             = widget.Vbox.Allocation.Width / 3;
            this.searchEntry.ForceFilterButtonVisible = true;
            replaceWidgets = new Widget [] {
                //		labelReplace,
                entryReplace,
                buttonReplace,
                buttonReplaceAll
            };

            this.FocusChain = new Widget [] {
                this.searchEntry,
                this.buttonSearchForward,
                this.buttonSearchBackward,
                entryReplace,
                buttonReplace,
                buttonReplaceAll
            };

            this.widget = widget;
            FilterHistory(seachHistoryProperty);
            FilterHistory(replaceHistoryProperty);
            //HACK: GTK rendering issue on Mac, images don't repaint unless we put them in visible eventboxes
            if (Platform.IsMac)
            {
                foreach (var eb in new [] { eventbox2, eventbox3, eventbox4, eventbox5, eventbox6 })
                {
                    eb.VisibleWindow = true;
                    eb.ModifyBg(StateType.Normal, new Gdk.Color(230, 230, 230));
                }
            }

            if (String.IsNullOrEmpty(widget.TextEditor.SearchPattern))
            {
                widget.TextEditor.SearchPattern = searchPattern;
            }
            else if (widget.TextEditor.SearchPattern != searchPattern)
            {
                searchPattern = widget.TextEditor.SearchPattern;
                //FireSearchPatternChanged ();
            }
            UpdateSearchPattern();

            //searchEntry.Model = searchHistory;

            searchEntry.Entry.KeyReleaseEvent += delegate {
                widget.CheckSearchPatternCasing(SearchPattern);

/*				widget.SetSearchPattern (SearchPattern);
 *                              searchPattern = SearchPattern;
 *                              UpdateSearchEntry ();*/
            };

            searchEntry.Entry.Changed += delegate {
                widget.SetSearchPattern(SearchPattern);
                string oldPattern = searchPattern;
                searchPattern = SearchPattern;
                if (oldPattern != searchPattern)
                {
                    UpdateSearchEntry();
                }
                var history = GetHistory(seachHistoryProperty);
                if (history.Count > 0 && history[0] == oldPattern)
                {
                    ChangeHistory(seachHistoryProperty, searchPattern);
                }
                else
                {
                    UpdateSearchHistory(searchPattern);
                }
            };

            entryReplace.Text = replacePattern;
//			entryReplace.Model = replaceHistory;
//			RestoreReplaceHistory ();

            foreach (Gtk.Widget child in Children)
            {
                child.KeyPressEvent += delegate(object sender, Gtk.KeyPressEventArgs args) {
                    if (args.Event.Key == Gdk.Key.Escape)
                    {
                        widget.RemoveSearchWidget();
                    }
                };
            }

            closeButton.Clicked += delegate {
                widget.RemoveSearchWidget();
            };

            buttonSearchMode.Clicked += delegate {
                IsReplaceMode = !IsReplaceMode;
            };

            // comboboxSearchAs.AppendText (GettextCatalog.GetString ("Text"));
            // comboboxSearchAs.AppendText (GettextCatalog.GetString ("Regular Expressions"));
            // comboboxSearchAs.Active = 0;
            // ReplacePatternChanged += UpdateReplacePattern;

            //SearchPatternChanged += UpdateSearchPattern;
            FocusChildSet += delegate {
                StoreWidgetState();
            };

            searchEntry.Entry.Activated += delegate {
                UpdateSearchHistory(SearchPattern);
                widget.FindNext(false);
            };

            buttonSearchForward.Clicked += delegate {
                UpdateSearchHistory(SearchPattern);
                widget.FindNext(false);
            };

            buttonSearchBackward.Clicked += delegate {
                UpdateSearchHistory(SearchPattern);
                widget.FindPrevious(false);
            };

//			optionsButton.Label = MonoDevelop.Core.GettextCatalog.GetString ("Options");

            this.searchEntry.RequestMenu += HandleSearchEntryhandleRequestMenu;

            entryReplace.Changed += delegate {
                replacePattern = ReplacePattern;
                if (!inReplaceUpdate)
                {
                    FireReplacePatternChanged();
                }
            };

            entryReplace.Activated += delegate {
                UpdateSearchHistory(SearchPattern);
                UpdateReplaceHistory(ReplacePattern);
                widget.Replace();
                entryReplace.GrabFocus();
            };

            buttonReplace.Clicked += delegate {
                UpdateSearchHistory(SearchPattern);
                UpdateReplaceHistory(ReplacePattern);
                widget.Replace();
            };

            buttonReplaceAll.Clicked += delegate {
                UpdateSearchHistory(SearchPattern);
                UpdateReplaceHistory(ReplacePattern);
                widget.ReplaceAll();
            };

            buttonSearchForward.KeyPressEvent  += OnNavigateKeyPressEvent;
            buttonSearchBackward.KeyPressEvent += OnNavigateKeyPressEvent;
            searchEntry.Entry.KeyPressEvent    += OnNavigateKeyPressEvent;
            entryReplace.KeyPressEvent         += OnNavigateKeyPressEvent;
            buttonReplace.KeyPressEvent        += OnNavigateKeyPressEvent;
            buttonReplaceAll.KeyPressEvent     += OnNavigateKeyPressEvent;

            resultInformLabelEventBox             = this.searchEntry.AddLabelWidget(resultInformLabel);
            resultInformLabelEventBox.BorderWidth = 2;
            resultInformLabel.Xpad = 2;
            resultInformLabel.Show();
            searchEntry.FilterButtonPixbuf = new Gdk.Pixbuf(typeof(SearchAndReplaceWidget).Assembly, "searchoptions.png");
        }
Exemple #2
0
        private void OnNavigateKeyPressEvent(object o, KeyPressEventArgs args)
        {
            args.RetVal = false;
            switch (args.Event.Key)
            {
            case Gdk.Key.Return:
            case Gdk.Key.KP_Enter:                    /*
                                                       * I think this is not needed, this code leads to a search twice bug when you hit return.
                                                       * But I leave it in in the case I've missed something. Mike
                                                       * if (o == buttonSearchBackward || o == buttonSearchForward) {
                                                       * if (!((Button)o).HasFocus)
                                                       * ((Button)o).Click ();
                                                       * }*/
                break;

            case Gdk.Key.Down:
            case Gdk.Key.Up:
                if (o != searchEntry.Entry)
                {
                    args.RetVal = true;
                    return;
                }
                if ((args.Event.State & Gdk.ModifierType.ShiftMask) == Gdk.ModifierType.ShiftMask && o == searchEntry.Entry)
                {
                    searchEntry.PopupFilterMenu();
                }
                else
                {
                    if (curSearchResult == -1)
                    {
                        curSearchPattern = searchEntry.Entry.Text;
                    }

                    List <string> history = GetHistory(seachHistoryProperty);
                    if (history.Count > 0)
                    {
                        curSearchResult += args.Event.Key == Gdk.Key.Up ? -1 : 1;
                        if (curSearchResult >= history.Count)
                        {
                            curSearchResult = -1;
                        }
                        if (curSearchResult == -1)
                        {
                            searchEntry.Entry.Text = curSearchPattern;
                        }
                        else
                        {
                            if (curSearchResult < -1)
                            {
                                curSearchResult = history.Count - 1;
                            }

                            searchEntry.Entry.Text = history[curSearchResult];
                        }
                        searchEntry.Entry.Position = -1;
                    }
                }
                args.RetVal = true;
                break;

            case Gdk.Key.N:
            case Gdk.Key.n:
                buttonSearchForward.GrabFocus();
                buttonSearchForward.Click();
                break;

            case Gdk.Key.P:
            case Gdk.Key.p:
                buttonSearchBackward.GrabFocus();
                buttonSearchBackward.Click();
                break;

            case Gdk.Key.Escape:
                widget.RemoveSearchWidget();
                break;

            case Gdk.Key.slash:
                searchEntry.GrabFocus();
                break;

            case Gdk.Key.ISO_Left_Tab:
                if (this.IsReplaceMode)
                {
                    if (o == entryReplace)
                    {
                        searchEntry.Entry.GrabFocus();
                    }
                    else if (o == buttonReplace)
                    {
                        entryReplace.GrabFocus();
                    }
                    else if (o == buttonReplaceAll)
                    {
                        buttonReplace.GrabFocus();
                    }
                    else if (o == buttonSearchBackward)
                    {
                        buttonReplaceAll.GrabFocus();
                    }
                    else if (o == buttonSearchForward)
                    {
                        buttonSearchBackward.GrabFocus();
                    }
                    else
                    {
                        buttonSearchForward.GrabFocus();
                    }
                    args.RetVal = true;
                }
                else
                {
                    if (o == buttonSearchBackward)
                    {
                        searchEntry.Entry.GrabFocus();
                    }
                    else if (o == buttonSearchForward)
                    {
                        buttonSearchBackward.GrabFocus();
                    }
                    else
                    {
                        buttonSearchForward.GrabFocus();
                    }
                    args.RetVal = true;
                }
                break;

            case Gdk.Key.Tab:
                if (this.IsReplaceMode)
                {
                    if (o == entryReplace)
                    {
                        buttonReplace.GrabFocus();
                    }
                    else if (o == buttonReplace)
                    {
                        buttonReplaceAll.GrabFocus();
                    }
                    else if (o == buttonReplaceAll)
                    {
                        buttonSearchBackward.GrabFocus();
                    }
                    else if (o == buttonSearchBackward)
                    {
                        buttonSearchForward.GrabFocus();
                    }
                    else if (o == buttonSearchForward)
                    {
//							widget.TextEditor.GrabFocus ();
                        searchEntry.Entry.GrabFocus();
                    }
                    else
                    {
                        entryReplace.GrabFocus();
                    }
                    args.RetVal = true;
                }
                else
                {
                    if (o == buttonSearchBackward)
                    {
                        buttonSearchForward.GrabFocus();
                    }
                    else if (o == buttonSearchForward)
                    {
                        searchEntry.Entry.GrabFocus();
//							widget.TextEditor.GrabFocus ();
                    }
                    else
                    {
                        buttonSearchBackward.GrabFocus();
                    }
                    args.RetVal = true;
                }
                break;

            default:
                args.RetVal = true;
                break;
            }
        }
        public GotoLineNumberWidget(SourceEditorWidget widget, Widget container)
        {
            this.container = container;
            this.Build();

            this.widget = widget;
            StoreWidgetState();
            widget.TextEditorContainer.SizeAllocated += HandleViewTextEditorhandleSizeAllocated;

            //HACK: GTK rendering issue on Mac, images don't repaint unless we put them in visible eventboxes
            if (Platform.IsMac)
            {
                  {
                    foreach (var eb in new []   {
                        eventbox1, eventbox2
                    })
                    {
                          {
                            eb.VisibleWindow = true;
                            eb.ModifyBg(StateType.Normal, new Gdk.Color(230, 230, 230));
                        }
                    }
                }
            }
            this.closeButton.Clicked += delegate {
                RestoreWidgetState();
                widget.RemoveSearchWidget();
            };

            this.buttonGoToLine.Clicked += delegate {
                cleanExit = true;
                GotoLine();
                widget.RemoveSearchWidget();
            };

            foreach (Gtk.Widget child in this.Children)
            {
                child.KeyPressEvent += delegate(object sender, Gtk.KeyPressEventArgs args) {
                    if (args.Event.Key == Gdk.Key.Escape)
                    {
                        RestoreWidgetState();
                        widget.RemoveSearchWidget();
                    }
                };
            }

            Gtk.Widget oldWidget = null;
            this.FocusChildSet += delegate(object sender, Gtk.FocusChildSetArgs args)  {
                // only store state when the focus comes from a non child widget
                if (args.Widget != null && oldWidget == null)
                {
                    StoreWidgetState();
                }
                oldWidget = args.Widget;
            };

            this.entryLineNumber.Changed += delegate {
                PreviewLine();
            };

            this.entryLineNumber.Activated += delegate {
                cleanExit = true;
                GotoLine();
                widget.RemoveSearchWidget();
            };
        }