Package org.eclipse.wst.sse.ui.internal.search

Source Code of org.eclipse.wst.sse.ui.internal.search.BasicSearchLabelProvider

/*******************************************************************************
* Copyright (c) 2001, 2009 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
*     IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.wst.sse.ui.internal.search;

import org.eclipse.jface.resource.JFaceResources;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.StyledString;
import org.eclipse.jface.viewers.DelegatingStyledCellLabelProvider.IStyledLabelProvider;
import org.eclipse.jface.viewers.StyledString.Styler;
import org.eclipse.search.ui.text.AbstractTextSearchViewPage;
import org.eclipse.search.ui.text.Match;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.RGB;
import org.eclipse.wst.sse.ui.internal.SSEUIMessages;
import org.eclipse.wst.sse.ui.internal.editor.EditorPluginImageHelper;
import org.eclipse.wst.sse.ui.internal.editor.EditorPluginImages;

import com.ibm.icu.text.MessageFormat;

/**
* <p>The label provider designed for use with <code>BasicSearchMatchElement</code><p>
*
* <p>Displays in the format of:<br/>
* lineNum: Message (# matches)</br>
* 1: <a></a> (2 matches)</p>
*/
public class BasicSearchLabelProvider extends LabelProvider implements IStyledLabelProvider {
  /**
   * ID of match highlighting background color
   */
  private static final String MATCH_BG_ID = "org.eclipse.wst.sse.ui.search.MATCH_BG";
 
  //register the match highlighting background color once
  static {
    JFaceResources.getColorRegistry().put(MATCH_BG_ID, new RGB(206, 204, 247));
  }
 
  /**
   * Match highlighting background color styler
   */
  private static final Styler HIGHLIGHT_WRITE_STYLE= StyledString.createColorRegistryStyler(null, MATCH_BG_ID);
 
 
  /**
   * Need the page if want to determine the number of matches, but this can be <code>null</code>
   */
  private AbstractTextSearchViewPage fPage;

  /**
   * <p>Construct the provider without a <code>AbstractTextSearchViewPage</code><p>
   * <p><b>NOTE:</b>If this constructor is used then the provider will not be able to determine
   * the number of matches that are all on the same line for a given element</p>
   */
  public BasicSearchLabelProvider() {
    this(null);
  }
 
  /**
   * <p>Construct the provider with a <code>AbstractTextSearchViewPage</code> so that the
   * number of matches that are all on the same line for a given element can be determined.</p>
   *
   * @param page Will be used to determine the number of matches that are all on the same line
   */
  public BasicSearchLabelProvider(AbstractTextSearchViewPage page) {
    fPage= page;
  }
 
  /**
   * @see org.eclipse.jface.viewers.LabelProvider#getImage(java.lang.Object)
   */
  public Image getImage(Object element) {
    return EditorPluginImageHelper.getInstance().getImage(EditorPluginImages.IMG_OBJ_OCC_MATCH);
  }
 
  /**
   * <p><b>Note:</b> Because this class implements <code>IStyledLabelProvider</code> the <code>getStyledText</code>
   * function should be being called and not this one, but better save then sorry</p>
   *
   * @see org.eclipse.jface.viewers.LabelProvider#getText(java.lang.Object)
   * @see org.eclipse.wst.sse.ui.internal.search.BasicSearchLabelProvider#getStyledText(Object)
   */
  public final String getText(Object element) {
    return getStyledText(element).getString();
  }
 
  /**
   * <p>Given a <code>Match</code> object containing a <code>BasicSearchMatchElement</code> element
   * returns a <code>StyledString</code> in the form of:</p>
   *
   * <p>lineNum: Message (# matches)</br>
   * 1: <a></a> (2 matches)</p>
   *
   * @see org.eclipse.jface.viewers.DelegatingStyledCellLabelProvider.IStyledLabelProvider#getStyledText(java.lang.Object)
   */
  public StyledString getStyledText(Object obj) {
    StyledString styledText = new StyledString();
    BasicSearchMatchElement element = null;
    if (obj instanceof Match) {
      Match match = (Match) obj;

      if(match.getElement() instanceof BasicSearchMatchElement) {
        element = (BasicSearchMatchElement) match.getElement();
      }
    } else if(obj instanceof BasicSearchMatchElement) {
      element = (BasicSearchMatchElement)obj;
    }
   
    //get the match count if possible
    int matchCount = 0;
    Match[] matches = new Match[0];
    if(fPage != null) {
      matches = fPage.getInput().getMatches(obj);
      matchCount = matches.length;
    }
   
    //if everything was of the right type create our formated message,
    //else use the toString of the given object for the message
    if(element != null) {
      String message = element.getLine().trim(); //$NON-NLS-1$
      int trimedAmount = element.getLine().indexOf(message);
      String lineNum = element.getLineNum() + 1 + ": "; //$NON-NLS-1$
     
      styledText.append(lineNum, StyledString.QUALIFIER_STYLER);
      styledText.append(message);
     
      //get the match count if possible
      for(int i = 0; i < matchCount; ++i) {
        int offset = matches[i].getOffset() - element.geLineOffset() + lineNum.length() - trimedAmount;
        styledText.setStyle(offset, matches[i].getLength(), HIGHLIGHT_WRITE_STYLE);
      }
     
    } else {
      styledText.append(obj.toString());
    }
   
    //append the match count if its worth appending
    if (matchCount > 1) {
      String matchesMsg = " " + MessageFormat.format(
        SSEUIMessages.TextSearchLabelProvider_matchCountFormat,
        new Object[] { new Integer(matchCount) });
      styledText.append(matchesMsg, StyledString.COUNTER_STYLER);
    }
 
    return styledText;
  }
}
TOP

Related Classes of org.eclipse.wst.sse.ui.internal.search.BasicSearchLabelProvider

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.