OSDN Git Service

イベント編集ウィンドウ初期サイズがWindows7で小さすぎたので再調整
authorAkiyoshi Kamide <kamide@yk.rim.or.jp>
Wed, 4 Dec 2013 16:47:31 +0000 (16:47 +0000)
committerAkiyoshi Kamide <kamide@yk.rim.or.jp>
Wed, 4 Dec 2013 16:47:31 +0000 (16:47 +0000)
git-svn-id: https://svn.sourceforge.jp/svnroot/midichordhelper/MIDIChordHelper@22 302f1594-2db2-43b1-aaa4-6307b5a2a2de

src/ChordHelperApplet.java
src/MIDIEditor.java
src/MIDIMsgForm.java

index 692068a..4cebe66 100644 (file)
@@ -268,7 +268,7 @@ public class ChordHelperApplet extends JApplet {
         */\r
        public static class VersionInfo {\r
                public static final String      NAME = "MIDI Chord Helper";\r
-               public static final String      VERSION = "Ver.20131204.2";\r
+               public static final String      VERSION = "Ver.20131205.1";\r
                public static final String      COPYRIGHT = "Copyright (C) 2004-2013";\r
                public static final String      AUTHER = "@きよし - Akiyoshi Kamide";\r
                public static final String      URL = "http://www.yk.rim.or.jp/~kamide/music/chordhelper/";\r
index fd69a3d..ff9f50b 100644 (file)
@@ -475,8 +475,7 @@ class MidiEditor extends JDialog implements DropTargetListener {
                public TrackListTable(SequenceTrackListTableModel model) {\r
                        super(model, null, model.trackListSelectionModel);\r
                        //\r
-                       // 録音対象のMIDIチャンネルをコンボボックスで選択できるよう、\r
-                       // 列モデルにセルエディタを設定\r
+                       // 録音対象のMIDIチャンネルをコンボボックスで選択できるようにする\r
                        int colIndex = SequenceTrackListTableModel.Column.RECORD_CHANNEL.ordinal();\r
                        TableColumn tc = getColumnModel().getColumn(colIndex);\r
                        tc.setCellEditor(new DefaultCellEditor(new JComboBox<String>(){{\r
@@ -823,7 +822,7 @@ class MidiEditor extends JDialog implements DropTargetListener {
                                setSelectedEvent();\r
                                midiEventsToBeOverwritten = null; // 追加なので、上書きされるイベントなし\r
                                eventDialog.setTitle("Add a new MIDI event");\r
-                               eventDialog.okButton.setAction(eventCellEditor.addEventAction);\r
+                               eventDialog.okButton.setAction(eventCellEditor.applyEventAction);\r
                                int ch = getModel().getChannel();\r
                                if( ch >= 0 ) {\r
                                        eventDialog.midiMessageForm.channelText.setSelectedChannel(ch);\r
@@ -895,45 +894,6 @@ class MidiEditor extends JDialog implements DropTargetListener {
                        }\r
                };\r
                /**\r
-                * イベント編集アクション\r
-                */\r
-               private Action editEventAction = new AbstractAction() {\r
-                       public void actionPerformed(ActionEvent e) {\r
-                               setSelectedEvent();\r
-                               if( selectedMidiEvent == null )\r
-                                       return;\r
-                               MidiEvent partnerEvent = null;\r
-                               eventDialog.midiMessageForm.setMessage(selectedMidiEvent.getMessage());\r
-                               if( eventDialog.midiMessageForm.isNote() ) {\r
-                                       int partnerIndex = getModel().getIndexOfPartnerFor(selectedIndex);\r
-                                       if( partnerIndex < 0 ) {\r
-                                               eventDialog.midiMessageForm.durationForm.setDuration(0);\r
-                                       }\r
-                                       else {\r
-                                               partnerEvent = getModel().getMidiEvent(partnerIndex);\r
-                                               long partnerTick = partnerEvent.getTick();\r
-                                               long duration = currentTick > partnerTick ?\r
-                                                       currentTick - partnerTick : partnerTick - currentTick ;\r
-                                               eventDialog.midiMessageForm.durationForm.setDuration((int)duration);\r
-                                       }\r
-                               }\r
-                               MidiEvent events[];\r
-                               if( partnerEvent == null ) {\r
-                                       events = new MidiEvent[1];\r
-                                       events[0] = selectedMidiEvent;\r
-                               }\r
-                               else {\r
-                                       events = new MidiEvent[2];\r
-                                       events[0] = selectedMidiEvent;\r
-                                       events[1] = partnerEvent;\r
-                               }\r
-                               midiEventsToBeOverwritten = events;\r
-                               eventDialog.setTitle("Change MIDI event");\r
-                               eventDialog.okButton.setAction(eventCellEditor.addEventAction);\r
-                               eventDialog.openEventForm();\r
-                       }\r
-               };\r
-               /**\r
                 * MIDIイベント表のセルエディタ\r
                 */\r
                private MidiEventCellEditor eventCellEditor;\r
@@ -942,36 +902,65 @@ class MidiEditor extends JDialog implements DropTargetListener {
                 */\r
                class MidiEventCellEditor extends AbstractCellEditor implements TableCellEditor {\r
                        /**\r
-                        * イベント入力をキャンセルするアクション\r
+                        * MIDIイベントセルエディタを構築します。\r
                         */\r
-                       Action cancelAction = new AbstractAction() {\r
-                               {\r
-                                       putValue(NAME,"Cancel");\r
-                                       eventDialog.cancelButton.setAction(this);\r
-                               }\r
-                               public void actionPerformed(ActionEvent e) {\r
-                                       fireEditingCanceled();\r
-                                       eventDialog.setVisible(false);\r
-                               }\r
-                       };\r
                        public MidiEventCellEditor() {\r
                                eventDialog.midiMessageForm.setOutputMidiChannels(virtualMidiDevice.getChannels());\r
                                eventDialog.tickPositionInputForm.setModel(tickPositionModel);\r
                                int index = TrackEventListTableModel.Column.MESSAGE.ordinal();\r
                                getColumnModel().getColumn(index).setCellEditor(this);\r
                        }\r
+                       /**\r
+                        * セルをダブルクリックしないと編集できないようにします。\r
+                        * @param e イベント(マウスイベント)\r
+                        * @return 編集可能になったらtrue\r
+                        */\r
                        @Override\r
                        public boolean isCellEditable(EventObject e) {\r
-                               // ダブルクリックで編集\r
-                               return e instanceof MouseEvent && ((MouseEvent)e).getClickCount() == 2;\r
+                               if( ! (e instanceof MouseEvent) ) return false;\r
+                               return ((MouseEvent)e).getClickCount() == 2;\r
                        }\r
                        @Override\r
                        public Object getCellEditorValue() { return ""; }\r
-                       private JButton editEventButton = new JButton(editEventAction){\r
-                               {\r
-                                       setHorizontalAlignment(JButton.LEFT);\r
+                       /**\r
+                        * 既存イベントを編集するアクション\r
+                        */\r
+                       private Action editEventAction = new AbstractAction() {\r
+                               public void actionPerformed(ActionEvent e) {\r
+                                       setSelectedEvent();\r
+                                       if( selectedMidiEvent == null )\r
+                                               return;\r
+                                       MidiEvent partnerEvent = null;\r
+                                       eventDialog.midiMessageForm.setMessage(selectedMidiEvent.getMessage());\r
+                                       if( eventDialog.midiMessageForm.isNote() ) {\r
+                                               int partnerIndex = getModel().getIndexOfPartnerFor(selectedIndex);\r
+                                               if( partnerIndex < 0 ) {\r
+                                                       eventDialog.midiMessageForm.durationForm.setDuration(0);\r
+                                               }\r
+                                               else {\r
+                                                       partnerEvent = getModel().getMidiEvent(partnerIndex);\r
+                                                       long partnerTick = partnerEvent.getTick();\r
+                                                       long duration = currentTick > partnerTick ?\r
+                                                               currentTick - partnerTick : partnerTick - currentTick ;\r
+                                                       eventDialog.midiMessageForm.durationForm.setDuration((int)duration);\r
+                                               }\r
+                                       }\r
+                                       if(partnerEvent == null)\r
+                                               midiEventsToBeOverwritten = new MidiEvent[] {selectedMidiEvent};\r
+                                       else\r
+                                               midiEventsToBeOverwritten = new MidiEvent[] {selectedMidiEvent, partnerEvent};\r
+                                       eventDialog.setTitle("Change MIDI event");\r
+                                       eventDialog.okButton.setAction(applyEventAction);\r
+                                       eventDialog.cancelButton.addActionListener(cancelActionListener);\r
+                                       eventDialog.openEventForm();\r
                                }\r
                        };\r
+                       /**\r
+                        * イベント編集ボタン\r
+                        */\r
+                       private JButton editEventButton = new JButton(editEventAction){{\r
+                               setHorizontalAlignment(JButton.LEFT);\r
+                       }};\r
                        @Override\r
                        public Component getTableCellEditorComponent(\r
                                JTable table, Object value, boolean isSelected, int row, int column\r
@@ -980,10 +969,27 @@ class MidiEditor extends JDialog implements DropTargetListener {
                                return editEventButton;\r
                        }\r
                        /**\r
-                        * イベントの追加(または変更)を行うアクション\r
+                        * イベント入力をキャンセルするアクションリスナーです。\r
+                        *\r
+                        * <p>セル編集によって表示されたMIDIメッセージダイアログを\r
+                        * キャンセルする場合、セル編集を中止する処理の追加が必要です。\r
+                        * その追加処理をこのリスナーでカバーします。\r
+                        * </p>\r
                         */\r
-                       private Action addEventAction = new AbstractAction() {\r
-                               { putValue(NAME,"OK"); }\r
+                       private ActionListener cancelActionListener = new ActionListener() {\r
+                               public void actionPerformed(ActionEvent e) {\r
+                                       fireEditingCanceled();\r
+                                       // 用が済んだら当リスナーを除去\r
+                                       eventDialog.cancelButton.removeActionListener(this);\r
+                               }\r
+                       };\r
+                       /**\r
+                        * 入力したイベントを反映するアクション\r
+                        */\r
+                       private Action applyEventAction = new AbstractAction() {\r
+                               {\r
+                                       putValue(NAME,"OK");\r
+                               }\r
                                public void actionPerformed(ActionEvent e) {\r
                                        long tick = tickPositionModel.getTickPosition();\r
                                        MidiMessage msg = eventDialog.midiMessageForm.getMessage();\r
index 7be1668..9a31b8e 100644 (file)
@@ -55,8 +55,7 @@ import javax.swing.event.ListSelectionListener;
  *     Copyright (C) 2006-2013 @きよし - Akiyoshi Kamide\r
  *     http://www.yk.rim.or.jp/~kamide/music/chordhelper/\r
  */\r
-class MidiEventDialog extends JDialog implements ActionListener {\r
-       MidiMessageForm midiMessageForm = new MidiMessageForm();\r
+class MidiEventDialog extends JDialog {\r
        /**\r
         * tick位置入力フォーム\r
         */\r
@@ -85,37 +84,57 @@ class MidiEventDialog extends JDialog implements ActionListener {
                        extraTickSpinner.setModel(model.extraTickModel);\r
                }\r
        }\r
-       TickPositionInputForm tickPositionInputForm = new TickPositionInputForm();\r
-       JButton okButton = new JButton("OK");\r
-       JButton cancelButton = new JButton("Cancel");\r
+       /**\r
+        * tick位置入力フォーム\r
+        */\r
+       TickPositionInputForm tickPositionInputForm;\r
+       /**\r
+        * MIDIメッセージ入力フォーム\r
+        */\r
+       MidiMessageForm midiMessageForm;\r
+       /**\r
+        * キャンセルボタン\r
+        */\r
+       JButton cancelButton;\r
+       /**\r
+        * OKボタン(アクションによってラベルがOK以外に変わることがある)\r
+        */\r
+       JButton okButton;\r
+       /**\r
+        * MIDIイベントダイアログの構築\r
+        */\r
        public MidiEventDialog() {\r
                setLayout(new FlowLayout());\r
-               add(tickPositionInputForm);\r
-               add(midiMessageForm);\r
-               add(new JPanel(){{add(okButton); add(cancelButton);}});\r
-               cancelButton.addActionListener(this);\r
-       }\r
-       public void actionPerformed(ActionEvent e) {\r
-               setVisible(false);\r
+               add(tickPositionInputForm = new TickPositionInputForm());\r
+               add(midiMessageForm = new MidiMessageForm());\r
+               add(new JPanel(){{\r
+                       add(okButton = new JButton("OK"));\r
+                       add(cancelButton = new JButton("Cancel"));\r
+               }});\r
+               cancelButton.addActionListener(new ActionListener() {\r
+                       public void actionPerformed(ActionEvent e) {\r
+                               setVisible(false);\r
+                       }\r
+               });\r
        }\r
        public void openTickForm() {\r
                tickPositionInputForm.setVisible(true);\r
                midiMessageForm.setVisible(false);\r
-               setBounds( 200, 300, 500, 120 );\r
+               setBounds( 200, 300, 520, 150 );\r
                setVisible(true);\r
        }\r
        public void openEventForm() {\r
                tickPositionInputForm.setVisible(true);\r
                midiMessageForm.setVisible(true);\r
                midiMessageForm.setDurationVisible(true);\r
-               setBounds( 200, 300, 630, 320 );\r
+               setBounds( 200, 300, 630, 370 );\r
                setVisible(true);\r
        }\r
        public void openMessageForm() {\r
                tickPositionInputForm.setVisible(false);\r
                midiMessageForm.setVisible(true);\r
                midiMessageForm.setDurationVisible(false);\r
-               setBounds( 200, 300, 630, 270 );\r
+               setBounds( 200, 300, 630, 300 );\r
                setVisible(true);\r
        }\r
 }\r
@@ -399,19 +418,37 @@ class MidiMessageForm extends JPanel implements ActionListener {
                }\r
                updateVisible();\r
        }\r
-       //\r
-       // Methods\r
-       //\r
-       public void setOutputMidiChannels( MidiChannel midi_channels[] ) {\r
-               this.midiChannels = midi_channels;\r
+       /**\r
+        * このMIDIメッセージフォームにMIDIチャンネルを設定します。\r
+        *\r
+        * <p>設定したMIDIチャンネルには、\r
+        * ダイアログ内のピアノキーボードで音階を入力したときに\r
+        * ノートON/OFFが出力されます。これにより実際に音として聞けるようになります。\r
+        * </p>\r
+        *\r
+        * @param midiChannels MIDIチャンネル\r
+        */\r
+       public void setOutputMidiChannels( MidiChannel midiChannels[] ) {\r
+               this.midiChannels = midiChannels;\r
        }\r
-       public void setDurationVisible(boolean is_visible) {\r
-               isDurationVisible = is_visible;\r
+       /**\r
+        * 時間間隔入力の表示状態を変更します。\r
+        * @param isVisible trueで表示、falseで非表示\r
+        */\r
+       public void setDurationVisible(boolean isVisible) {\r
+               isDurationVisible = isVisible;\r
                updateVisible();\r
        }\r
+       /**\r
+        * 時間間隔入力の表示状態を返します。\r
+        * @return true:表示中 false:非表示中\r
+        */\r
        public boolean isDurationVisible() {\r
                return isDurationVisible;\r
        }\r
+       /**\r
+        * 各入力欄の表示状態を更新します。\r
+        */\r
        public void updateVisible() {\r
                int msgStatus = statusText.getValue();\r
                boolean is_ch_msg = MIDISpec.isChannelMessage(msgStatus);\r
@@ -503,6 +540,10 @@ class MidiMessageForm extends JPanel implements ActionListener {
                        break;\r
                }\r
        }\r
+       /**\r
+        * 入力している内容からMIDIメッセージを生成して返します。\r
+        * @return 入力している内容から生成したMIDIメッセージ\r
+        */\r
        public MidiMessage getMessage() {\r
                int msg_status = statusText.getValue();\r
                if( msg_status < 0 ) {\r
@@ -569,6 +610,10 @@ class MidiMessageForm extends JPanel implements ActionListener {
                }\r
                return (MidiMessage)msg;\r
        }\r
+       /**\r
+        * MIDIメッセージを入力欄に反映します。\r
+        * @param msg MIDIメッセージ\r
+        */\r
        public void setMessage( MidiMessage msg ) {\r
                if( msg instanceof ShortMessage ) {\r
                        ShortMessage smsg = (ShortMessage)msg;\r
@@ -628,13 +673,13 @@ class MidiMessageForm extends JPanel implements ActionListener {
        public boolean isNote( boolean note_on, int status ) {\r
                int cmd = status & 0xF0;\r
                return (\r
-                               note_on && cmd == ShortMessage.NOTE_ON && data2Text.getValue() > 0\r
-                               ||\r
-                               !note_on && (\r
-                                       cmd == ShortMessage.NOTE_ON && data2Text.getValue() <= 0 ||\r
-                                       cmd == ShortMessage.NOTE_OFF\r
-                                       )\r
-                               );\r
+                       note_on && cmd == ShortMessage.NOTE_ON && data2Text.getValue() > 0\r
+                       ||\r
+                       !note_on && (\r
+                               cmd == ShortMessage.NOTE_ON && data2Text.getValue() <= 0 ||\r
+                               cmd == ShortMessage.NOTE_OFF\r
+                       )\r
+               );\r
        }\r
        public ShortMessage getPartnerMessage() {\r
                ShortMessage sm = (ShortMessage)getMessage();\r