Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
   *
   * Copyright 2010 Oracle and/or its affiliates. All rights reserved.
   *
   * Oracle and Java are registered trademarks of Oracle and/or its affiliates.
   * Other names may be trademarks of their respective owners.
   *
   * The contents of this file are subject to the terms of either the GNU
  * General Public License Version 2 only ("GPL") or the Common
  * Development and Distribution License("CDDL") (collectively, the
  * "License"). You may not use this file except in compliance with the
  * License. You can obtain a copy of the License at
  * http://www.netbeans.org/cddl-gplv2.html
  * or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
  * specific language governing permissions and limitations under the
  * License.  When distributing the software, include this License Header
  * Notice in each file and include the License file at
  * nbbuild/licenses/CDDL-GPL-2-CP.  Oracle designates this
  * particular file as subject to the "Classpath" exception as provided
  * by Oracle in the GPL Version 2 section of the License file that
  * accompanied this code. If applicable, add the following below the
  * License Header, with the fields enclosed by brackets [] replaced by
  * your own identifying information:
  * "Portions Copyrighted [year] [name of copyright owner]"
  *
  * If you wish your version of this file to be governed by only the CDDL
  * or only the GPL Version 2, indicate your decision by adding
  * "[Contributor] elects to include this software in this distribution
  * under the [CDDL or GPL Version 2] license." If you do not indicate a
  * single choice of license, a recipient has the option to distribute
  * your version of this file under either the CDDL, the GPL Version 2 or
  * to extend the choice of license to its licensees as provided above.
  * However, if you add GPL Version 2 code and therefore, elected the GPL
  * Version 2 license, then the option applies only if the new code is
  * made subject to such option by the copyright holder.
  *
  * Contributor(s):
  *
  * Portions Copyrighted 2009 Sun Microsystems, Inc.
  */
 
 package org.netbeans.modules.bugtracking.ui.query;
 
 import java.awt.Color;
 import java.awt.Point;
 import  org.jdesktop.layout.Baseline;
Panel displaying names of saved queries. The list of query names wraps automatically if it does not fit to the visible part of the form.

