/* * 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.call; 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.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.*; /** * 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 DialPanel extends JPanel implements MouseListener, Skinnable { /** * The dial panel. */ private final JPanel dialPadPanel; /** * 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 DialPanel(DTMFHandler dtmfHandler) { this.dtmfHandler = dtmfHandler; // Initialize this panel by adding all dial buttons to it. ResourceManagementService r = GuiActivator.getResources(); int hgap = r.getSettingsInt("impl.gui.DIAL_PAD_HORIZONTAL_GAP"); int vgap = r.getSettingsInt("impl.gui.DIAL_PAD_VERTICAL_GAP"); int width = r.getSettingsInt("impl.gui.DIAL_PAD_WIDTH"); int height = r.getSettingsInt("impl.gui.DIAL_PAD_HEIGHT"); dialPadPanel = new JPanel(new GridLayout(4, 3, hgap, vgap)); dialPadPanel.setOpaque(false); dialPadPanel.setPreferredSize(new Dimension(width, height)); setBorder(BorderFactory.createEmptyBorder(10, 0, 10, 0)); add(dialPadPanel, BorderLayout.CENTER); loadSkin(); } /** * Creates DTMF button. * * @param bgImage * @param iconImage * @param name * @return the created dial button */ private JButton createDialButton( Image bgImage, ImageID iconImage, String name) { JButton button = new SIPCommButton(bgImage, ImageLoader.getImage(iconImage)); button.setAlignmentY(JButton.LEFT_ALIGNMENT); button.setName(name); button.setOpaque(false); button.addMouseListener(this); return button; } /** * Reloads dial buttons. */ public void loadSkin() { dialPadPanel.removeAll(); Image bgImage = ImageLoader.getImage(ImageLoader.DIAL_BUTTON_BG); DTMFHandler.DTMFToneInfo[] availableTones = DTMFHandler.AVAILABLE_TONES; for (int i = 0; i < availableTones.length; i++) { DTMFHandler.DTMFToneInfo info = availableTones[i]; // we add only buttons having image if (info.imageID != null) { dialPadPanel.add( createDialButton( bgImage, info.imageID, info.tone.getValue())); } } } public void mouseClicked(MouseEvent ev) {} public void mouseEntered(MouseEvent ev) {} public void mouseExited(MouseEvent ev) {} /** * Handles the <tt>MouseEvent</tt> triggered when user presses one of the * dial buttons. * * @param ev the event */ public void mousePressed(MouseEvent ev) { dtmfHandler.startSendingDtmfTone(ev.getComponent().getName()); } /** * Handles the <tt>MouseEvent</tt> triggered when user releases one of the * dial buttons. * * @param ev the event */ public void mouseReleased(MouseEvent ev) { 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(), 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); } } } }