package com.atlauncher.ui.panel; import com.atlauncher.obj.Account; import com.atlauncher.plaf.UIUtils; import com.atlauncher.ui.comp.Card; import com.atlauncher.ui.diag.LoginDialog; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Image; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import javax.swing.JMenuItem; import javax.swing.JPanel; import javax.swing.JPopupMenu; import javax.swing.SwingUtilities; //TODO: Add improvements public final class UserPanel extends JPanel implements Card, MouseListener{ private final Account account; private final ContextMenu menu = new ContextMenu(); public UserPanel(Account account){ this.account = account; this.addMouseListener(this); this.setBackground(UIUtils.GRAY); } @Override public void paintComponent(Graphics g){ Graphics2D g2 = (Graphics2D) g; Image skin = this.account.getBody(); int x = ((this.getWidth() - skin.getWidth(null)) / 2); int y = ((this.getHeight() - skin.getHeight(null)) / 2); g2.drawImage(skin, x, y, skin.getWidth(null), skin.getHeight(null), null); g2.setColor(Color.WHITE); g2.setFont(new Font(Font.SANS_SERIF, Font.BOLD, 32)); int sX = (this.getWidth() - g2.getFontMetrics().stringWidth(this.account.name)) / 2; g2.drawString(this.account.name, sX, y - g2.getFontMetrics().getHeight() - 5); } @Override public String id(){ return this.account.name; } @Override public void mouseClicked(MouseEvent e){ if(e.getButton() == MouseEvent.BUTTON3){ if(this.account != Account.DEFAULT){ this.menu.show(this, e.getX(), e.getY()); } } else if(e.getButton() == MouseEvent.BUTTON1 && e.getClickCount() >= 2){ try{ SwingUtilities.invokeLater(new Runnable(){ @Override public void run(){ new LoginDialog(account.username).setVisible(true); } }); } catch(Exception ex){ ex.printStackTrace(System.err); } } } @Override public void mousePressed(MouseEvent e){} @Override public void mouseReleased(MouseEvent e){} @Override public void mouseEntered(MouseEvent e){} @Override public void mouseExited(MouseEvent e){} private final class ContextMenu extends JPopupMenu{ private final JMenuItem reloadItem = new JMenuItem("Reload Skin"); private final JMenuItem loginAsItem = new JMenuItem("Login As"); private ContextMenu(){ this.reloadItem.addActionListener(new ActionListener(){ @Override public void actionPerformed(ActionEvent e){ UserPanel.this.account.updateSkin(); } }); this.loginAsItem.addActionListener(new ActionListener(){ @Override public void actionPerformed(ActionEvent e){ try{ SwingUtilities.invokeLater(new Runnable(){ @Override public void run(){ new LoginDialog(account.username).setVisible(true); } }); } catch(Exception ex){ ex.printStackTrace(System.err); } } }); this.add(this.reloadItem); this.add(this.loginAsItem); } } }