package cz.cvut.fel.restauracefel.manager.manager_gui; import java.awt.BorderLayout; import java.awt.Container; import java.awt.Dimension; import java.awt.Toolkit; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.InputEvent; import java.awt.event.KeyEvent; import java.io.File; import java.io.FileNotFoundException; import javax.swing.JFileChooser; import javax.swing.JFrame; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.JOptionPane; import javax.swing.JScrollPane; import javax.swing.JSeparator; import javax.swing.KeyStroke; import cz.cvut.fel.restauracefel.library.service.Backup; import cz.cvut.fel.restauracefel.library.view.CommonViewController; /** * Hlavni trida grafickeho uzivatelskeho rozhrani. Stara se o vytvareni ostatnich * trid (lazy inicialization), predavani rizeni temto tridam atd. * * @author Jarda * @author Tomas Hnizdil */ public class MainFrame extends JFrame { private Container con = null; private JMenuBar menuBar = null; private JMenu menuFile = null; private JMenu menuEmployers = null; private JMenu menuMenu = null; private JMenu zalohovani = null; private JMenu menuHelp = null; private JMenuItem close = null; private JMenuItem insertEmp = null; private JMenuItem changePasswd = null; private JMenuItem createMenu = null; private JMenuItem createMenuItem = null; private JMenuItem createTable = null; private JMenuItem about = null; private JMenuItem vytvoritZalohu = null; private JScrollPane panel = null; private JScrollPane panelTable = null; private static AbstractForm form = null; private static UserForm userForm = null; private static MenuItemForm menuItemForm = null; private static MenuForm menuForm = null; private static TableDialog td = null; private static StatusBar statusBar = new StatusBar(); private static ManagerViewController view; private final CommonViewController commonViewController; private final MainFrame mainFrame; /** * Konstruktor tridy MainFrame. */ public MainFrame() { //User user, String[] prava view = ManagerViewController.getInstance(); commonViewController = CommonViewController.getInstance(); if (view.getLoggedUser() == null) { this.dispose(); } this.setTitle("Restaurace FEL - Manažerský modul, přihlášený uživatel: " + view.getLoggedUser().getUsername()); setDefaultCloseOperation(DISPOSE_ON_CLOSE); initComponents(); mainFrame = this; } /** * Metoda navraci referenci na instanci pro kterou byla zavolana. * * @return instance tridy JFrame */ private JFrame getThis() { return this; } /** * Metoda pro ukonceni cele aplikace. */ public void close() { this.dispose(); } /** * Tato metoda se stara o inicializaci a vytvoreni hlavniho menu (instance * tridy JMenuBar). Pro jednotlive polozky menu (JMenuItem) jsou zde definovane * posluchace (ActionListener). */ private void createMenu() { menuBar = new JMenuBar(); menuFile = new JMenu("Soubor"); menuEmployers = new JMenu("Zaměstnanci"); menuMenu = new JMenu("Menu"); menuHelp = new JMenu("Nápověda"); zalohovani = new JMenu("Zálohování"); close = new JMenuItem("Konec aplikace"); insertEmp = new JMenuItem("Evidence zaměstnanců"); changePasswd = new JMenuItem("Změnit heslo přihlášeného uživatele"); createMenu = new JMenuItem("Evidence menu"); createMenuItem = new JMenuItem("Evidence položek menu"); createTable = new JMenuItem("Evidence stolů"); vytvoritZalohu = new JMenuItem("Vytvořit zálohu dat"); about = new JMenuItem("O aplikaci"); close.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_K, InputEvent.CTRL_MASK)); close.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { int x = JOptionPane.showConfirmDialog(null, "Opravdu chcete ukončit běh programu?", "Konec", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE); if (x == 0) { close(); } } }); insertEmp.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Z, InputEvent.CTRL_MASK)); insertEmp.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { if (!contains("Editace zaměstnanců")) { if (!commonViewController.performBaseAdditionalLogin(mainFrame, "Editace zaměstnanců")) { return; } } if (userForm == null) { userForm = new UserForm(getThis(), statusBar); } else { userForm.refresh(); } form = userForm; con.removeAll(); panel.getViewport().add(userForm); con.add(panel, BorderLayout.NORTH); panelTable.getViewport().add(userForm.getTable()); con.add(panelTable, BorderLayout.CENTER); con.add(statusBar, BorderLayout.SOUTH); setVisible(true); } }); changePasswd.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_P, InputEvent.CTRL_MASK)); changePasswd.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { if (!contains("Změna uživatelských hesel")) { if (!commonViewController.performBaseAdditionalLogin(mainFrame, "Změna uživatelských hesel")) { return; } } ChangePasswordDialog chpd = new ChangePasswordDialog(getThis(), true); chpd.setVisible(true); if (form != null) { form.refresh(); } } }); createMenu.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N, InputEvent.CTRL_MASK)); createMenu.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { if (!contains("Tvorba menu")) { if (!commonViewController.performBaseAdditionalLogin(mainFrame, "Tvorba menu")) { return; } } if (menuForm == null) { menuForm = new MenuForm(getThis(), statusBar); } else { menuForm.refresh(); } form = menuForm; con.removeAll(); panel.getViewport().add(menuForm); con.add(panel, BorderLayout.NORTH); panelTable.getViewport().add(menuForm.getTable()); con.add(panelTable, BorderLayout.CENTER); con.add(statusBar, BorderLayout.SOUTH); setVisible(true); } }); createMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_R, InputEvent.CTRL_MASK)); createMenuItem.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { if (!contains("Tvorba položek menu")) { if (!commonViewController.performBaseAdditionalLogin(mainFrame, "Tvorba položek menu")) { return; } } if (menuItemForm == null) { menuItemForm = new MenuItemForm(getThis(), statusBar); } else { menuItemForm.refresh(); } form = menuItemForm; con.removeAll(); panel.getViewport().add(menuItemForm); con.add(panel, BorderLayout.NORTH); panelTable.getViewport().add(menuItemForm.getTable()); con.add(panelTable, BorderLayout.CENTER); con.add(statusBar, BorderLayout.SOUTH); setVisible(true); } }); createTable.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_E, InputEvent.CTRL_MASK)); createTable.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { if (!contains("Editace stolů")) { if (!commonViewController.performBaseAdditionalLogin(mainFrame, "Editace stolů")) { return; } } td = new TableDialog(getThis(), true); td.setVisible(true); } }); about.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_A, InputEvent.CTRL_MASK)); about.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { JOptionPane.showMessageDialog(getThis(), "Aplikace RestauraceFEL - Manažerský modul.", "O aplikaci", JOptionPane.INFORMATION_MESSAGE); } }); vytvoritZalohu.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { if (!contains("Zálohování dat")) { if (!commonViewController.performBaseAdditionalLogin(mainFrame, "Zálohování dat")) { return; } } JFileChooser fileChooser = new JFileChooser(); fileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); try { fileChooser.setCurrentDirectory(new File(".").getCanonicalFile()); File backingUp = new File("../Server/db_rest_fel"); int val = fileChooser.showDialog(getThis(), "Vyber"); if (val == JFileChooser.APPROVE_OPTION) { File where = fileChooser.getSelectedFile(); File dst = Backup.createRootFolder(backingUp, where); Backup.copyDirectory(backingUp, dst); JOptionPane.showMessageDialog(null, "Záloha byla vytvořena", "Záloha vytvořena", JOptionPane.INFORMATION_MESSAGE); } } catch (FileNotFoundException fnfe) { JOptionPane.showMessageDialog(null, fnfe.getMessage(), "Chyba", JOptionPane.ERROR_MESSAGE); return; } catch (Exception ex) { JOptionPane.showMessageDialog(null, "Nelze navázat spojení se serverem.", "Chyba komunikace", JOptionPane.ERROR_MESSAGE); return; } } }); menuFile.add(close); menuEmployers.add(insertEmp); menuEmployers.add(changePasswd); menuMenu.add(createMenu); menuMenu.add(createMenuItem); menuMenu.add(new JSeparator()); menuMenu.add(createTable); menuHelp.add(about); zalohovani.add(vytvoritZalohu); menuBar.add(menuFile); menuBar.add(menuEmployers); menuBar.add(menuMenu); menuBar.add(zalohovani); menuBar.add(menuHelp); this.setJMenuBar(menuBar); //setRights(); } private boolean contains(String name) { String[] rights = view.getRights(); if (rights == null) { return false; } for (int i = 0; i < rights.length; i++) { if (rights[i].equals(name)) { return true; } } return false; } /*private void setRights() { if (!contains("Editace zaměstnanců")) insertEmp.setEnabled(false); if (!contains("Změna uživatelských hesel")) changePasswd.setEnabled(false); if (!contains("Tvorba menu")) createMenu.setEnabled(false); if (!contains("Tvorba položek menu")) createMenuItem.setEnabled(false); if (!contains("Editace stolů")) createTable.setEnabled(false); if (!contains("Zálohování dat")) vytvoritZalohu.setEnabled(false); }*/ /** * Metoda inicializuje okno a jeho komponenty. Vola metodu pro vytvoreni * hlavniho menu. */ private void initComponents() { Dimension dim = Toolkit.getDefaultToolkit().getScreenSize(); int w = 650; int h = 550; int y = (int) ((dim.getHeight() - h) / 2); int x = (int) ((dim.getWidth() - w) / 2); this.setBounds(x, y, w, h); this.setVisible(true); this.setMinimumSize(new Dimension(400, 400)); con = this.getContentPane(); con.setLayout(new BorderLayout()); panel = new JScrollPane(); panelTable = new JScrollPane(); this.createMenu(); } public void showErrorMessage(String text, String title) { JOptionPane.showMessageDialog(this, text, title, JOptionPane.ERROR_MESSAGE); } }