summaryrefslogtreecommitdiff
path: root/src/com/delwink/icebox/swing/MainWindow.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/delwink/icebox/swing/MainWindow.java')
-rw-r--r--src/com/delwink/icebox/swing/MainWindow.java219
1 files changed, 219 insertions, 0 deletions
diff --git a/src/com/delwink/icebox/swing/MainWindow.java b/src/com/delwink/icebox/swing/MainWindow.java
new file mode 100644
index 0000000..2c9eff9
--- /dev/null
+++ b/src/com/delwink/icebox/swing/MainWindow.java
@@ -0,0 +1,219 @@
+/*
+ * IceBox - inventory management software for restaurants
+ * Copyright (C) 2016 Delwink, LLC
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, version 3 only.
+ *
+ * This program 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 Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package com.delwink.icebox.swing;
+
+import com.delwink.icebox.Config;
+import com.delwink.icebox.DataDir;
+import com.delwink.icebox.Inventory;
+import com.delwink.icebox.lang.Lang;
+import com.delwink.icebox.table.MainWindowTableModel;
+import java.awt.BorderLayout;
+import java.awt.FlowLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import javax.swing.JButton;
+import javax.swing.JCheckBox;
+import javax.swing.JFrame;
+import javax.swing.JMenu;
+import javax.swing.JMenuBar;
+import javax.swing.JMenuItem;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JTable;
+import javax.swing.UIManager;
+import javax.swing.UnsupportedLookAndFeelException;
+import javax.xml.parsers.ParserConfigurationException;
+import org.xml.sax.SAXException;
+
+/**
+ * The main IceBox hub window.
+ * @author David McMackins II
+ */
+public class MainWindow extends JFrame {
+ protected final Inventory INVENTORY;
+ protected final JButton ITEMS_BUTTON, ORDERS_BUTTON, UPDATE_BUTTON;
+ protected final JCheckBox REORDER_ONLY;
+ protected final JMenu REPORT_MENU, SESSION_MENU;
+ protected final JMenuBar MENU_BAR;
+ protected final JTable INVENTORY_TABLE;
+
+ /**
+ * Creates a new main IceBox window.
+ * @param inventory The inventory tracked in this window.
+ */
+ public MainWindow(Inventory inventory) {
+ super(Lang.get("MainWindow.title"));
+ INVENTORY = inventory;
+
+ // menus
+ MENU_BAR = new JMenuBar();
+ setJMenuBar(MENU_BAR);
+
+ SESSION_MENU = new JMenu(Lang.get("MainWindow.SessionMenu.name"));
+ MENU_BAR.add(SESSION_MENU);
+
+ JMenuItem settings = new JMenuItem(Lang.get("Setting.dialogTitle"));
+ SESSION_MENU.add(settings);
+ settings.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ SettingsDialog sd = new SettingsDialog(MainWindow.this);
+ sd.setVisible(true);
+ }
+ });
+
+ SESSION_MENU.addSeparator();
+
+ JMenuItem quit = new JMenuItem(Lang.get("MainWindow.quit"));
+ SESSION_MENU.add(quit);
+ quit.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ MainWindow.this.dispatchEvent(new WindowEvent(MainWindow.this, WindowEvent.WINDOW_CLOSING));
+ }
+ });
+
+ REPORT_MENU = new JMenu(Lang.get("MainWindow.ReportMenu.name"));
+ MENU_BAR.add(REPORT_MENU);
+
+ JMenuItem soldVsWaste = new JMenuItem(Lang.get("Report.soldVsWaste"));
+ REPORT_MENU.add(soldVsWaste);
+ soldVsWaste.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent ae) {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+ });
+
+ // top section
+ REORDER_ONLY = new JCheckBox(Lang.get("MainWindow.reorderOnly"));
+ REORDER_ONLY.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+ });
+
+ JPanel optionBox = new JPanel(new FlowLayout(FlowLayout.CENTER));
+ optionBox.add(REORDER_ONLY);
+
+ // center section
+ INVENTORY_TABLE = new JTable(new MainWindowTableModel(INVENTORY));
+ JScrollPane inventoryBox = new JScrollPane(INVENTORY_TABLE);
+
+ // bottom section
+ ITEMS_BUTTON = new JButton(Lang.get("MainWindow.items"));
+ ITEMS_BUTTON.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent ae) {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+ });
+
+ ORDERS_BUTTON = new JButton(Lang.get("MainWindow.orders"));
+ ORDERS_BUTTON.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent ae) {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+ });
+
+ UPDATE_BUTTON = new JButton(Lang.get("MainWindow.update"));
+ UPDATE_BUTTON.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent ae) {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+ });
+
+ JPanel buttonBox = new JPanel(new FlowLayout(FlowLayout.CENTER));
+ buttonBox.add(ITEMS_BUTTON);
+ buttonBox.add(ORDERS_BUTTON);
+ buttonBox.add(UPDATE_BUTTON);
+
+ // big picture
+ setLayout(new BorderLayout());
+ add(optionBox, BorderLayout.NORTH);
+ add(inventoryBox, BorderLayout.CENTER);
+ add(buttonBox, BorderLayout.SOUTH);
+
+ // window properties
+ setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+ addWindowListener(new WindowAdapter() {
+ @Override
+ public void windowClosing(WindowEvent we) {
+ if (isMaximized()) {
+ Config.put("mainwindow.maximized", "y");
+ } else {
+ Config.put("mainwindow.maximized", "n");
+ Config.put("mainwindow.width", String.valueOf(getWidth()));
+ Config.put("mainwindow.height", String.valueOf(getHeight()));
+ }
+ }
+ });
+
+ setSize(Integer.parseInt(Config.get("mainwindow.width")),
+ Integer.parseInt(Config.get("mainwindow.height")));
+
+ if (Config.get("mainwindow.maximized").equals("y"))
+ setMaximized();
+ }
+
+ public final void setMaximized() {
+ setExtendedState(getExtendedState() | MAXIMIZED_BOTH);
+ }
+
+ public final boolean isMaximized() {
+ return (getExtendedState() & MAXIMIZED_BOTH) == MAXIMIZED_BOTH;
+ }
+
+ public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException {
+ try {
+ Lang.setLang(Config.get("lang") + ".lang");
+ } catch (FileNotFoundException ignored) {
+ }
+
+ if (Config.get("setlaf").equals("y")) {
+ try {
+ UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
+ } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
+ System.err.println("Failed to set look and feel");
+ }
+ }
+
+ Inventory inventory;
+ File inventoryFile = DataDir.INVENTORY_FILE;
+ if (inventoryFile.exists()) {
+ try (FileInputStream stream = new FileInputStream(inventoryFile)) {
+ inventory = new Inventory(stream);
+ }
+ } else {
+ inventory = new Inventory();
+ }
+
+ MainWindow mainWindow = new MainWindow(inventory);
+ mainWindow.setVisible(true);
+ }
+}