/* * 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.main; import java.awt.*; import java.awt.event.*; import java.awt.image.*; import javax.swing.*; import net.java.sip.communicator.impl.gui.*; import net.java.sip.communicator.impl.gui.main.call.*; import net.java.sip.communicator.impl.gui.utils.*; import net.java.sip.communicator.plugin.desktoputil.*; import net.java.sip.communicator.service.resources.*; import net.java.sip.communicator.util.skin.*; import org.jitsi.service.resources.*; import org.jitsi.util.*; /** * The <tt>DialPanel</tt> is the panel that contains the buttons to dial a * phone number. * * @author Yana Stamcheva * @author Adam Netocny * @author Lyubomir Marinov */ public class GeneralDialPanel extends TransparentPanel implements MouseListener, Skinnable { /** * The parent dial pad dialog. */ private final GeneralDialPadDialog dialPadDialog; /** * The dial panel. */ private final JPanel dialPadPanel = new TransparentPanel(new GridLayout(4, 3, GuiActivator.getResources() .getSettingsInt("impl.gui.DIAL_PAD_HORIZONTAL_GAP"), GuiActivator.getResources() .getSettingsInt("impl.gui.DIAL_PAD_VERTICAL_GAP"))); /** * Handles DTMFs. */ private final DTMFHandler dtmfHandler; /** * Creates an instance of <tt>DialPanel</tt> for a specific call, by * specifying the parent <tt>CallManager</tt> and the * <tt>CallPeer</tt>. * * @param dtmfHandler handles DTMFs. */ public GeneralDialPanel(GeneralDialPadDialog dialPadDialog, DTMFHandler dtmfHandler) { this.dialPadDialog = dialPadDialog; this.dtmfHandler = dtmfHandler; this.init(); } /** * Initializes a new dial button which is to be used on Mac OS X. * * @param imageID * @param rolloverImageID * @param pressedImageImageID * @param name * @return the newly-initialized dial button */ private JButton createDialButton( ImageID imageID, ImageID rolloverImageID, ImageID pressedImageImageID, String name) { JButton button = new SIPCommButton( ImageLoader.getImage(imageID), ImageLoader.getImage(rolloverImageID), ImageLoader.getImage(pressedImageImageID), null, null, null); button.setAlignmentY(JButton.LEFT_ALIGNMENT); button.setOpaque(false); button.setName(name); button.addMouseListener(this); return button; } /** * Initializes this panel by adding all dial buttons to it. */ public void init() { this.dialPadPanel.setOpaque(false); this.setBorder(BorderFactory.createEmptyBorder(10, 0, 10, 0)); loadSkin(); this.add(dialPadPanel, BorderLayout.CENTER); } /** * Reloads dial buttons. */ @Override public void loadSkin() { dialPadPanel.removeAll(); for (DTMFHandler.DTMFToneInfo info : DTMFHandler.AVAILABLE_TONES) { // We only add buttons with images. if (info.imageID == null) continue; JComponent c = OSUtils.IS_MAC ? createDialButton( info.macImageID, info.macImageRolloverID, info.macImageRolloverID, info.tone.getValue()) : createDialButton( info.imageID, info.imageIDPressed, info.imageIDRollover, info.tone.getValue()); dialPadPanel.add(c); } } @Override public void mouseClicked(MouseEvent e) {} @Override public void mouseEntered(MouseEvent e) {} @Override public void mouseExited(MouseEvent e) {} /** * Handles the <tt>MouseEvent</tt> triggered when user presses one of the * dial buttons. * @param e the event */ @Override public void mousePressed(MouseEvent e) { JButton button = (JButton) e.getSource(); dialPadDialog.dialButtonPressed(button.getName()); dtmfHandler.startSendingDtmfTone(button.getName()); } /** * Handles the <tt>MouseEvent</tt> triggered when user releases one of the * dial buttons. * @param e the event */ @Override public void mouseReleased(MouseEvent e) { dtmfHandler.stopSendingDtmfTone(); } /** * Paints the main background image to the background of this dial panel. * * @param g the <tt>Graphics</tt> object used for painting */ @Override public void paintComponent(Graphics g) { // do the superclass behavior first super.paintComponent(g); Graphics2D g2 = (Graphics2D) g; BufferedImage bgImage = ImageLoader.getImage(ImageLoader.MAIN_WINDOW_BACKGROUND); // paint the image if (bgImage != null) { ResourceManagementService r = GuiActivator.getResources(); boolean isTextureBackground = Boolean.parseBoolean( r.getSettingsString( "impl.gui.IS_CONTACT_LIST_TEXTURE_BG_ENABLED")); int width = getWidth(); int height = getHeight(); if (isTextureBackground) { Rectangle rect = new Rectangle(0, 0, bgImage.getWidth(null), bgImage.getHeight(null)); TexturePaint texture = new TexturePaint(bgImage, rect); g2.setPaint(texture); g2.fillRect(0, 0, width, height); } else { g.setColor(new Color(r.getColor("contactListBackground"))); // Paint the background with the chosen color. g.fillRect(0, 0, width, height); g2.drawImage( bgImage, width - bgImage.getWidth(), height - bgImage.getHeight(), this); } } } }