Package org.rstudio.studio.client.workbench.views.source.editors.text

Source Code of org.rstudio.studio.client.workbench.views.source.editors.text.TextEditingTargetFindReplace$Container

/*
* TextEditingTargetFindReplace.java
*
* Copyright (C) 2009-12 by RStudio, Inc.
*
* Unless you have received this program directly from RStudio pursuant
* to the terms of a commercial license agreement with RStudio, then
* this program is licensed to you under the terms of version 3 of the
* GNU Affero General Public License. This program is distributed WITHOUT
* ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,
* MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the
* AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.
*
*/
package org.rstudio.studio.client.workbench.views.source.editors.text;

import org.rstudio.core.client.widget.ToolbarButton;
import org.rstudio.studio.client.RStudioGinjector;
import org.rstudio.studio.client.workbench.views.source.editors.text.findreplace.FindReplace;
import org.rstudio.studio.client.workbench.views.source.editors.text.findreplace.FindReplaceBar;

import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.dom.client.FocusEvent;
import com.google.gwt.event.dom.client.FocusHandler;
import com.google.gwt.user.client.ui.Widget;

public class TextEditingTargetFindReplace
{
   public interface Container
   {
      AceEditor getEditor();
      void insertFindReplace(FindReplaceBar findReplaceBar);
      void removeFindReplace(FindReplaceBar findReplaceBar);
   }
  
   public TextEditingTargetFindReplace(Container container)
   {
      this(container, true);
   }
  
   public TextEditingTargetFindReplace(Container container, boolean showReplace)                                 
   {
      container_ = container;
      showReplace_ = showReplace;
     
      container_.getEditor().addEditorFocusHandler(new FocusHandler() {
         @Override
         public void onFocus(FocusEvent event)
         {
            if (findReplace_ != null)
               findReplace_.notifyEditorFocused();
         }
      });
   }
  
   public Widget createFindReplaceButton()
   {
      if (findReplaceBar_ == null)
      {
         findReplaceButton_ = new ToolbarButton(
               FindReplaceBar.getFindIcon(),
               new ClickHandler() {
                  public void onClick(ClickEvent event)
                  {
                     if (findReplaceBar_ == null)
                        showFindReplace(true);
                     else
                        hideFindReplace();
                  }
               });
         String title = showReplace_ ? "Find/Replace" : "Find";
         findReplaceButton_.setTitle(title);
      }
      return findReplaceButton_;
   }
  
   public void showFindReplace(boolean defaultForward)
   {
      ensureFindReplaceBar(defaultForward);
     
      String selection = container_.getEditor().getSelectionValue();
      boolean multiLineSelection = selection.indexOf('\n') != -1;
     
      String searchText = null;
      if ((selection.length() != 0) && !multiLineSelection)
         searchText = selection;
     
      findReplace_.activate(searchText, defaultForward, multiLineSelection);
   }

   private void ensureFindReplaceBar(boolean defaultForward)
   {
      if (findReplaceBar_ == null)
      {
         findReplaceBar_ = new FindReplaceBar(showReplace_, defaultForward);
         findReplace_ = new FindReplace(
                               container_.getEditor(),
                               findReplaceBar_,
                               RStudioGinjector.INSTANCE.getGlobalDisplay(),
                               showReplace_);
         container_.insertFindReplace(findReplaceBar_);
         findReplaceBar_.getCloseButton().addClickHandler(new ClickHandler()
         {
            public void onClick(ClickEvent event)
            {
               hideFindReplace();
            }
         });

         findReplaceButton_.setLeftImage(FindReplaceBar.getFindLatchedIcon());
      }
   }
  
   public boolean isShowing()
   {
      return findReplaceBar_ != null;
   }

   public void hideFindReplace()
   {
      if (findReplaceBar_ != null)
      {
         container_.removeFindReplace(findReplaceBar_);
         findReplace_.notifyClosing();
         findReplace_ = null;
         findReplaceBar_ = null;
         findReplaceButton_.setLeftImage(FindReplaceBar.getFindIcon());
      }
      container_.getEditor().focus();
   }
  
   public void findNext()
   {
      if (findReplace_ != null)
         findReplace_.findNext();
   }
  
   public void findPrevious()
   {
      if (findReplace_ != null)
         findReplace_.findPrevious();
   }
  
   public void findFromSelection()
   {
      String selection = container_.getEditor().getSelectionValue();
      boolean multiLineSelection = selection.indexOf('\n') != -1;
      if ((selection.length()) > 0 && !multiLineSelection)
      {
         ensureFindReplaceBar(true);
         findReplace_.activate(selection, true, false);
         findReplace_.findNext();
      }
   }
  
   public void replaceAndFind()
   {
      if (findReplace_ != null)
         findReplace_.replaceAndFind();
   }
 
  
   private final Container container_;
   private final boolean showReplace_;
   private FindReplace findReplace_;
   private FindReplaceBar findReplaceBar_;
   private ToolbarButton findReplaceButton_;
}
TOP

Related Classes of org.rstudio.studio.client.workbench.views.source.editors.text.TextEditingTargetFindReplace$Container

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.