# 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()
