Package com.mucommander.ui.dialog.startup

Source Code of com.mucommander.ui.dialog.startup.InitialSetupDialog

/*
* This file is part of muCommander, http://www.mucommander.com
* Copyright (C) 2002-2012 Maxence Bernard
*
* muCommander is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or
* (at your option) any later version.
*
* muCommander is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/

package com.mucommander.ui.dialog.startup;

import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Iterator;

import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.UIManager;

import com.mucommander.conf.MuConfigurations;
import com.mucommander.conf.MuPreference;
import com.mucommander.text.Translator;
import com.mucommander.ui.dialog.FocusDialog;
import com.mucommander.ui.layout.YBoxPanel;
import com.mucommander.ui.theme.Theme;
import com.mucommander.ui.theme.ThemeManager;

/**
* Dialog box allowing users to select misc. setup options for muCommander.
* @author Nicolas Rinaudo
*/
public class InitialSetupDialog extends FocusDialog implements ActionListener {
    // - Instance fields -----------------------------------------------------------------
    // -----------------------------------------------------------------------------------
    /** All available look and feels. */
    private UIManager.LookAndFeelInfo lfInfo[];
    /** Used to select a startup theme. */
    private JComboBox themeComboBox;
    /** Used to select a look and feel. */
    private JComboBox lfComboBox;
    /** Used to validate the user's choice. */
    private JButton   okButton;



    // - Initialisation ------------------------------------------------------------------
    // -----------------------------------------------------------------------------------
    /**
     * Creates the dialog's theme panel.
     * @return the dialog's theme panel.
     */
    private JPanel createThemePanel() {
  JPanel    themePanel;    // Theme panel.
  JPanel    tempPanel;     // Temporary panel used to hold the dialog's description.
        Iterator<Theme> themes;        // All available themes.
        Theme           theme;         // Currently analyzed theme.
        int             index;         // Index of the currently analyzed theme.
        int             selectedIndex; // Index of the current theme in the combo box.

  // Initialises the theme panel.
  themePanel = new YBoxPanel();
  themePanel.setAlignmentX(LEFT_ALIGNMENT);
        themePanel.setBorder(BorderFactory.createTitledBorder(Translator.get("prefs_dialog.themes")));

  // Adds the panel description.
  tempPanel = new JPanel(new FlowLayout(FlowLayout.LEFT));
  tempPanel.add(new JLabel(Translator.get("setup.theme") + ':'));
  themePanel.add(tempPanel);

  // Adds the theme combo box.
        themeComboBox = new JComboBox();
        themes        = ThemeManager.availableThemes();
  index         = 0;
  selectedIndex = 0;

  // Adds all themes to the combo box.
        while(themes.hasNext()) {
            themeComboBox.addItem(theme = themes.next());
            if(ThemeManager.isCurrentTheme(theme))
                selectedIndex = index;
            index++;
        }
  // Selects the current theme.
        themeComboBox.setSelectedIndex(selectedIndex);
  themeComboBox.addActionListener(this);
  themePanel.add(themeComboBox);

  return themePanel;
    }

    /**
     * Creates the dialog's look and feel panel.
     * @return the dialog's look and feel panel.
     */
    private JPanel createLookAndFeelPanel() {
  JPanel                    lfPanel;       // Look and feel panel.
  JPanel                    tempPanel;     // Temporary panel used to hold the dialog's description.
  int                       selectedIndex; // Index of the current look and feel in the list.
  String                    currentLf;     // Name of the current look&feel.
  String                    buffer;        // Buffer for look&feel names.

  // Initialises the theme panel.
  lfPanel = new YBoxPanel();
  lfPanel.setAlignmentX(LEFT_ALIGNMENT);
        lfPanel.setBorder(BorderFactory.createTitledBorder(Translator.get("prefs_dialog.look_and_feel")));

  // Adds the panel description.
  tempPanel = new JPanel(new FlowLayout(FlowLayout.LEFT));
  tempPanel.add(new JLabel(Translator.get("setup.look_and_feel") + ':'));
  lfPanel.add(tempPanel);

  // Initialises the l&f combo box.
  lfComboBox    = new JComboBox();
  lfInfo        = UIManager.getInstalledLookAndFeels();
        currentLf     = UIManager.getLookAndFeel().getName();
  selectedIndex = -1;
  // Goes through all available look&feels and selects the current one.
        for(int i = 0; i < lfInfo.length; i++) {
            buffer = lfInfo[i].getName();

            // Tries to select current L&F
            if(currentLf.equals(buffer))
                selectedIndex = i;
            // Under Mac OS X, Mac L&F is either reported as 'MacOS' or 'MacOS Adaptative'
            // so we need this test
            else if(selectedIndex == -1 && (currentLf.startsWith(buffer) || buffer.startsWith(currentLf)))
                selectedIndex = i;               
            lfComboBox.addItem(buffer);
        }

        // If no match, selects first one
        if(selectedIndex == -1)
            selectedIndex = 0;
        lfComboBox.setSelectedIndex(selectedIndex);
  lfComboBox.addActionListener(this);
  lfPanel.add(lfComboBox);

  return lfPanel;
    }

    /**
     * Creates the dialog's main panel.
     * @return the dialog's main panel.
     */
    private JPanel createMainPanel() {
  YBoxPanel mainPanel;
  JPanel    okPanel;

  mainPanel   = new YBoxPanel();
  mainPanel.add(new JLabel(Translator.get("setup.intro")));
  mainPanel.addSpace(10);
  mainPanel.add(createThemePanel());
  mainPanel.addSpace(10);
  mainPanel.add(createLookAndFeelPanel());
  mainPanel.addSpace(10);

  okPanel = new JPanel();
  okPanel.setLayout(new FlowLayout(FlowLayout.TRAILING));
  okPanel.add(okButton = new JButton(Translator.get("ok")));
  okButton.addActionListener(this);

  mainPanel.add(okPanel);

  return mainPanel;
    }

    /**
     * Creates a new InitialSetupDialog.
     * @param owner dialog's owner.
     */
    public InitialSetupDialog(Frame owner) {
  super(owner, Translator.get("setup.title"), owner);

  getContentPane().add(createMainPanel(), BorderLayout.CENTER);
  setResizable(false);
        setInitialFocusComponent(themeComboBox);
  setKeyboardDisposalEnabled(false);
        getRootPane().setDefaultButton(okButton);
    }


    // - ActionListener code -------------------------------------------------------------
    // -----------------------------------------------------------------------------------
    public void actionPerformed(ActionEvent e) {
  if(e.getSource() == themeComboBox)
      ThemeManager.setCurrentTheme((Theme)themeComboBox.getSelectedItem());
  else if(e.getSource() == lfComboBox)
    MuConfigurations.getPreferences().setVariable(MuPreference.LOOK_AND_FEEL, lfInfo[lfComboBox.getSelectedIndex()].getClassName());
  else if(e.getSource() == okButton) {
      ThemeManager.setCurrentTheme((Theme)themeComboBox.getSelectedItem());
      MuConfigurations.getPreferences().setVariable(MuPreference.LOOK_AND_FEEL, lfInfo[lfComboBox.getSelectedIndex()].getClassName());
      dispose();
  }
    }
}
TOP

Related Classes of com.mucommander.ui.dialog.startup.InitialSetupDialog

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.