1 package org.columba.mail.gui.table.action; 19 20 import java.awt.Color ; 21 import java.awt.Graphics2D ; 22 import java.awt.event.ActionEvent ; 23 import java.awt.event.ActionListener ; 24 import java.awt.image.BufferedImage ; 25 26 import javax.swing.Icon ; 27 import javax.swing.ImageIcon ; 28 import javax.swing.JMenuItem ; 29 30 import org.columba.api.gui.frame.IFrameMediator; 31 import org.columba.api.selection.ISelectionListener; 32 import org.columba.api.selection.SelectionChangedEvent; 33 import org.columba.core.command.CommandProcessor; 34 import org.columba.core.gui.menu.IMenu; 35 import org.columba.mail.command.IMailFolderCommandReference; 36 import org.columba.mail.folder.command.ColorMessageCommand; 37 import org.columba.mail.gui.frame.MailFrameMediator; 38 import org.columba.mail.gui.table.selection.TableSelectionChangedEvent; 39 import org.columba.mail.util.MailResourceLoader; 40 41 46 47 48 public class ColorMessageMenu extends IMenu implements ActionListener , 49 ISelectionListener { 50 public static String [] items = { 53 MailResourceLoader.getString("dialog", "color", "blue"), 54 MailResourceLoader.getString("dialog", "color", "gray"), 55 MailResourceLoader.getString("dialog", "color", "green"), 56 MailResourceLoader.getString("dialog", "color", "red"), 57 MailResourceLoader.getString("dialog", "color", "yellow"), 58 MailResourceLoader.getString("dialog", "color", "custom") }; 59 60 public static Color [] colors = { Color.blue, Color.gray, Color.green, 61 Color.red, Color.yellow, Color.black }; 62 63 67 public ColorMessageMenu(IFrameMediator controller) { 68 super(controller, MailResourceLoader.getString("dialog", "color", 69 "menu_color_message"),"menu_color_message"); 70 71 createSubMenu(); 72 73 ((MailFrameMediator) controller).registerTableSelectionListener(this); 74 } 75 76 protected void createSubMenu() { 77 JMenuItem item = new JMenuItem (MailResourceLoader.getString("dialog", 79 "color", "none")); 80 item.setActionCommand("NONE"); 81 item.addActionListener(this); 82 add(item); 83 addSeparator(); 84 85 for (int i = 0; i < items.length; i++) { 86 item = new JMenuItem (items[i]); 87 item.setIcon(createIcon(colors[i])); 88 item.setActionCommand(items[i]); 89 item.addActionListener(this); 90 add(item); 91 } 92 } 93 94 public void actionPerformed(ActionEvent e) { 95 String action = e.getActionCommand(); 96 97 IMailFolderCommandReference r = ((MailFrameMediator) getFrameMediator()) 99 .getTableSelection(); 100 101 if (action.equals("NONE")) { 102 105 r.setColorValue(0); 106 107 CommandProcessor.getInstance().addOp(new ColorMessageCommand(r)); 109 } else { 110 int result = -1; 112 113 for (int i = 0; i < items.length; i++) { 114 if (action.equals(items[i])) { 115 result = i; 116 break; 117 } 118 } 119 120 122 r.setColorValue(colors[result].getRGB()); 123 124 CommandProcessor.getInstance().addOp(new ColorMessageCommand(r)); 126 } 127 } 128 129 public void selectionChanged(SelectionChangedEvent e) { 130 if (((TableSelectionChangedEvent) e).getUids().length > 0) { 131 setEnabled(true); 132 } else { 133 setEnabled(false); 134 } 135 } 136 137 private Icon createIcon(Color color) { 138 int width = 16; 139 int height = 16; 140 BufferedImage image = new BufferedImage (width, height, 141 BufferedImage.TYPE_INT_ARGB); 142 143 Graphics2D graphics = (Graphics2D ) image.getGraphics(); 144 graphics.setColor(darker(color)); 145 graphics.drawRect(1, 1, width - 3, height - 3); 146 graphics.setColor(color); 147 graphics.fillRect(2, 2, width - 4, height - 4); 148 graphics.dispose(); 149 150 return new ImageIcon (image); 151 } 152 153 private final static double FACTOR = 0.90; 154 155 private Color darker(Color c) { 156 return new Color (Math.max((int) (c.getRed() * FACTOR), 0), Math.max( 157 (int) (c.getGreen() * FACTOR), 0), Math.max( 158 (int) (c.getBlue() * FACTOR), 0)); 159 } 160 } 161 162 | Popular Tags |