Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/Edit/rm/TrackView.py
diff options
context:
space:
mode:
Diffstat (limited to 'Edit/rm/TrackView.py')
-rw-r--r--Edit/rm/TrackView.py263
1 files changed, 0 insertions, 263 deletions
diff --git a/Edit/rm/TrackView.py b/Edit/rm/TrackView.py
deleted file mode 100644
index 0b66abd..0000000
--- a/Edit/rm/TrackView.py
+++ /dev/null
@@ -1,263 +0,0 @@
-import pygtk
-pygtk.require( '2.0' )
-import gtk
-
-from Framework.Constants import Constants
-from GUI.GUIConstants import GUIConstants
-
-from BackgroundView import SELECTNOTES
-from NoteView import NoteView
-
-
-#----------------------------------------------------------------------
-# This view class is used to show the contents of a NoteTrack
-# i.e. a Collection of Note objects
-#----------------------------------------------------------------------
-class TrackView:
- #-----------------------------------
- # initialization functions
- #-----------------------------------
- def __init__( self, trackID, beatsPerPageAdjustment ):
- self.trackID = trackID
- self.beatsPerPageAdjustment = beatsPerPageAdjustment
- self.noteViews = []
- self.posOffset = (0,0)
- self.selectedNotes = []
-
- def getID( self ):
- return self.trackID
-
- #-----------------------------------
- # modification methods
- #-----------------------------------
- def setNotes( self, notes ):
- self.clearNotes()
-
- lineW = self.getBorderWidth()
-
- for note in notes:
- noteView = NoteView( note, self, self.beatsPerPageAdjustment )
- self.noteViews.append( noteView )
- noteView.setPositionOffset( (self.posOffset[0]+lineW, self.posOffset[1]+lineW ) )
-
- self.updateNoteTransforms()
-
- def clearNotes( self ):
- del self.noteViews
- self.noteViews = []
- self.selectedNotes = []
-
- def selectNotes( self, mode, which ):
- if mode == SELECTNOTES.ALL:
- for note in self.noteViews: note.setSelected( True )
- self.selectedNotes = self.noteViews[:]
- elif mode == SELECTNOTES.NONE:
- for note in self.noteViews: note.setSelected( False )
- self.selectedNotes = []
- elif mode == SELECTNOTES.ADD:
- for note in which:
- if note.setSelected( True ):
- self.selectedNotes.insert( 0, note )
- elif mode == SELECTNOTES.REMOVE:
- for note in which:
- if note.setSelected( False ):
- self.selectedNotes.remove( note )
- elif mode == SELECTNOTES.EXCLUSIVE:
- for note in self.noteViews:
- if note in which:
- if note.setSelected( True ):
- self.selectedNotes.insert( 0, note )
- else:
- if note.setSelected( False ):
- self.selectedNotes.remove( note )
-
- def updateDragLimits( self, dragLimits ):
- if not len(self.selectedNotes): return # no selected notes here
-
- leftBound = 0
- maxRightBound = round( self.beatsPerPageAdjustment.value, 0 ) * Constants.TICKS_PER_BEAT
- last = len(self.noteViews)-1
- for i in range(0,last):
- if not self.noteViews[i].getSelected():
- leftBound = self.noteViews[i].getEndTick()
- else:
- if not self.noteViews[i+1].getSelected():
- rightBound = min( self.noteViews[i+1].getStartTick(), maxRightBound )
- widthBound = rightBound
- else:
- rightBound = maxRightBound
- widthBound = min( self.noteViews[i+1].getStartTick(), maxRightBound )
- self.noteViews[i].updateDragLimits( dragLimits, leftBound, rightBound, widthBound )
- if self.noteViews[last].getSelected():
- self.noteViews[last].updateDragLimits( dragLimits, leftBound, maxRightBound, maxRightBound )
-
- def getNotesByBar( self, beatCount, startX, stopX ):
- beatWidth = self.getBeatLineSpacing( beatCount )
- beatStart = self.getBeatLineStart()
- while beatStart+beatWidth <= startX:
- beatStart += beatWidth
- beatStop = beatStart + beatWidth
- while beatStop+beatWidth < stopX:
- beatStop += beatWidth
-
- notes = []
- for note in self.noteViews:
- if note.checkX( beatStart, beatStop ):
- notes.insert(0,note)
- return notes
-
- #-----------------------------------
- # event methods
- #-----------------------------------
-
- def handleButtonPress( self, emitter, event ):
- eX = event.x - self.posOffset[0]
- eY = event.y - self.posOffset[1]
- if eX < 0 or eX > self.width or eY < 0 or eY > self.height:
- return False
-
- for note in self.noteViews:
- handled = note.handleButtonPress( emitter, event )
- if handled: return handled
-
- return False
-
- def handleButtonRelease( self, emitter, event, buttonPressCount ):
- eX = event.x - self.posOffset[0]
- eY = event.y - self.posOffset[1]
-
- if eX < 0 or eX > self.width or eY < 0 or eY > self.height:
- return False
-
- if event.button == 1:
- if buttonPressCount == 1: emitter.toggleTrack( self.trackID, False )
- else: emitter.toggleTrack( self.trackID, True )
-
- return True
-
- def handleMarqueeSelect( self, emitter, start, stop ):
- intersectionY = [ max(start[1],self.posOffset[1]), min(stop[1],self.posOffset[1]+self.height) ]
- if intersectionY[0] > intersectionY[1]:
- return False
-
- intersectionX = [ max(start[0],self.posOffset[0]), min(stop[0],self.posOffset[0]+self.width) ]
- if intersectionX[0] > intersectionX[1]:
- return False
-
-
- hits = []
- for note in self.noteViews:
- hit = note.handleMarqueeSelect( emitter,
- [ intersectionX[0], intersectionY[0] ], \
- [ intersectionX[1], intersectionY[1] ] )
- if hit: hits.insert(0,note)
-
- if len(hits): return hits
-
- return False
-
- def noteDrag( self, emitter, dx, dy, dw ):
- for note in self.selectedNotes:
- note.noteDrag( emitter, dx, dy, dw )
-
- def doneNoteDrag( self, emitter ):
- for note in self.selectedNotes:
- note.doneNoteDrag( emitter )
-
- #-----------------------------------
- # drawing methods
- #-----------------------------------
-
- def getBorderWidth( self ): #should return a constant value, otherwise we have to recalculate sizing and positioning everyframe!
- return GUIConstants.BORDER_SIZE
-
- def getBeatLineWidth( self ):
- return GUIConstants.BEAT_LINE_SIZE #should return a constant value, otherwise we have to recalculate sizing and positioning everyframe!
-
- def getBeatLineSpacing( self, beatCount ):
- return (self.width - 2*self.getBorderWidth() + self.getBeatLineWidth())/beatCount
-
- def getBeatLineStart( self ):
- return self.posOffset[0] + self.getBorderWidth() - self.getBeatLineWidth()/2.0
-
- def setPositionOffset( self, offset ):
- self.posOffset = offset
-
- lineW = self.getBorderWidth()
- for note in self.noteViews:
- note.setPositionOffset( ( self.posOffset[0]+lineW, self.posOffset[1]+lineW ) )
-
- def draw( self, context, beatCount, selected ):
- #if selected: lineW = GUIConstants.SELECTED_BORDER_SIZE
- #else: lineW = GUIConstants.BORDER_SIZE
- lineW = self.getBorderWidth()
- context.set_line_width( lineW )
- lineWDIV2 = lineW/2.0
-
- context.move_to( self.posOffset[0] + lineWDIV2, self.posOffset[1] + lineWDIV2 )
- context.rel_line_to( self.width - lineW, 0 )
- context.rel_line_to( 0, self.height - lineW )
- context.rel_line_to( -self.width + lineW, 0 )
- context.close_path()
-
- #draw the background
- context.set_source_rgb( 0.75, 0.75, 0.75 )
- context.fill_preserve()
-
- #draw the border
- if selected: context.set_source_rgb( 1, 1, 1 )
- else: context.set_source_rgb( 0, 0, 0 )
- context.stroke()
-
- #draw the beat lines
- beatLineWidth = self.getBeatLineWidth()
- context.set_line_width( beatLineWidth )
- beatWidth = self.getBeatLineSpacing( beatCount )
- beatStart = self.getBeatLineStart()
- context.set_source_rgb( 0, 0, 0 )
- for i in range(1,beatCount):
- context.move_to( beatStart + i*beatWidth, self.posOffset[1] + lineW )
- context.rel_line_to( 0, self.height - 2*lineW )
- context.stroke()
-
- #draw the notes
- for note in self.noteViews:
- note.draw( context )
-
- #-----------------------------------
- # sizing methods
- #-----------------------------------
-
- def updateNoteTransforms( self ):
- width = self.width - 2*self.getBorderWidth()
- height = self.height - 2*self.getBorderWidth() # adjust for actual note drawing area
- for noteView in self.noteViews:
- noteView.updateTransform( (width, height) )
-
- def set_size_request( self, width, height ):
- self.width = width
- self.height = height
- self.updateNoteTransforms()
-
-
-#unused for now...
-class NoteViewPool:
- def __init__( self, parentContainer, beatsPerPageAdjustment ):
- self.parentContainer = parentContainer
- self.beatsPerPageAdjustment = beatsPerPageAdjustment
- self.pool = []
-
- def addNoteView( self, noteView ):
- #noteView.hide()
- self.pool.append( noteView )
-
- def addNoteViews( self, noteViews ):
- for noteView in noteViews:
- self.addNoteView( noteView )
-
- def getNoteView( self ):
- poolSize = len( pool )
- if poolSize != 0:
- return pool.pop( poolSize )
-
- return NoteView( None, self.parentContainer, self.beatsPerPageAdjustment )