From 0cd47bf0dc5c460562c6a60047f92970417b47a4 Mon Sep 17 00:00:00 2001 From: Diego Waxemberg Date: Mon, 9 Dec 2013 11:52:50 -0500 Subject: [PATCH] stream frame now closes on errors. now show a progress bar when starting the stream. --- limelight-pc/src/com/limelight/Limelight.java | 26 ++++++--- .../src/com/limelight/gui/MainFrame.java | 3 +- .../src/com/limelight/gui/StreamFrame.java | 54 ++++++++++++++++++- 3 files changed, 75 insertions(+), 8 deletions(-) diff --git a/limelight-pc/src/com/limelight/Limelight.java b/limelight-pc/src/com/limelight/Limelight.java index 187bc85..22a9923 100644 --- a/limelight-pc/src/com/limelight/Limelight.java +++ b/limelight-pc/src/com/limelight/Limelight.java @@ -1,5 +1,6 @@ package com.limelight; +import javax.swing.JFrame; import javax.swing.JOptionPane; import javax.swing.UIManager; import com.limelight.binding.PlatformBinding; @@ -16,6 +17,7 @@ public class Limelight implements NvConnectionListener { private StreamFrame streamFrame; private NvConnection conn; private boolean connectionFailed; + private static JFrame limeFrame; public Limelight(String host) { this.host = host; @@ -31,6 +33,12 @@ public class Limelight implements NvConnectionListener { streamFrame.build(conn); } + private static void createFrame() { + MainFrame main = new MainFrame(); + main.build(); + limeFrame = main.getLimeFrame(); + } + public static void createInstance(String host) { Limelight limelight = new Limelight(host); limelight.startUp(); @@ -54,14 +62,13 @@ public class Limelight implements NvConnectionListener { System.exit(1); }; } - - MainFrame limeFrame = new MainFrame(); - limeFrame.build(); + createFrame(); } @Override public void stageStarting(Stage stage) { System.out.println("Starting "+stage.getName()); + streamFrame.showSpinner(stage); } @Override @@ -70,12 +77,14 @@ public class Limelight implements NvConnectionListener { @Override public void stageFailed(Stage stage) { - JOptionPane.showMessageDialog(streamFrame, "Starting "+stage.getName()+" failed", "Connection Error", JOptionPane.ERROR_MESSAGE); + streamFrame.dispose(); conn.stop(); + displayError("Connection Error", "Starting " + stage.getName() + " failed"); } @Override public void connectionStarted() { + streamFrame.hideSpinner(); } @Override @@ -83,14 +92,19 @@ public class Limelight implements NvConnectionListener { e.printStackTrace(); if (!connectionFailed) { connectionFailed = true; - JOptionPane.showMessageDialog(streamFrame, "The connection failed unexpectedly", "Connection Terminated", JOptionPane.ERROR_MESSAGE); + streamFrame.dispose(); + displayError("Connection Terminated", "The connection failed unexpectedly"); conn.stop(); } } @Override public void displayMessage(String message) { - JOptionPane.showMessageDialog(streamFrame, message, "Limelight", JOptionPane.INFORMATION_MESSAGE); + JOptionPane.showMessageDialog(limeFrame, message, "Limelight", JOptionPane.INFORMATION_MESSAGE); + } + + public void displayError(String title, String message) { + JOptionPane.showMessageDialog(limeFrame, message, title, JOptionPane.ERROR_MESSAGE); } } diff --git a/limelight-pc/src/com/limelight/gui/MainFrame.java b/limelight-pc/src/com/limelight/gui/MainFrame.java index 20c6161..846e3d6 100644 --- a/limelight-pc/src/com/limelight/gui/MainFrame.java +++ b/limelight-pc/src/com/limelight/gui/MainFrame.java @@ -32,7 +32,8 @@ public class MainFrame { private JButton stream; private JFrame limeFrame; - public MainFrame() { + public JFrame getLimeFrame() { + return limeFrame; } public void build() { diff --git a/limelight-pc/src/com/limelight/gui/StreamFrame.java b/limelight-pc/src/com/limelight/gui/StreamFrame.java index d04f226..02d5048 100644 --- a/limelight-pc/src/com/limelight/gui/StreamFrame.java +++ b/limelight-pc/src/com/limelight/gui/StreamFrame.java @@ -1,6 +1,8 @@ package com.limelight.gui; +import java.awt.BorderLayout; import java.awt.Color; +import java.awt.Container; import java.awt.Cursor; import java.awt.Dimension; import java.awt.Frame; @@ -10,18 +12,26 @@ import java.awt.Point; import java.awt.Toolkit; import java.awt.image.BufferedImage; +import javax.swing.Box; +import javax.swing.BoxLayout; import javax.swing.JFrame; +import javax.swing.JLabel; +import javax.swing.JPanel; +import javax.swing.JProgressBar; import com.limelight.input.KeyboardHandler; import com.limelight.input.MouseHandler; import com.limelight.nvstream.NvConnection; +import com.limelight.nvstream.NvConnectionListener.Stage; public class StreamFrame extends JFrame { private static final long serialVersionUID = 1L; private KeyboardHandler keyboard; private MouseHandler mouse; - + private JProgressBar spinner; + private JLabel spinnerLabel; + public void build(NvConnection conn) { keyboard = new KeyboardHandler(conn); mouse = new MouseHandler(conn, this); @@ -65,4 +75,46 @@ public class StreamFrame extends JFrame { // Set the blank cursor to the JFrame. this.getContentPane().setCursor(blankCursor); } + + public void showSpinner(Stage stage) { + + if (spinner == null) { + Container c = this.getContentPane(); + JPanel panel = new JPanel(); + panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS)); + + spinner = new JProgressBar(); + spinner.setIndeterminate(true); + spinner.setMaximumSize(new Dimension(150, 30)); + + spinnerLabel = new JLabel(); + spinnerLabel.setForeground(Color.white); + + Box spinBox = Box.createHorizontalBox(); + spinBox.add(Box.createHorizontalGlue()); + spinBox.add(spinner); + spinBox.add(Box.createHorizontalGlue()); + + Box lblBox = Box.createHorizontalBox(); + lblBox.add(Box.createHorizontalGlue()); + lblBox.add(spinnerLabel); + lblBox.add(Box.createHorizontalGlue()); + + panel.add(Box.createVerticalGlue()); + panel.add(spinBox); + panel.add(Box.createVerticalStrut(10)); + panel.add(lblBox); + panel.add(Box.createVerticalGlue()); + + c.setLayout(new BorderLayout()); + c.add(panel, "Center"); + } + spinnerLabel.setText("Starting " + stage.getName() + "..."); + } + + public void hideSpinner() { + spinner.setVisible(false); + spinnerLabel.setVisible(false); + } + }