Author(s):
Marian Petras
 
 class QueryLinksPanel extends ViewportWidthAwarePanel implements FocusListener {
 
     private static final int SEPARATOR_WIDTH = 2;
     private static final int SPACE_AROUND_SEPARATOR = 5;
     private static final int TOTAL_SEPARATOR_WIDTH
                              =  + (2 * );
 
     private static final int INTERLINE_SPACING = 2;
 
     private Repository repository;
     private QueryButton[] buttons;
 
     private Dimension[] buttonPrefSizes;
     private int[] baselines;
     private int[] rowNumbers;
     private int baseline = -1;
     private int rowHeight = -1;
     private int rowCount = 0;
 
     private Dimension prefSize;
     private boolean verticalMetricsKnown;
 
     public QueryLinksPanel() {
         super(null);
         setOpaque(false);
     }
 
    void setQueries(Query[] queries) {
        if ((queries != null) && (queries.length == 0)) {
            queries = null;
        }
        boolean queriesChanged = (this. != null) || (queries != null);
        if (!queriesChanged) {
            return;
        }
        invalidateVerticalMetrics();
        invalidatePrefSize();
        if ( != null) {
            removeAll();
        }
        if (queries == null) {
             = null;
             = null;
        } else {
             = new QueryButton[queries.length];
             = new int[queries.length];
            QueryTopComponent queryTopC = (QueryTopComponent)
                                          SwingUtilities.getAncestorOfClass(
                                                 QueryTopComponent.classthis);
            for (int i = 0; i < queries.lengthi++) {
                Query query = queries[i];
                query.addPropertyChangeListener(queryTopC);
                QueryButton button = new QueryButton(query);
                button.setText(query.getDisplayName());
                button.addFocusListener(this);
                add(button);
                [i] = button;
            }
        }
    }
    boolean isEmpty() {
        return ( == null);
    }
    boolean isWrapped() {
        validatePrefSize();
        return  > 1;
    }
    @Override
    protected void paintChildren(Graphics g) {
        super.paintChildren(g);
        if (( != null) && (. > 1)) {
            /* paint the separators: */
            Graphics sg = g.create();
            sg.setColor(.);
            final Point tmpPoint = new Point();
            int lastRowNum = 0;
            for (int i = 1; i < .i++) {
                int rowNum = [i];
                if (rowNum == lastRowNum) {
                    int x = [i].getLocation(tmpPoint).
                            - ( + );
                    int y = rowNum * ( + );
                    g.fillRect(xy);
                }
                lastRowNum = rowNum;
            }
        }
    }
    @Override
    public Dimension getPreferredSize() {
        validatePrefSize();
        return ;
    }
    private void validatePrefSize() {
        if ( == null) {
            computeLayout(false);
        }
    }
    @Override
    public void invalidate() {
        invalidatePrefSize();
        super.invalidate();
    }
    @Override
    protected void visibleWidthChanged(int newWidth) {
        super.visibleWidthChanged(newWidth);
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                //revalidate();
            }
        });
        invalidate();
    }
    @Override
    public void setLayout(LayoutManager mgr) {
        if (mgr != null) {
            throw new UnsupportedOperationException(
                "QueriesListPanel does not support layout managers.");  //NOI18N
        }
    }
    @Override
    public void doLayout() {
        computeLayout(true);
    }
    private Dimension computeLayout(boolean setBounds) {
        int widthheight;
        Insets insets = getInsets();
        if ( == null) {
            width = insets.left + insets.right;
            height = insets.top + insets.bottom;
             = 0;
        } else {
            validateVerticalMetrics();
            int horizPos = insets.left;
            int horizPosLimit = getAvailableWidth() - insets.right;
            int rowBaseline = insets.top + ;
            int rowNum = 0;
            height = ;
             = 1;
            QueryButton button = [0];
            int buttonBaseline = [0];
            Dimension buttonPrefSize = [0];
            int startHorizPos = horizPos;
            int endHorizPos = startHorizPos + buttonPrefSize.width;
            int maxEndHorizPos = endHorizPos;
            if (setBounds) {
                button.setBounds(startHorizPosrowBaseline - buttonBaseline,
                                 buttonPrefSize.widthbuttonPrefSize.height);
            }
            horizPos = endHorizPos;
            [0] = rowNum;
            for (int i = 1; i < .i++) {
                button = [i];
                buttonBaseline = [i];
                buttonPrefSize = [i];
                startHorizPos = horizPos + ;
                endHorizPos = startHorizPos + buttonPrefSize.width;
                if (endHorizPos > horizPosLimit) {
                    startHorizPos = insets.left;
                    endHorizPos = startHorizPos + buttonPrefSize.width;
                    rowBaseline +=  + ;
                    height +=  + ;
                    ++;
                    rowNum++;
                }
                if (setBounds) {
                    button.setBounds(startHorizPosrowBaseline - buttonBaseline,
                                     buttonPrefSize.widthbuttonPrefSize.height);
                }
                maxEndHorizPos = Math.max(maxEndHorizPosendHorizPos);
                horizPos = endHorizPos;
                [i] = rowNum;
            }
            width = maxEndHorizPos + insets.right;
        }
         = new Dimension(widthheight);
        return ;
    }
    /*
     * To make it work correctly with GroupLayout.
     */
    public int getBaseline(int widthint height) {
        return getBaseline();
    }
    int getBaseline() {
        validateVerticalMetrics();
        return ;
    }
    void validateVerticalMetrics() {
        if () {
            return;
        }
        int maxAboveBaseline = 0;
        int maxBelowBaseline = 0;
        if ( == null) {
             = null;
             = null;
        } else {
             = new int[.];
             = new Dimension[.];
            for (int i = 0; i < .i++) {
                QueryButton button = [i];
                Dimension buttonPrefSize = button.getPreferredSize();
                int aboveBaseline = Baseline.getBaseline(button,
                                                         buttonPrefSize.width,
                                                         buttonPrefSize.height);
                int belowBaseline = buttonPrefSize.height - aboveBaseline;
                [i] = buttonPrefSize;
                [i] = aboveBaseline;
                maxAboveBaseline = Math.max(maxAboveBaselineaboveBaseline);
                maxBelowBaseline = Math.max(maxBelowBaselinebelowBaseline);
            }
        }
         = maxAboveBaseline;
         = maxAboveBaseline + maxBelowBaseline;
         = true;
    }
    /*
     * To make it work correctly with GroupLayout.
     */
    public int getBaselineResizeBehaviorInt() {
        return Baseline.BRB_CONSTANT_ASCENT;
    }
    @Override
    protected void notifyChildrenOfVisibleWidth() {
        //no-op
    }
    public void focusGained(FocusEvent e) {
        final Component c = e.getComponent();
        if (c instanceof JComponent) {
            EventQueue.invokeLater(new Runnable() {
                public void run() {
                    QueryLinksPanel.this.scrollRectToVisible(c.getBounds());
                }
            });
        }
    }
    public void focusLost(FocusEvent e) {
        //do nothing
    }
    @Override
    public void setUI(PanelUI ui) {
        super.setUI(ui);
    }
    @Override
    protected void setUI(ComponentUI newUI) {
        super.setUI(newUI);
    }
    private void invalidateUiDependentValues() {
        invalidateVerticalMetrics();
    }
    private void invalidateVerticalMetrics() {
         = false;
         = null;
         = -1;
         = null;
         = 0;
    }
    private void invalidatePrefSize() {
         = null;
    }
    private class QueryButton extends LinkButton {
        public QueryButton(final Repository repofinal Query query) {
            super();
            setText(query.getDisplayName());
            getAccessibleContext().setAccessibleDescription(query.getTooltip());
            setAction(new AbstractAction() {
                public void actionPerformed(ActionEvent e) {
                    QueryAction.openQuery(queryrepo);
                }
            });
        }
    }