package cz.cvut.fel.restauracefel.restauracefel.gui; import cz.cvut.fel.restauracefel.library.service.LocalizationManager; import cz.cvut.fel.restauracefel.library.view.CommonViewController; import cz.cvut.fel.restauracefel.restauracefel.main.Main; 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.io.FileNotFoundException; import javax.swing.JFrame; import javax.swing.JOptionPane; /** * Hlavni trida grafickeho uzivatelskeho rozhrani. Stara se o vytvareni ostatnich * trid (lazy inicialization), predavani rizeni temto tridam atd. * * @author Tomas Hnizdil */ public class MainFrame extends JFrame { private Container con = null; private ToolBar toolBar = null; private BackgroundPanel panel = null; private static LogingForm lf = null; private static SettingsDialog sd = null; private static StatusBar statusBar = new StatusBar(); private ViewController view; /** * Konstruktor tridy MainFrame. */ public MainFrame() { LocalizationManager.getInstance().localizeFrame(Main.DEFAULT_BUNDLE_BASE_NAME, "MainFrame", this); initComponents(); setVisible(true); view = ViewController.getInstance(); } private void showLogingForm() { this.setTitle("Přihlášení do systému Restaurace FEL"); AbstractForm af = new LogingForm(this, statusBar); changeForm(af, false); } private void showRightForm() { if (!view.hasRights("Změna přístupových práv")) { if (!CommonViewController.getInstance().performAdditionalLogin(this, "Změna přístupových práv")) { return; } } try { sd = new SettingsDialog(this, true); } catch (FileNotFoundException ex) { view.configFileError(); } AbstractForm af = new AssignRightForm(this, statusBar); changeForm(af, true); } private void showLocalization() { new LocalizationDialog(this, true).setVisible(true); } private void showSettings() { if (!view.hasRights("Nastavení klienta")) { if (!CommonViewController.getInstance().performAdditionalLogin(this, "Nastavení klienta")) { return; } } try { sd = new SettingsDialog(this, true); } catch (FileNotFoundException ex) { view.configFileError(); } sd.setVisible(true); changeForm(null, true); } private void changeForm(AbstractForm af, boolean refresh) { con.removeAll(); panel.getViewport().add(af); panel.repaint(); panel.validate(); con.validate(); con.repaint(); refreshWindowLayout(refresh); } /** * Metoda pro prirazeni listeneru jednotlivym tlacitkam v toolbaru */ private void createToolBar() { toolBar.logout.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { view.logout(); showLogingForm(); } }); toolBar.changeRights.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { showRightForm(); } }); toolBar.settings.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { showSettings(); } }); toolBar.localization.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { showLocalization(); } }); toolBar.cashModule.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { view.showPokladna(); } }); toolBar.managerAndStorageModule.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { view.showManager(); } }); toolBar.storageModule.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { view.showStorage(); } }); toolBar.smenyModule.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { view.showSmeny(); } }); refreshWindowLayout(true); } /** * Metoda obnovujici design. Pridava do JFrame jednotlive panely. * * @param tb ma-li se zobrazit toolbar (pri logovani se nezobrazuje) */ private void refreshWindowLayout(boolean tb) { if (tb) { con.add(toolBar, BorderLayout.NORTH); } con.add(panel, BorderLayout.CENTER); con.add(statusBar, BorderLayout.SOUTH); setVisible(true); } /** * Metoda pro ukonceni cele aplikace. */ public void close() { System.exit(0); } /** * Metoda inicializuje okno a jeho komponenty. Vola metodu pro vytvoreni * hlavniho menu. */ private void initComponents() { this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Dimension dim = Toolkit.getDefaultToolkit().getScreenSize(); int w = (int) dim.getWidth(); int h = (int) dim.getHeight(); int y = (int) ((dim.getHeight() - h) / 2); int x = (int) ((dim.getWidth() - w) / 2); this.setBounds(x, y, w, h); this.setMinimumSize(new Dimension(1280, 720)); con = this.getContentPane(); con.setLayout(new BorderLayout()); panel = new BackgroundPanel(); lf = new LogingForm(this, null); con.removeAll(); panel.getViewport().add(lf); con.add(panel, BorderLayout.NORTH); con.add(statusBar, BorderLayout.SOUTH); } /** * Metoda volana pri uspesnem prihlaseni z LogingForm. Zobrazuje hlavní nabýdku přihlášeného uživatele * * @param username uživatelské jméno přihlášeného uivatele */ public void showUserGate(String username) { toolBar = new ToolBar(); this.setTitle("Restaurace FEL - Přihlášený uživatel: " + username); this.createToolBar(); } public void showErrorMessage(String text, String title) { JOptionPane.showMessageDialog(this, text, title, JOptionPane.ERROR_MESSAGE); } }