Package gui

Source Code of gui.StarterGUI

package gui;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import java.util.ArrayList;

import javax.swing.*;


import skyproc.Mod;
import skyproc.ModListing;
import skyproc.SPGlobal;
import skyproc.SPImporter;


public class StarterGUI extends JComponent {

  private static final long  serialVersionUID = 6079941785947964841L;
  private static final Color background       = new Color(0x3591EE);
 
  private JFrame     mainFrame;
  private JPanel     checkBoxArea;
  private JPopupMenu popup;

  public StarterGUI() {   

    try {
      UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
    }
    catch (Exception e1) {
      e1.printStackTrace();
    }

    // Create main window frame
    mainFrame = new JFrame();
 
   
     /////////////////////////////////
    // Create "OK" button
    JButton okButton = new JButton("OK");
    okButton.setAlignmentX(Component.CENTER_ALIGNMENT);
    okButton.setPreferredSize( new Dimension(70, 30) );
    okButton.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e){       
        loadMods();
      }
    });
    //////////////////////////////////
   
   
     /////////////////////////////////
    // Create area with all mods
    checkBoxArea = new JPanel();
    GridLayout gl = new GridLayout(1,1);
    gl.setVgap(0);
    checkBoxArea.setLayout(gl);
    checkBoxArea.setBackground(Color.WHITE);
   
    // Create context menu for checkBoxArea
    createPopupMenu();
    //////////////////////////////////

   
     ////////////////////////////////////////////////////
    // Attempt to populate checkBoxArea
    try {

      boolean checked = false;
      ArrayList<ModListing> modList = SPImporter.getLoadOrderModList();
      ((GridLayout) checkBoxArea.getLayout()).setRows(modList.size());

      for(ModListing mod : SPImporter.getLoadOrderModList()) {
        checked = false;
        for(ModListing activeMod : SPImporter.getActiveModList()) {

          if(mod.equals(activeMod)) {
            checked = true;

          }
        }

        checkBoxArea.add(createCheckBox(mod.print(), checked));

      }

    } catch(Exception e) {
      System.out.println(e);
    }
    /////////////////////////////////////////////////////

   
     //////////////////////////////////////////////
    // Create scroll pane for checkBoxArea
    JScrollPane scroller = new JScrollPane(checkBoxArea);
    scroller.setPreferredSize(new Dimension(300, 600));
    scroller.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
    scroller.getVerticalScrollBar().setUnitIncrement(10);
    scroller.getVerticalScrollBar().setBlockIncrement(30);   // Not entirely sure what blockIncrement is but it sounds
                                // bigger than unit so I set it to 3x its value.
    ///////////////////////////////////////////////

   
     ///////////////////////////////////
    // Add components to mainFrame
    mainFrame.getContentPane().setLayout(new BoxLayout(mainFrame.getContentPane(), BoxLayout.Y_AXIS));
    mainFrame.add(scroller);
    mainFrame.add(okButton);
    ////////////////////////////////////
   
     ///////////////////////////////////
    // Set mainFrame properties
    mainFrame.setTitle("Master/Plugin Selection");
    mainFrame.setResizable(false);   
    mainFrame.pack();
    mainFrame.setLocationRelativeTo(null);
    mainFrame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    mainFrame.setVisible(true);
    ////////////////////////////////////
  }

  /**
   * Loads the selected mods, disposes the starting frame and
   * initializes the main GUI.
   */
  private void loadMods() {

    ArrayList<ModListing> mods = new ArrayList<ModListing>();

    for(Component box : checkBoxArea.getComponents()) {
      if(((AbstractButton) box).isSelected()) {
        mods.add(new ModListing(((AbstractButton) box).getText()));
      }
    }
   
    mainFrame.dispose();
   
    SPImporter importer = new SPImporter();
    importer.importMods(mods);
   
    new GUI();
  }

  /**
   * Creates the popup menu used by the checkboxes.
   */
  private void createPopupMenu() {
    JMenuItem menuItem;

    this.popup = new JPopupMenu();
    menuItem = new JMenuItem("Select All");
    menuItem.addActionListener(new ActionListener(){
      public void actionPerformed(ActionEvent e){
        selectAll();       
      }
    });   
    this.popup.add(menuItem);

    menuItem = new JMenuItem("Select None");
    menuItem.addActionListener(new ActionListener(){
      public void actionPerformed(ActionEvent e){
        selectNone();
      }
    });   
    this.popup.add(menuItem);

    menuItem = new JMenuItem("Invert Selection");
    menuItem.addActionListener(new ActionListener(){
      public void actionPerformed(ActionEvent e){       
        invertSelection();
      }
    });   
    this.popup.add(menuItem);
  }

  private void selectAll() {
    for( Component box : checkBoxArea.getComponents() ) {
      if( !((AbstractButton) box).isSelected() ) {
        ((AbstractButton) box).setSelected(true);
      }
    }
  }
  private void selectNone() {
    for( Component box : checkBoxArea.getComponents() ) {
      if( ((AbstractButton) box).isSelected() ) {
        ((AbstractButton) box).setSelected(false);
      }
    }
  }
  private void invertSelection() {
    for( Component box : checkBoxArea.getComponents() ) {
      AbstractButton ab = (AbstractButton)box; // To make the next line cleaner.
      ab.setSelected( !ab.isSelected() );
    }
  }

  /**
   * Creates the check boxes that represent the mods to be loaded
   *
   * @param modName The name of the mod.
   * @param checked Whether or not the mod is checked.
   * @return The created checkBox.
   */
  private JCheckBox createCheckBox(String modName, boolean checked) {

    JCheckBox check = new JCheckBox(modName, checked);
    check.setBackground(Color.WHITE);
    check.setComponentPopupMenu(this.popup);
    check.setPreferredSize( new Dimension(255, 17) );
    check.addFocusListener( new FocusListener() {
      @Override
      public void focusGained(FocusEvent e) {
        ((Component)e.getSource()).setBackground(StarterGUI.background);
      }
      @Override
      public void focusLost(FocusEvent e) {
        ((Component)e.getSource()).setBackground(Color.WHITE);
      }
    });
    return check;
  }
}
TOP

Related Classes of gui.StarterGUI

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.