From: <ge...@us...> - 2003-03-27 20:46:04
|
Update of /cvsroot/jsynthlib/JSynthLib/core In directory sc8-pr-cvs1:/tmp/cvs-serv28090 Modified Files: AbstractLibraryFrame.java AbstractPatchListModel.java PatchEdit.java SearchDialog.java Added Files: Scene.java SceneFrame.java SceneListModel.java SceneTableCellEditor.java Log Message: Refactorting Performance->Scene --- NEW FILE: Scene.java --- /* * Scene.java * * Created on 18. April 2002, 20:51 * * Refactored from Performance.java */ package core; import java.io.*; import java.awt.datatransfer.*; import javax.swing.JComboBox; /** * @version $Id: Scene.java,v 1.1 2003/03/27 20:45:55 gehnen Exp $ * @author Gerrit Gehnen */ public class Scene extends java.lang.Object implements Serializable, Transferable { private Patch patch; private int bankNumber; private int patchNumber; private StringBuffer comment; /** Creates a new instance of Scene */ public Scene() { patch=new Patch(); bankNumber=0; patchNumber=0; comment=new StringBuffer(); } public Scene(Patch p) { patch=p; bankNumber=0; patchNumber=0; comment=p.comment; } /** Getter for property bankNumber. * @return Value of property bankNumber. */ public int getBankNumber() { return bankNumber; } /** Setter for property bankNumber. * @param bankNumber New value of property bankNumber. */ public void setBankNumber(int bankNumber) { this.bankNumber = bankNumber; } /** Getter for property patchNumber. * @return Value of property patchNumber. */ public int getPatchNumber() { return patchNumber; } /** Setter for property patchNumber. * @param patchNumber New value of property patchNumber. */ public void setPatchNumber(int patchNumber) { this.patchNumber = patchNumber; } /** Getter for property patch. * @return Value of property patch. */ public core.Patch getPatch() { return patch; } /** Setter for property patch. * @param patch New value of property patch. */ public void setPatch(core.Patch patch) { this.patch = patch; } public Object getTransferData(java.awt.datatransfer.DataFlavor dataFlavor) throws java.awt.datatransfer.UnsupportedFlavorException, java.io.IOException { return this; } public java.awt.datatransfer.DataFlavor[] getTransferDataFlavors() { System.out.println("getTransferDataFlavors "+patch.driverNum); DataFlavor[] df=new DataFlavor[1]; df[0]= new DataFlavor(patch.getDriver().getClass(),patch.getDriver().toString()); return df; } public boolean isDataFlavorSupported(java.awt.datatransfer.DataFlavor dataFlavor) { System.out.println("isDataFlavorSupported "+patch.driverNum); if( dataFlavor.equals(new DataFlavor(patch.getDriver().getClass(),patch.getDriver().toString()))) { return true; } return false; } /** Getter for property comment. * @return Value of property comment. */ public java.lang.StringBuffer getComment() { return comment; } /** Setter for property comment. * @param comment New value of property comment. */ public void setComment(java.lang.StringBuffer comment) { this.comment = comment; } } --- NEW FILE: SceneFrame.java --- package core; import java.awt.event.MouseEvent; import javax.swing.JOptionPane; import java.io.File; import javax.swing.event.InternalFrameEvent; /** * * @author Gerrit Gehnen * @version $Id: SceneFrame.java,v 1.1 2003/03/27 20:45:55 gehnen Exp $ */ public class SceneFrame extends javax.swing.JInternalFrame implements AbstractLibraryFrame { static int openFrameCount = 0; static final int xOffset = 30, yOffset = 30; SceneListModel myModel; public DNDLibraryTable table; DNDLibraryTable table2; javax.swing.JLabel statusBar; File filename; boolean changed=false; //has the library been altered since it was last saved? SceneTableCellEditor rowEditor ; /** * @param file */ public SceneFrame(File file) { super(file.getName(), true, //resizable true, //closable true, //maximizable true);//iconifiable InitLibraryFrame(); } public SceneFrame() { super("Unsaved Scene #" + (++openFrameCount), true, //resizable true, //closable true, //maximizable true);//iconifiable InitLibraryFrame(); } protected void InitLibraryFrame() { //...Create the GUI and put it in the window... addInternalFrameListener(new javax.swing.event.InternalFrameListener() { public void internalFrameClosing(InternalFrameEvent e) { if (!changed) return; int i; javax.swing.JInternalFrame[] jList =PatchEdit.desktop.getAllFrames(); for (int j=0;j<jList.length;j++) { if (jList[j] instanceof BankEditorFrame) { for (i=0;i<myModel.sceneList.size();i++) if (((BankEditorFrame)(jList[j])).bankData==((Scene)myModel.sceneList.get(i)).getPatch()) { jList[j].moveToFront(); try{jList[j].setSelected(true); jList[j].setClosed(true); }catch (Exception e1){} break;} } if (jList[j] instanceof PatchEditorFrame) { for (i=0;i<myModel.sceneList.size();i++) if (((PatchEditorFrame)(jList[j])).p==((Patch)(myModel.sceneList.get(i)))) { jList[j].moveToFront(); try{jList[j].setSelected(true); jList[j].setClosed(true); }catch (Exception e1){} break;} } } if (JOptionPane.showConfirmDialog(null,"This Scene may contain unsaved data.\nSave before closing?","Unsaved Data",JOptionPane.YES_NO_OPTION) == JOptionPane.NO_OPTION) return; if (getTitle().startsWith("Unsaved Scene")) { javax.swing.JFileChooser fc2=new javax.swing.JFileChooser(); javax.swing.filechooser.FileFilter type1 = new ExtensionFilter("PatchEdit Scene Files",".scenelib"); fc2.addChoosableFileFilter(type1); fc2.setFileFilter(type1); int returnVal = fc2.showSaveDialog(null); if (returnVal == javax.swing.JFileChooser.APPROVE_OPTION) { File file = fc2.getSelectedFile(); try { if (!file.getName().toUpperCase().endsWith(".SCENELIB")) file=new File(file.getPath()+".scenelib"); if (file.isDirectory()) { ErrorMsg.reportError("Error", "Can not save over a directory"); return; } if (file.exists()) if (JOptionPane.showConfirmDialog(null,"Are you sure?","File Exists",JOptionPane.YES_NO_OPTION) == JOptionPane.NO_OPTION) return; save(file); } catch (Exception ex) { ErrorMsg.reportError("Error", "Error saving File",ex); } } return; } try { save(); } catch (Exception ex) {}; } public void internalFrameOpened(InternalFrameEvent e) {} public void internalFrameActivated(InternalFrameEvent e) { PatchEdit.receiveAction.setEnabled(true); PatchEdit.pasteAction.setEnabled(true); PatchEdit.importAction.setEnabled(true); PatchEdit.importAllAction.setEnabled(true); PatchEdit.newPatchAction.setEnabled(true); if (table.getRowCount()>0) { PatchEdit.saveAction.setEnabled(true); PatchEdit.menuSaveAs.setEnabled(true); PatchEdit.searchAction.setEnabled(true); PatchEdit.transferSceneAction.setEnabled(true); } if (table.getRowCount()>1) { PatchEdit.sortAction.setEnabled(true); PatchEdit.dupAction.setEnabled(true); PatchEdit.crossBreedAction.setEnabled(true); } if (table.getSelectedRowCount()>0) { PatchEdit.extractAction.setEnabled(true); PatchEdit.sendAction.setEnabled(true); PatchEdit.sendToAction.setEnabled(true); PatchEdit.playAction.setEnabled(true); PatchEdit.storeAction.setEnabled(true); PatchEdit.reassignAction.setEnabled(true); Patch myPatch=((Scene)myModel.sceneList.get(table.getSelectedRow())).getPatch(); try{ // look, if the driver for the selected patch brings his own editor myPatch.getDriver().getClass().getDeclaredMethod("editPatch", new Class[]{myPatch.getClass()}); // since the call didn't throw an exception, the driver implements the method itself PatchEdit.editAction.setEnabled(true); } catch(NoSuchMethodException ex) { // oh, the driver has no own editor. Is it a bank driver? if (myPatch.getDriver() instanceof BankDriver) { // for a bankDriver is it ok, since the universal bankEditor works PatchEdit.editAction.setEnabled(true); } else { // don't allow editing PatchEdit.editAction.setEnabled(false); } }; PatchEdit.cutAction.setEnabled(true); PatchEdit.copyAction.setEnabled(true); PatchEdit.deleteAction.setEnabled(true); PatchEdit.exportAction.setEnabled(true); } } public void internalFrameClosed(InternalFrameEvent e) {} public void internalFrameDeactivated(InternalFrameEvent e) { PatchEdit.receiveAction.setEnabled(false); PatchEdit.extractAction.setEnabled(false); PatchEdit.sendAction.setEnabled(false); PatchEdit.sendToAction.setEnabled(false); PatchEdit.playAction.setEnabled(false); PatchEdit.storeAction.setEnabled(false); PatchEdit.reassignAction.setEnabled(false); PatchEdit.editAction.setEnabled(false); PatchEdit.saveAction.setEnabled(false); PatchEdit.menuSaveAs.setEnabled(false); PatchEdit.sortAction.setEnabled(false); PatchEdit.searchAction.setEnabled(false); PatchEdit.dupAction.setEnabled(false); PatchEdit.cutAction.setEnabled(false); PatchEdit.copyAction.setEnabled(false); PatchEdit.pasteAction.setEnabled(false); PatchEdit.deleteAction.setEnabled(false); PatchEdit.importAction.setEnabled(false); PatchEdit.importAllAction.setEnabled(false); PatchEdit.exportAction.setEnabled(false); PatchEdit.newPatchAction.setEnabled(false); PatchEdit.crossBreedAction.setEnabled(false); PatchEdit.transferSceneAction.setEnabled(false); } public void internalFrameDeiconified(InternalFrameEvent e) {} public void internalFrameIconified(InternalFrameEvent e) {} }); myModel = new SceneListModel(changed); table = new DNDLibraryTable(myModel); table2=table; rowEditor=new SceneTableCellEditor(table); table.setPreferredScrollableViewportSize(new java.awt.Dimension(500, 70)); table.addMouseListener(new java.awt.event.MouseAdapter() { public void mousePressed(MouseEvent e) { if(e.isPopupTrigger()) { PatchEdit.menuPatchPopup.show(table2, e.getX(), e.getY()); table2.setRowSelectionInterval( table2.rowAtPoint(new java.awt.Point(e.getX(),e.getY())), table2.rowAtPoint(new java.awt.Point(e.getX(),e.getY())) ); } } public void mouseReleased(MouseEvent e) { if(e.isPopupTrigger()) { PatchEdit.menuPatchPopup.show(table2, e.getX(), e.getY()); table2.setRowSelectionInterval( table2.rowAtPoint(new java.awt.Point(e.getX(),e.getY())), table2.rowAtPoint(new java.awt.Point(e.getX(),e.getY())) ); } } public void mouseClicked(MouseEvent e) { if(e.getClickCount()==2) { PlaySelectedPatch(); } } }); //Create the scroll pane and add the table to it. final javax.swing.JScrollPane scrollPane = new javax.swing.JScrollPane(table); DNDViewport myviewport=new DNDViewport(); scrollPane.setViewport(myviewport); myviewport.setView(table); scrollPane.getVerticalScrollBar().addMouseListener(new java.awt.event.MouseAdapter() { public void mousePressed(MouseEvent e) {} public void mouseReleased(MouseEvent e) { myModel.fireTableDataChanged(); } }); //Add the scroll pane to this window. javax.swing.JPanel statusPanel=new javax.swing.JPanel(); statusBar=new javax.swing.JLabel(myModel.sceneList.size()+" Patches"); statusPanel.add(statusBar); getContentPane().setLayout(new java.awt.BorderLayout()); getContentPane().add(scrollPane, java.awt.BorderLayout.CENTER); getContentPane().add(statusPanel, java.awt.BorderLayout.SOUTH); javax.swing.table.TableColumn column = null; column = table.getColumnModel().getColumn(0); // Synth column.setPreferredWidth(50); column = table.getColumnModel().getColumn(1); // Type column.setPreferredWidth(50); column = table.getColumnModel().getColumn(2); // Patch Name column.setPreferredWidth(100); column = table.getColumnModel().getColumn(3); //Bank Number column.setPreferredWidth(50); column.setCellEditor(rowEditor); // Set the special pop-up Editor for Bank numbers column = table.getColumnModel().getColumn(4); //Patch Number column.setPreferredWidth(50); column.setCellEditor(rowEditor); // Set the special pop-up Editorfor Patch Numbers column = table.getColumnModel().getColumn(5); //Comment column.setPreferredWidth(200); //...Then set the window size or call pack... setSize(600,300); //Set the window's location. setLocation(xOffset*openFrameCount, yOffset*openFrameCount); this.addFocusListener(new java.awt.event.FocusListener() { public void focusGained(java.awt.event.FocusEvent e) { // System.out.println ("Focus Gained"); } public void focusLost(java.awt.event.FocusEvent e) { //System.out.println ("Focus Lost"); } }); table.getModel().addTableModelListener( new javax.swing.event.TableModelListener() { public void tableChanged(javax.swing.event.TableModelEvent e) { statusBar.setText(myModel.sceneList.size()+" Patches"); if (((SceneListModel)e.getSource()).getRowCount()>0) { PatchEdit.saveAction.setEnabled(true); PatchEdit.menuSaveAs.setEnabled(true); PatchEdit.searchAction.setEnabled(true); PatchEdit.exportAction.setEnabled(true); PatchEdit.transferSceneAction.setEnabled(true); } if (((SceneListModel)e.getSource()).getRowCount()>1) { PatchEdit.sortAction.setEnabled(true); PatchEdit.dupAction.setEnabled(true); PatchEdit.crossBreedAction.setEnabled(true); } } } ); table.getSelectionModel().addListSelectionListener(new javax.swing.event.ListSelectionListener() { public void valueChanged(javax.swing.event.ListSelectionEvent e) { //System.out.println ("ValueChanged"+((ListSelectionModel)e.getSource ()).getMaxSelectionIndex ()); if (((javax.swing.ListSelectionModel)e.getSource()).getMaxSelectionIndex()>=0) { PatchEdit.extractAction.setEnabled(true); PatchEdit.sendAction.setEnabled(true); PatchEdit.sendToAction.setEnabled(true); PatchEdit.playAction.setEnabled(true); PatchEdit.storeAction.setEnabled(true); PatchEdit.reassignAction.setEnabled(true); Patch myPatch=((Scene)myModel.sceneList.get(table.getSelectedRow())).getPatch(); try{ myPatch.getDriver().getClass().getDeclaredMethod("editPatch", new Class[]{myPatch.getClass()}); PatchEdit.editAction.setEnabled(true); } catch(NoSuchMethodException ex) { if (myPatch.getDriver() instanceof BankDriver) PatchEdit.editAction.setEnabled(true); else PatchEdit.editAction.setEnabled(false); }; PatchEdit.copyAction.setEnabled(true); PatchEdit.cutAction.setEnabled(true); PatchEdit.deleteAction.setEnabled(true); PatchEdit.exportAction.setEnabled(true); } else { PatchEdit.extractAction.setEnabled(false); PatchEdit.sendAction.setEnabled(false); PatchEdit.sendToAction.setEnabled(false); PatchEdit.playAction.setEnabled(false); PatchEdit.storeAction.setEnabled(false); PatchEdit.reassignAction.setEnabled(false); PatchEdit.editAction.setEnabled(false); PatchEdit.copyAction.setEnabled(false); PatchEdit.cutAction.setEnabled(false); PatchEdit.deleteAction.setEnabled(false); } } }); } /** * @param file * @throws IOException * @throws FileNotFoundException */ public void ImportPatch(File file) throws java.io.IOException, java.io.FileNotFoundException { int i; int offset=0; java.io.FileInputStream fileIn= new java.io.FileInputStream(file); byte [] buffer =new byte [(int)file.length()]; fileIn.read(buffer); fileIn.close(); while (offset<buffer.length-1) { // There is still something unprocessed in the file Patch firstpat=new Patch(buffer,offset); offset+=firstpat.sysex.length; //System.out.println("Buffer length:"+ buffer.length+" Patch Lenght: "+firstpat.sysex.length); Patch[] patarray=firstpat.dissect(); if (patarray.length>1) { // Conversion was sucessfull, we have at least one converted patch for (int j=0;j<patarray.length;j++) { myModel.sceneList.add(patarray[j]); // add all converted patches } } else { // No conversion. Try just the original patch.... if (table.getSelectedRowCount()==0) myModel.sceneList.add(firstpat); else myModel.sceneList.add(table.getSelectedRow(),firstpat); } } myModel.fireTableDataChanged(); changed=true; } /** * @param file * @throws IOException * @throws FileNotFoundException */ public void ExportPatch(File file) throws java.io.IOException, java.io.FileNotFoundException { if (table.getSelectedRowCount()==0) { ErrorMsg.reportError("Error", "No Patch Selected."); return; } java.io.FileOutputStream fileOut= new java.io.FileOutputStream(file); fileOut.write(((Patch)myModel.sceneList.get(table.getSelectedRow())).sysex); fileOut.close(); } public void DeleteSelectedPatch() { if (table.getSelectedRowCount()==0) { ErrorMsg.reportError("Error", "No Patch Selected."); return; } myModel.sceneList.remove(table.getSelectedRow()); myModel.fireTableDataChanged(); } public void CopySelectedPatch() { try { if (table.getSelectedRowCount()==0) { ErrorMsg.reportError("Error", "No Patch Selected."); return; } Patch myPatch=((Scene)myModel.sceneList.get(table.getSelectedRow())).getPatch(); byte [] mySysex = new byte[myPatch.sysex.length]; System.arraycopy(myPatch.sysex,0,mySysex,0,myPatch.sysex.length); PatchEdit.Clipboard=new Patch(mySysex, myPatch.deviceNum, myPatch.driverNum, (myPatch.date.toString()), (myPatch.author.toString()), (myPatch.comment.toString())); }catch (Exception e) {}; } /** */ public void SendSelectedPatch() { Patch myPatch=((Scene)myModel.sceneList.get(table.getSelectedRow())).getPatch(); PatchEdit.getDriver(myPatch.deviceNum,myPatch.driverNum).calculateChecksum(myPatch); PatchEdit.getDriver(myPatch.deviceNum,myPatch.driverNum).sendPatch(myPatch); } public void SendToSelectedPatch() { Patch myPatch=((Scene)myModel.sceneList.get(table.getSelectedRow())).getPatch(); PatchEdit.getDriver(myPatch.deviceNum,myPatch.driverNum).calculateChecksum(myPatch); new SysexSendToDialog(myPatch); } public void ReassignSelectedPatch() { Patch myPatch=((Scene)myModel.sceneList.get(table.getSelectedRow())).getPatch(); PatchEdit.getDriver(myPatch.deviceNum,myPatch.driverNum).calculateChecksum(myPatch); new ReassignPatchDialog(myPatch); myModel.fireTableDataChanged(); } public void PlaySelectedPatch() { Patch myPatch=((Scene)myModel.sceneList.get(table.getSelectedRow())).getPatch(); PatchEdit.getDriver(myPatch.deviceNum,myPatch.driverNum).calculateChecksum(myPatch); PatchEdit.getDriver(myPatch.deviceNum,myPatch.driverNum).sendPatch(myPatch); PatchEdit.getDriver(myPatch.deviceNum,myPatch.driverNum).playPatch(myPatch); } public void StoreSelectedPatch() { Patch myPatch=((Scene)myModel.sceneList.get(table.getSelectedRow())).getPatch(); PatchEdit.getDriver(myPatch.deviceNum,myPatch.driverNum).calculateChecksum(myPatch); new SysexStoreDialog(myPatch); } /** * @return */ public javax.swing.JInternalFrame EditSelectedPatch() { if (table.getSelectedRowCount()==0) { ErrorMsg.reportError("Error", "No Patch Selected."); return null; } Patch myPatch=((Scene)myModel.sceneList.get(table.getSelectedRow())).getPatch(); changed=true; return(PatchEdit.getDriver(myPatch.deviceNum,myPatch.driverNum).editPatch(myPatch)); } public void PastePatch() { Patch myPatch=PatchEdit.Clipboard; if (myPatch!=null) { byte [] mySysex = new byte[myPatch.sysex.length]; System.arraycopy(myPatch.sysex,0,mySysex,0,myPatch.sysex.length); if (table.getSelectedRowCount()==0) myModel.sceneList.add(new Scene(new Patch(mySysex, myPatch.deviceNum, myPatch.driverNum, (myPatch.date.toString()), (myPatch.author.toString()), (myPatch.comment.toString())))); else myModel.sceneList.add(table.getSelectedRow(),new Scene(new Patch(mySysex, myPatch.deviceNum, myPatch.driverNum, (myPatch.date.toString()), (myPatch.author.toString()), (myPatch.comment.toString())))); changed=true; myModel.fireTableDataChanged(); } } /** * @throws Exception */ public void save() throws Exception { PatchEdit.waitDialog.show(); java.io.FileOutputStream f = new java.io.FileOutputStream(filename); java.io.ObjectOutputStream s = new java.io.ObjectOutputStream(f); s.writeObject(myModel.sceneList); s.flush(); s.close(); f.close(); PatchEdit.waitDialog.hide(); changed=false; } /** * @return */ public int getSelectedRowCount() { return table.getSelectedRowCount(); } /** * @param file * @throws Exception */ public void save(File file) throws Exception { filename=file; setTitle(file.getName()); save(); } /** * @param file * @throws Exception */ public void open(File file) throws Exception { PatchEdit.waitDialog.show(); setTitle(file.getName()); filename=file; java.io.FileInputStream f = new java.io.FileInputStream(file); java.io.ObjectInputStream s = new java.io.ObjectInputStream(f); myModel.sceneList=(java.util.ArrayList)s.readObject(); for (int i=0; i<myModel.sceneList.size();i++) ((Scene)myModel.sceneList.get(i)).getPatch().ChooseDriver(); s.close(); f.close(); PatchEdit.waitDialog.hide(); } /** * @return */ public java.util.ArrayList getPatchCollection() { java.util.ArrayList ar=new java.util.ArrayList(); int i; for (i=0;i<myModel.sceneList.size();i++) ar.add(myModel.getPatchAt(i)); return ar; } //Re-assigns drivers to all patches in libraryframe. Called after new drivers are added or or removed protected void revalidateDrivers() { int i; for (i=0;i<myModel.sceneList.size();i++) ((Scene)(myModel.sceneList.get(i))).getPatch().ChooseDriver(); myModel.fireTableDataChanged(); } /** * Send all patches of the scene to the * configured places in the synth's. */ void sendScene() { int i,bankNum,patchNum; // System.out.println("Transfering Scene"); for (i=0;i<myModel.sceneList.size();i++) { bankNum=((Scene)(myModel.sceneList.get(i))).getBankNumber(); patchNum=((Scene)(myModel.sceneList.get(i))).getPatchNumber(); Patch myPatch=((Scene)myModel.sceneList.get(i)).getPatch(); PatchEdit.getDriver(myPatch.deviceNum,myPatch.driverNum).calculateChecksum(myPatch); PatchEdit.getDriver(myPatch.deviceNum,myPatch.driverNum).storePatch(myPatch,bankNum,patchNum); } } /** * @return */ public AbstractPatchListModel getAbstractPatchListModel() { return myModel; } /** * @return */ public DNDLibraryTable getTable() { return table; } public void ExtractSelectedPatch() { if (table.getSelectedRowCount()==0) { ErrorMsg.reportError("Error","No Patch Selected."); return; } Patch myPatch=myModel.getPatchAt(table.getSelectedRow()); BankDriver myDriver=(BankDriver)PatchEdit.getDriver(myPatch.deviceNum,myPatch.driverNum); for (int i=0;i<myDriver.numPatches;i++) if (myDriver.getPatch(myPatch,i)!=null) myModel.addPatch(myDriver.getPatch(myPatch,i)); myModel.fireTableDataChanged(); changed=true; // statusBar.setText(myModel.PatchList.size()+" Patches"); } } --- NEW FILE: SceneListModel.java --- /* * SceneListModel.java * * Refactored from PerformanceListModel */ package core; /** * * @author Gerrit Gehnen * @version $Id: SceneListModel.java,v 1.1 2003/03/27 20:45:56 gehnen Exp $ */ class SceneListModel extends javax.swing.table.AbstractTableModel implements AbstractPatchListModel { final String[] columnNames = {"Synth", "Type", "Patch Name", "Bank Number", "Patch Number", "Comment"}; boolean changed; public java.util.ArrayList sceneList = new java.util.ArrayList(); public SceneListModel(boolean c) { changed=c; } public int getColumnCount() { return columnNames.length; } public int getRowCount() { return sceneList.size(); } public String getColumnName(int col) { return columnNames[col]; } public Object getValueAt(int row, int col) { Scene myScene=(Scene)sceneList.get(row); if (col==0) return ((Device)PatchEdit.appConfig.getDevice(myScene.getPatch().deviceNum)).getSynthName(); if (col==1) return PatchEdit.getDriver(myScene.getPatch().deviceNum,myScene.getPatch().driverNum).getPatchType(); if (col==2) return PatchEdit.getDriver(myScene.getPatch().deviceNum,myScene.getPatch().driverNum).getPatchName(myScene.getPatch()); if (col==3) return PatchEdit.getDriver(myScene.getPatch().deviceNum,myScene.getPatch().driverNum).bankNumbers[myScene.getBankNumber()]; if (col==4) return PatchEdit.getDriver(myScene.getPatch().deviceNum,myScene.getPatch().driverNum).patchNumbers[myScene.getPatchNumber()]; return myScene.getComment(); } /* * JTable uses this method to determine the default renderer/ * editor for each cell. If we didn't implement this method, * then the last column would contain text ("true"/"false"), * rather than a check box. */ public Class getColumnClass(int c) { try{ return Class.forName("java.lang.String"); } catch (Exception e) { return null; } } public boolean isCellEditable(int row, int col) { if (col>2) return true; else return false; } public void setValueAt(Object value, int row, int col) { //System.out.println("SetValue at "+row+" "+col+" Value:"+value); changed=true; Scene myScene=(Scene)sceneList.get(row); if (col==0) { PatchEdit.appConfig.getDevice(myScene.getPatch().deviceNum).setSynthName((String)value); } if (col==1) { // don't allow to change the Patch Type } if (col==2) { // don't allow to change the Patch Name } if (col==3) { myScene.setBankNumber(((Integer)value).intValue()); } if (col==4) { myScene.setPatchNumber(((Integer) value).intValue()); } if (col==5) { /* Comment */ myScene.setComment(new StringBuffer((String)value)); } sceneList.set(row,myScene); } public Scene getSceneAt(int row) { return (Scene)sceneList.get(row); } public void setSceneAt(Scene p,int row) { sceneList.set(row,p); fireTableRowsUpdated(row, row); } public Patch getPatchAt(int row) { return ((Scene)sceneList.get(row)).getPatch(); } public void setPatchAt(Patch p,int row) { Scene perf; perf=((Scene)sceneList.get(row)); perf.setPatch(p); fireTableRowsUpdated(row, row); } public void addPatch(Patch p) { Scene perf=new Scene(p); sceneList.add(perf); this.fireTableDataChanged(); } public StringBuffer getCommentAt(int row) { return ((Scene)sceneList.get(row)).getComment(); } } --- NEW FILE: SceneTableCellEditor.java --- /** * SceneTableCellEditor * * @version $Id: SceneTableCellEditor.java,v 1.1 2003/03/27 20:45:56 gehnen Exp $ * @author Gerrit Gehnen */ package core; import java.util.*; import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.table.*; import javax.swing.event.*; public class SceneTableCellEditor implements TableCellEditor, TableModelListener { protected TableCellEditor editor, defaultEditor; protected JComboBox box; JTable table; private int oldrow=-1; private int oldcol=-1; /** * Constructs a SceneTableCellEditor. * create default editor * * @see TableCellEditor * @see DefaultCellEditor */ public SceneTableCellEditor(JTable table) { this.table = table; defaultEditor = new DefaultCellEditor(new JTextField()); this.table.getModel().addTableModelListener(this); } public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) { return editor.getTableCellEditorComponent(table, value, isSelected, row, column); } public Object getCellEditorValue() { // System.out.println("getCellEditorValue "+box.getSelectedItem()); return new Integer(box.getSelectedIndex()); } public boolean stopCellEditing() { return editor.stopCellEditing(); } public void cancelCellEditing() { editor.cancelCellEditing(); } public boolean isCellEditable(EventObject anEvent) { selectEditor((MouseEvent)anEvent); return editor.isCellEditable(anEvent); } public void addCellEditorListener(CellEditorListener l) { editor.addCellEditorListener(l); } public void removeCellEditorListener(CellEditorListener l) { editor.removeCellEditorListener(l); } public boolean shouldSelectCell(EventObject anEvent) { selectEditor((MouseEvent)anEvent); return editor.shouldSelectCell(anEvent); } protected void selectEditor(MouseEvent e) { Driver driver; int row,col; if (e == null) { row = table.getSelectionModel().getAnchorSelectionIndex(); col=table.getSelectedColumn(); } else { row = table.rowAtPoint(e.getPoint()); col=table.columnAtPoint(e.getPoint()); } // System.out.println("selectEditor "+ row); if ((row!=oldrow)||(col!=oldcol)) { oldrow=row; oldcol=col; box=new JComboBox(); driver=((SceneListModel)table.getModel()).getSceneAt(row).getPatch().getDriver(); if (driver.patchNumbers.length > 1) { if (col==3) { for (int i = 0 ; i < driver.bankNumbers.length ; i++) { box.addItem(driver.bankNumbers[i]); } } if (col==4) for (int i = 0 ; i < driver.patchNumbers.length ; i++) { box.addItem(driver.patchNumbers[i]); } } editor = new DefaultCellEditor(box ); if (editor == null) { editor = defaultEditor; } } } public void tableChanged(javax.swing.event.TableModelEvent tableModelEvent) { oldcol=-1; oldrow=-1; } } Index: AbstractLibraryFrame.java =================================================================== RCS file: /cvsroot/jsynthlib/JSynthLib/core/AbstractLibraryFrame.java,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** AbstractLibraryFrame.java 14 Jan 2003 20:42:15 -0000 1.2 --- AbstractLibraryFrame.java 27 Mar 2003 20:45:52 -0000 1.3 *************** *** 8,12 **** /** Abstract interface for unified handling of ! * Library and Performance frames. * @author Gerrit.Gehnen * @version $Id$ --- 8,12 ---- /** Abstract interface for unified handling of ! * Library and Scene frames. * @author Gerrit.Gehnen * @version $Id$ Index: AbstractPatchListModel.java =================================================================== RCS file: /cvsroot/jsynthlib/JSynthLib/core/AbstractPatchListModel.java,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** AbstractPatchListModel.java 24 Sep 2002 20:59:54 -0000 1.2 --- AbstractPatchListModel.java 27 Mar 2003 20:45:53 -0000 1.3 *************** *** 7,11 **** /** This is the general interface to unify the handling of ! * the LibraryTable and PerformanceTable. * @author Gerrit * @version $Id$ --- 7,11 ---- /** This is the general interface to unify the handling of ! * the LibraryTable and SceneTable. * @author Gerrit * @version $Id$ Index: PatchEdit.java =================================================================== RCS file: /cvsroot/jsynthlib/JSynthLib/core/PatchEdit.java,v retrieving revision 1.13 retrieving revision 1.14 diff -C2 -d -r1.13 -r1.14 *** PatchEdit.java 14 Feb 2003 22:03:30 -0000 1.13 --- PatchEdit.java 27 Mar 2003 20:45:53 -0000 1.14 *************** *** 57,62 **** public static MonitorAction monitorAction; ! public static NewPerformanceAction newPerformanceAction; ! public static TransferPerformanceAction transferPerformanceAction; SearchDialog searchDialog; --- 57,62 ---- public static MonitorAction monitorAction; ! public static NewSceneAction newSceneAction; ! public static TransferSceneAction transferSceneAction; SearchDialog searchDialog; *************** *** 158,166 **** menuLib.add (new JSeparator ()); ! newPerformanceAction=new NewPerformanceAction(); ! menuLib.add(newPerformanceAction); ! transferPerformanceAction=new TransferPerformanceAction(); ! menuLib.add(transferPerformanceAction); menuLib.add (new JSeparator ()); --- 158,166 ---- menuLib.add (new JSeparator ()); ! newSceneAction=new NewSceneAction(); ! menuLib.add(newSceneAction); ! transferSceneAction=new TransferSceneAction(); ! menuLib.add(transferSceneAction); menuLib.add (new JSeparator ()); *************** *** 369,375 **** } ! protected void createPerformanceFrame () { ! PerformanceFrame frame = new PerformanceFrame (); frame.setVisible (true); desktop.add (frame); --- 369,375 ---- } ! protected void createSceneFrame () { ! SceneFrame frame = new SceneFrame (); frame.setVisible (true); desktop.add (frame); *************** *** 392,396 **** } catch (Exception e) { ! PerformanceFrame frame2=new PerformanceFrame(file); try { --- 392,396 ---- } catch (Exception e) { ! SceneFrame frame2=new SceneFrame(file); try { *************** *** 425,435 **** } catch (Exception e) { ! PerformanceFrame perFrame; try { ! perFrame=(PerformanceFrame)desktop.getSelectedFrame (); ! if (perFrame.getTitle ().startsWith ("Unsaved ")) {saveFrameAs ();return;} ! perFrame.save (); } catch (Exception e2) { ErrorMsg.reportError ("Error", "Unable to Save Library",e2);return;} --- 425,435 ---- } catch (Exception e) { ! SceneFrame sceneFrame; try { ! sceneFrame=(SceneFrame)desktop.getSelectedFrame (); ! if (sceneFrame.getTitle ().startsWith ("Unsaved ")) {saveFrameAs ();return;} ! sceneFrame.save (); } catch (Exception e2) { ErrorMsg.reportError ("Error", "Unable to Save Library",e2);return;} *************** *** 467,471 **** } catch (Exception pr) { ! ((PerformanceFrame)desktop.getSelectedFrame()).save(file); } } --- 467,471 ---- } catch (Exception pr) { ! ((SceneFrame)desktop.getSelectedFrame()).save(file); } } *************** *** 902,924 **** } ! class NewPerformanceAction extends AbstractAction { ! public NewPerformanceAction () { ! super ("NewPerformance",null); } public void actionPerformed (ActionEvent e) { ! createPerformanceFrame (); } } ! class TransferPerformanceAction extends AbstractAction { ! public TransferPerformanceAction () { ! super ("Transfer Performance",null); //putValue (Action.MNEMONIC_KEY, new Integer ('S')); setEnabled (false); --- 902,924 ---- } ! class NewSceneAction extends AbstractAction { ! public NewSceneAction () { ! super ("New Scene",null); } public void actionPerformed (ActionEvent e) { ! createSceneFrame (); } } ! class TransferSceneAction extends AbstractAction { ! public TransferSceneAction () { ! super ("Transfer Scene",null); //putValue (Action.MNEMONIC_KEY, new Integer ('S')); setEnabled (false); *************** *** 928,934 **** try { ! ((PerformanceFrame)desktop.getSelectedFrame ()).sendPerformance (); } catch (Exception ex) ! {ErrorMsg.reportError ("Error","Performance Library must be the selected window.",ex);}; } } --- 928,934 ---- try { ! ((SceneFrame)desktop.getSelectedFrame ()).sendScene (); } catch (Exception ex) ! {ErrorMsg.reportError ("Error","Scene Library must be the selected window.",ex);}; } } *************** *** 942,946 **** { JFileChooser fc=new JFileChooser (); ! javax.swing.filechooser.FileFilter type1 = new ExtensionFilter ("PatchEdit Library Files",new String[] {".patchlib",".perflib"}); fc.setCurrentDirectory (new File (appConfig.getLibPath())); fc.addChoosableFileFilter (type1); --- 942,946 ---- { JFileChooser fc=new JFileChooser (); ! javax.swing.filechooser.FileFilter type1 = new ExtensionFilter ("PatchEdit Library Files",new String[] {".patchlib",".scenelib"}); fc.setCurrentDirectory (new File (appConfig.getLibPath())); fc.addChoosableFileFilter (type1); Index: SearchDialog.java =================================================================== RCS file: /cvsroot/jsynthlib/JSynthLib/core/SearchDialog.java,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** SearchDialog.java 24 Sep 2002 20:59:54 -0000 1.4 --- SearchDialog.java 27 Mar 2003 20:45:56 -0000 1.5 *************** *** 60,64 **** group.add(button5); ! if (PatchEdit.desktop.getSelectedFrame() instanceof PerformanceFrame) { button2.setEnabled(false); --- 60,64 ---- group.add(button5); ! if (PatchEdit.desktop.getSelectedFrame() instanceof SceneFrame) { button2.setEnabled(false); *************** *** 117,121 **** public void show() { ! if (PatchEdit.desktop.getSelectedFrame() instanceof PerformanceFrame) { button2.setEnabled(false); --- 117,121 ---- public void show() { ! if (PatchEdit.desktop.getSelectedFrame() instanceof SceneFrame) { button2.setEnabled(false); |