OSDN Git Service

show count information in mds pane
authortama3 <tama3@acee48c3-7b26-0410-bdac-b3d0e5314bbc>
Tue, 10 Jul 2007 09:27:32 +0000 (09:27 +0000)
committertama3 <tama3@acee48c3-7b26-0410-bdac-b3d0e5314bbc>
Tue, 10 Jul 2007 09:27:32 +0000 (09:27 +0000)
git-svn-id: svn+ssh://svn.sourceforge.jp/svnroot/stigmata/trunk@160 acee48c3-7b26-0410-bdac-b3d0e5314bbc

src/main/java/jp/naist/se/stigmata/ui/swing/mds/LabelMap.java
src/main/java/jp/naist/se/stigmata/ui/swing/mds/MDSGraphPanel.java
src/main/java/jp/naist/se/stigmata/ui/swing/mds/MDSGraphViewer.java
src/main/java/jp/naist/se/stigmata/ui/swing/mds/MarkIcon.java [new file with mode: 0755]
src/main/java/jp/naist/se/stigmata/ui/swing/mds/mark/DrawerFactory.java
src/main/resources/resources/messages.properties

index df0c8eb..a83d8b7 100644 (file)
@@ -12,7 +12,7 @@ import java.util.Map;
  * @author Haruaki TAMADA\r
  * @version $Revision$ $Date$\r
  */\r
