# Example showing how paste events work
from hiero.core.events import *

class PasteEventHandler:
  
  def __init__(self):
    # register interest in paste event in the bin
    registerInterest((EventType.kPaste, EventType.kBin), self.binPasteEvent)
    # register interest in paste event in the timeline
    registerInterest((EventType.kPaste, EventType.kTimeline), self.timelinePasteEvent)

  def binPasteEvent(self, event):

    # the list of selected bin items e.g. clips and/or folders, may be None.
    print("selected bin items: ", event.selectedBinItems)
    
    # the widget the paste event occurred in i.e. the Bin View
    print("pasteWidget: ", event.pasteWidget)
    
    # the higher level container widget, in this case it is the same as event.pasteWidget
    print("containerWidget: ", event.containerWidget)
    
    # get the mime data
    print("mimeData: ", event.mimeData)

    # get the text mime data
    if event.mimeData.hasText():
      print(event.mimeData.text())
      
    # perform custom paste and if successful, tell Hiero to ignore the paste event
    if self.performCustomPaste(event):
      event.ignore()

  def timelinePasteEvent(self, event):

    # the playhead time position (in frames)
    print("time: ", event.time)
    
    # the list of selected tracks, it may be None.
    print("selected tracks: ", event.selectedTracks)
    
    # the list of selected track items, it may be None.
    print("selected track items: ", event.selectedTrackItems)
    
    # the widget the paste event occurred in i.e. the timelineView
    print("pasteWidget: ", event.pasteWidget)
    
    # the higher level container widget i.e. the timelineEditor
    print("containerWidget: ", event.containerWidget)
    
    # get the text mime data
    if event.mimeData.hasText():
      print(event.mimeData.text())
      
    # perform custom paste and if successful, tell Hiero to ignore the paste event
    if self.performCustomPaste(event):
      event.ignore()

  def performCustomPaste(self, event):
    # perform custom paste operation here and return True if successful
    return False
      
  def unregister(self):
    unregisterInterest((EventType.kPaste, EventType.kBin), self.binPasteEvent)
    unregisterInterest((EventType.kPaste, EventType.kTimeline), self.timelinePasteEvent)

# Instantiate the handler and it will register interest in the paste events
pasteEventHandler = PasteEventHandler()

