OSDN Git Service

リファクタリング
[midichordhelper/MIDIChordHelper.git] / src / camidion / chordhelper / InversionAndOmissionLabel.java
1 package camidion.chordhelper;
2
3 import java.awt.Component;
4 import java.awt.event.MouseEvent;
5 import java.awt.event.MouseListener;
6
7 import javax.swing.ButtonGroup;
8 import javax.swing.JCheckBoxMenuItem;
9 import javax.swing.JLabel;
10 import javax.swing.JPopupMenu;
11 import javax.swing.JRadioButtonMenuItem;
12 import javax.swing.event.PopupMenuEvent;
13 import javax.swing.event.PopupMenuListener;
14
15 /**
16  * 転回・省略音メニューボタン
17  */
18 class InversionAndOmissionLabel extends JLabel
19         implements MouseListener, PopupMenuListener
20 {
21         JPopupMenu popup_menu;
22         ButtonGroup omission_group = new ButtonGroup();
23         ButtonIcon icon = new ButtonIcon(ButtonIcon.INVERSION_ICON);
24         JRadioButtonMenuItem radioButtonitems[] = new JRadioButtonMenuItem[4];
25         JCheckBoxMenuItem cb_inversion;
26
27         public InversionAndOmissionLabel() {
28                 setIcon(icon);
29                 popup_menu = new JPopupMenu();
30                 popup_menu.add(
31                         cb_inversion = new JCheckBoxMenuItem("Auto Inversion",true)
32                 );
33                 popup_menu.addSeparator();
34                 omission_group.add(
35                         radioButtonitems[0] = new JRadioButtonMenuItem("All notes",true)
36                 );
37                 popup_menu.add(radioButtonitems[0]);
38                 omission_group.add(
39                         radioButtonitems[1] = new JRadioButtonMenuItem("Omit 5th")
40                 );
41                 popup_menu.add(radioButtonitems[1]);
42                 omission_group.add(
43                         radioButtonitems[2] = new JRadioButtonMenuItem("Omit 3rd (Power Chord)")
44                 );
45                 popup_menu.add(radioButtonitems[2]);
46                 omission_group.add(
47                         radioButtonitems[3] = new JRadioButtonMenuItem("Omit root")
48                 );
49                 popup_menu.add(radioButtonitems[3]);
50                 addMouseListener(this);
51                 popup_menu.addPopupMenuListener(this);
52                 setToolTipText("Automatic inversion and Note omission - 自動転回と省略音の設定");
53         }
54         public void mousePressed(MouseEvent e) {
55                 Component c = e.getComponent();
56                 if( c == this ) popup_menu.show( c, 0, getHeight() );
57         }
58         public void mouseReleased(MouseEvent e) { }
59         public void mouseEntered(MouseEvent e) { }
60         public void mouseExited(MouseEvent e) { }
61         public void mouseClicked(MouseEvent e) { }
62         public void popupMenuCanceled(PopupMenuEvent e) { }
63         public void popupMenuWillBecomeInvisible(PopupMenuEvent e) {
64                 repaint(); // To repaint icon image
65         }
66         public void popupMenuWillBecomeVisible(PopupMenuEvent e) { }
67         public boolean isAutoInversionMode() {
68                 return cb_inversion.isSelected();
69         }
70         public void setAutoInversion(boolean is_auto) {
71                 cb_inversion.setSelected(is_auto);
72         }
73         public int getOmissionNoteIndex() {
74                 if( radioButtonitems[3].isSelected() ) { // Root
75                         return 0;
76                 }
77                 else if( radioButtonitems[2].isSelected() ) { // 3rd
78                         return 1;
79                 }
80                 else if( radioButtonitems[1].isSelected() ) { // 5th
81                         return 2;
82                 }
83                 else { // No omission
84                         return -1;
85                 }
86         }
87         public void setOmissionNoteIndex(int index) {
88                 switch(index) {
89                 case 0: radioButtonitems[3].setSelected(true); break;
90                 case 1: radioButtonitems[2].setSelected(true); break;
91                 case 2: radioButtonitems[1].setSelected(true); break;
92                 default: radioButtonitems[0].setSelected(true); break;
93                 }
94         }
95 }