All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.netbeans.editor.FoldingToolTip Maven / Gradle / Ivy

/*
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 */

package org.netbeans.editor;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Rectangle;
import java.util.Map;
import javax.swing.JPanel;
import javax.swing.border.LineBorder;
import javax.swing.text.AttributeSet;
import javax.swing.text.JTextComponent;
import javax.swing.text.StyleConstants;
import javax.swing.text.View;
import org.netbeans.api.editor.mimelookup.MimeLookup;
import org.netbeans.api.editor.settings.EditorStyleConstants;
import org.netbeans.api.editor.settings.FontColorNames;
import org.netbeans.api.editor.settings.FontColorSettings;

/**
 *  Component for displaying folded part of code in tooltip
 *
 *  @author  Martin Roskanin
 *  @deprecated This is an utility class which should not have been public. It is used
 *  only from code folding implementation and was not intended for general purpose.
 *  This implementation is retained for backward compatibility only. The live implementation
 *  can be found in editor.fold.nbui module.
 */
@Deprecated
public class FoldingToolTip extends JPanel {

    View view;
    EditorUI editorUI;
    public static final int BORDER_WIDTH = 2;
    
    /** Creates a new instance of FoldingToolTip */
    public FoldingToolTip(View view, EditorUI editorUI) {
        this.view = view;
        this.editorUI = editorUI;

        FontColorSettings fcs = MimeLookup.getLookup(
            org.netbeans.lib.editor.util.swing.DocumentUtilities.getMimeType(
            editorUI.getComponent())).lookup(FontColorSettings.class);
        AttributeSet attribs = fcs.getFontColors(FontColorNames.DEFAULT_COLORING);
        Color foreColor = (Color) attribs.getAttribute(StyleConstants.Foreground);
        if (foreColor == null) {
            foreColor = Color.black;
        }
        
        setBorder(new LineBorder(foreColor));
        setOpaque(true);
    }

    @Override
    public Dimension getPreferredSize() {
        Dimension prefSize = editorUI.getComponent().getPreferredSize();
        int viewHeight = (int) view.getPreferredSpan(View.Y_AXIS);
        prefSize.height = viewHeight + (BORDER_WIDTH << 1);
        prefSize.width += editorUI.getSideBarWidth() + (BORDER_WIDTH << 1);
        return prefSize;
    }

    public @Override void setSize(Dimension d){
        setSize(d.width, d.height);
    }

   /** Setting size of popup panel. The height and size is computed to fit the best place on the screen */
    public @Override void setSize(int width, int height){
        int viewHeight = (int) view.getPreferredSpan(View.Y_AXIS);
        int viewWidth = (int) view.getPreferredSpan(View.X_AXIS);
        if (height<30) {
            putClientProperty(PopupManager.Placement.class, null);
        }else{
            height = Math.min(height, viewHeight);
        }
        
        height += 2*BORDER_WIDTH;
        
        width = Math.min(width, viewWidth);
        
        super.setSize(width,height);
    }
    
    private void updateRenderingHints(Graphics g){
        JTextComponent comp = editorUI.getComponent();
        if (comp != null) {
            String mimeType = org.netbeans.lib.editor.util.swing.DocumentUtilities.getMimeType(comp);
            FontColorSettings fcs = MimeLookup.getLookup(mimeType).lookup(FontColorSettings.class);
            Map renderingHints = (Map) fcs.getFontColors(FontColorNames.DEFAULT_COLORING).getAttribute(EditorStyleConstants.RenderingHints);

            // Possibly apply the rendering hints
            if (renderingHints != null) {
                ((java.awt.Graphics2D)g).addRenderingHints(renderingHints);
            }
        }
    }
    
    
    protected @Override void paintComponent(Graphics g) {

        updateRenderingHints(g);
        
        Rectangle shape = new Rectangle(getSize());
        Rectangle clip = g.getClipBounds();
        
        FontColorSettings fcs = MimeLookup.getLookup(
            org.netbeans.lib.editor.util.swing.DocumentUtilities.getMimeType(
            editorUI.getComponent())).lookup(FontColorSettings.class);
        AttributeSet attribs = fcs.getFontColors(FontColorNames.DEFAULT_COLORING);
        Color backColor = (Color) attribs.getAttribute(StyleConstants.Background);
        if (backColor == null) {
            backColor = Color.white;
        }
        
        g.setColor(backColor);
        g.fillRect(clip.x, clip.y, clip.width, clip.height);

        g.translate(BORDER_WIDTH, BORDER_WIDTH);

        JTextComponent component = editorUI.getComponent();
        if (component == null) return;
        int sideBarWidth = editorUI.getSideBarWidth();

        /*
        GlyphGutter gg = editorUI.getGlyphGutter();
        if (gg!=null){
            View docView = null;
            if (view.getViewCount() == 1){//lockview
                docView = view.getView(0);
            }
            int y = 0;
            if (docView!=null){
                AbstractDocument doc = (AbstractDocument)docView.getDocument();
                doc.readLock();
                try {
                    LockView lockView = LockView.get(docView);
                    if (lockView != null) {
                        lockView.lock();
                        try {
                            for (int i = 0; i




© 2015 - 2025 Weber Informatics LLC | Privacy Policy