|
@@ -11,6 +11,7 @@ import de.nplusc.izc.iZpl.API.PlaybackPlugin;
|
|
|
import de.nplusc.izc.iZpl.API.UIPlugin;
|
|
|
import de.nplusc.izc.iZpl.API.shared.InvalidPlayListFileException;
|
|
|
import de.nplusc.izc.iZpl.API.shared.PlayListItem;
|
|
|
+import de.nplusc.izc.tools.baseTools.Detectors;
|
|
|
import de.nplusc.izc.tools.baseTools.HidableTableColumnModel;
|
|
|
import java.awt.EventQueue;
|
|
|
import java.awt.Image;
|
|
@@ -61,7 +62,7 @@ public class JukeBox extends javax.swing.JFrame implements UIPlugin,MouseListene
|
|
|
jScrollPane2 = new javax.swing.JScrollPane();
|
|
|
lstScheduled = new javax.swing.JList();
|
|
|
btnEnqueue = new javax.swing.JButton();
|
|
|
- jButton2 = new javax.swing.JButton();
|
|
|
+ btnReload = new javax.swing.JButton();
|
|
|
btnPlayPause = new javax.swing.JButton();
|
|
|
btnSkip = new javax.swing.JButton();
|
|
|
seekBar = new javax.swing.JSlider();
|
|
@@ -69,6 +70,7 @@ public class JukeBox extends javax.swing.JFrame implements UIPlugin,MouseListene
|
|
|
lblTrackName = new javax.swing.JLabel();
|
|
|
|
|
|
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
|
|
|
+ setPreferredSize(new java.awt.Dimension(480, 800));
|
|
|
|
|
|
tblPLE.setAutoCreateRowSorter(true);
|
|
|
tblPLE.setModel(new javax.swing.table.DefaultTableModel(
|
|
@@ -112,13 +114,13 @@ public class JukeBox extends javax.swing.JFrame implements UIPlugin,MouseListene
|
|
|
}
|
|
|
});
|
|
|
|
|
|
- jButton2.setFont(new java.awt.Font("Tahoma", 0, 20)); // NOI18N
|
|
|
- jButton2.setText("Neu laden");
|
|
|
- jButton2.addActionListener(new java.awt.event.ActionListener()
|
|
|
+ btnReload.setFont(new java.awt.Font("Tahoma", 0, 20)); // NOI18N
|
|
|
+ btnReload.setText("Neu laden");
|
|
|
+ btnReload.addActionListener(new java.awt.event.ActionListener()
|
|
|
{
|
|
|
public void actionPerformed(java.awt.event.ActionEvent evt)
|
|
|
{
|
|
|
- jButton2ActionPerformed(evt);
|
|
|
+ btnReloadActionPerformed(evt);
|
|
|
}
|
|
|
});
|
|
|
|
|
@@ -133,7 +135,7 @@ public class JukeBox extends javax.swing.JFrame implements UIPlugin,MouseListene
|
|
|
});
|
|
|
|
|
|
btnSkip.setFont(new java.awt.Font("Tahoma", 0, 20)); // NOI18N
|
|
|
- btnSkip.setText("Skip");
|
|
|
+ btnSkip.setText("Überspringen");
|
|
|
btnSkip.addActionListener(new java.awt.event.ActionListener()
|
|
|
{
|
|
|
public void actionPerformed(java.awt.event.ActionEvent evt)
|
|
@@ -152,45 +154,48 @@ public class JukeBox extends javax.swing.JFrame implements UIPlugin,MouseListene
|
|
|
getContentPane().setLayout(layout);
|
|
|
layout.setHorizontalGroup(
|
|
|
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
|
|
- .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
|
|
|
- .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
|
|
|
- .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
|
|
|
+ .addComponent(seekBar, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
|
|
|
+ .addGroup(layout.createSequentialGroup()
|
|
|
+ .addContainerGap()
|
|
|
+ .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
|
|
+ .addComponent(jScrollPane2, javax.swing.GroupLayout.Alignment.TRAILING)
|
|
|
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
|
|
|
- .addComponent(btnPlayPause, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
|
|
|
+ .addComponent(btnEnqueue, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
|
|
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
|
|
- .addComponent(btnSkip)
|
|
|
- .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
|
|
- .addComponent(lblStatus, javax.swing.GroupLayout.PREFERRED_SIZE, 355, javax.swing.GroupLayout.PREFERRED_SIZE))
|
|
|
- .addComponent(lblTrackName, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
|
|
|
+ .addComponent(btnReload, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
|
|
|
+ .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 468, Short.MAX_VALUE)
|
|
|
+ .addGroup(layout.createSequentialGroup()
|
|
|
+ .addComponent(btnPlayPause, javax.swing.GroupLayout.PREFERRED_SIZE, 221, javax.swing.GroupLayout.PREFERRED_SIZE)
|
|
|
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
|
|
|
+ .addComponent(btnSkip, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
|
|
|
.addGroup(layout.createSequentialGroup()
|
|
|
- .addComponent(btnEnqueue, javax.swing.GroupLayout.PREFERRED_SIZE, 201, javax.swing.GroupLayout.PREFERRED_SIZE)
|
|
|
+ .addComponent(lblTrackName, javax.swing.GroupLayout.PREFERRED_SIZE, 303, javax.swing.GroupLayout.PREFERRED_SIZE)
|
|
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
|
|
- .addComponent(jButton2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
|
|
|
- .addComponent(jScrollPane2)
|
|
|
- .addComponent(jScrollPane1)
|
|
|
- .addComponent(seekBar, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
|
|
|
+ .addComponent(lblStatus, javax.swing.GroupLayout.PREFERRED_SIZE, 158, javax.swing.GroupLayout.PREFERRED_SIZE)
|
|
|
+ .addGap(0, 0, Short.MAX_VALUE)))
|
|
|
.addContainerGap())
|
|
|
);
|
|
|
layout.setVerticalGroup(
|
|
|
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
|
|
.addGroup(layout.createSequentialGroup()
|
|
|
.addContainerGap()
|
|
|
- .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 284, Short.MAX_VALUE)
|
|
|
+ .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 497, Short.MAX_VALUE)
|
|
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
|
|
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
|
|
|
.addComponent(btnEnqueue, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
|
|
|
- .addComponent(jButton2, javax.swing.GroupLayout.DEFAULT_SIZE, 35, Short.MAX_VALUE))
|
|
|
- .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
|
|
- .addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 119, javax.swing.GroupLayout.PREFERRED_SIZE)
|
|
|
+ .addComponent(btnReload, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
|
|
|
.addGap(18, 18, 18)
|
|
|
+ .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
|
|
|
+ .addComponent(btnSkip)
|
|
|
+ .addComponent(btnPlayPause))
|
|
|
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
|
|
.addComponent(seekBar, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
|
|
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
|
|
- .addComponent(lblTrackName)
|
|
|
- .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
|
|
|
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
|
|
|
- .addComponent(btnPlayPause)
|
|
|
- .addComponent(btnSkip)
|
|
|
+ .addComponent(lblTrackName)
|
|
|
.addComponent(lblStatus))
|
|
|
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
|
|
+ .addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 126, javax.swing.GroupLayout.PREFERRED_SIZE)
|
|
|
.addContainerGap())
|
|
|
);
|
|
|
|
|
@@ -199,6 +204,16 @@ public class JukeBox extends javax.swing.JFrame implements UIPlugin,MouseListene
|
|
|
|
|
|
private void btnSkipActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_btnSkipActionPerformed
|
|
|
{//GEN-HEADEREND:event_btnSkipActionPerformed
|
|
|
+ //hidden exit from fullscreen jukebox mode
|
|
|
+ int modified = evt.getModifiers();
|
|
|
+ if(modified>0)
|
|
|
+ {
|
|
|
+ l.trace("Modifiers = {}",modified);
|
|
|
+ }
|
|
|
+ if((modified&evt.ALT_MASK)!=0)
|
|
|
+ {
|
|
|
+ IZPLApi.shutdownWithSave();
|
|
|
+ }
|
|
|
selectedPlaybackPlugin.skipTitle();
|
|
|
}//GEN-LAST:event_btnSkipActionPerformed
|
|
|
|
|
@@ -211,14 +226,18 @@ public class JukeBox extends javax.swing.JFrame implements UIPlugin,MouseListene
|
|
|
{//GEN-HEADEREND:event_btnEnqueueActionPerformed
|
|
|
int viewRow = tblPLE.getSelectedRow();
|
|
|
viewRow = tblPLE.convertRowIndexToModel(viewRow);
|
|
|
-
|
|
|
- PlayListEditAPI.forceElement((Integer)((DefaultTableModel)tblPLE.getModel()).getValueAt(viewRow,0));
|
|
|
+ int index = (Integer)((DefaultTableModel)tblPLE.getModel()).getValueAt(viewRow,0);
|
|
|
+ if(index>=0)
|
|
|
+ {
|
|
|
+ PlayListEditAPI.forceElement(index);
|
|
|
+ }
|
|
|
}//GEN-LAST:event_btnEnqueueActionPerformed
|
|
|
|
|
|
- private void jButton2ActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_jButton2ActionPerformed
|
|
|
- {//GEN-HEADEREND:event_jButton2ActionPerformed
|
|
|
+ private void btnReloadActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_btnReloadActionPerformed
|
|
|
+ {//GEN-HEADEREND:event_btnReloadActionPerformed
|
|
|
PlayListEditAPI.reloadList();
|
|
|
- }//GEN-LAST:event_jButton2ActionPerformed
|
|
|
+ rebuildTable(false);
|
|
|
+ }//GEN-LAST:event_btnReloadActionPerformed
|
|
|
|
|
|
@Override
|
|
|
public String getPluginName()
|
|
@@ -243,29 +262,40 @@ public class JukeBox extends javax.swing.JFrame implements UIPlugin,MouseListene
|
|
|
private boolean rebuilding=false;
|
|
|
private void rebuildTable(boolean recovery)
|
|
|
{
|
|
|
- try{
|
|
|
- rebuilding = true;
|
|
|
-
|
|
|
- //mdl.setAllColumnsVisible();
|
|
|
- PlayListEditAPI.refreshKeyList();
|
|
|
- String[] titles = PlayListEditAPI.getTrackTitles();
|
|
|
- for(int i=tblPLE.getRowCount()-1;i>0;i--)
|
|
|
- {
|
|
|
- ((DefaultTableModel)tblPLE.getModel()).removeRow(i-1);
|
|
|
- }
|
|
|
- tblPLE.getModel().setValueAt(0,0,0);
|
|
|
- tblPLE.getModel().setValueAt(titles[0],0,1);
|
|
|
- tblPLE.getModel().setValueAt(PlayListEditAPI.getTargetPlayCount(0),0,2);
|
|
|
- tblPLE.getModel().setValueAt(PlayListEditAPI.getPlayCount(0),0,3);
|
|
|
- for (int i = 0; i < titles.length; i++)
|
|
|
+ try
|
|
|
{
|
|
|
- ((DefaultTableModel)tblPLE.getModel()).addRow(new Object[]{null,null,null,null});
|
|
|
- tblPLE.getModel().setValueAt(i,i,0);
|
|
|
- tblPLE.getModel().setValueAt(titles[i],i,1);
|
|
|
- tblPLE.getModel().setValueAt(PlayListEditAPI.getTargetPlayCount(i),i,2);
|
|
|
- tblPLE.getModel().setValueAt(PlayListEditAPI.getPlayCount(i),i,3);
|
|
|
- }
|
|
|
- rebuilding=false;
|
|
|
+ rebuilding = true;
|
|
|
+
|
|
|
+ //mdl.setAllColumnsVisible();
|
|
|
+ PlayListEditAPI.refreshKeyList();
|
|
|
+ String[] titles = PlayListEditAPI.getTrackTitles();
|
|
|
+ for(int i=tblPLE.getRowCount()-1;i>0;i--)
|
|
|
+ {
|
|
|
+ ((DefaultTableModel)tblPLE.getModel()).removeRow(i-1);
|
|
|
+ }
|
|
|
+ if(titles.length>0)
|
|
|
+ {
|
|
|
+ tblPLE.getModel().setValueAt(0,0,0);
|
|
|
+ tblPLE.getModel().setValueAt(titles[0],0,1);
|
|
|
+ tblPLE.getModel().setValueAt(PlayListEditAPI.getTargetPlayCount(0),0,2);
|
|
|
+ tblPLE.getModel().setValueAt(PlayListEditAPI.getPlayCount(0),0,3);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ tblPLE.getModel().setValueAt(-1,0,0);
|
|
|
+ tblPLE.getModel().setValueAt("-- NO TRACKS --",0,1);
|
|
|
+ tblPLE.getModel().setValueAt(0,0,2);
|
|
|
+ tblPLE.getModel().setValueAt(0,0,3);
|
|
|
+ }
|
|
|
+ for (int i = 0; i < titles.length; i++)
|
|
|
+ {
|
|
|
+ ((DefaultTableModel)tblPLE.getModel()).addRow(new Object[]{null,null,null,null});
|
|
|
+ tblPLE.getModel().setValueAt(i,i,0);
|
|
|
+ tblPLE.getModel().setValueAt(titles[i],i,1);
|
|
|
+ tblPLE.getModel().setValueAt(PlayListEditAPI.getTargetPlayCount(i),i,2);
|
|
|
+ tblPLE.getModel().setValueAt(PlayListEditAPI.getPlayCount(i),i,3);
|
|
|
+ }
|
|
|
+ rebuilding=false;
|
|
|
}
|
|
|
catch(InvalidPlayListFileException e)
|
|
|
{
|
|
@@ -285,8 +315,8 @@ public class JukeBox extends javax.swing.JFrame implements UIPlugin,MouseListene
|
|
|
// Variables declaration - do not modify//GEN-BEGIN:variables
|
|
|
private javax.swing.JButton btnEnqueue;
|
|
|
private javax.swing.JButton btnPlayPause;
|
|
|
+ private javax.swing.JButton btnReload;
|
|
|
private javax.swing.JButton btnSkip;
|
|
|
- private javax.swing.JButton jButton2;
|
|
|
private javax.swing.JScrollPane jScrollPane1;
|
|
|
private javax.swing.JScrollPane jScrollPane2;
|
|
|
private javax.swing.JLabel lblStatus;
|
|
@@ -359,6 +389,7 @@ public class JukeBox extends javax.swing.JFrame implements UIPlugin,MouseListene
|
|
|
public void setTrackName(String trackName)
|
|
|
{
|
|
|
EventQueue.invokeLater(()->lblTrackName.setText(trackName));
|
|
|
+ EventQueue.invokeLater(()->rebuildTable(false));
|
|
|
}
|
|
|
|
|
|
|
|
@@ -375,10 +406,24 @@ public class JukeBox extends javax.swing.JFrame implements UIPlugin,MouseListene
|
|
|
@Override
|
|
|
public void initializeUI()
|
|
|
{
|
|
|
+ boolean onARM = Detectors.getSystemClassification()[1].equals("arm");
|
|
|
+ if(onARM)
|
|
|
+ {
|
|
|
+ setUndecorated(true);
|
|
|
+ setLocation(0, 0);
|
|
|
+ }
|
|
|
setIconImage(IZPLApi.getProgramIcon());
|
|
|
initComponents();
|
|
|
+
|
|
|
mdl=(HidableTableColumnModel) tblPLE.getColumnModel();
|
|
|
mdl.setColumnVisible(mdl.getColumn(0), false);
|
|
|
+ //most probably "embedded" device.
|
|
|
+ if(onARM)
|
|
|
+ {
|
|
|
+ //target and current playcount hidden, decluttering
|
|
|
+ mdl.setColumnVisible(mdl.getColumn(1), false);
|
|
|
+ mdl.setColumnVisible(mdl.getColumn(1), false);
|
|
|
+ }
|
|
|
addWindowListener(new WindowAdapter()
|
|
|
{
|
|
|
@Override
|
|
@@ -389,7 +434,7 @@ public class JukeBox extends javax.swing.JFrame implements UIPlugin,MouseListene
|
|
|
});
|
|
|
seekBar.addMouseListener(this);
|
|
|
|
|
|
-
|
|
|
+
|
|
|
|
|
|
//play();
|
|
|
int condition = JComponent.WHEN_IN_FOCUSED_WINDOW;
|
|
@@ -409,6 +454,7 @@ public class JukeBox extends javax.swing.JFrame implements UIPlugin,MouseListene
|
|
|
});
|
|
|
// selectedPlaybackPlugin.registerVideoSurface(videoPanel);
|
|
|
//TODO: HAX für RPi mit ProjectM-SDL/PulseAudio fullscreen.
|
|
|
+ // HW-Incompat, Requires different HW
|
|
|
rebuildTable(false);
|
|
|
}
|
|
|
|
|
@@ -462,7 +508,7 @@ public class JukeBox extends javax.swing.JFrame implements UIPlugin,MouseListene
|
|
|
@Override
|
|
|
public void reloadPlayList()
|
|
|
{
|
|
|
-
|
|
|
+ EventQueue.invokeLater(()->this.rebuildTable(false));
|
|
|
}
|
|
|
|
|
|
|