1
0
mirror of https://github.com/JvanKatwijk/javaDab synced 2018-12-22 06:18:52 +01:00
Files
SDR-DAB_javaDab/package_View/RadioView.java
JvanKatwijk 9373942260 progress
2018-04-07 14:29:55 +02:00

401 lines
13 KiB
Java
Executable File

package package_View;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import package_Model.*;
import java.io.ByteArrayInputStream;
import java.util.*;
import javax.imageio.ImageIO;
import javax.imageio.ImageReadParam;
import javax.imageio.ImageReader;
import javax.imageio.stream.ImageInputStream;
import javax.swing.event.*;
import javax. swing. JSlider;
import java. awt. Dimension;
public class RadioView extends JFrame {
//... Components
private final JLabel m_copyright = new JLabel ("Jan's Radio");
private final JLabel m_timesync = new JLabel ("sync ");
private final JLabel m_stereo = new JLabel ("st");
private final JLabel m_motLabel = new JLabel (" ");
private final JLabel m_dynamicLabel = new JLabel (" ");
private final JSlider m_gainSlider = new JSlider ();
private final JLabel m_gainLabel = new JLabel ("50");
private final JLabel m_ficLevel_1 = new JLabel (" ");
private final JLabel m_ficLevel_2 = new JLabel (" ");
private final JLabel m_ficLevel_3 = new JLabel (" ");
private final JLabel m_ficLevel_4 = new JLabel (" ");
private final JLabel m_ficLevel_5 = new JLabel (" ");
private final JLabel m_ensembleName = new JLabel ("ensemble");
private final JLabel m_selectedService= new JLabel ("wait for services");
private final JLabel m_channelLabel = new JLabel (" ");
private final JLabel m_serviceCount = new JLabel (" ");
public serviceTable m_serviceTable = new serviceTable ();
private java.util.List<viewSignals> listeners = new ArrayList<>();
public void addServiceListener (viewSignals service) {
listeners. add (service);
}
//======================================================= constructor
/** Constructor
* @param model */
public RadioView (RadioModel model) {
//... Set up the logic
m_copyright. setToolTipText ("Copyright(s) 2018 Jan van Katwijk, \nLazy Chair Computing.");
m_selectedService. setToolTipText ("the name of the selected service");
m_timesync. setToolTipText ("Green indicates time sync OK");
m_stereo. setToolTipText ("Green indicates transmission is stereo");
m_timesync. setBackground (Color. red);
m_timesync. setOpaque (true);
m_stereo . setBackground (Color. red);
m_stereo . setOpaque (true);
m_motLabel. setBackground (Color. red);
m_motLabel. setOpaque (true);
m_selectedService. setBackground (Color. red);
m_selectedService. setOpaque (true);
m_gainSlider. setPreferredSize(new Dimension(30, 60));
m_serviceCount. setToolTipText ("number of services detected");
//... Layout the components.
JPanel row1 = new JPanel();
row1. setLayout (new FlowLayout ());
row1. add (m_copyright);
row1. add (Box. createRigidArea (new Dimension (10, 0)));
row1. add (m_timesync);
row1. add (m_stereo);
row1. add (Box. createRigidArea (new Dimension (10, 0)));
row1. add (m_motLabel);
row1. add (Box. createRigidArea (new Dimension (10, 0)));
row1. add (m_serviceCount);
m_ficLevel_1. setBackground (Color. red);
m_ficLevel_1. setOpaque (true);
m_ficLevel_2. setBackground (Color. red);
m_ficLevel_2. setOpaque (true);
m_ficLevel_3. setBackground (Color. red);
m_ficLevel_3. setOpaque (true);
m_ficLevel_4. setBackground (Color. red);
m_ficLevel_4. setOpaque (true);
m_ficLevel_5. setBackground (Color. red);
m_ficLevel_5. setOpaque (true);
JPanel row2 = new JPanel ();
row2.setLayout(new FlowLayout());
row2. add (m_channelLabel);
row2. add (Box. createRigidArea (new Dimension (25, 0)));
row2. add (m_ficLevel_1);
row2. add (m_ficLevel_2);
row2. add (m_ficLevel_3);
row2. add (m_ficLevel_4);
row2. add (m_ficLevel_5);
JPanel row3 = new JPanel ();
row3. setLayout (new FlowLayout ());
row3. add (m_ensembleName);
JPanel row4 = new JPanel ();
row4. setLayout (new FlowLayout ());
row4. add (m_selectedService);
row4. add (Box. createRigidArea (new Dimension (30, 0)));
JPanel row5 = new JPanel ();
row5. setLayout (new FlowLayout ());
row5. add (m_dynamicLabel);
row5. add (Box. createRigidArea (new Dimension (220, 0)));
JPanel leftpart = new JPanel ();
leftpart. setLayout (new BoxLayout (leftpart, BoxLayout. Y_AXIS));
leftpart. add (row1);
leftpart. add (row2);
leftpart. add (row3);
leftpart. add (row4);
JPanel frame = new JPanel ();
frame. setLayout (new BoxLayout (frame, BoxLayout. X_AXIS));
frame. add (leftpart);
JPanel rightpart = new JPanel ();
rightpart. setLayout (new BoxLayout (rightpart, BoxLayout. Y_AXIS));
m_gainSlider. setOrientation (JSlider. VERTICAL);
m_gainSlider. setToolTipText ("The gain for the device, range 1 .. 100");
rightpart. add (m_gainSlider);
rightpart. add (m_gainLabel);
frame. add (rightpart);
frame. add (Box. createRigidArea (new Dimension (30, 0)));
JPanel gui = new JPanel ();
gui. setLayout (new BoxLayout (gui, BoxLayout. Y_AXIS));
gui. add (frame);
gui. add (row5);
//... finalize layout
this. setContentPane (gui);
this. pack ();
this. setTitle("JavaRadio - MVC");
// The window closing event should probably be passed to the
// Controller in a real program, but this is a short example.
// this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
m_serviceTable. table. addMouseListener (new MouseAdapter() {
@Override
public void mouseClicked (MouseEvent evt) {
if (evt. getClickCount() > 0) {
int row = m_serviceTable. table. rowAtPoint (evt. getPoint ());
Object o = m_serviceTable. table. getValueAt (row, 0);
if (!(o instanceof String))
return;
if (!javax. swing. SwingUtilities. isRightMouseButton (evt))
tableSelect_withLeft ((String)o);
else
tableSelect_withRight ((String)o);
}
}
});
m_gainSlider.
addChangeListener (new ChangeListener() {
public void
stateChanged(javax. swing.event.ChangeEvent evt) {
int gainValue = ((JSlider)evt. getSource ()). getValue ();
m_gainLabel. setText (Integer. toString (gainValue));
listeners. forEach ((hl) -> {
hl. gainValue (gainValue);
});
}
});
}
private void tableSelect_withLeft (String name) {
listeners.forEach((hl) -> {
hl. tableSelect_withLeft (name);
});
}
private void tableSelect_withRight (String name) {
listeners.forEach((hl) -> {
hl. tableSelect_withRight (name);
});
}
public void set_qualityLabel (JLabel l, int v) {
if (v > 0) {
l. setBackground (Color. green);
l. setOpaque (true);
}
else {
l. setBackground (Color. red);
l. setOpaque (true);
}
}
public void set_stereo (boolean b) {
set_qualityLabel (m_stereo, b ? 1 : 0);
}
public void set_Synced (boolean b) {
set_qualityLabel (m_timesync, b ? 1 : 0);
}
public String get_serviceName (int row, int column) {
return m_serviceTable. get_serviceName (row, column);
}
public void newService (String name) {
m_serviceTable. newService (name);
}
public void setEnsembleName (String s) {
m_ensembleName. setText (s);
}
public void show_isStereo (boolean b) {
if (b)
m_stereo . setBackground (Color. green);
else
m_stereo . setBackground (Color. green);
m_stereo . setOpaque (true);
}
// q is a value 0 .. 100
public void show_ficSuccess (int q) {
switch ((q + 10) / 20) {
case 0:
set_qualityLabel (m_ficLevel_1, 0);
set_qualityLabel (m_ficLevel_2, 0);
set_qualityLabel (m_ficLevel_3, 0);
set_qualityLabel (m_ficLevel_4, 0);
set_qualityLabel (m_ficLevel_5, 0);
break;
case 1:
set_qualityLabel (m_ficLevel_1, 1);
set_qualityLabel (m_ficLevel_2, 0);
set_qualityLabel (m_ficLevel_3, 0);
set_qualityLabel (m_ficLevel_4, 0);
set_qualityLabel (m_ficLevel_5, 0);
break;
case 2:
set_qualityLabel (m_ficLevel_1, 1);
set_qualityLabel (m_ficLevel_2, 1);
set_qualityLabel (m_ficLevel_3, 0);
set_qualityLabel (m_ficLevel_4, 0);
set_qualityLabel (m_ficLevel_5, 0);
break;
case 3:
set_qualityLabel (m_ficLevel_1, 1);
set_qualityLabel (m_ficLevel_2, 1);
set_qualityLabel (m_ficLevel_3, 1);
set_qualityLabel (m_ficLevel_4, 0);
set_qualityLabel (m_ficLevel_5, 0);
break;
case 4:
set_qualityLabel (m_ficLevel_1, 1);
set_qualityLabel (m_ficLevel_2, 1);
set_qualityLabel (m_ficLevel_3, 1);
set_qualityLabel (m_ficLevel_4, 1);
set_qualityLabel (m_ficLevel_5, 0);
break;
case 5:
set_qualityLabel (m_ficLevel_1, 1);
set_qualityLabel (m_ficLevel_2, 1);
set_qualityLabel (m_ficLevel_3, 1);
set_qualityLabel (m_ficLevel_4, 1);
set_qualityLabel (m_ficLevel_5, 1);
break;
}
}
public void showScanning (String channel) {
m_channelLabel. setText ("Scanning " + channel);
}
public void showSelectedChannel (String channel) {
m_channelLabel. setText ("Selected " + channel);
}
public void showService (String currentService) {
m_selectedService. setText (currentService);
m_selectedService. setBackground (Color. green);
m_selectedService. setOpaque (true);
}
public void showServiceEnabled (int numofServices) {
m_selectedService. setText ("please choose a service");
m_selectedService. setBackground (Color. green);
m_selectedService. setOpaque (true);
showServiceCount (numofServices);
}
public void showServiceCount (int numofServices) {
m_serviceCount. setBackground (Color. green);
m_serviceCount. setOpaque (true);
m_serviceCount. setText (Integer. toString (numofServices));
}
JFrame notifier= new JFrame ();
public void showProgramdata (String serviceName,
String channel,
int startAddr,
int length,
boolean shortForm,
int bitRate,
int protLevel,
String programType) {
notifier. setPreferredSize (new Dimension (200, 200));
JPanel main = new JPanel ();
main. setLayout (new BoxLayout (main, BoxLayout. Y_AXIS));
notifier. setTitle (serviceName);
JLabel Label_0 = new JLabel ("channel " + channel);
JLabel Label_1 = new JLabel ("startAddr " + startAddr);
JLabel Label_2 = new JLabel ("length " + length);
JLabel Label_3 = new JLabel ("bitRate " + bitRate);
String protL;
if (!shortForm) {
protL = "EEP ";
protL = protL + ((protLevel & 03) + 1);
if ((protLevel & (1 << 2)) == 0)
protL += "-A";
else
protL += "-B";
}
else {
protL = "UEP " + protLevel;
}
JLabel Label_4 = new JLabel ("protection " + protL);
JLabel Label_5 = new JLabel ("program type " + programType);
main. add (Label_0);
main. add (Label_1);
main. add (Label_2);
main. add (Label_3);
main. add (Label_4);
main. add (Label_5);
notifier. add (main);
notifier. pack ();
notifier. setVisible (true);
}
private JFrame pictureFrame = new JFrame ();
public void show_picture (byte [] data, int subtype, String name) {
ByteArrayInputStream bis = new ByteArrayInputStream (data);
String pictureType = subtype == 0 ? "gif" :
subtype == 1 ? "jpg" :
subtype == 2 ? "bmp" : "png";
Iterator<?> readers =
ImageIO.getImageReadersByFormatName (pictureType);
// ImageIO is a class containing static methods for locating ImageReaders
// and ImageWriters, and performing simple encoding and decoding.
ImageReader reader = (ImageReader) readers.next();
Object source = bis;
try {
ImageInputStream iis = ImageIO.createImageInputStream (source);
reader. setInput (iis, true);
ImageReadParam param = reader.getDefaultReadParam ();
Image image = reader.read (0, param);
pictureFrame. setVisible (false);
pictureFrame = new JFrame ();
JLabel lblimage = new JLabel (new ImageIcon (image));
pictureFrame.getContentPane ().
add (lblimage, BorderLayout.CENTER);
pictureFrame.setSize (300, 400);
pictureFrame.setVisible (true);
} catch (Exception e) {
System. out. println ("foutje");
}
// got an image file
System. out. println ("showing " + name);
}
public void show_dynamicLabel (String s) {
if (s. length () > 50)
m_dynamicLabel. setText (s. substring (0, 50));
else
m_dynamicLabel. setText (s);
}
public void clear_dynamicLabel () {
String s = " ";
m_dynamicLabel. setText (s);
}
public void show_motHandling (boolean flag) {
m_motLabel. setOpaque (true);
m_motLabel. setBackground (flag ? Color. green : Color. red);
}
//
// Used to set the initial value
public void setDeviceGain (int v) {
m_gainSlider. setValue (v);
m_gainLabel. setText (Integer. toString (v));
}
}