@startuml controller

!theme plain
top to bottom direction
skinparam linetype ortho

class ButtonHoverAnimationListener {
  + ButtonHoverAnimationListener(boolean, JButton, Color, Font): 
  + actionPerformed(ActionEvent): void
}
class ButtonHoverListener {
  + ButtonHoverListener(ButtonHoverAnimator): 
  + mouseEntered(MouseEvent): void
  + mouseExited(MouseEvent): void
}
class GameModeController {
  + GameModeController(JFrame, MainMenu, JFrame): 
  - gameModeSelectionPanel: GameModeSelectionPanel
  - isDynamicSeries(String): boolean
  - addCustomSeedToDatabase(long): void
  - getSeedFromDatabaseByName(String): long
  + actionPerformed(ActionEvent): void
  - startGame(long): void
   gameModeBoard: Board
   gameModeSelectionPanel: GameModeSelectionPanel
}
class MainMenuButtonController {
  + MainMenuButtonController(MainMenu, JFrame, JFrame, JFrame, JFrame): 
  - adjustFrameDisplay(JFrame): void
  + actionPerformed(ActionEvent): void
  - openSettings(): void
  + startNewGame(): void
  + showHowToPlay(): void
  - configureFrame(JFrame): void
  - exitGame(): void
}
class MainMenuMouseController {
  + MainMenuMouseController(ButtonPanel): 
  - initMouseListeners(): void
  - addButtonHoverListener(JButton): void
}
class MainMenuResizeController {
  + MainMenuResizeController(MainMenu): 
  - addComponentListener(): void
}
class MainMenuResizeHandler {
  + MainMenuResizeHandler(MainMenu): 
  + componentResized(ComponentEvent): void
}
class TutorialController {
  + TutorialController(MainMenu, JFrame): 
  - tutorialPanel: TutorialPanel
   tutorialPanel: JPanel
}

MainMenuMouseController       -[#595959,dashed]->  ButtonHoverListener          : "«create»"
MainMenuResizeController     "1" *-[#595959,plain]-> "resizeHandler\n1" MainMenuResizeHandler        
MainMenuResizeController      -[#595959,dashed]->  MainMenuResizeHandler        : "«create»"
@enduml
