MicroColModule.java

package org.microcol.gui;

import org.microcol.gui.event.AboutGameEventController;
import org.microcol.gui.event.AboutGameListenerImpl;
import org.microcol.gui.event.CenterViewController;
import org.microcol.gui.event.ChangeLanguageController;
import org.microcol.gui.event.ChangeLanguageListenerPreferences;
import org.microcol.gui.event.ChangeLanguageListenerText;
import org.microcol.gui.event.DebugRequestController;
import org.microcol.gui.event.EventInitializer;
import org.microcol.gui.event.ExitGameController;
import org.microcol.gui.event.FocusedTileController;
import org.microcol.gui.event.GameController;
import org.microcol.gui.event.GameFinishedController;
import org.microcol.gui.event.KeyController;
import org.microcol.gui.event.MoveUnitController;
import org.microcol.gui.event.NewGameController;
import org.microcol.gui.event.NextTurnController;
import org.microcol.gui.event.ShowGridController;
import org.microcol.gui.event.ShowGridListenerPreferences;
import org.microcol.gui.event.StatusBarMessageController;
import org.microcol.gui.event.TurnStartedController;
import org.microcol.gui.event.VolumeChangeController;
import org.microcol.gui.event.VolumeChangedListenerPreferences;
import org.microcol.gui.panelview.GamePanelPresenter;
import org.microcol.gui.panelview.GamePanelView;

import com.google.inject.AbstractModule;
import com.google.inject.Provides;
import com.google.inject.Singleton;

public class MicroColModule extends AbstractModule {

	@Override
	protected void configure() {

		bind(StatusBarMessageController.class).in(Singleton.class);

		bind(PathPlanning.class).in(Singleton.class);
		bind(ImageProvider.class).in(Singleton.class);
		bind(ViewUtil.class).in(Singleton.class);
		bind(LocalizationHelper.class).in(Singleton.class);

		/**
		 * Event controllers.
		 */
		bind(ApplicationController.class).in(Singleton.class);
		bind(MoveUnitController.class).in(Singleton.class);
		bind(KeyController.class).in(Singleton.class);
		bind(NextTurnController.class).in(Singleton.class);
		bind(FocusedTileController.class).in(Singleton.class);
		bind(AboutGameEventController.class).in(Singleton.class);
		bind(ChangeLanguageController.class).in(Singleton.class);
		bind(NewGameController.class).in(Singleton.class);
		bind(GameController.class).in(Singleton.class);
		bind(TurnStartedController.class).in(Singleton.class);
		bind(VolumeChangeController.class).in(Singleton.class);
		bind(ShowGridController.class).in(Singleton.class);
		bind(CenterViewController.class).in(Singleton.class);
		bind(ExitGameController.class).in(Singleton.class);
		bind(DebugRequestController.class).in(Singleton.class);
		bind(GameFinishedController.class).in(Singleton.class);

		/**
		 * Initialize MVP classes
		 */
		bind(MainFrameView.class).in(Singleton.class);
		bind(MainFramePresenter.Display.class).to(MainFrameView.class).in(Singleton.class);
		bind(MainFramePresenter.class).in(Singleton.class);

		bind(GamePanelView.class).in(Singleton.class);
		bind(GamePanelPresenter.Display.class).to(GamePanelView.class).in(Singleton.class);
		bind(GamePanelPresenter.class).asEagerSingleton();

		bind(StartPanelView.class).in(Singleton.class);
		bind(StartPanelPresenter.Display.class).to(StartPanelView.class).in(Singleton.class);
		bind(StartPanelPresenter.class).asEagerSingleton();
		
		bind(StatusBarView.class).in(Singleton.class);
		bind(StatusBarPresenter.Display.class).to(StatusBarView.class).in(Singleton.class);
		bind(StatusBarPresenter.class).asEagerSingleton();

		bind(MainMenuView.class).in(Singleton.class);
		bind(MainMenuPresenter.Display.class).to(MainMenuView.class).in(Singleton.class);
		bind(MainMenuPresenter.class).asEagerSingleton();

		bind(RightPanelView.class).in(Singleton.class);
		bind(RightPanelPresenter.Display.class).to(RightPanelView.class).in(Singleton.class);
		bind(RightPanelPresenter.class).asEagerSingleton();

		bind(UnitsPanel.class).asEagerSingleton();

		/**
		 * Load events manually
		 */
		bind(AboutGameListenerImpl.class).asEagerSingleton();
		bind(ChangeLanguageListenerPreferences.class).asEagerSingleton();
		bind(ChangeLanguageListenerText.class).asEagerSingleton();
		bind(VolumeChangedListenerPreferences.class).asEagerSingleton();
		bind(ShowGridListenerPreferences.class).asEagerSingleton();

		bind(MusicPlayer.class).in(Singleton.class);
		bind(MusicController.class).in(Singleton.class);

		bind(EventInitializer.class).in(Singleton.class);
	}

	@Provides
	@Singleton
	Text makeText(final GamePreferences gamePreferences) {
		return new Text(gamePreferences.getLanguage());
	}

}