LiveNotesView.java :  » Music » orDrumbox-0.9.0 » com » ordrumbox » gui » panels » Java Open Source

Java Open Source » Music » orDrumbox 0.9.0 
orDrumbox 0.9.0 » com » ordrumbox » gui » panels » LiveNotesView.java
package com.ordrumbox.gui.panels;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;

import javax.swing.BorderFactory;

import com.ordrumbox.core.control.SongManager;
import com.ordrumbox.core.description.Note;
import com.ordrumbox.core.description.OrPattern;
import com.ordrumbox.core.description.Patternsequencer;
import com.ordrumbox.core.listener.LiveNotesChangeListener;
import com.ordrumbox.core.orsnd.listener.CursorPositionListener;
import com.ordrumbox.core.orsnd.player.LiveNote;
import com.ordrumbox.core.orsnd.player.LiveNotes;
import com.ordrumbox.core.orsnd.player.LiveNotesManager;
import com.ordrumbox.core.orsnd.player.Player;
import com.ordrumbox.gui.controler.PanelControler;
import com.ordrumbox.gui.panels.pattern.PatternGridView;
import com.ordrumbox.gui.panels.pattern.TrackListView;
import com.ordrumbox.gui.widgets.NoteView;
import com.ordrumbox.gui.widgets.OrWidget;
import com.ordrumbox.gui.widgets.OrXScrollPanel;

public class LiveNotesView extends OrXScrollPanel implements LiveNotesChangeListener, CursorPositionListener {

  /**
   * 
   */
  private static final long  serialVersionUID  = 1L;
  private static final int  NOTE_H           = 6;
  private int                songStep;

  public LiveNotesView() {
    super();
    setVisible(false);
    PanelControler.getInstance().setLiveNoteListView(this);
    setLayout(null);
    setBackground(Color.darkGray);
    setBorder(BorderFactory.createLineBorder(Color.white));
  //  setMaximumSize(new Dimension(TrackListView._W + PatternGridView._NB_STEPS * NoteView._W + 6, OrWidget.H_RACK *2));
    setPreferredSize(new Dimension(TrackListView._W + PatternGridView._NB_STEPS * NoteView._W + 6, OrWidget.H_RACK * 2));
    Player.getInstance().addCursorPositionListener(this);
    LiveNotesManager.getInstance().addLiveNotesChangeListener(this);
  }

  public void paintComponent(Graphics g) {
    //System.out.println("LiveNoteView::paintComponent");
    super.paintComponent(g);
    Graphics2D g2d = (Graphics2D) g;
    int index = 0;
    for (LiveNote liveNote : LiveNotesManager.getInstance().getLiveNotes().getList()) {
      if (liveNote.isEnabled()) {
        index++;
        if (liveNote.getNote() != null) {
          drawLiveNote(g, liveNote);
        }
      }
    }
    paintPatternSequencers(g2d);
    paintCursor(g);
    displayOrScrollBar(g);
  }

  private void paintCursor(Graphics g) {
    int nbSteps = SongManager.getInstance().getCurrentSong().getNbSongSteps();
    g.fillRect((int) (((float) songStep * getWidth() / nbSteps - start) / zoom), 0, 2, getHeight());
  }

  private void drawLiveNote(Graphics g, LiveNote liveNote) {
    int y = liveNote.getNote().getTrack().getPattern().getNumFromTrack(liveNote.getNote().getTrack()) + 6;
    if (liveNote.getNote().getType() == Note.FANTOM) {
      g.setColor(Color.gray);
    } else {
      int qvelo = (int) (liveNote.getNote().getVelo() * 100) / Note.MAXVELO / 40;
      if (qvelo == 0)
        g.setColor(OrWidget.NOTE_COLOR_0);
      else if (qvelo == 1)
        g.setColor(OrWidget.NOTE_COLOR_1);
      else if (qvelo == 2)
        g.setColor(OrWidget.NOTE_COLOR_2);
      else if (qvelo == 3)
        g.setColor(OrWidget.NOTE_COLOR_3);
    }
    float coef = LiveNotesManager.getInstance().getNb_SFramesPerStep();
    int step = (int) (liveNote.getStartSFrame() / coef);
    int nbSteps = SongManager.getInstance().getCurrentSong().getNbSongSteps();
    float x1 = (step * getWidth() / nbSteps - start) / zoom;
    float stepWidth = (float) ((liveNote.getEndSFrame() - liveNote.getStartSFrame()) / coef);
    float w1 = (stepWidth * getWidth() / nbSteps) / zoom;
    if (!liveNote.getNote().getTrack().isMute())
      g.fillRect((int) x1, y * NOTE_H, (int) (w1), NOTE_H);
    g.setColor(Color.black);
    g.drawRect((int) x1, y * NOTE_H, (int) (w1), NOTE_H);
  }

  private void paintPatternSequencers(Graphics g) {
    int i = 0;
    int startStep = 0;
    g.setFont(OrWidget.SMALL_FONT);
    for (Patternsequencer patternsequencer : SongManager.getInstance().getCurrentSong().getPatternSequencers()) {
      i++;
      int nbSteps = patternsequencer.getRepeat() * patternsequencer.getPattern().getNbSteps();
      int x1 = (int) ((getWidth() / zoom) * startStep / SongManager.getInstance().getCurrentSong().getNbSongSteps() - start / zoom);
      int w = (int) ((getWidth() * nbSteps) / zoom);
      g.setColor(Color.black);
      g.drawRect(x1, 6, w, getHeight() - 20);
      g.drawString(patternsequencer.getPattern().getDisplayName(), x1 + 2, 20);
      g.drawString(patternsequencer.getRepeat() + "x", x1 + 2, 30);
      // g.setColor(Color.blue);
      // g.drawString("" + i, x1 + 2, 40);
      startStep += nbSteps;
    }
  }

  public void liveNotesChanged(LiveNotes liveNotes, long nb_SFramePerStep, int nbSongStep) {
    repaint();
  }

  public void cursorPositionChanged(Patternsequencer patternsequencer,OrPattern newPattern, int newSongStep, int newPatternStep, int newCurrentFrame, String newSongTime, int maxLeft, int maxRight) {
    this.songStep = newSongStep;
    repaint();
  }

}
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.