diff --git a/.gitignore b/.gitignore index 2c6eb3893..3f380c3c9 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,6 @@ /.metadata /robots/.settings /robots/bin -eclipse.bat \ No newline at end of file +eclipse.bat +/.idea +/out/ \ No newline at end of file diff --git a/robots/.classpath b/robots/.classpath deleted file mode 100644 index fceb4801b..000000000 --- a/robots/.classpath +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/robots/.gitignore b/robots/.gitignore deleted file mode 100644 index 2757ffa76..000000000 --- a/robots/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -/bin/ -/.settings/ diff --git a/robots/.project b/robots/.project deleted file mode 100644 index 78e165663..000000000 --- a/robots/.project +++ /dev/null @@ -1,17 +0,0 @@ - - - Robots - - - - - - org.eclipse.jdt.core.javabuilder - - - - - - org.eclipse.jdt.core.javanature - - diff --git a/robots/src/gui/MainApplicationFrame.java b/robots/src/gui/MainApplicationFrame.java deleted file mode 100644 index 62e943ee1..000000000 --- a/robots/src/gui/MainApplicationFrame.java +++ /dev/null @@ -1,156 +0,0 @@ -package gui; - -import java.awt.Dimension; -import java.awt.Toolkit; -import java.awt.event.KeyEvent; - -import javax.swing.JDesktopPane; -import javax.swing.JFrame; -import javax.swing.JInternalFrame; -import javax.swing.JMenu; -import javax.swing.JMenuBar; -import javax.swing.JMenuItem; -import javax.swing.SwingUtilities; -import javax.swing.UIManager; -import javax.swing.UnsupportedLookAndFeelException; - -import log.Logger; - -/** - * Что требуется сделать: - * 1. Метод создания меню перегружен функционалом и трудно читается. - * Следует разделить его на серию более простых методов (или вообще выделить отдельный класс). - * - */ -public class MainApplicationFrame extends JFrame -{ - private final JDesktopPane desktopPane = new JDesktopPane(); - - public MainApplicationFrame() { - //Make the big window be indented 50 pixels from each edge - //of the screen. - int inset = 50; - Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); - setBounds(inset, inset, - screenSize.width - inset*2, - screenSize.height - inset*2); - - setContentPane(desktopPane); - - - LogWindow logWindow = createLogWindow(); - addWindow(logWindow); - - GameWindow gameWindow = new GameWindow(); - gameWindow.setSize(400, 400); - addWindow(gameWindow); - - setJMenuBar(generateMenuBar()); - setDefaultCloseOperation(EXIT_ON_CLOSE); - } - - protected LogWindow createLogWindow() - { - LogWindow logWindow = new LogWindow(Logger.getDefaultLogSource()); - logWindow.setLocation(10,10); - logWindow.setSize(300, 800); - setMinimumSize(logWindow.getSize()); - logWindow.pack(); - Logger.debug("Протокол работает"); - return logWindow; - } - - protected void addWindow(JInternalFrame frame) - { - desktopPane.add(frame); - frame.setVisible(true); - } - -// protected JMenuBar createMenuBar() { -// JMenuBar menuBar = new JMenuBar(); -// -// //Set up the lone menu. -// JMenu menu = new JMenu("Document"); -// menu.setMnemonic(KeyEvent.VK_D); -// menuBar.add(menu); -// -// //Set up the first menu item. -// JMenuItem menuItem = new JMenuItem("New"); -// menuItem.setMnemonic(KeyEvent.VK_N); -// menuItem.setAccelerator(KeyStroke.getKeyStroke( -// KeyEvent.VK_N, ActionEvent.ALT_MASK)); -// menuItem.setActionCommand("new"); -//// menuItem.addActionListener(this); -// menu.add(menuItem); -// -// //Set up the second menu item. -// menuItem = new JMenuItem("Quit"); -// menuItem.setMnemonic(KeyEvent.VK_Q); -// menuItem.setAccelerator(KeyStroke.getKeyStroke( -// KeyEvent.VK_Q, ActionEvent.ALT_MASK)); -// menuItem.setActionCommand("quit"); -//// menuItem.addActionListener(this); -// menu.add(menuItem); -// -// return menuBar; -// } - - private JMenuBar generateMenuBar() - { - JMenuBar menuBar = new JMenuBar(); - - JMenu lookAndFeelMenu = new JMenu("Режим отображения"); - lookAndFeelMenu.setMnemonic(KeyEvent.VK_V); - lookAndFeelMenu.getAccessibleContext().setAccessibleDescription( - "Управление режимом отображения приложения"); - - { - JMenuItem systemLookAndFeel = new JMenuItem("Системная схема", KeyEvent.VK_S); - systemLookAndFeel.addActionListener((event) -> { - setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); - this.invalidate(); - }); - lookAndFeelMenu.add(systemLookAndFeel); - } - - { - JMenuItem crossplatformLookAndFeel = new JMenuItem("Универсальная схема", KeyEvent.VK_S); - crossplatformLookAndFeel.addActionListener((event) -> { - setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName()); - this.invalidate(); - }); - lookAndFeelMenu.add(crossplatformLookAndFeel); - } - - JMenu testMenu = new JMenu("Тесты"); - testMenu.setMnemonic(KeyEvent.VK_T); - testMenu.getAccessibleContext().setAccessibleDescription( - "Тестовые команды"); - - { - JMenuItem addLogMessageItem = new JMenuItem("Сообщение в лог", KeyEvent.VK_S); - addLogMessageItem.addActionListener((event) -> { - Logger.debug("Новая строка"); - }); - testMenu.add(addLogMessageItem); - } - - menuBar.add(lookAndFeelMenu); - menuBar.add(testMenu); - return menuBar; - } - - private void setLookAndFeel(String className) - { - try - { - UIManager.setLookAndFeel(className); - SwingUtilities.updateComponentTreeUI(this); - } - catch (ClassNotFoundException | InstantiationException - | IllegalAccessException | UnsupportedLookAndFeelException e) - { - // just ignore - } - } -} diff --git a/robots/src/gui/RobotsProgram.java b/robots/src/gui/RobotsProgram.java deleted file mode 100644 index ae0930a8b..000000000 --- a/robots/src/gui/RobotsProgram.java +++ /dev/null @@ -1,25 +0,0 @@ -package gui; - -import java.awt.Frame; - -import javax.swing.SwingUtilities; -import javax.swing.UIManager; - -public class RobotsProgram -{ - public static void main(String[] args) { - try { - UIManager.setLookAndFeel("javax.swing.plaf.nimbus.NimbusLookAndFeel"); -// UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel"); -// UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); -// UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName()); - } catch (Exception e) { - e.printStackTrace(); - } - SwingUtilities.invokeLater(() -> { - MainApplicationFrame frame = new MainApplicationFrame(); - frame.pack(); - frame.setVisible(true); - frame.setExtendedState(Frame.MAXIMIZED_BOTH); - }); - }} diff --git a/robots/src/gui/GameVisualizer.java b/robots/src/main/java/gui/GameVisualizer.java similarity index 100% rename from robots/src/gui/GameVisualizer.java rename to robots/src/main/java/gui/GameVisualizer.java diff --git a/robots/src/gui/GameWindow.java b/robots/src/main/java/gui/GameWindow.java similarity index 100% rename from robots/src/gui/GameWindow.java rename to robots/src/main/java/gui/GameWindow.java diff --git a/robots/src/gui/LogWindow.java b/robots/src/main/java/gui/LogWindow.java similarity index 100% rename from robots/src/gui/LogWindow.java rename to robots/src/main/java/gui/LogWindow.java diff --git a/robots/src/main/java/gui/MainApplicationFrame.java b/robots/src/main/java/gui/MainApplicationFrame.java new file mode 100644 index 000000000..0e819b99d --- /dev/null +++ b/robots/src/main/java/gui/MainApplicationFrame.java @@ -0,0 +1,149 @@ +package gui; + +import java.awt.Dimension; +import java.awt.Toolkit; +import java.awt.event.KeyEvent; + + +import log.Logger; + +import javax.swing.*; + + +public class MainApplicationFrame extends JFrame { + private final JDesktopPane desktopPane = new JDesktopPane(); + + public MainApplicationFrame() { + int inset = 50; + Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); + setBounds(inset, inset, + screenSize.width - inset * 2, + screenSize.height - inset * 2); + + setContentPane(desktopPane); + + + LogWindow logWindow = createLogWindow(); + addWindow(logWindow); + + GameWindow gameWindow = new GameWindow(); + gameWindow.setSize(400, 400); + addWindow(gameWindow); + + setJMenuBar(generateMenuBar()); + setDefaultCloseOperation(EXIT_ON_CLOSE); + } + + protected LogWindow createLogWindow() { + LogWindow logWindow = new LogWindow(Logger.getDefaultLogSource()); + logWindow.setLocation(10, 10); + logWindow.setSize(300, 800); + setMinimumSize(logWindow.getSize()); + logWindow.pack(); + Logger.debug("Протокол работает"); + return logWindow; + } + + protected void addWindow(JInternalFrame frame) { + desktopPane.add(frame); + frame.setVisible(true); + } + + private JMenuBar generateMenuBar() { + JMenuBar menuBar = new JMenuBar(); + + makeLookAndFeelMenu(menuBar); + makeTestMenu(menuBar); + makeSystemMenu(menuBar); + + return menuBar; + } + + private void makeLookAndFeelMenu(JMenuBar menuBar) { + JMenu lookAndFeelMenu = initializeMenu("Режим отображения", + "Управление режимом отображения приложения"); + + lookAndFeelMenu.add(createSystemLookAndFeelMenuItem("Системная схема")); + lookAndFeelMenu.add(createSystemLookAndFeelMenuItem("Универсальная схема")); + + menuBar.add(lookAndFeelMenu); + } + + private JMenuItem createSystemLookAndFeelMenuItem(String text) { + JMenuItem systemLookAndFeel = new JMenuItem(text, KeyEvent.VK_S); + systemLookAndFeel.addActionListener((event) -> { + setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); + this.invalidate(); + }); + + return systemLookAndFeel; + } + + private void makeTestMenu(JMenuBar menuBar) { + JMenu testMenu = initializeMenu("Тесты", "Тестовые команды"); + + testMenu.add(createTestMenuItem("Сообщение в лог", "Новая строка")); + + menuBar.add(testMenu); + } + + private JMenuItem createTestMenuItem(String text, String logMessage) { + JMenuItem addLogMessageItem = new JMenuItem(text, KeyEvent.VK_S); + addLogMessageItem.addActionListener((event) -> { + Logger.debug(logMessage); + }); + + return addLogMessageItem; + } + + private void makeSystemMenu(JMenuBar menuBar) { + JMenu systemMenu = initializeMenu("Система", "Управление системой"); + + systemMenu.add(createSystemMenuCloseItem("Закрыть")); + + menuBar.add(systemMenu); + } + + private JMenuItem createSystemMenuCloseItem(String text) { + JMenuItem closeItem = new JMenuItem(text, KeyEvent.VK_S); + closeItem.addActionListener((event) -> { + closeWithConfirmation(); + }); + + return closeItem; + } + + private void closeWithConfirmation() { + int response = JOptionPane.showOptionDialog(null, + "Закрыть приложение?", + "Подтверждение", + JOptionPane.DEFAULT_OPTION, + JOptionPane.QUESTION_MESSAGE, + null, + Select.values(), + Select.NO); + + if (response == JOptionPane.YES_OPTION) { + System.exit(0); + } + } + + + private JMenu initializeMenu(String menuName, String description) { + JMenu someMenu = new JMenu(menuName); + someMenu.setMnemonic(KeyEvent.VK_V); + someMenu.getAccessibleContext().setAccessibleDescription( + description); + + return someMenu; + } + + private void setLookAndFeel(String className) { + try { + UIManager.setLookAndFeel(className); + SwingUtilities.updateComponentTreeUI(this); + } catch (ClassNotFoundException | InstantiationException + | IllegalAccessException | UnsupportedLookAndFeelException e) { + } + } +} diff --git a/robots/src/main/java/gui/RobotsProgram.java b/robots/src/main/java/gui/RobotsProgram.java new file mode 100644 index 000000000..cf75dbc2e --- /dev/null +++ b/robots/src/main/java/gui/RobotsProgram.java @@ -0,0 +1,22 @@ +package gui; + +import java.awt.Frame; +import javax.swing.SwingUtilities; +import javax.swing.UIManager; + + +public class RobotsProgram { + public static void main(String[] args) { + try { + UIManager.setLookAndFeel("javax.swing.plaf.nimbus.NimbusLookAndFeel"); + } catch (Exception e) { + e.printStackTrace(); + } + SwingUtilities.invokeLater(() -> { + MainApplicationFrame frame = new MainApplicationFrame(); + frame.pack(); + frame.setVisible(true); + frame.setExtendedState(Frame.MAXIMIZED_BOTH); + }); + } +} diff --git a/robots/src/main/java/gui/Select.java b/robots/src/main/java/gui/Select.java new file mode 100644 index 000000000..3cb7fa1d8 --- /dev/null +++ b/robots/src/main/java/gui/Select.java @@ -0,0 +1,16 @@ +package gui; + +public enum Select { + YES("Да"), + NO("Нет"); + + private String res; + Select(String response) { + res = response; + } + + @Override + public String toString() { + return res; + } +} diff --git a/robots/src/log/LogChangeListener.java b/robots/src/main/java/log/LogChangeListener.java similarity index 100% rename from robots/src/log/LogChangeListener.java rename to robots/src/main/java/log/LogChangeListener.java diff --git a/robots/src/log/LogEntry.java b/robots/src/main/java/log/LogEntry.java similarity index 100% rename from robots/src/log/LogEntry.java rename to robots/src/main/java/log/LogEntry.java diff --git a/robots/src/log/LogLevel.java b/robots/src/main/java/log/LogLevel.java similarity index 100% rename from robots/src/log/LogLevel.java rename to robots/src/main/java/log/LogLevel.java diff --git a/robots/src/log/LogWindowSource.java b/robots/src/main/java/log/LogWindowSource.java similarity index 100% rename from robots/src/log/LogWindowSource.java rename to robots/src/main/java/log/LogWindowSource.java diff --git a/robots/src/log/Logger.java b/robots/src/main/java/log/Logger.java similarity index 100% rename from robots/src/log/Logger.java rename to robots/src/main/java/log/Logger.java