Package gui

Source Code of gui.GUI

package gui;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.BorderFactory;
import javax.swing.BoxLayout;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JPopupMenu;
import javax.swing.JScrollPane;
import javax.swing.JSplitPane;
import javax.swing.JTabbedPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.table.JTableHeader;
import javax.swing.table.TableColumn;

import skyproc.SPGlobal;
import edit.GRUPHolder;
import edit.SPDatabaseHolder;
import edit.jTES5Edit;


@SuppressWarnings("serial")
public class GUI extends JComponent {
 
  private JFrame mainFrame;
  private JSplitPane splitPane;
  private ModTreeTablePanel treeTable;
  private ModTreeTablePanel recordInformation;
  private JTextField formID_f;
  private JTextField editID_f;
  private JTextField name_f;
  private JPopupMenu popup;
 
  // Filtering stuff
  private       JComponent currentFilter = null;
 
  public GUI() {
   
     ////////////////////////////////////
    // 1. Create the components.
    JLabel     formID_l = new JLabel("FormID");
    JLabel     editID_l = new JLabel("EditorID");
    JLabel     name_l   = new JLabel("Name");
    formID_f = new JTextField(8);
    editID_f = new JTextField(30);
    name_f   = new JTextField(30);
   
    recordInformation = new ModTreeTablePanel(new RecordInformationTableModel(null));
    JTextArea help = new JTextArea();
    JScrollPane helpScroller = new JScrollPane(help);
    /////////////////////////////////////
   
     /////////////////////////////////////////////
    // 2. Set the properties of the components.
    JScrollPane recordInfoHolder = new JScrollPane(recordInformation);
    treeTable = new ModTreeTablePanel(new TreeTableModModel(new SPDatabaseHolder(SPGlobal.getDB())));
    treeTable.getTreeTable().getAdapter().addRecordSelectedListener();
    treeTable.getTreeTable().getAdapter().addObserver( recordInformation.getTreeTable() );
    //////////////////////////////////////////////
   

     //////////////////////////////////////////////////
    // 3. Create containers to hold the components.
   
    // leftPanel
    JPanel leftPanel = new JPanel();
   
    // Sort panel stuff
    JPanel filterPanel = new JPanel();
   
    mainFrame = new JFrame("jTES5Edit");
    splitPane = new JSplitPane();
    JTabbedPane tabs = new JTabbedPane();
    ///////////////////////////////////////////////////
   
     /////////////////////////////////////////////////////////////////////
    // 4. Specify the arrangement of components using a LayoutManager.
    mainFrame.setLayout(new BorderLayout());
    tabs.setTabPlacement(JTabbedPane.BOTTOM);
   
    // Filter panel
    filterPanel.setLayout( new FlowLayout() );
   
    // leftPanel
    leftPanel.setLayout(new BoxLayout(leftPanel, BoxLayout.Y_AXIS));
    //////////////////////////////////////////////////////////////////////
   
     /////////////////////////////////////
    // 5. Add components to containers.
   
    // filterPanel
    filterPanel.add(formID_l);
    filterPanel.add(formID_f);
    filterPanel.add(editID_l);
    filterPanel.add(editID_f);
    filterPanel.add(name_l);
    filterPanel.add(name_f);
    filterPanel.setBorder( BorderFactory.createTitledBorder("Filter") );
   
    // leftPanel
    leftPanel.add(filterPanel);
    leftPanel.add(treeTable);
   
    // tabs
    tabs.add(recordInfoHolder, "View");
    tabs.add(helpScroller, "Help");
   
    // splitPane
    splitPane.setLeftComponent(leftPanel);
    splitPane.setRightComponent(tabs);
   
    // mainFrame
    mainFrame.add(splitPane, BorderLayout.CENTER);
   
    //popup
    createPopupMenu();
    //////////////////////////////////////
   
   
     /////////////////////////////////////
    // 6. Organise the event handling.
    mainFrame.addWindowListener(new WindowAdapter() {
      public void windowClosing(WindowEvent e) {
        System.exit(0);
      }
    });
   
    treeTable.getTreeTable().setComponentPopupMenu(this.popup);
   
    treeTable.getTreeTable().getTableHeader().addMouseListener( new MouseAdapter() {
      public void mouseClicked(MouseEvent e) {
        sortByColumn(e);
      }
    });
   
    formID_f.addKeyListener( new KeyListener() {
      @Override
      public void keyPressed(KeyEvent e) {
        filter( e, "FormID", formID_f.getText().trim() );
      }
      @Override
      public void keyReleased(KeyEvent e){/*Do nothing*/}
      @Override
      public void keyTyped(KeyEvent e)   {/*Do nothing*/}
     
    });
    editID_f.addKeyListener( new KeyListener() {
      @Override
      public void keyPressed(KeyEvent e) {
        filter( e, "EditorID", editID_f.getText().trim() );
      }
      @Override
      public void keyReleased(KeyEvent e){/*Do nothing*/}
      @Override
      public void keyTyped(KeyEvent e)   {/*Do nothing*/}
    });
   
    name_f.addKeyListener( new KeyListener() {
      @Override
      public void keyPressed(KeyEvent e) {
        filter( e, "Name", name_f.getText().trim() );
      }
      @Override
      public void keyReleased(KeyEvent e){/*Do nothing*/}
      @Override
      public void keyTyped(KeyEvent e)   {/*Do nothing*/}
    });
    //////////////////////////////////////
   
   
     //////////////////////////
    // 7. Display the GUI.
    mainFrame.setExtendedState(JFrame.MAXIMIZED_BOTH);
    mainFrame.pack();
    mainFrame.setVisible(true)
    mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    ///////////////////////////
  }
 
