diff --git a/README.MD b/README.MD index e0bb732..0cfa14a 100644 --- a/README.MD +++ b/README.MD @@ -18,5 +18,5 @@ mvn package ``` # Used libraries -- [lombok](https://projectlombok.org/) +- [lombok](https://projectlombok.org/) ([Install to IDE](https://projectlombok.org/setup/overview) too!) - [commons-cli](https://commons.apache.org/proper/commons-cli/) diff --git a/src/main/java/de/mas/wiiu/streaming/Main.java b/src/main/java/de/mas/wiiu/streaming/Main.java index 769c15d..075e19e 100644 --- a/src/main/java/de/mas/wiiu/streaming/Main.java +++ b/src/main/java/de/mas/wiiu/streaming/Main.java @@ -22,9 +22,11 @@ package de.mas.wiiu.streaming; +import java.awt.GraphicsEnvironment; import java.net.BindException; import java.net.SocketException; +import javax.swing.JFrame; import javax.swing.JOptionPane; import javax.swing.SwingUtilities; @@ -39,27 +41,69 @@ import de.mas.wiiu.streaming.gui.StreamWindow; public class Main { public static void main(String[] args) throws Exception { - CommandLineParser parser = new DefaultParser(); + if(GraphicsEnvironment.isHeadless()) { + System.out.println("This program does not support running in a headless environment!"); + System.exit(2); + }else { + String ip = null; + if(args.length != 0) { + CommandLineParser parser = new DefaultParser(); - Options options = new Options(); - options.addOption("ip", "ip", true, "IP address of your Wii U Console."); + Options options = new Options(); + options.addOption("ip", "ip", true, "IP address of your Wii U Console."); - CommandLine line = parser.parse(options, args); - String ip = null; + CommandLine line = parser.parse(options, args, true); - if (line.hasOption("ip")) { - ip = line.getOptionValue("ip"); - } else { - HelpFormatter formatter = new HelpFormatter(); - formatter.printHelp("streamingTool", options); - ip = JOptionPane.showInputDialog(null, "Please enter the local IP address of your Wii U", "Wii U streaming client", JOptionPane.PLAIN_MESSAGE); - } - try { - new Main(ip); - } catch (BindException e) { - JOptionPane.showMessageDialog(null, "Can't bind socket. The client is probably already running.", e.getClass().getName(), - JOptionPane.WARNING_MESSAGE); - System.exit(-1); + + if (line.hasOption("ip")) { + ip = line.getOptionValue("ip"); + }else { + HelpFormatter formatter = new HelpFormatter(); + formatter.printHelp("streamingTool", options); + System.exit(2); + } + } else{ + + + + + //Create a JFrame to show the icon in the taskbar + final JFrame frame = new JFrame("Wii U Streaming Client - Enter IP..."); + frame.setUndecorated( true ); + frame.setVisible( true ); + frame.setLocationRelativeTo( null ); + + //Display the IP Dialog + ip = JOptionPane.showInputDialog(frame, "Please enter the local IP address of your Wii U", "Wii U streaming client", JOptionPane.PLAIN_MESSAGE); + + //Check if user clicked "Cancel" + if(ip == null) { + System.out.println("Cancelled. Exiting program"); + frame.dispose(); + System.exit(0); + } + //Close the JFrame again + frame.dispose(); + + } + + try { + new Main(ip); + } catch (BindException e) { + //Create a JFrame to show the icon in the taskbar + final JFrame frame = new JFrame("Wii U Streaming Client - "+e.getClass().getName()); + frame.setUndecorated( true ); + frame.setVisible( true ); + frame.setLocationRelativeTo( null ); + + //Display the Message + JOptionPane.showMessageDialog(frame, "Can't bind socket. The client is probably already running.", e.getClass().getName(), + JOptionPane.WARNING_MESSAGE); + //Close the JFrame again + frame.dispose(); + + System.exit(-1); + } } } diff --git a/src/main/java/de/mas/wiiu/streaming/gui/StreamWindow.java b/src/main/java/de/mas/wiiu/streaming/gui/StreamWindow.java index a0a5aba..9978f36 100644 --- a/src/main/java/de/mas/wiiu/streaming/gui/StreamWindow.java +++ b/src/main/java/de/mas/wiiu/streaming/gui/StreamWindow.java @@ -21,18 +21,55 @@ *******************************************************************************/ package de.mas.wiiu.streaming.gui; +import java.awt.BorderLayout; +import java.awt.Dimension; +import java.awt.Toolkit; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; + import javax.swing.JFrame; +import javax.swing.JMenu; +import javax.swing.JMenuBar; +import javax.swing.JMenuItem; import javax.swing.WindowConstants; public class StreamWindow { - private final ImagePanel image = new ImagePanel(1280, 720); + private final Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); + private final ImagePanel image = new ImagePanel(screenSize.width-15, screenSize.height-100); public StreamWindow(IImageProvider imageProvider) { - JFrame editorFrame = new JFrame("Stream"); + + JFrame editorFrame = new JFrame("Wii U Streaming Client"); + + editorFrame.setMaximumSize(screenSize); editorFrame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); imageProvider.setOnImageChange((bi) -> image.setImage(bi)); - editorFrame.add(image); + editorFrame.getContentPane().add(image); + + JMenuBar menuBar = new JMenuBar(); + editorFrame.getContentPane().add(menuBar, BorderLayout.NORTH); + + JMenu mnSettings = new JMenu("Settings"); + menuBar.add(mnSettings); + + + JMenuItem mntmNewMenuItem = new JMenuItem("Config (Not implemented!)"); + mntmNewMenuItem.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + //TODO Add program config + } + }); + JMenuItem mntmExit = new JMenuItem("Exit"); + mntmExit.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + System.exit(0); + } + }); + + mntmNewMenuItem.setEnabled(false); + mnSettings.add(mntmNewMenuItem); + mnSettings.add(mntmExit); editorFrame.pack(); editorFrame.setLocationRelativeTo(null);