view src/junotu/Window.java @ 103:7a3fd865654a

Spacing/Formatting/Indentation: Now using tabs exclusively, instead of a mix of tabs and spaces
author Fox
date Thu, 06 Apr 2023 01:44:10 +0200
parents 778130f1a4c4
children e4588b8a8ddc
line wrap: on
line source

package junotu;

import java.awt.Dimension;
import java.awt.Font;
import java.awt.event.WindowEvent;
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
import java.awt.event.ActionListener;

import javax.swing.KeyStroke;

import javax.swing.JFrame;
import javax.swing.JPanel;

import java.awt.CardLayout;
import java.awt.BorderLayout;
import javax.swing.BoxLayout;

import javax.swing.Box;
import javax.swing.JButton;
import javax.swing.JTextField;
import javax.swing.JTextArea;
import javax.swing.JScrollPane;

import junotu.TabEdit;
import junotu.TabSimpleSearch;
import junotu.TabBoard;
import junotu.TabCalendarBoard;

public class Window extends JFrame implements ActionListener {

	public static interface TabInterface {
		void onSwitchedTo();
	}

	public enum Tab {
		SEARCH,
		EDIT,
		BOARD,
		CALENDAR_BOARD,
	};

	private static final String[] TAB_NAMES = {
		"Search",
		"Edit",
		"Board",
		"Calendar board",
	};

	public final String KEY_ACTION_NEW_WINDOW = "new_window";

	public TabSimpleSearch  tabSearch;
	public TabEdit          tabEdit;
	public TabBoard         tabBoard;
	public TabCalendarBoard tabCalendarBoard;

	private JPanel tabs;
	private CardLayout tabsLayout;

	private Tab activeTab;

	public Window( Tab tab )
	{

		panelsCreate();
		tabSwitch( tab );

		this.setSize(512, 384);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setVisible(true);

	}

	@Override
	protected void processWindowEvent( WindowEvent e )
	{
		switch( e.getID() ) {
			case WindowEvent.WINDOW_CLOSING: {
				Main.windowClose(this);
			}
		}
	}

	@Override
	public void actionPerformed( ActionEvent e )
	{
		if( e.getActionCommand() == KEY_ACTION_NEW_WINDOW ) {
			Main.windowAdd( Tab.SEARCH );
		}
	}

	public void tabSwitch( Tab tab )
	{
		if( tab == activeTab ) {
			return;
		}
		tabsLayout.show(tabs, TAB_NAMES[tab.ordinal()]);
		Object tabObject = tabs.getComponent(tab.ordinal());
		if( tabObject instanceof TabInterface ) {
			TabInterface tabInterface = (TabInterface)tabObject;
			tabInterface.onSwitchedTo();
		}
		activeTab = tab;
		this.setTitle(preferredTitle(TAB_NAMES[activeTab.ordinal()]));
	}

	public Tab tabCurrent()
	{
		return activeTab;
	}

	public String preferredTitle( String tabStatus )
	{
		return Main.PROGRAM_NAME+" - "+tabStatus;
	}

	private void panelsCreate()
	{

		tabsLayout = new CardLayout();
		tabs = new JPanel( tabsLayout );

		tabSearch = new TabSimpleSearch();
		tabEdit = new TabEdit();
		tabBoard = new TabBoard();
		tabCalendarBoard = new TabCalendarBoard();

		this.add(tabs);
		tabs.add(tabSearch);
		tabs.add(tabEdit);
		tabs.add(tabBoard);
		tabs.add(tabCalendarBoard);
		tabsLayout.addLayoutComponent( tabSearch,        TAB_NAMES[Tab.SEARCH.ordinal()] );
		tabsLayout.addLayoutComponent( tabEdit,          TAB_NAMES[Tab.EDIT.ordinal()] );
		tabsLayout.addLayoutComponent( tabBoard,         TAB_NAMES[Tab.BOARD.ordinal()] );
		tabsLayout.addLayoutComponent( tabCalendarBoard, TAB_NAMES[Tab.CALENDAR_BOARD.ordinal()] );

		tabs.registerKeyboardAction(
			this,
			KEY_ACTION_NEW_WINDOW,
			KeyStroke.getKeyStroke( KeyEvent.VK_F2, 0 ),
			JPanel.WHEN_IN_FOCUSED_WINDOW
		);

	}

}