class Application:

    sorter = None

    def __init__(self, window):
        pygame.init()
        self.window = window
        self.event_handler = EventHandler()
        self.renderer = Renderer(window)
        self.data = Data(10, 300, 64)
        self.buttons = [
            RandomizeButton(BLACK, 25, 25, 125, 25, 'Randomize Data', WHITE,
                            self.data),
            SorterButton(BLACK, 175, 25, 125, 25, 'Bubble Sort', WHITE,
                         BubbleSorter(self.renderer), self.data),
            SorterButton(BLACK, 325, 25, 125, 25, 'Selection Sort', WHITE,
                         SelectionSorter(self.renderer), self.data),
            SorterButton(BLACK, 475, 25, 125, 25, 'Insertion Sort', WHITE,
                         InsertionSorter(self.renderer), self.data),
            SorterButton(BLACK, 625, 25, 125, 25, 'Merge Sort', WHITE,
                         MergeSorter(self.renderer), self.data),
            SorterButton(BLACK, 775, 25, 125, 25, 'Quick Sort', WHITE,
                         QuickSorter(self.renderer), self.data)
        ]
        self.event_handler.register_buttons(self.buttons)
        self.renderer.register_buttons(self.buttons)
        self.renderer.register_data(self.data)

    def run(self):
        while 1:
            # check if any new events have occured
            self.event_handler.handle_events()

            # render window
            self.renderer.refresh()
            self.renderer.render_buttons()
            self.renderer.render_data()

            # update display
            pygame.display.update()