/*
* Jitsi, the OpenSource Java VoIP and Instant Messaging client.
*
* Copyright @ 2015 Atlassian Pty Ltd
*
* Licensed 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 net.java.sip.communicator.impl.gui.lookandfeel;
import java.awt.*;
import java.awt.geom.*;
import javax.swing.border.*;
import javax.swing.plaf.metal.*;
import net.java.sip.communicator.plugin.desktoputil.*;
import net.java.sip.communicator.plugin.desktoputil.plaf.*;
import net.java.sip.communicator.util.skin.*;
/**
* The default editor for SIPCommunicator editable combo boxes.
*
* @author Yana Stamcheva
* @author Adam Netocny
*/
public class SIPCommComboBoxEditor
extends MetalComboBoxEditor
implements Skinnable
{
/**
* Creates an instance of <tt>SIPCommComboBoxEditor</tt>.
*/
public SIPCommComboBoxEditor()
{
editor.setBorder(new EditorBorder());
// enables delete button
if (editor.getUI() instanceof SIPCommTextFieldUI)
{
((SIPCommTextFieldUI) editor.getUI())
.setDeleteButtonEnabled(true);
}
}
/**
* The editor border insets.
*/
protected static final Insets editorBorderInsets
= new Insets(2, 2, 2, 0);
/**
* The default editor border insets.
*/
private static final Insets SAFE_EDITOR_BORDER_INSETS
= new Insets(2, 2, 2, 0);
/**
* A custom editor border.
*/
private static class EditorBorder
extends AbstractBorder
{
@Override
public void paintBorder(Component c, Graphics g, int x, int y, int w,
int h)
{
g = g.create();
try
{
internalPaintBorder(g, x, y, w, h);
}
finally
{
g.dispose();
}
}
/**
* Paints a custom rounded border for the combo box editor.
*
* @param g the <tt>Graphics</tt> object used for painting
* @param x the x coordinate
* @param y the y coordinate
* @param w the width of the border
* @param h the height of the border
*/
private void internalPaintBorder(Graphics g, int x, int y,
int w, int h)
{
Graphics2D g2d = (Graphics2D)g;
AntialiasingManager.activateAntialiasing(g2d);
g2d.translate(x, y);
g2d.setColor(SIPCommLookAndFeel.getControlDarkShadow());
GeneralPath path = new GeneralPath();
int round = 2;
path.moveTo(w, h-1);
path.lineTo(round, h-1);
path.curveTo(round, h-1, 0, h-1, 0, h-round-1);
path.lineTo(0, round);
path.curveTo(0, round, 0, 0, round, 0);
path.lineTo(w, 0);
g2d.draw(path);
g2d.translate(-x, -y);
}
@Override
public Insets getBorderInsets( Component c )
{
if (System.getSecurityManager() != null)
{
return SAFE_EDITOR_BORDER_INSETS;
}
else
{
return editorBorderInsets;
}
}
}
/**
* A subclass of SIPCommComboBoxEditor that implements UIResource.
* SIPCommComboBoxEditor doesn't implement UIResource
* directly so that applications can safely override the
* cellRenderer property with BasicListCellRenderer subclasses.
*/
public static class UIResource extends SIPCommComboBoxEditor
implements javax.swing.plaf.UIResource {}
/**
* Reloads UI if necessary.
*/
public void loadSkin()
{
if (editor.getUI() instanceof SIPCommTextFieldUI)
{
((SIPCommTextFieldUI) editor.getUI()).loadSkin();
}
}
}