-public class LabelMap{\r
+class LabelMap{\r
     private List<String> labels = new ArrayList<String>();\r
     private Map<String, String> groups = new HashMap<String, String>();\r
     private Map<String, Integer> gids = new HashMap<String, Integer>();\r
@@ -55,9 +55,12 @@ public class LabelMap{
         return group;\r
     }\r
 \r
-    public int getGroupId(String label){\r
-        String glabel = groups.get(label);\r
-        Integer i = gids.get(glabel);\r
+    public int getGroupIdFromElementName(String label){\r
+        return getGroupId(groups.get(label));\r
+    }\r
+\r
+    public int getGroupId(String groupLabel){\r
+        Integer i = gids.get(groupLabel);\r
         if(i == null){\r
             i = new Integer(0);\r
         }\r
@@ -65,7 +68,28 @@ public class LabelMap{
     }\r
 \r
     public int getGroupCount(){\r
-        return groups.size();\r
+        return gids.size();\r
+    }\r
+\r
+    public String[] getGroupNames(){\r
+        String[] names = new String[gids.size()];\r
+        int index = 0;\r
+        for(String name: gids.keySet()){\r
+            names[index] = name;\r
+            index++;\r
+        }\r
+\r
+        return names;\r
+    }\r
+\r
+    public synchronized int getGroupElementCount(String group){\r
+        int count = 0;\r
+        for(Map.Entry<String, String> entry: groups.entrySet()){\r
+            if(group.equals(entry.getValue())){\r
+                count++;\r
+            }\r
+        }\r
+        return count;\r
     }\r
 \r
     public synchronized String[] getGroupElements(String group){\r
index be12834..8c1aafc 100644 (file)
@@ -8,6 +8,7 @@ import java.awt.BorderLayout;
 import java.awt.Color;\r
 import java.awt.Dimension;\r
 import java.awt.FlowLayout;\r
+import java.awt.GridLayout;\r
 import java.awt.event.ActionEvent;\r
 import java.awt.event.ActionListener;\r
 import java.awt.event.ComponentAdapter;\r
@@ -17,17 +18,21 @@ import java.net.URL;
 import javax.swing.Action;\r
 import javax.swing.Box;\r
 import javax.swing.JCheckBox;\r
+import javax.swing.JComboBox;\r
+import javax.swing.JLabel;\r
 import javax.swing.JPanel;\r
 \r
 import jp.naist.se.stigmata.BirthmarkContext;\r
 import jp.naist.se.stigmata.BirthmarkSet;\r
 import jp.naist.se.stigmata.ComparisonPair;\r
+import jp.naist.se.stigmata.ui.swing.ClippedLRListCellRenderer;\r
 import jp.naist.se.stigmata.ui.swing.Messages;\r
 import jp.naist.se.stigmata.ui.swing.PopupButton;\r
 import jp.naist.se.stigmata.ui.swing.StigmataFrame;\r
 import jp.naist.se.stigmata.ui.swing.Utility;\r
 import jp.naist.se.stigmata.ui.swing.actions.ChangeColorAction;\r
 import jp.naist.se.stigmata.ui.swing.actions.SaveAction;\r
+import jp.naist.se.stigmata.ui.swing.mds.mark.DrawerFactory;\r
 import Jama.Matrix;\r
 \r
 /**\r
@@ -37,6 +42,7 @@ import Jama.Matrix;
  */\r
 public class MDSGraphPanel extends JPanel{\r
     private static final long serialVersionUID = -7256554014379112897L;\r
+\r
     private StigmataFrame stigmata;\r
     private BirthmarkSet[] set;\r
     private LabelMap labels;\r
@@ -60,7 +66,8 @@ public class MDSGraphPanel extends JPanel{
 \r
         for(int i = 0; i < set.length; i++){\r
             for(int j = 0; j <= i; j++){\r
-                ComparisonPair pair = new ComparisonPair(set[i], set[j], context);\r
+                ComparisonPair pair = new ComparisonPair(set[i], set[j],\r
+                        context);\r
                 matrix[i][j] = 1d - pair.calculateSimilarity();\r
                 if(i != j){\r
                     matrix[j][i] = matrix[i][j];\r
@@ -82,18 +89,23 @@ public class MDSGraphPanel extends JPanel{
         return url;\r
     }\r
 \r
+    /**\r
+     * This method must called after\r
+     * {@link #initData(BirthmarkSet[], BirthmarkContext) <code>initData</code>}.\r
+     * Because this method uses calculated value in initData method.\r
+     */\r
     private void initLayouts(double[][] matrix){\r
         viewer = new MDSGraphViewer(new MDSMethod(new Matrix(matrix)), labels);\r
         viewer.setShowLabel(true);\r
 \r
-        Box south = Box.createHorizontalBox();\r
-\r
         viewer.addActionListener(new ActionListener(){\r
             public void actionPerformed(ActionEvent e){\r
                 String c = e.getActionCommand();\r
                 for(int i = 0; i < set.length; i++){\r
                     if(c.equals(set[i].getName())){\r
-                        stigmata.showExtractionResult(new BirthmarkSet[] { set[i], }, stigmata.getContext());\r
+                        stigmata.showExtractionResult(\r
+                            new BirthmarkSet[]{ set[i], }, stigmata.getContext()\r
+                        );\r
                     }\r
                 }\r
             }\r
@@ -107,23 +119,19 @@ public class MDSGraphPanel extends JPanel{
         });\r
 \r
         Action pointColorAction = new ChangeColorAction(\r
-            "updatecolor", stigmata, Color.BLACK,\r
-            new ActionListener(){\r
-                public void actionPerformed(ActionEvent e){\r
-                    ChangeColorAction action = (ChangeColorAction)e.getSource();\r
-                    viewer.setPointColor(action.getColor());\r
-                }\r
+            "updatecolor", stigmata, Color.BLACK, new ActionListener(){\r
+            public void actionPerformed(ActionEvent e){\r
+                ChangeColorAction action = (ChangeColorAction)e.getSource();\r
+                viewer.setPointColor(action.getColor());\r
             }\r
-        );\r
+        });\r
         Action overColorAction = new ChangeColorAction(\r
-            "updateovercolor", stigmata, Color.BLUE,\r
-            new ActionListener(){\r
-                public void actionPerformed(ActionEvent e){\r
-                    ChangeColorAction action = (ChangeColorAction)e.getSource();\r
-                    viewer.setOverColor(action.getColor());\r
-                }\r
+            "updateovercolor", stigmata, Color.BLUE, new ActionListener(){\r
+            public void actionPerformed(ActionEvent e){\r
+                ChangeColorAction action = (ChangeColorAction)e.getSource();\r
+                viewer.setOverColor(action.getColor());\r
             }\r
-        );\r
+        });\r
         SaveAction saveMDSAction = new SaveAction(stigmata, new MDSImageExporter(viewer));\r
         saveMDSAction.setExtensions(Messages.getStringArray("savemds.extensions"));\r
         saveMDSAction.setDescrpition(Messages.getString("savemds.description"));\r
@@ -132,11 +140,38 @@ public class MDSGraphPanel extends JPanel{
         saveCoordinate.setExtensions(Messages.getStringArray("savelocation.extensions"));\r
         saveCoordinate.setDescrpition(Messages.getString("savelocation.description"));\r
 \r
-        PopupButton colorButton = new PopupButton(Utility.createButton("updatecolor", pointColorAction));\r
+        PopupButton colorButton = new PopupButton(\r
+            Utility.createButton("updatecolor", pointColorAction)\r
+        );\r
         colorButton.addMenuItem(Utility.createJMenuItem("updateovercolor", overColorAction));\r
-        PopupButton saveButton = new PopupButton(Utility.createButton("savemds", saveMDSAction));\r
+        PopupButton saveButton = new PopupButton(\r
+            Utility.createButton("savemds", saveMDSAction)\r
+        );\r
         saveButton.addMenuItem(Utility.createJMenuItem("savelocation", saveCoordinate));\r
-        \r
+\r
+        JLabel numberOfDotsLabel = new JLabel(String.valueOf(set.length));\r
+        Utility.decorateJComponent(numberOfDotsLabel, "mdsgraph.count");\r
+        // set the number of dots of each groups\r
+        JComboBox numberOfGroupsLabelCombo = new JComboBox();\r
+        GeometoryType[] types = GeometoryType.values();\r
+        for(String name: labels.getGroupNames()){\r
+            int count = labels.getGroupElementCount(name);\r
+            if(count != 0){\r
+                ClippedLRListCellRenderer.LRItem item = new ClippedLRListCellRenderer.LRItem(name, count);\r
+                item.setIcon(DrawerFactory.getInstance().createIcon(types[labels.getGroupId(name)]));\r
+                numberOfGroupsLabelCombo.addItem(item);\r
+            }\r
+        }\r
+        numberOfGroupsLabelCombo.setEditable(false);\r
+        Dimension dim = new Dimension(100, numberOfGroupsLabelCombo.getPreferredSize().height);\r
+        numberOfGroupsLabelCombo.setRenderer(new ClippedLRListCellRenderer(dim, 50));\r
+        Utility.decorateJComponent(numberOfGroupsLabelCombo, "mdsgraph.group");\r
+\r
+        JPanel north = new JPanel(new GridLayout(1, 2));\r
+        north.add(numberOfDotsLabel);\r
+        north.add(numberOfGroupsLabelCombo);\r
+\r
+        Box south = Box.createHorizontalBox();\r
         south.add(Box.createHorizontalGlue());\r
         south.add(saveButton);\r
         south.add(Box.createHorizontalGlue());\r
@@ -144,7 +179,7 @@ public class MDSGraphPanel extends JPanel{
         south.add(Box.createHorizontalGlue());\r
         south.add(check);\r
         south.add(Box.createHorizontalGlue());\r
-        \r
+\r
         JPanel center = new JPanel(new FlowLayout(FlowLayout.CENTER));\r
         center.addComponentListener(new ComponentAdapter(){\r
             @Override\r
@@ -157,6 +192,7 @@ public class MDSGraphPanel extends JPanel{
 \r
         center.add(viewer);\r
 \r
+        add(north, BorderLayout.NORTH);\r
         add(center, BorderLayout.CENTER);\r
         add(south, BorderLayout.SOUTH);\r
     }\r
index b4c9721..c54bd67 100644 (file)
@@ -192,7 +192,7 @@ public class MDSGraphViewer extends JLayeredPane{
             }\r
             Coordinate coordinate = new Coordinate(label, xy[0], xy[1], xy[2]);\r
             if(labels != null){\r
-                coordinate.setGroupId(labels.getGroupId(coordinate.getLabel()));\r
+                coordinate.setGroupId(labels.getGroupIdFromElementName(coordinate.getLabel()));\r
             }\r
             plots.add(coordinate);\r
 \r
diff --git a/src/main/java/jp/naist/se/stigmata/ui/swing/mds/MarkIcon.java b/src/main/java/jp/naist/se/stigmata/ui/swing/mds/MarkIcon.java
new file mode 100755 (executable)
index 0000000..207cd61
--- /dev/null
@@ -0,0 +1,53 @@
+package jp.naist.se.stigmata.ui.swing.mds;\r
+\r
+import java.awt.Color;\r
+import java.awt.Component;\r
+import java.awt.Graphics;\r
+import java.awt.Graphics2D;\r
+\r
+import javax.swing.Icon;\r
+\r
+\r
+public class MarkIcon implements Icon{\r
+    private static final int DEFAULT_ICON_WIDTH = 16;\r
+    private static final int DEFAULT_ICON_HEIGHT = 16;\r
+\r
+    private MarkDrawer drawer;\r
+    private int width = -1;\r
+    private int height = -1;\r
+\r
+    public MarkIcon(MarkDrawer drawer){\r
+        this.drawer = drawer;\r
+    }\r
+\r
+    public void setIconHeight(int height){\r
+        this.height = height;\r
+    }\r
+\r
+    public int getIconHeight(){\r
+        if(height < 0){\r
+            return DEFAULT_ICON_HEIGHT;\r
+        }\r
+        return height;\r
+    }\r
+\r
+    public void setIconWidth(int width){\r
+        this.width = width;\r
+    }\r
+\r
+    public int getIconWidth(){\r
+        if(width < 0){\r
+            return DEFAULT_ICON_WIDTH;\r
+        }\r
+        return width;\r
+    }\r
+\r
+    public void paintIcon(Component c, Graphics g, int x, int y){\r
+        Color initialColor = g.getColor();\r
+        g.setColor(Color.BLACK);\r
+        g.translate(x, y);\r
+        drawer.drawOver((Graphics2D)g, getIconWidth(), getIconHeight());\r
+        g.translate(-x, -y);\r
+        g.setColor(initialColor);\r
+    }\r
+}\r
index 8e084f7..2dd9782 100644 (file)
@@ -7,8 +7,11 @@ package jp.naist.se.stigmata.ui.swing.mds.mark;
 import java.util.HashMap;\r
 import java.util.Map;\r
 \r
+import javax.swing.Icon;\r
+\r
 import jp.naist.se.stigmata.ui.swing.mds.GeometoryType;\r
 import jp.naist.se.stigmata.ui.swing.mds.MarkDrawer;\r
+import jp.naist.se.stigmata.ui.swing.mds.MarkIcon;\r
 \r
 /**\r
  * \r
@@ -43,4 +46,8 @@ public class DrawerFactory{
     public MarkDrawer create(GeometoryType type){\r
         return drawers.get(type);\r
     }\r
+\r
+    public Icon createIcon(GeometoryType type){\r
+        return new MarkIcon(create(type));\r
+    }\r
 }\r
index 21e54d7..6a59f83 100755 (executable)
@@ -273,6 +273,9 @@ updateovercolor.icon=${updatecolor.icon}
 updateovercolor.tooltip=Update mouse over color.\r
 updateovercolor.button.tooltip=${updateovercolor.tooltip}\r
 \r
+mdsgraph.count.border=The number of dots\r
+mdsgraph.group.border=The number of each marks\r
+\r
 ################################################\r
 # graph pane\r
 ################################################\r