2
* Copyright (c) 2005-2010 Flamingo Kirill Grouchnikov. All Rights Reserved.
4
* Redistribution and use in source and binary forms, with or without
5
* modification, are permitted provided that the following conditions are met:
7
* o Redistributions of source code must retain the above copyright notice,
8
* this list of conditions and the following disclaimer.
10
* o Redistributions in binary form must reproduce the above copyright notice,
11
* this list of conditions and the following disclaimer in the documentation
12
* and/or other materials provided with the distribution.
14
* o Neither the name of Flamingo Kirill Grouchnikov nor the names of
15
* its contributors may be used to endorse or promote products derived
16
* from this software without specific prior written permission.
18
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
19
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
20
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
21
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
22
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
23
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
24
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
25
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
26
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
27
* OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
28
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30
package org.pushingpixels.flamingo.internal.ui.common;
34
import javax.swing.JSeparator;
36
import org.pushingpixels.flamingo.api.common.AbstractCommandButton;
37
import org.pushingpixels.flamingo.api.common.icon.ResizableIcon;
38
import org.pushingpixels.flamingo.internal.utils.FlamingoUtilities;
40
public class CommandButtonLayoutManagerCustom extends
41
CommandButtonLayoutManagerBig {
43
public CommandButtonLayoutManagerCustom(AbstractCommandButton commandButton) {
48
public int getPreferredIconSize() {
53
public Dimension getPreferredSize(AbstractCommandButton commandButton) {
54
Insets borderInsets = commandButton.getInsets();
55
int bx = borderInsets.left + borderInsets.right;
56
int by = borderInsets.top + borderInsets.bottom;
57
FontMetrics fm = commandButton.getFontMetrics(commandButton.getFont());
58
JSeparator jsep = new JSeparator(JSeparator.HORIZONTAL);
59
int layoutHGap = FlamingoUtilities.getHLayoutGap(commandButton);
60
int layoutVGap = FlamingoUtilities.getVLayoutGap(commandButton);
62
int title1Width = (this.titlePart1 == null) ? 0 : fm
63
.stringWidth(this.titlePart1);
64
int title2Width = (this.titlePart2 == null) ? 0 : fm
65
.stringWidth(this.titlePart2);
67
ResizableIcon icon = commandButton.getIcon();
68
int iconWidth = (icon == null) ? 0 : icon.getIconWidth();
69
int width = Math.max(iconWidth, Math.max(title1Width, title2Width
72
+ jsep.getPreferredSize().width
73
+ (FlamingoUtilities.hasPopupAction(commandButton) ? 1 + fm
74
.getHeight() / 2 : 0)));
76
boolean hasIcon = (commandButton.getIcon() != null);
77
boolean hasText = (this.titlePart1 != null);
78
boolean hasPopupIcon = FlamingoUtilities.hasPopupAction(commandButton);
80
// start height with the top inset
81
int height = borderInsets.top;
84
// padding above the icon
87
height += icon.getIconHeight();
88
// padding below the icon
93
// padding above the text
95
// text height - two lines
96
height += 2 * (fm.getAscent() + fm.getDescent());
97
// padding below the text
100
// popup icon (no text)?
101
if (!hasText && hasPopupIcon) {
102
// padding above the popup icon
103
height += layoutVGap;
104
// popup icon height - one line of text
105
height += fm.getHeight();
106
// padding below the popup icon
107
height += layoutVGap;
111
// space for a horizontal separator
112
height += new JSeparator(JSeparator.HORIZONTAL).getPreferredSize().height;
116
height += borderInsets.bottom;
118
// and remove the padding above the first and below the last elements
119
height -= 2 * layoutVGap;
121
return new Dimension(bx + width, height);