Logo Search packages:      
Sourcecode: cadencii version File versions  Download package

void org::kbinani::cadencii::FormMain::moveUpDownLeftRight ( int  delta_note,
int  delta_clock 
) [inline, private]

選択された音符の音程とゲートタイムを、指定されたノートナンバーおよびゲートタイム分上下させます。

Parameters:
delta_note
delta_clock

Definition at line 1741 of file FormMain.cs.

References org::kbinani::vsq::VsqEvent::clone(), org::kbinani::cadencii::SelectedEventEntry::editing, org::kbinani::cadencii::AppManager::getSelected(), org::kbinani::cadencii::AppManager::getVsqFile(), and org::kbinani::cadencii::AppManager::itemSelection.

        {
            VsqFileEx vsq = AppManager.getVsqFile();
            if ( vsq == null ) {
                return;
            }

            Vector<VsqEvent> items = new Vector<VsqEvent>();
            int selected = AppManager.getSelected();
            int note_max = -1;
            int note_min = 129;
            int clock_max = int.MinValue;
            int clock_min = int.MaxValue;
            for ( Iterator<SelectedEventEntry> itr = AppManager.itemSelection.getEventIterator(); itr.hasNext(); ) {
                SelectedEventEntry item = itr.next();
                if ( item.editing.ID.type != VsqIDType.Anote ) {
                    continue;
                }
                VsqEvent add = null;

                // 音程
                int note = item.editing.ID.Note;
                if ( delta_note != 0 && 0 <= note + delta_note && note + delta_note <= 127 ) {
                    add = (VsqEvent)item.editing.clone();
                    add.ID.Note += delta_note;
                    note_max = Math.Max( note_max, add.ID.Note );
                    note_min = Math.Min( note_min, add.ID.Note );
                }

                // ゲートタイム
                int clockstart = item.editing.Clock;
                int clockend = clockstart + item.editing.ID.getLength();
                if ( delta_clock != 0 ) {
                    if ( add == null ) {
                        add = (VsqEvent)item.editing.clone();
                    }
                    add.Clock += delta_clock;
                    clock_max = Math.Max( clock_max, clockend + delta_clock );
                    clock_min = Math.Min( clock_min, clockstart );
                }

                if ( add != null ) {
                    items.add( add );
                }
            }
            if ( items.size() <= 0 ) {
                return;
            }

            // コマンドを発行
            CadenciiCommand run = new CadenciiCommand(
                VsqCommand.generateCommandEventReplaceRange(
                    selected, items.toArray( new VsqEvent[] { } ) ) );
            AppManager.editHistory.register( vsq.executeCommand( run ) );

            // 編集されたものを再選択する
            for ( Iterator<VsqEvent> itr = items.iterator(); itr.hasNext(); ) {
                VsqEvent item = itr.next();
                AppManager.itemSelection.addEvent( item.InternalID );
            }

            // 編集が施された。
            setEdited( true );
            updateDrawObjectList();

            // 音符が見えるようにする。音程方向
            if ( delta_note > 0 ) {
                note_max++;
                if ( 127 < note_max ) {
                    note_max = 127;
                }
                ensureVisibleY( note_max );
            } else if ( delta_note < 0 ) {
                note_min -= 2;
                if ( note_min < 0 ) {
                    note_min = 0;
                }
                ensureVisibleY( note_min );
            }

            // 音符が見えるようにする。時間方向
            if ( delta_clock > 0 ) {
                ensureVisible( clock_max );
            } else if ( delta_clock < 0 ) {
                ensureVisible( clock_min );
            }
            refreshScreen();
        }

Here is the call graph for this function:


Generated by  Doxygen 1.6.0   Back to index