  private void filter(KeyEvent e, String column, String filt) {
    if(e.getKeyCode() == KeyEvent.VK_ENTER)
    {
      // Set filters
      if( column.equals("FormID") ) {
        GRUPHolder.fType = GRUPHolder.FilterType.FORM;
      }
      else if( column.equals("EditorID") ) {
        GRUPHolder.fType = GRUPHolder.FilterType.EDID;
      }
      else if( column.equals("Name") ) {
        GRUPHolder.fType = GRUPHolder.FilterType.NAME;
      }
      else {
        GRUPHolder.fType = GRUPHolder.FilterType.NONE;
      }
      GRUPHolder.filter     = filt;
     
      // Set background colours
      if(currentFilter != null)
        currentFilter.setBackground(Color.WHITE);
      ((JComponent)e.getSource()).setBackground( Color.GREEN );
     
      // Update current filter
      currentFilter = (JComponent)e.getSource();
     
      // Refresh
      refreshTreeTable();
    }
  }
 
  private void sortByColumn(MouseEvent e) {
    JTableHeader src = (JTableHeader) e.getSource();
    int columnIndex = src.columnAtPoint( e.getPoint() );
   
    // Set column
    TableColumn column = src.getColumnModel().getColumn(columnIndex);
   
    Object columnHeader = column.getHeaderValue();
   
    if( columnHeader.toString().equals("FormID") ) {
      GRUPHolder.sType = GRUPHolder.SortType.FORM;
    }
    else if( columnHeader.toString().equals("EditorID") ) {
      GRUPHolder.sType = GRUPHolder.SortType.EDID;
    }
    else if( columnHeader.toString().equals("Name") ) {
      GRUPHolder.sType = GRUPHolder.SortType.NAME;
    }
   
    // Refresh
    refreshTreeTable();
  }
 
  /**
   * Creates the popup menu used by the checkboxes.
   */
  private void createPopupMenu() {
    JMenuItem menuItem;

    this.popup = new JPopupMenu();
    menuItem = new JMenuItem("Remove ITMs");
    menuItem.addActionListener(new ActionListener(){
      public void actionPerformed(ActionEvent e){
        jTES5Edit.removeITMs();
        refreshTreeTable();
      }
    });   
    this.popup.add(menuItem);
  }
 
  private void refreshTreeTable() {
   
    // Had to change the visibility of JTreeTable.setUp() to package private.
    // I'm not familiar enough with TreeTables to isolate exactly what causes
    // it to refresh. If you know, go right ahead and modify accordingly :)
    treeTable.getTreeTable().setUp( treeTable.getTreeTable().getAdapter().getTreeTableModel() );
   
    treeTable.getTreeTable().getAdapter().addRecordSelectedListener();
    treeTable.getTreeTable().getAdapter().addObserver(recordInformation.getTreeTable());
  }
}
TOP

Related Classes of gui.GUI

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.