47 |
import javax.swing.JPanel; |
import javax.swing.JPanel; |
48 |
import javax.swing.JRadioButton; |
import javax.swing.JRadioButton; |
49 |
import javax.swing.JSpinner; |
import javax.swing.JSpinner; |
|
import javax.swing.JTextField; |
|
50 |
import javax.swing.SpinnerNumberModel; |
import javax.swing.SpinnerNumberModel; |
51 |
|
|
52 |
import javax.swing.event.ChangeEvent; |
import javax.swing.event.ChangeEvent; |
61 |
|
|
62 |
import org.jsampler.CC; |
import org.jsampler.CC; |
63 |
import org.jsampler.Instrument; |
import org.jsampler.Instrument; |
64 |
|
import org.jsampler.JSPrefs; |
65 |
import org.jsampler.OrchestraModel; |
import org.jsampler.OrchestraModel; |
66 |
|
|
67 |
import org.jsampler.task.InstrumentsDb; |
import org.jsampler.task.InstrumentsDb; |
68 |
|
|
69 |
import static org.jsampler.view.std.StdI18n.i18n; |
import static org.jsampler.view.std.StdI18n.i18n; |
70 |
|
import static org.linuxsampler.lscp.Parser.*; |
71 |
|
|
72 |
/** |
/** |
73 |
* |
* |
92 |
private final JComboBox cbInstruments = new JComboBox(); |
private final JComboBox cbInstruments = new JComboBox(); |
93 |
|
|
94 |
|
|
95 |
private final JTextField tfDbInstrument = new JTextField(); |
private final JComboBox cbDbInstrument = createComboBox(); |
96 |
private final JButton btnBrowseDb; |
private final JButton btnBrowseDb; |
97 |
|
|
98 |
private final JLabel lFilename = new JLabel(i18n.getLabel("JSInstrumentChooser.lFilename")); |
private final JLabel lFilename = new JLabel(i18n.getLabel("JSInstrumentChooser.lFilename")); |
99 |
private final JLabel lIndex = new JLabel(i18n.getLabel("JSInstrumentChooser.lIndex")); |
private final JLabel lIndex = new JLabel(i18n.getLabel("JSInstrumentChooser.lIndex")); |
100 |
|
|
101 |
private final JTextField tfFilename = new JTextField(); |
private final JComboBox cbFilename = createComboBox(); |
102 |
private final JSpinner spinnerIndex = new JSpinner(new SpinnerNumberModel(0, 0, 500, 1)); |
private final JSpinner spinnerIndex = new JSpinner(new SpinnerNumberModel(0, 0, 500, 1)); |
103 |
|
|
104 |
private final JButton btnBrowse; |
private final JButton btnBrowse; |
131 |
cbOrchestras.addFocusListener(getHandler()); |
cbOrchestras.addFocusListener(getHandler()); |
132 |
cbInstruments.addFocusListener(getHandler()); |
cbInstruments.addFocusListener(getHandler()); |
133 |
|
|
134 |
tfDbInstrument.addFocusListener(getHandler()); |
cbDbInstrument.addFocusListener(getHandler()); |
135 |
tfDbInstrument.getDocument().addDocumentListener(getHandler()); |
cbDbInstrument.addActionListener(getHandler()); |
136 |
|
cbDbInstrument.addActionListener(new ActionListener() { |
137 |
|
public void |
138 |
|
actionPerformed(ActionEvent e) { |
139 |
|
if(!rbSelectFromDb.isSelected()) rbSelectFromDb.doClick(0); |
140 |
|
} |
141 |
|
}); |
142 |
|
cbDbInstrument.setEditable(true); |
143 |
|
|
144 |
|
String[] instrs = preferences().getStringListProperty("recentDbInstruments"); |
145 |
|
for(String s : instrs) cbDbInstrument.addItem(s); |
146 |
|
cbDbInstrument.setSelectedItem(null); |
147 |
|
|
148 |
|
cbFilename.addFocusListener(getHandler()); |
149 |
|
cbFilename.addActionListener(getHandler()); |
150 |
|
cbFilename.addActionListener(new ActionListener() { |
151 |
|
public void |
152 |
|
actionPerformed(ActionEvent e) { |
153 |
|
if(!rbSelectFromFile.isSelected()) rbSelectFromFile.doClick(0); |
154 |
|
} |
155 |
|
}); |
156 |
|
cbFilename.setEditable(true); |
157 |
|
|
158 |
tfFilename.addFocusListener(getHandler()); |
String[] files = preferences().getStringListProperty("recentInstrumentFiles"); |
159 |
tfFilename.getDocument().addDocumentListener(getHandler()); |
for(String s : files) cbFilename.addItem(s); |
160 |
|
cbFilename.setSelectedItem(null); |
161 |
|
|
162 |
spinnerIndex.addChangeListener(new ChangeListener() { |
spinnerIndex.addChangeListener(new ChangeListener() { |
163 |
public void |
public void |
194 |
|
|
195 |
if(!CC.getSamplerModel().getServerInfo().hasInstrumentsDbSupport()) { |
if(!CC.getSamplerModel().getServerInfo().hasInstrumentsDbSupport()) { |
196 |
rbSelectFromDb.setEnabled(false); |
rbSelectFromDb.setEnabled(false); |
197 |
tfDbInstrument.setEnabled(false); |
cbDbInstrument.setEnabled(false); |
198 |
btnBrowseDb.setEnabled(false); |
btnBrowseDb.setEnabled(false); |
199 |
} else { |
} else { |
200 |
btnBrowseDb.requestFocusInWindow(); |
btnBrowseDb.requestFocusInWindow(); |
201 |
} |
} |
202 |
|
|
203 |
|
int i = preferences().getIntProperty("lastUsedOrchestraIndex", 0); |
204 |
|
if(CC.getOrchestras().getOrchestraCount() > i) { |
205 |
|
cbOrchestras.setSelectedIndex(i); |
206 |
|
i = preferences().getIntProperty("lastUsedOrchestraInstrumentIndex", 0); |
207 |
|
if(cbInstruments.getItemCount() > i) cbInstruments.setSelectedIndex(i); |
208 |
|
} |
209 |
|
|
210 |
|
String s = preferences().getStringProperty("lastUsedInstrumentSelectionMethod"); |
211 |
|
if("fromOrchestra".equals(s)) { |
212 |
|
if(!rbSelectFromOrchestra.isSelected()) rbSelectFromOrchestra.doClick(0); |
213 |
|
cbInstruments.requestFocusInWindow(); |
214 |
|
} else if("fromDb".equals(s)) { |
215 |
|
if(!rbSelectFromDb.isSelected()) rbSelectFromDb.doClick(0); |
216 |
|
} else if("fromFile".equals(s)) { |
217 |
|
if(!rbSelectFromFile.isSelected()) rbSelectFromFile.doClick(0); |
218 |
|
btnBrowse.requestFocusInWindow(); |
219 |
|
} else { |
220 |
|
if(!rbSelectFromOrchestra.isSelected()) rbSelectFromOrchestra.doClick(0); |
221 |
|
} |
222 |
|
|
223 |
|
updateState(); |
224 |
} |
} |
225 |
|
|
226 |
private JPanel |
private JPanel |
280 |
return p; |
return p; |
281 |
} |
} |
282 |
|
|
283 |
|
protected JComboBox |
284 |
|
createComboBox() { return new JComboBox(); } |
285 |
|
|
286 |
|
protected JSPrefs |
287 |
|
preferences() { return CC.getViewConfig().preferences(); } |
288 |
|
|
289 |
private void |
private void |
290 |
orchestraChanged() { |
orchestraChanged() { |
291 |
OrchestraModel om = (OrchestraModel)cbOrchestras.getSelectedItem(); |
OrchestraModel om = (OrchestraModel)cbOrchestras.getSelectedItem(); |
322 |
createDbPane() { |
createDbPane() { |
323 |
JPanel p = new JPanel(); |
JPanel p = new JPanel(); |
324 |
p.setLayout(new BoxLayout(p, BoxLayout.X_AXIS)); |
p.setLayout(new BoxLayout(p, BoxLayout.X_AXIS)); |
325 |
p.add(tfDbInstrument); |
p.add(cbDbInstrument); |
326 |
p.add(Box.createRigidArea(new Dimension(6, 0))); |
p.add(Box.createRigidArea(new Dimension(6, 0))); |
327 |
btnBrowseDb.setMargin(new Insets(0, 0, 0, 0)); |
btnBrowseDb.setMargin(new Insets(0, 0, 0, 0)); |
328 |
p.add(btnBrowseDb); |
p.add(btnBrowseDb); |
329 |
//p.setMaximumSize(new Dimension(Short.MAX_VALUE, p.getPreferredSize().height)); |
|
330 |
|
|
331 |
|
|
332 |
|
cbDbInstrument.setPreferredSize ( |
333 |
|
new Dimension(200, cbDbInstrument.getPreferredSize().height) |
334 |
|
); |
335 |
|
|
336 |
btnBrowseDb.addActionListener(new ActionListener() { |
btnBrowseDb.addActionListener(new ActionListener() { |
337 |
public void |
public void |
338 |
actionPerformed(ActionEvent e) { |
actionPerformed(ActionEvent e) { onBrowseDb(); } |
|
if(!rbSelectFromDb.isSelected()) rbSelectFromDb.doClick(0); |
|
|
JSDbInstrumentChooser dlg; |
|
|
dlg = new JSDbInstrumentChooser(JSInstrumentChooser.this); |
|
|
String s = tfDbInstrument.getText(); |
|
|
if(s.length() > 0) dlg.setSelectedInstrument(s); |
|
|
else dlg.setSelectedDirectory("/"); |
|
|
dlg.setVisible(true); |
|
|
if(dlg.isCancelled()) return; |
|
|
tfDbInstrument.setText(dlg.getSelectedInstrument()); |
|
|
tfDbInstrument.requestFocus(); |
|
|
} |
|
339 |
}); |
}); |
340 |
|
|
341 |
p.setAlignmentX(LEFT_ALIGNMENT); |
p.setAlignmentX(LEFT_ALIGNMENT); |
378 |
c.gridy = 0; |
c.gridy = 0; |
379 |
c.weightx = 1.0; |
c.weightx = 1.0; |
380 |
c.anchor = GridBagConstraints.WEST; |
c.anchor = GridBagConstraints.WEST; |
381 |
gridbag.setConstraints(tfFilename, c); |
gridbag.setConstraints(cbFilename, c); |
382 |
filePane.add(tfFilename); |
filePane.add(cbFilename); |
383 |
|
|
384 |
c.gridx = 1; |
c.gridx = 1; |
385 |
c.gridy = 1; |
c.gridy = 1; |
386 |
gridbag.setConstraints(spinnerIndex, c); |
gridbag.setConstraints(spinnerIndex, c); |
387 |
filePane.add(spinnerIndex); |
filePane.add(spinnerIndex); |
388 |
|
|
389 |
tfFilename.setPreferredSize ( |
cbFilename.setPreferredSize ( |
390 |
new Dimension(200, tfFilename.getPreferredSize().height) |
new Dimension(200, cbFilename.getPreferredSize().height) |
391 |
); |
); |
392 |
|
|
393 |
btnBrowse.addActionListener(new ActionListener() { |
btnBrowse.addActionListener(new ActionListener() { |
402 |
protected void |
protected void |
403 |
onOk() { |
onOk() { |
404 |
if(!btnOk.isEnabled()) return; |
if(!btnOk.isEnabled()) return; |
405 |
|
|
406 |
|
String s = "lastUsedInstrumentSelectionMethod"; |
407 |
|
|
408 |
if(rbSelectFromOrchestra.isSelected()) { |
if(rbSelectFromOrchestra.isSelected()) { |
409 |
Instrument instr = (Instrument)cbInstruments.getSelectedItem(); |
Instrument instr = (Instrument)cbInstruments.getSelectedItem(); |
410 |
instrumentFile = instr.getPath(); |
instrumentFile = instr.getPath(); |
411 |
instrumentIndex = instr.getInstrumentIndex(); |
instrumentIndex = instr.getInstrumentIndex(); |
412 |
engine = instr.getEngine(); |
engine = instr.getEngine(); |
413 |
setVisible(false); |
setVisible(false); |
414 |
|
|
415 |
|
int i = cbOrchestras.getSelectedIndex(); |
416 |
|
if(i >= 0) preferences().setIntProperty("lastUsedOrchestraIndex", i); |
417 |
|
|
418 |
|
i = cbInstruments.getSelectedIndex(); |
419 |
|
if(i >= 0) { |
420 |
|
preferences().setIntProperty("lastUsedOrchestraInstrumentIndex", i); |
421 |
|
} |
422 |
|
|
423 |
|
preferences().setStringProperty(s, "fromOrchestra"); |
424 |
|
|
425 |
return; |
return; |
426 |
} |
} |
427 |
|
|
428 |
if(rbSelectFromFile.isSelected()) { |
if(rbSelectFromFile.isSelected()) { |
429 |
instrumentFile = tfFilename.getText(); |
instrumentFile = cbFilename.getSelectedItem().toString(); |
430 |
instrumentIndex = Integer.parseInt(spinnerIndex.getValue().toString()); |
instrumentIndex = Integer.parseInt(spinnerIndex.getValue().toString()); |
431 |
|
|
432 |
|
StdUtils.updateRecentElements("recentInstrumentFiles", instrumentFile); |
433 |
|
preferences().setStringProperty(s, "fromFile"); |
434 |
setVisible(false); |
setVisible(false); |
435 |
return; |
return; |
436 |
} |
} |
437 |
|
|
438 |
if(!rbSelectFromDb.isSelected()) return; |
if(!rbSelectFromDb.isSelected()) return; |
439 |
|
|
440 |
String instr = tfDbInstrument.getText(); |
preferences().setStringProperty(s, "fromDb"); |
441 |
|
|
442 |
|
String instr = cbDbInstrument.getSelectedItem().toString(); |
443 |
|
preferences().setStringProperty("lastUsedDbInstrument", instr); |
444 |
final InstrumentsDb.GetInstrument t = new InstrumentsDb.GetInstrument(instr); |
final InstrumentsDb.GetInstrument t = new InstrumentsDb.GetInstrument(instr); |
445 |
|
|
446 |
|
StdUtils.updateRecentElements("recentDbInstruments", instr); |
447 |
|
|
448 |
t.addTaskListener(new TaskListener() { |
t.addTaskListener(new TaskListener() { |
449 |
public void |
public void |
450 |
taskPerformed(TaskEvent e) { |
taskPerformed(TaskEvent e) { |
468 |
private void |
private void |
469 |
onBrowse() { |
onBrowse() { |
470 |
if(!rbSelectFromFile.isSelected()) rbSelectFromFile.doClick(0); |
if(!rbSelectFromFile.isSelected()) rbSelectFromFile.doClick(0); |
471 |
JFileChooser fc = new JFileChooser(); |
String s = preferences().getStringProperty("lastInstrumentLocation"); |
472 |
|
JFileChooser fc = new JFileChooser(s); |
473 |
int result = fc.showOpenDialog(this); |
int result = fc.showOpenDialog(this); |
474 |
if(result == JFileChooser.APPROVE_OPTION) { |
if(result != JFileChooser.APPROVE_OPTION) return; |
475 |
tfFilename.setText(fc.getSelectedFile().getPath()); |
|
476 |
btnOk.requestFocusInWindow(); |
String path = fc.getSelectedFile().getAbsolutePath(); |
477 |
|
if(java.io.File.separatorChar == '\\') { |
478 |
|
path.replace('\\', '/'); |
479 |
|
} |
480 |
|
cbFilename.setSelectedItem(toEscapedString(path)); |
481 |
|
btnOk.requestFocusInWindow(); |
482 |
|
|
483 |
|
path = fc.getCurrentDirectory().getAbsolutePath(); |
484 |
|
preferences().setStringProperty("lastInstrumentLocation", path); |
485 |
|
} |
486 |
|
|
487 |
|
private void |
488 |
|
onBrowseDb() { |
489 |
|
if(!rbSelectFromDb.isSelected()) rbSelectFromDb.doClick(0); |
490 |
|
JSDbInstrumentChooser dlg; |
491 |
|
dlg = new JSDbInstrumentChooser(JSInstrumentChooser.this); |
492 |
|
Object o = cbDbInstrument.getSelectedItem(); |
493 |
|
if(o != null && o.toString().length() > 0) dlg.setSelectedInstrument(o.toString()); |
494 |
|
else { |
495 |
|
String s = preferences().getStringProperty("lastUsedDbInstrument", ""); |
496 |
|
if(s.length() > 0) dlg.setSelectedInstrument(s); |
497 |
|
else dlg.setSelectedDirectory("/"); |
498 |
} |
} |
499 |
|
dlg.setVisible(true); |
500 |
|
if(dlg.isCancelled()) return; |
501 |
|
cbDbInstrument.setSelectedItem(dlg.getSelectedInstrument()); |
502 |
|
cbDbInstrument.requestFocus(); |
503 |
} |
} |
504 |
|
|
505 |
/** |
/** |
525 |
if(rbSelectFromOrchestra.isSelected()) { |
if(rbSelectFromOrchestra.isSelected()) { |
526 |
b = cbInstruments.getSelectedItem() != null; |
b = cbInstruments.getSelectedItem() != null; |
527 |
} else if(rbSelectFromDb.isSelected()) { |
} else if(rbSelectFromDb.isSelected()) { |
528 |
b = tfDbInstrument.getText().length() > 0; |
Object o = cbDbInstrument.getSelectedItem(); |
529 |
|
b = o != null && o.toString().length() > 0; |
530 |
} else if(rbSelectFromFile.isSelected()) { |
} else if(rbSelectFromFile.isSelected()) { |
531 |
b = tfFilename.getText().length() > 0; |
Object o = cbFilename.getSelectedItem(); |
532 |
|
if(o == null) b = false; |
533 |
|
else b = o.toString().length() > 0; |
534 |
} |
} |
535 |
|
|
536 |
btnOk.setEnabled(b); |
btnOk.setEnabled(b); |
567 |
if(!rbSelectFromOrchestra.isSelected()) { |
if(!rbSelectFromOrchestra.isSelected()) { |
568 |
rbSelectFromOrchestra.doClick(0); |
rbSelectFromOrchestra.doClick(0); |
569 |
} |
} |
570 |
} else if(src == tfDbInstrument) { |
} else if(src == cbDbInstrument) { |
571 |
if(!rbSelectFromDb.isSelected()) rbSelectFromDb.doClick(0); |
if(!rbSelectFromDb.isSelected()) rbSelectFromDb.doClick(0); |
572 |
} else if(src == tfFilename) { |
} else if(src == cbFilename) { |
573 |
if(!rbSelectFromFile.isSelected()) rbSelectFromFile.doClick(0); |
if(!rbSelectFromFile.isSelected()) rbSelectFromFile.doClick(0); |
574 |
} |
} |
575 |
} |
} |