/* (non-Javadoc)
   * @see forge.control.home.IControlSubmenu#update()
   */
  @SuppressWarnings("serial")
  @Override
  public void initialize() {

    this.view = VSubmenuPreferences.SINGLETON_INSTANCE;
    this.prefs = FModel.getPreferences();

    // This updates variable right now and is not standard
    view.getCbDevMode()
        .addItemListener(
            new ItemListener() {
              @Override
              public void itemStateChanged(final ItemEvent arg0) {
                if (updating) {
                  return;
                }

                final boolean toggle = view.getCbDevMode().isSelected();
                prefs.setPref(FPref.DEV_MODE_ENABLED, String.valueOf(toggle));
                ForgePreferences.DEV_MODE = toggle;
                prefs.save();
              }
            });

    // This updates background track immediately and is not standard
    view.getCbEnableMusic()
        .addItemListener(
            new ItemListener() {
              @Override
              public void itemStateChanged(final ItemEvent arg0) {
                if (updating) {
                  return;
                }

                final boolean toggle = view.getCbEnableMusic().isSelected();
                prefs.setPref(FPref.UI_ENABLE_MUSIC, String.valueOf(toggle));
                prefs.save();
                SoundSystem.instance.changeBackgroundTrack();
              }
            });

    lstControls.clear(); // just in case
    lstControls.add(Pair.of(view.getCbAnte(), FPref.UI_ANTE));
    lstControls.add(Pair.of(view.getCbAnteMatchRarity(), FPref.UI_ANTE_MATCH_RARITY));
    lstControls.add(Pair.of(view.getCbManaBurn(), FPref.UI_MANABURN));
    lstControls.add(Pair.of(view.getCbScaleLarger(), FPref.UI_SCALE_LARGER));
    lstControls.add(Pair.of(view.getCbLargeCardViewers(), FPref.UI_LARGE_CARD_VIEWERS));
    lstControls.add(Pair.of(view.getCbRandomArtInPools(), FPref.UI_RANDOM_ART_IN_POOLS));
    lstControls.add(Pair.of(view.getCbEnforceDeckLegality(), FPref.ENFORCE_DECK_LEGALITY));
    lstControls.add(Pair.of(view.getCbCloneImgSource(), FPref.UI_CLONE_MODE_SOURCE));
    lstControls.add(Pair.of(view.getCbRemoveSmall(), FPref.DECKGEN_NOSMALL));
    lstControls.add(Pair.of(view.getCbRemoveArtifacts(), FPref.DECKGEN_ARTIFACTS));
    lstControls.add(Pair.of(view.getCbSingletons(), FPref.DECKGEN_SINGLETONS));
    lstControls.add(Pair.of(view.getCbEnableAICheats(), FPref.UI_ENABLE_AI_CHEATS));
    lstControls.add(Pair.of(view.getCbDisplayFoil(), FPref.UI_OVERLAY_FOIL_EFFECT));
    lstControls.add(Pair.of(view.getCbRandomFoil(), FPref.UI_RANDOM_FOIL));
    lstControls.add(Pair.of(view.getCbEnableSounds(), FPref.UI_ENABLE_SOUNDS));
    lstControls.add(Pair.of(view.getCbAltSoundSystem(), FPref.UI_ALT_SOUND_SYSTEM));
    lstControls.add(Pair.of(view.getCbUiForTouchScreen(), FPref.UI_FOR_TOUCHSCREN));
    lstControls.add(Pair.of(view.getCbCompactMainMenu(), FPref.UI_COMPACT_MAIN_MENU));
    lstControls.add(Pair.of(view.getCbPromptFreeBlocks(), FPref.MATCHPREF_PROMPT_FREE_BLOCKS));
    lstControls.add(Pair.of(view.getCbPauseWhileMinimized(), FPref.UI_PAUSE_WHILE_MINIMIZED));
    lstControls.add(Pair.of(view.getCbWorkshopSyntax(), FPref.DEV_WORKSHOP_SYNTAX));

    lstControls.add(Pair.of(view.getCbCompactPrompt(), FPref.UI_COMPACT_PROMPT));
    lstControls.add(Pair.of(view.getCbHideReminderText(), FPref.UI_HIDE_REMINDER_TEXT));
    lstControls.add(Pair.of(view.getCbOpenPacksIndiv(), FPref.UI_OPEN_PACKS_INDIV));
    lstControls.add(Pair.of(view.getCbTokensInSeparateRow(), FPref.UI_TOKENS_IN_SEPARATE_ROW));
    lstControls.add(Pair.of(view.getCbStackCreatures(), FPref.UI_STACK_CREATURES));
    lstControls.add(Pair.of(view.getCbManaLostPrompt(), FPref.UI_MANA_LOST_PROMPT));

    lstControls.add(
        Pair.of(view.getCbFilterLandsByColorId(), FPref.UI_FILTER_LANDS_BY_COLOR_IDENTITY));

    for (final Pair<JCheckBox, FPref> kv : lstControls) {
      kv.getKey()
          .addItemListener(
              new ItemListener() {
                @Override
                public void itemStateChanged(final ItemEvent arg0) {
                  if (updating) {
                    return;
                  }

                  prefs.setPref(kv.getValue(), String.valueOf(kv.getKey().isSelected()));
                  prefs.save();
                }
              });
    }

    view.getBtnReset()
        .setCommand(
            new UiCommand() {
              @Override
              public void run() {
                CSubmenuPreferences.this.resetForgeSettingsToDefault();
              }
            });

    view.getBtnDeleteEditorUI()
        .setCommand(
            new UiCommand() {
              @Override
              public void run() {
                CSubmenuPreferences.this.resetDeckEditorLayout();
              }
            });

    view.getBtnDeleteWorkshopUI()
        .setCommand(
            new UiCommand() {
              @Override
              public void run() {
                CSubmenuPreferences.this.resetWorkshopLayout();
              }
            });

    view.getBtnDeleteMatchUI()
        .setCommand(
            new UiCommand() {
              @Override
              public void run() {
                CSubmenuPreferences.this.resetMatchScreenLayout();
              }
            });

    view.getBtnUserProfileUI()
        .setCommand(
            new UiCommand() {
              @Override
              public void run() {
                CSubmenuPreferences.this.openUserProfileDirectory();
              }
            });

    view.getBtnContentDirectoryUI()
        .setCommand(
            new UiCommand() {
              @Override
              public void run() {
                CSubmenuPreferences.this.openContentDirectory();
              }
            });

    initializeGameLogVerbosityComboBox();
    initializeCloseActionComboBox();
    initializeAiProfilesComboBox();
    initializeColorIdentityCombobox();
    initializePlayerNameButton();
  }