/[svn]/jsampler/trunk/src/org/jsampler/view/classic/Channel.java
ViewVC logotype

Diff of /jsampler/trunk/src/org/jsampler/view/classic/Channel.java

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1143 by iliev, Mon Apr 2 21:18:31 2007 UTC revision 1343 by iliev, Tue Sep 11 15:38:28 2007 UTC
# Line 63  import javax.swing.JPanel; Line 63  import javax.swing.JPanel;
63  import javax.swing.JSeparator;  import javax.swing.JSeparator;
64  import javax.swing.JSlider;  import javax.swing.JSlider;
65  import javax.swing.JToggleButton;  import javax.swing.JToggleButton;
66    import javax.swing.JToolBar;
67  import javax.swing.TransferHandler;  import javax.swing.TransferHandler;
68    
69  import javax.swing.border.Border;  import javax.swing.border.Border;
# Line 86  import org.jsampler.SamplerModel; Line 87  import org.jsampler.SamplerModel;
87    
88  import org.jsampler.event.ListEvent;  import org.jsampler.event.ListEvent;
89  import org.jsampler.event.ListListener;  import org.jsampler.event.ListListener;
90    import org.jsampler.event.MidiDeviceEvent;
91  import org.jsampler.event.MidiDeviceListEvent;  import org.jsampler.event.MidiDeviceListEvent;
92  import org.jsampler.event.MidiDeviceListListener;  import org.jsampler.event.MidiDeviceListListener;
93    import org.jsampler.event.MidiDeviceListener;
94  import org.jsampler.event.SamplerAdapter;  import org.jsampler.event.SamplerAdapter;
95  import org.jsampler.event.SamplerChannelAdapter;  import org.jsampler.event.SamplerChannelAdapter;
96  import org.jsampler.event.SamplerChannelEvent;  import org.jsampler.event.SamplerChannelEvent;
# Line 95  import org.jsampler.event.SamplerChannel Line 98  import org.jsampler.event.SamplerChannel
98  import org.jsampler.event.SamplerChannelListListener;  import org.jsampler.event.SamplerChannelListListener;
99  import org.jsampler.event.SamplerChannelListener;  import org.jsampler.event.SamplerChannelListener;
100  import org.jsampler.event.SamplerEvent;  import org.jsampler.event.SamplerEvent;
101    import org.jsampler.event.SamplerListener;
102    
103    import org.jsampler.view.std.JSChannelOutputRoutingDlg;
104    import org.jsampler.view.std.JSFxSendsPane;
105    import org.jsampler.view.std.JSInstrumentChooser;
106    
107  import org.linuxsampler.lscp.AudioOutputDevice;  import org.linuxsampler.lscp.AudioOutputDevice;
108  import org.linuxsampler.lscp.MidiInputDevice;  import org.linuxsampler.lscp.MidiInputDevice;
# Line 110  import static org.jsampler.view.classic. Line 118  import static org.jsampler.view.classic.
118   * @author Grigor Iliev   * @author Grigor Iliev
119   */   */
120  public class Channel extends org.jsampler.view.JSChannel {  public class Channel extends org.jsampler.view.JSChannel {
121            private final static ImageIcon iconEdit;
122            
123          private final static ImageIcon iconMuteOn;          private final static ImageIcon iconMuteOn;
124          private final static ImageIcon iconMuteOff;          private final static ImageIcon iconMuteOff;
125          private final static ImageIcon iconMutedBySolo;          private final static ImageIcon iconMutedBySolo;
# Line 134  public class Channel extends org.jsample Line 144  public class Channel extends org.jsample
144                  = new Vector<PropertyChangeListener>();                  = new Vector<PropertyChangeListener>();
145                    
146          static {          static {
147                    iconEdit = new ImageIcon(Channel.class.getResource("res/icons/edit.png"));
148                    
149                  String path = "org/jsampler/view/classic/res/icons/";                  String path = "org/jsampler/view/classic/res/icons/";
150                  URL url = ClassLoader.getSystemClassLoader().getResource(path + "mute_on.png");                  URL url = ClassLoader.getSystemClassLoader().getResource(path + "mute_on.png");
151                  iconMuteOn = new ImageIcon(url);                  iconMuteOn = new ImageIcon(url);
# Line 299  public class Channel extends org.jsample Line 311  public class Channel extends org.jsample
311          private final ChannelProperties propertiesPane;          private final ChannelProperties propertiesPane;
312          private final JButton btnInstr = new InstrumentButton(i18n.getLabel("Channel.btnInstr"));          private final JButton btnInstr = new InstrumentButton(i18n.getLabel("Channel.btnInstr"));
313          private final Action actInstr;          private final Action actInstr;
314            private final JButton btnEdit = new JButton(iconEdit);
315          private final JButton btnMute = new JButton();          private final JButton btnMute = new JButton();
316          private final JButton btnSolo = new JButton();          private final JButton btnSolo = new JButton();
317          private final JSlider slVolume = new JSlider(0, 100);          private final JSlider slVolume = new JSlider(0, 100);
# Line 328  public class Channel extends org.jsample Line 341  public class Channel extends org.jsample
341                                    
342                  mainPane.setLayout(new BoxLayout(mainPane, BoxLayout.Y_AXIS));                  mainPane.setLayout(new BoxLayout(mainPane, BoxLayout.Y_AXIS));
343                  addMouseListener(getHandler());                  addMouseListener(getHandler());
344                    addHierarchyListener(getHandler());
345                                    
346                  JPanel p = new JPanel();                  JPanel p = new JPanel();
347                  p.setOpaque(false);                  p.setOpaque(false);
# Line 341  public class Channel extends org.jsample Line 355  public class Channel extends org.jsample
355                  p.add(btnInstr);                  p.add(btnInstr);
356                  p.add(Box.createRigidArea(new Dimension(6, 0)));                  p.add(Box.createRigidArea(new Dimension(6, 0)));
357                                    
358                    btnEdit.setToolTipText(i18n.getLabel("Channel.btnEdit.tt"));
359                    btnEdit.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0));
360                    p.add(btnEdit);
361                    p.add(Box.createRigidArea(new Dimension(6, 0)));
362                    
363                  lStreams.setHorizontalAlignment(JLabel.CENTER);                  lStreams.setHorizontalAlignment(JLabel.CENTER);
364                  lVoices.setHorizontalAlignment(JLabel.CENTER);                  lVoices.setHorizontalAlignment(JLabel.CENTER);
365                                    
# Line 420  public class Channel extends org.jsample Line 439  public class Channel extends org.jsample
439                                    
440                  btnInstr.addActionListener(actInstr);                  btnInstr.addActionListener(actInstr);
441                                    
442                    btnEdit.addActionListener(new ActionListener() {
443                            public void
444                            actionPerformed(ActionEvent e) {
445                                    CC.getSamplerModel().editBackendInstrument(getChannelId());
446                            }
447                    });
448                    
449                  btnMute.addActionListener(new ActionListener() {                  btnMute.addActionListener(new ActionListener() {
450                          public void                          public void
451                          actionPerformed(ActionEvent e) { changeMute(); }                          actionPerformed(ActionEvent e) { changeMute(); }
# Line 812  public class Channel extends org.jsample Line 838  public class Channel extends org.jsample
838                    
839          private void          private void
840          loadInstrument() {          loadInstrument() {
841                  InstrumentChooser dlg = new InstrumentChooser(CC.getMainFrame());                  JSInstrumentChooser dlg = new JSInstrumentChooser(CC.getMainFrame());
842                  dlg.setVisible(true);                  dlg.setVisible(true);
843                                    
844                  if(!dlg.isCancelled()) {                  if(dlg.isCancelled()) return;
845                          int idx = dlg.getInstrumentIndex();                  
846                          getModel().loadBackendInstrument(dlg.getFileName(), idx);                  SamplerEngine engine = getChannelInfo().getEngine();
847                    if(dlg.getEngine() != null) {
848                            if(engine == null || !dlg.getEngine().equals(engine.getName()));
849                                    getModel().setBackendEngineType(dlg.getEngine());
850                  }                  }
851                    
852                    int idx = dlg.getInstrumentIndex();
853                    getModel().loadBackendInstrument(dlg.getInstrumentFile(), idx);
854                    
855          }          }
856  }  }
857    
# Line 849  class ChannelProperties extends JPanel { Line 882  class ChannelProperties extends JPanel {
882          private InformationDialog fxSendsDlg = null;          private InformationDialog fxSendsDlg = null;
883                    
884          private SamplerChannelModel channelModel = null;          private SamplerChannelModel channelModel = null;
885            private MidiDeviceModel midiDevice = null;
886                    
887          private boolean update = false;          private boolean update = false;
888                    
889            private final SamplerListener samplerListener;
890            private final MapListListener mapListListener = new MapListListener();
891            
892          private class NoMap {          private class NoMap {
893                  public String                  public String
894                  toString() { return "[None]"; }                  toString() { return "[None]"; }
# Line 940  class ChannelProperties extends JPanel { Line 977  class ChannelProperties extends JPanel {
977                          channelChanged(SamplerChannelEvent e) { updateChannelProperties(); }                          channelChanged(SamplerChannelEvent e) { updateChannelProperties(); }
978                  });                  });
979                                    
980                  CC.getSamplerModel().addSamplerListener(new SamplerAdapter() {                  samplerListener = new SamplerAdapter() {
981                          /** Invoked when the default MIDI instrument map is changed. */                          /** Invoked when the default MIDI instrument map is changed. */
982                          public void                          public void
983                          defaultMapChanged(SamplerEvent e) {                          defaultMapChanged(SamplerEvent e) {
984                                  updateCbInstrumentMapToolTipText();                                  updateCbInstrumentMapToolTipText();
                                   
985                          }                          }
986                  });                  };
987                    
988                    CC.getSamplerModel().addSamplerListener(samplerListener);
989                                    
990                  cbInstrumentMap.addItem(noMap);                  cbInstrumentMap.addItem(noMap);
991                  cbInstrumentMap.addItem(defaultMap);                  cbInstrumentMap.addItem(defaultMap);
# Line 978  class ChannelProperties extends JPanel { Line 1016  class ChannelProperties extends JPanel {
1016                  CC.getSamplerModel().addMidiDeviceListListener(getHandler());                  CC.getSamplerModel().addMidiDeviceListListener(getHandler());
1017                  CC.getSamplerModel().addAudioDeviceListListener(getHandler());                  CC.getSamplerModel().addAudioDeviceListListener(getHandler());
1018                  CC.getSamplerModel().addSamplerChannelListListener(getHandler());                  CC.getSamplerModel().addSamplerChannelListListener(getHandler());
1019                                    CC.getSamplerModel().addMidiInstrumentMapListListener(mapListListener);
                 CC.getSamplerModel().addMidiInstrumentMapListListener(new MapListListener());  
1020                                    
1021                  btnAudioProps.setToolTipText(i18n.getLabel("ChannelProperties.routing"));                  btnAudioProps.setToolTipText(i18n.getLabel("ChannelProperties.routing"));
1022                    btnAudioProps.setEnabled(false);
1023                  btnAudioProps.addActionListener(new ActionListener() {                  btnAudioProps.addActionListener(new ActionListener() {
1024                          public void                          public void
1025                          actionPerformed(ActionEvent e) {                          actionPerformed(ActionEvent e) {
1026                                  SamplerChannel c = getModel().getChannelInfo();                                  SamplerChannel c = getModel().getChannelInfo();
1027                                  new ChannelOutputRoutingDlg(CC.getMainFrame(), c).setVisible(true);                                  new JSChannelOutputRoutingDlg(CC.getMainFrame(), c).setVisible(true);
1028                                                    
1029                          }                          }
1030                  });                  });
# Line 1003  class ChannelProperties extends JPanel { Line 1041  class ChannelProperties extends JPanel {
1041                                  FxSendsPane p = new FxSendsPane(getModel());                                  FxSendsPane p = new FxSendsPane(getModel());
1042                                  int id = getModel().getChannelId();                                  int id = getModel().getChannelId();
1043                                  fxSendsDlg = new InformationDialog(CC.getMainFrame(), p);                                  fxSendsDlg = new InformationDialog(CC.getMainFrame(), p);
1044                                  fxSendsDlg.setTitle(i18n.getLabel("FxSendsPane.title", id));                                  fxSendsDlg.setTitle(i18n.getLabel("FxSendsDlg.title", id));
1045                                  fxSendsDlg.setModal(false);                                  fxSendsDlg.setModal(false);
1046                                  fxSendsDlg.showCloseButton(false);                                  fxSendsDlg.showCloseButton(false);
1047                                  fxSendsDlg.setVisible(true);                                  fxSendsDlg.setVisible(true);
# Line 1015  class ChannelProperties extends JPanel { Line 1053  class ChannelProperties extends JPanel {
1053                  updateChannelProperties();                  updateChannelProperties();
1054          }          }
1055                    
1056            class FxSendsPane extends JSFxSendsPane {
1057                    FxSendsPane(SamplerChannelModel model) {
1058                            super(model);
1059                            
1060                            actionAddFxSend.putValue(Action.SMALL_ICON, Res.iconNew16);
1061                            actionRemoveFxSend.putValue(Action.SMALL_ICON, Res.iconDelete16);
1062                    }
1063                    
1064                    protected JToolBar
1065                    createToolBar() {
1066                            JToolBar tb = new JToolBar();
1067                            Dimension d = new Dimension(Short.MAX_VALUE, tb.getPreferredSize().height);
1068                            tb.setMaximumSize(d);
1069                            tb.setFloatable(false);
1070                            tb.setAlignmentX(JPanel.RIGHT_ALIGNMENT);
1071                            
1072                            tb.add(new ToolbarButton(actionAddFxSend));
1073                            tb.add(new ToolbarButton(actionRemoveFxSend));
1074                    
1075                            return tb;
1076                    }
1077            }
1078            
1079          private JPanel          private JPanel
1080          createEnginePane() {          createEnginePane() {
1081                  for(SamplerEngine e : CC.getSamplerModel().getEngines()) cbEngines.addItem(e);                  for(SamplerEngine e : CC.getSamplerModel().getEngines()) cbEngines.addItem(e);
# Line 1201  class ChannelProperties extends JPanel { Line 1262  class ChannelProperties extends JPanel {
1262                  SamplerModel sm = CC.getSamplerModel();                  SamplerModel sm = CC.getSamplerModel();
1263                  SamplerChannel sc = getModel().getChannelInfo();                  SamplerChannel sc = getModel().getChannelInfo();
1264                                    
1265                  MidiDeviceModel mm = sm.getMidiDeviceModel(sc.getMidiInputDevice());                  MidiDeviceModel mm = sm.getMidiDeviceById(sc.getMidiInputDevice());
1266                  AudioDeviceModel am = sm.getAudioDeviceModel(sc.getAudioOutputDevice());                  AudioDeviceModel am = sm.getAudioDeviceById(sc.getAudioOutputDevice());
1267                                    
1268                  if(isUpdate()) CC.getLogger().warning("Unexpected update state!");                  if(isUpdate()) CC.getLogger().warning("Unexpected update state!");
1269                                    
# Line 1214  class ChannelProperties extends JPanel { Line 1275  class ChannelProperties extends JPanel {
1275                          cbEngines.setSelectedItem(sc.getEngine());                          cbEngines.setSelectedItem(sc.getEngine());
1276                                                    
1277                          cbAudioDevice.setSelectedItem(am == null ? null : am.getDeviceInfo());                          cbAudioDevice.setSelectedItem(am == null ? null : am.getDeviceInfo());
1278                            btnAudioProps.setEnabled(am != null);
1279                  } catch(Exception x) {                  } catch(Exception x) {
1280                          CC.getLogger().log(Level.WARNING, "Unkown error", x);                          CC.getLogger().log(Level.WARNING, "Unkown error", x);
1281                  }                  }
1282                                    
1283                  if(sc.getEngine() != null) {                  if(sc.getEngine() != null) {
1284                          if(cbInstrumentMap.getItemCount() > 0) cbInstrumentMap.setEnabled(true);                          cbInstrumentMap.setEnabled(true);
1285                            int id = sc.getMidiInstrumentMapId();
1286                            Object o;
1287                            if(id == -2) o = defaultMap;
1288                            else if(id == -1) o = noMap;
1289                            else o = CC.getSamplerModel().getMidiInstrumentMapById(id);
1290                            
1291                            if(cbInstrumentMap.getSelectedItem() != o) {
1292                                    cbInstrumentMap.setSelectedItem(o);
1293                            }
1294                  } else {                  } else {
1295                          cbInstrumentMap.setSelectedItem(noMap);                          cbInstrumentMap.setSelectedItem(noMap);
1296                          cbInstrumentMap.setEnabled(false);                          cbInstrumentMap.setEnabled(false);
# Line 1241  class ChannelProperties extends JPanel { Line 1312  class ChannelProperties extends JPanel {
1312                  try {                  try {
1313                          cbMidiDevice.removeAllItems();                          cbMidiDevice.removeAllItems();
1314                                    
1315                          for(MidiDeviceModel m : sm.getMidiDeviceModels())                          for(MidiDeviceModel m : sm.getMidiDevices())
1316                                  cbMidiDevice.addItem(m.getDeviceInfo());                                  cbMidiDevice.addItem(m.getDeviceInfo());
1317                                    
1318                          MidiDeviceModel mm = sm.getMidiDeviceModel(sc.getMidiInputDevice());                          MidiDeviceModel mm = sm.getMidiDeviceById(sc.getMidiInputDevice());
1319                          cbMidiDevice.setSelectedItem(mm == null ? null : mm.getDeviceInfo());                          cbMidiDevice.setSelectedItem(mm == null ? null : mm.getDeviceInfo());
1320                  } catch(Exception x) {                  } catch(Exception x) {
1321                          CC.getLogger().log(Level.WARNING, "Unkown error", x);                          CC.getLogger().log(Level.WARNING, "Unkown error", x);
# Line 1266  class ChannelProperties extends JPanel { Line 1337  class ChannelProperties extends JPanel {
1337                  try {                  try {
1338                          cbAudioDevice.removeAllItems();                          cbAudioDevice.removeAllItems();
1339                                    
1340                          for(AudioDeviceModel m : sm.getAudioDeviceModels())                          for(AudioDeviceModel m : sm.getAudioDevices())
1341                                  cbAudioDevice.addItem(m.getDeviceInfo());                                  cbAudioDevice.addItem(m.getDeviceInfo());
1342                                    
1343                          AudioDeviceModel am = sm.getAudioDeviceModel(sc.getAudioOutputDevice());                          AudioDeviceModel am = sm.getAudioDeviceById(sc.getAudioOutputDevice());
1344                          cbAudioDevice.setSelectedItem(am == null ? null : am.getDeviceInfo());                          cbAudioDevice.setSelectedItem(am == null ? null : am.getDeviceInfo());
1345                  } catch(Exception x) {                  } catch(Exception x) {
1346                          CC.getLogger().log(Level.WARNING, "Unkown error", x);                          CC.getLogger().log(Level.WARNING, "Unkown error", x);
# Line 1287  class ChannelProperties extends JPanel { Line 1358  class ChannelProperties extends JPanel {
1358                          return;                          return;
1359                  }                  }
1360                                    
1361                    if(midiDevice != null) midiDevice.removeMidiDeviceListener(getHandler());
1362                    
1363                  cbMidiPort.removeAllItems();                  cbMidiPort.removeAllItems();
1364                                    
1365                  if(mid == null) {                  if(mid == null) {
1366                            midiDevice = null;
1367                          cbMidiPort.setEnabled(false);                          cbMidiPort.setEnabled(false);
1368                                                    
1369                          cbMidiChannel.setSelectedItem(null);                          cbMidiChannel.setSelectedItem(null);
1370                          cbMidiChannel.setEnabled(false);                          cbMidiChannel.setEnabled(false);
1371                  } else {                  } else {
1372                            midiDevice = CC.getSamplerModel().getMidiDeviceById(mid.getDeviceId());
1373                            if(midiDevice != null) midiDevice.addMidiDeviceListener(getHandler());
1374                            
1375                          cbMidiPort.setEnabled(true);                          cbMidiPort.setEnabled(true);
1376                                                    
1377                          MidiPort[] ports = mid.getMidiPorts();                          MidiPort[] ports = mid.getMidiPorts();
# Line 1372  class ChannelProperties extends JPanel { Line 1449  class ChannelProperties extends JPanel {
1449          private Handler          private Handler
1450          getHandler() { return handler; }          getHandler() { return handler; }
1451                    
1452          private class Handler implements MidiDeviceListListener,          private class Handler implements MidiDeviceListListener, ListListener<AudioDeviceModel>,
1453                                  ListListener<AudioDeviceModel>, SamplerChannelListListener {                                          SamplerChannelListListener, MidiDeviceListener {
1454                                    
1455                  /**                  /**
1456                   * Invoked when a new MIDI device is created.                   * Invoked when a new MIDI device is created.
# Line 1432  class ChannelProperties extends JPanel { Line 1509  class ChannelProperties extends JPanel {
1509                  channelRemoved(SamplerChannelListEvent e) {                  channelRemoved(SamplerChannelListEvent e) {
1510                          // Some cleanup when the channel is removed.                          // Some cleanup when the channel is removed.
1511                          if(e.getChannelModel().getChannelId() == channelModel.getChannelId()) {                          if(e.getChannelModel().getChannelId() == channelModel.getChannelId()) {
1512                                  CC.getSamplerModel().removeMidiDeviceListListener(getHandler());                                  SamplerModel sm = CC.getSamplerModel();
1513                                  CC.getSamplerModel().removeAudioDeviceListListener(getHandler());                                  
1514                                    sm.removeMidiDeviceListListener(getHandler());
1515                                    sm.removeAudioDeviceListListener(getHandler());
1516                                    sm.removeMidiInstrumentMapListListener(mapListListener);
1517                                    sm.removeSamplerListener(samplerListener);
1518                                    sm.removeSamplerChannelListListener(getHandler());
1519                                    
1520                                    if(midiDevice != null) {
1521                                            midiDevice.removeMidiDeviceListener(getHandler());
1522                                    }
1523                            }
1524                    }
1525                    
1526                    public void
1527                    settingsChanged(MidiDeviceEvent e) {
1528                            if(isUpdate()) {
1529                                    CC.getLogger().warning("Invalid update state");
1530                                    return;
1531                          }                          }
1532                            
1533                            setUpdate(true);
1534                            int idx = cbMidiPort.getSelectedIndex();
1535                            MidiInputDevice d = e.getMidiDeviceModel().getDeviceInfo();
1536                            
1537                            cbMidiPort.removeAllItems();
1538                            for(MidiPort port : d.getMidiPorts()) cbMidiPort.addItem(port);
1539                            
1540                            if(idx >= cbMidiPort.getModel().getSize()) idx = 0;
1541                            
1542                            setUpdate(false);
1543                            
1544                            if(cbMidiPort.getModel().getSize() > 0) cbMidiPort.setSelectedIndex(idx);
1545                  }                  }
1546          }          }
1547                    
# Line 1442  class ChannelProperties extends JPanel { Line 1549  class ChannelProperties extends JPanel {
1549                  /** Invoked when a new MIDI instrument map is added to a list. */                  /** Invoked when a new MIDI instrument map is added to a list. */
1550                  public void                  public void
1551                  entryAdded(ListEvent<MidiInstrumentMap> e) {                  entryAdded(ListEvent<MidiInstrumentMap> e) {
                         //cbInstrumentMap.addItem(e.getEntry());  
1552                          cbInstrumentMap.insertItemAt(e.getEntry(), cbInstrumentMap.getItemCount());                          cbInstrumentMap.insertItemAt(e.getEntry(), cbInstrumentMap.getItemCount());
1553                          boolean b = getModel().getChannelInfo().getEngine() != null;                          boolean b = getModel().getChannelInfo().getEngine() != null;
1554                          if(b && !cbInstrumentMap.isEnabled()) cbInstrumentMap.setEnabled(true);                          if(b && !cbInstrumentMap.isEnabled()) cbInstrumentMap.setEnabled(true);

Legend:
Removed from v.1143  
changed lines
  Added in v.1343

  ViewVC Help
Powered by ViewVC