package uonlineeditor; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.Vector; import javax.swing.DefaultCellEditor; import javax.swing.DefaultComboBoxModel; import javax.swing.DefaultSingleSelectionModel; import javax.swing.JComboBox; import javax.swing.event.CaretEvent; import javax.swing.event.CaretListener; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; import javax.swing.table.DefaultTableModel; import javax.swing.table.TableCellEditor; /** * * @author m1kc, houjing */ public class MainFrame extends javax.swing.JFrame { private boolean aFileOpened = false; private boolean lFileOpened = false; private boolean areasChanged = false; private boolean locationsChanged = false; Areas areas = new Areas(); AreasFile areasFile; LocationsFile locationsFile; String defaultTitle; /** * Creates new form MainFrame */ public MainFrame() { initComponents(); WaysTable = new javax.swing.JTable(){ @Override public TableCellEditor getCellEditor(int row, int column) { Object value = getSelectedArea().getSelectedLocation().ways.getValueAt(row, column); switch (column) { case Way.TEXT: return getDefaultEditor(value.getClass()); case Way.LOCATION_ID: return new DefaultCellEditor((JComboBox)value); default: return super.getCellEditor(row, column); } } }; jScrollPane3.setViewportView(WaysTable); setLocation(400, 100); defaultTitle = getTitle(); setUIModels(); update(); } /** * This method is called from within the constructor to initialize the form. * WARNING: Do NOT modify this code. The content of this method is always * regenerated by the Form Editor. */ @SuppressWarnings("unchecked") // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents private void initComponents() { MainTabbedPane = new javax.swing.JTabbedPane(); AreasPanel = new javax.swing.JPanel(); AddAreaButton = new javax.swing.JButton(); RemoveAreaButton = new javax.swing.JButton(); jButton3 = new javax.swing.JButton(); AreasScrollPane = new javax.swing.JScrollPane(); AreasTable = new javax.swing.JTable(); LocationsPanel = new javax.swing.JPanel(); jLabel1 = new javax.swing.JLabel(); AreasComboBox = new javax.swing.JComboBox(); jLabel2 = new javax.swing.JLabel(); LocationsComboBox = new javax.swing.JComboBox(); AddLocationButton = new javax.swing.JButton(); RemoveLocationButton = new javax.swing.JButton(); RenameLocationButton = new javax.swing.JButton(); jLabel3 = new javax.swing.JLabel(); jScrollPane2 = new javax.swing.JScrollPane(); LocationDescriptionTextArea = new javax.swing.JTextArea(); jLabel4 = new javax.swing.JLabel(); LocationImageURLTextField = new javax.swing.JTextField(); jLabel5 = new javax.swing.JLabel(); jScrollPane3 = new javax.swing.JScrollPane(); WaysTable = new javax.swing.JTable(); AddWayButton = new javax.swing.JButton(); RemoveWayButton = new javax.swing.JButton(); LoadAreasButton = new javax.swing.JButton(); LoadLocationsButton = new javax.swing.JButton(); SaveAreasButton = new javax.swing.JButton(); SaveLocationsButton = new javax.swing.JButton(); setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); setTitle("uonline Editor"); AddAreaButton.setText("Add"); AddAreaButton.addMouseListener(new java.awt.event.MouseAdapter() { public void mouseClicked(java.awt.event.MouseEvent evt) { AddArea(evt); } }); RemoveAreaButton.setText("Remove"); RemoveAreaButton.addMouseListener(new java.awt.event.MouseAdapter() { public void mouseClicked(java.awt.event.MouseEvent evt) { RemoveArea(evt); } }); jButton3.setText("Rename"); AreasTable.setModel(new javax.swing.table.DefaultTableModel( new Object [][] { }, new String [] { "Зона", "id" } ) { Class[] types = new Class [] { java.lang.String.class, java.lang.Integer.class }; public Class getColumnClass(int columnIndex) { return types [columnIndex]; } }); AreasScrollPane.setViewportView(AreasTable); javax.swing.GroupLayout AreasPanelLayout = new javax.swing.GroupLayout(AreasPanel); AreasPanel.setLayout(AreasPanelLayout); AreasPanelLayout.setHorizontalGroup( AreasPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(AreasPanelLayout.createSequentialGroup() .addContainerGap() .addComponent(AreasScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 430, Short.MAX_VALUE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(AreasPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) .addComponent(RemoveAreaButton, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(jButton3, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(AddAreaButton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) .addContainerGap()) ); AreasPanelLayout.setVerticalGroup( AreasPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(AreasPanelLayout.createSequentialGroup() .addContainerGap() .addGroup(AreasPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(AreasPanelLayout.createSequentialGroup() .addComponent(AreasScrollPane) .addContainerGap()) .addGroup(AreasPanelLayout.createSequentialGroup() .addComponent(AddAreaButton) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(RemoveAreaButton) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jButton3) .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))) ); MainTabbedPane.addTab("Areas", AreasPanel); jLabel1.setText("Area:"); jLabel2.setText("Location:"); AddLocationButton.setText("Add"); AddLocationButton.addMouseListener(new java.awt.event.MouseAdapter() { public void mouseClicked(java.awt.event.MouseEvent evt) { AddLocation(evt); } }); RemoveLocationButton.setText("Remove"); RemoveLocationButton.addMouseListener(new java.awt.event.MouseAdapter() { public void mouseClicked(java.awt.event.MouseEvent evt) { RemoveLocation(evt); } }); RenameLocationButton.setText("Rename"); RenameLocationButton.addMouseListener(new java.awt.event.MouseAdapter() { public void mouseClicked(java.awt.event.MouseEvent evt) { RenameLocation(evt); } }); jLabel3.setText("Description:"); LocationDescriptionTextArea.setColumns(20); LocationDescriptionTextArea.setLineWrap(true); LocationDescriptionTextArea.setRows(5); LocationDescriptionTextArea.setWrapStyleWord(true); jScrollPane2.setViewportView(LocationDescriptionTextArea); jLabel4.setText("Picture URL:"); jLabel5.setText("Ways:"); WaysTable.setModel(new javax.swing.table.DefaultTableModel( new Object [][] { }, new String [] { "Text", "Location" } )); jScrollPane3.setViewportView(WaysTable); AddWayButton.setText("Add"); AddWayButton.addMouseListener(new java.awt.event.MouseAdapter() { public void mouseClicked(java.awt.event.MouseEvent evt) { AddWay(evt); } }); RemoveWayButton.setText("Remove"); RemoveWayButton.addMouseListener(new java.awt.event.MouseAdapter() { public void mouseClicked(java.awt.event.MouseEvent evt) { RemoveWay(evt); } }); javax.swing.GroupLayout LocationsPanelLayout = new javax.swing.GroupLayout(LocationsPanel); LocationsPanel.setLayout(LocationsPanelLayout); LocationsPanelLayout.setHorizontalGroup( LocationsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(LocationsPanelLayout.createSequentialGroup() .addContainerGap() .addGroup(LocationsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(LocationsPanelLayout.createSequentialGroup() .addComponent(jLabel4) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(LocationImageURLTextField)) .addComponent(jScrollPane2) .addGroup(LocationsPanelLayout.createSequentialGroup() .addComponent(jScrollPane3, javax.swing.GroupLayout.DEFAULT_SIZE, 430, Short.MAX_VALUE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(LocationsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) .addComponent(RemoveWayButton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(AddWayButton, javax.swing.GroupLayout.PREFERRED_SIZE, 71, javax.swing.GroupLayout.PREFERRED_SIZE))) .addGroup(LocationsPanelLayout.createSequentialGroup() .addGroup(LocationsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jLabel1) .addComponent(jLabel2)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addGroup(LocationsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(AreasComboBox, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addGroup(LocationsPanelLayout.createSequentialGroup() .addComponent(LocationsComboBox, 0, 242, Short.MAX_VALUE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(AddLocationButton) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(RemoveLocationButton) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(RenameLocationButton)))) .addGroup(LocationsPanelLayout.createSequentialGroup() .addGroup(LocationsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jLabel5) .addComponent(jLabel3)) .addGap(0, 0, Short.MAX_VALUE))) .addContainerGap()) ); LocationsPanelLayout.setVerticalGroup( LocationsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(LocationsPanelLayout.createSequentialGroup() .addContainerGap() .addGroup(LocationsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(AreasComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jLabel1)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(LocationsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(LocationsComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jLabel2) .addComponent(RemoveLocationButton) .addComponent(AddLocationButton) .addComponent(RenameLocationButton)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jLabel3) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 125, Short.MAX_VALUE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addGroup(LocationsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel4) .addComponent(LocationImageURLTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jLabel5) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(LocationsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(LocationsPanelLayout.createSequentialGroup() .addComponent(AddWayButton) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(RemoveWayButton)) .addComponent(jScrollPane3, javax.swing.GroupLayout.DEFAULT_SIZE, 181, Short.MAX_VALUE)) .addContainerGap()) ); MainTabbedPane.addTab("Locations", LocationsPanel); LoadAreasButton.setText("Load areas"); LoadAreasButton.addMouseListener(new java.awt.event.MouseAdapter() { public void mouseClicked(java.awt.event.MouseEvent evt) { LoadAreas(evt); } }); LoadLocationsButton.setText("Load locations"); LoadLocationsButton.setEnabled(false); LoadLocationsButton.addMouseListener(new java.awt.event.MouseAdapter() { public void mouseClicked(java.awt.event.MouseEvent evt) { LoadLocations(evt); } }); SaveAreasButton.setText("Save areas"); SaveAreasButton.setEnabled(false); SaveAreasButton.addMouseListener(new java.awt.event.MouseAdapter() { public void mouseClicked(java.awt.event.MouseEvent evt) { SaveAreas(evt); } }); SaveLocationsButton.setText("Save locations"); SaveLocationsButton.setEnabled(false); SaveLocationsButton.addMouseListener(new java.awt.event.MouseAdapter() { public void mouseClicked(java.awt.event.MouseEvent evt) { SaveLocations(evt); } }); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); getContentPane().setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addContainerGap() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(MainTabbedPane) .addGroup(layout.createSequentialGroup() .addComponent(LoadAreasButton) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(LoadLocationsButton) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(SaveAreasButton) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(SaveLocationsButton))) .addContainerGap()) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() .addContainerGap() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(LoadAreasButton) .addComponent(LoadLocationsButton) .addComponent(SaveAreasButton) .addComponent(SaveLocationsButton)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addComponent(MainTabbedPane) .addContainerGap()) ); pack(); }// </editor-fold>//GEN-END:initComponents private void updateTitle() { switch(MainTabbedPane.getSelectedIndex()) { case 0: setTitle(defaultTitle + " - " + (areasFile!=null?areasFile.file.getAbsolutePath():"Unsaved") ); break; case 1: setTitle(defaultTitle); break; } } private void updateButtons() { if (Areas.areas.isEmpty()) { SaveAreasButton.setEnabled(false); SaveLocationsButton.setEnabled(false); LoadLocationsButton.setEnabled(false); } else { LoadLocationsButton.setEnabled(true); if (!Areas.getLocations().isEmpty()) { SaveAreasButton.setEnabled(true); SaveLocationsButton.setEnabled(true); } else { SaveAreasButton.setEnabled(false); SaveLocationsButton.setEnabled(false); } } } private void update() { updateButtons(); updateTitle(); } private void LoadAreas(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_LoadAreas AreasFile af = new AreasFile(CommFile.OPEN); if (!af.approved) return; areasFile = af; areas = areasFile.getAreas(); LoadLocationsButton.setEnabled(true); AreasTable.updateUI(); AreasComboBox.updateUI(); updateTitle(); }//GEN-LAST:event_LoadAreas public static Area getSelectedArea() { int row = AreasTable.getSelectedRow(); if (row == -1 || row > Areas.size() - 1) return null; else return Areas.get(row); } private void LoadLocations(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_LoadLocations if ( !((javax.swing.JButton) evt.getSource()).isEnabled() ) return; LocationsFile lf = new LocationsFile(CommFile.OPEN); if (!lf.approved) return; locationsFile = lf; areas.attachLocations(locationsFile.getLocations()); LocationsComboBox.updateUI(); WaysTable.updateUI(); update(); }//GEN-LAST:event_LoadLocations private void AddArea(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_AddArea int sel = areas.addArea(AreasTable.getSelectedRow()); AreasTable.setRowSelectionInterval(sel, sel); AreasTable.updateUI(); AreasComboBox.updateUI(); update(); }//GEN-LAST:event_AddArea private void RemoveArea(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_RemoveArea int sel = areas.removeAreas(AreasTable.getSelectedRows()); if (sel > -1) AreasTable.setRowSelectionInterval(sel, sel); AreasTable.updateUI(); AreasComboBox.updateUI(); update(); }//GEN-LAST:event_RemoveArea private void SaveAreas(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_SaveAreas if ( !((javax.swing.JButton) evt.getSource()).isEnabled() ) return; AreasFile af; if (areasFile == null) { af = new AreasFile(CommFile.SAVE); if (!af.approved) return; areasFile = af; } areasFile.writeAreas(areas); }//GEN-LAST:event_SaveAreas private void SaveLocations(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_SaveLocations if ( !((javax.swing.JButton) evt.getSource()).isEnabled() ) return; LocationsFile lf; if (locationsFile == null) { lf = new LocationsFile(CommFile.SAVE); if (!lf.approved) return; locationsFile = lf; } locationsFile.writeLocations(areas.getLocations()); }//GEN-LAST:event_SaveLocations private void AddLocation(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_AddLocation if (getSelectedArea() == null) return; getSelectedArea().locs.addLocation(); LocationsComboBox.updateUI(); update(); }//GEN-LAST:event_AddLocation private void RemoveLocation(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_RemoveLocation if (getSelectedArea() == null) return; getSelectedArea().locs.removeLocation(); LocationsComboBox.updateUI(); update(); }//GEN-LAST:event_RemoveLocation private void AddWay(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_AddWay if (getSelectedArea() == null || getSelectedArea().getSelectedLocation() == null) return; getSelectedArea().getSelectedLocation().ways.add(); ((DefaultTableModel) WaysTable.getModel()).fireTableDataChanged(); }//GEN-LAST:event_AddWay private void RemoveWay(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_RemoveWay if (getSelectedArea() == null || getSelectedArea().getSelectedLocation() == null || getSelectedArea().getSelectedLocation().getSelectedWay() == null) return; getSelectedArea().getSelectedLocation().ways.remove(); ((DefaultTableModel) WaysTable.getModel()).fireTableDataChanged(); }//GEN-LAST:event_RemoveWay private void RenameLocation(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_RenameLocation if (getSelectedArea() == null || getSelectedArea().locs.getSelected() == null) return; LocationsComboBox.setEditable(true); LocationsComboBox.requestFocus(true); }//GEN-LAST:event_RenameLocation /** * @param args the command line arguments */ public static void main(String args[]) { /* Set the Nimbus look and feel */ //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) "> /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel. * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html */ try { for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) { if ("Nimbus".equals(info.getName())) { javax.swing.UIManager.setLookAndFeel(info.getClassName()); break; } } } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | javax.swing.UnsupportedLookAndFeelException ex) { java.util.logging.Logger.getLogger(MainFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } //</editor-fold> /* Create and display the form */ java.awt.EventQueue.invokeLater(new Runnable() { public void run() { (new MainFrame()).setVisible(true); } }); } final void setUIModels() { MainTabbedPane.setModel(new DefaultSingleSelectionModel() { @Override public void setSelectedIndex(int index) { super.setSelectedIndex(index); updateTitle(); } @Override public int getSelectedIndex() { if (super.getSelectedIndex() == -1) super.setSelectedIndex(0); return super.getSelectedIndex(); } }); AreasTable.setModel(new DefaultTableModel() { @Override public Class<?> getColumnClass(int columnIndex) { switch(columnIndex){ case 0: return String.class; case 1: return Integer.class; default: return null; } } @Override public int getColumnCount() { return 2; } @Override public String getColumnName(int columnIndex) { switch (columnIndex) { case Area.TITLE: return "Area"; case Area.ID: return "id"; default: return ""; } } @Override public int getRowCount() { return Areas.areas == null ? 0 : Areas.size(); } @Override public Object getValueAt(int rowIndex, int columnIndex) { return Areas.areas.get(rowIndex).getParameter(columnIndex); } @Override public boolean isCellEditable(int rowIndex, int columnIndex) { return true; } @Override public void setValueAt(Object value, int rowIndex, int columnIndex) { Areas.areas.get(rowIndex).setParameter(value, columnIndex); } }); AreasTable.getSelectionModel().addListSelectionListener(new ListSelectionListener() { @Override public void valueChanged(ListSelectionEvent e) { WaysTable.updateUI(); } }); WaysTable.setModel(new DefaultTableModel() { @Override public Class<?> getColumnClass(int columnIndex) { switch(columnIndex){ case 0: return String.class; case 1: return Integer.class; default: return null; } } @Override public int getColumnCount() { return 2; } @Override public String getColumnName(int columnIndex) { switch (columnIndex) { case Way.TEXT: return "Text"; case Way.LOCATION_ID: return "Location"; default: return ""; } } @Override public int getRowCount() { if(getSelectedArea() == null || getSelectedArea().locs.getSelected() == null) return 0; return getSelectedArea().locs.getSelected().ways.size(); } @Override public Object getValueAt(int rowIndex, int columnIndex) { switch (columnIndex) { case Way.TEXT: return getSelectedArea().locs.getSelected().ways.get(rowIndex).getParameter(columnIndex); case Way.LOCATION_ID: return ((JComboBox) getSelectedArea().locs.getSelected().ways.get(rowIndex).getParameter(columnIndex)).getSelectedItem(); default: return ""; } } @Override public boolean isCellEditable(int rowIndex, int columnIndex) { return true; } @Override public void setValueAt(Object value, int rowIndex, int columnIndex) { switch (columnIndex) { case Way.TEXT: getSelectedArea().locs.getSelected().ways.get(rowIndex).setParameter(value, columnIndex); break; case Way.LOCATION_ID: getSelectedArea().locs.getSelected().ways.get(rowIndex).setParameter(Areas.getLocationId(value), columnIndex); break; } } }); AreasComboBox.setModel(new DefaultComboBoxModel() { @Override public Object getElementAt(int index) { return AreasTable.getValueAt(index, Area.TITLE); } @Override public int getSize() { return AreasTable.getRowCount(); } @Override public Object getSelectedItem() { if (areas.areas.isEmpty()) return "<Empty>"; int row = AreasTable.getSelectedRow(); if (row == -1 || row > areas.areas.size() - 1) return "<Select area>"; return AreasTable.getValueAt(row, Area.TITLE); } @Override public void setSelectedItem(Object anObject) { int ind = areas.getRowNumberOf(anObject, Area.TITLE); AreasTable.setRowSelectionInterval(ind, ind); LocationsComboBox.updateUI(); WaysTable.updateUI(); } }); LocationsComboBox.setModel(new DefaultComboBoxModel() { @Override public void setSelectedItem(Object anItem) { if (getSelectedArea() == null) return; else { int sel = getSelectedArea().locs.getIndexOf(anItem, Location.TITLE); if (sel == -1) getSelectedArea().locs.getSelected().setParameter((String) anItem, Location.TITLE); else getSelectedArea().locs.selected = sel; // LocationTitleTextField.setText((String) anItem); LocationDescriptionTextArea.setText(getSelectedArea().locs.getSelected().description); LocationImageURLTextField.setText(getSelectedArea().locs.getSelected().imageURL); } WaysTable.updateUI(); } @Override public Object getSelectedItem() { if (getSelectedArea() == null || getSelectedArea().locs == null || getSelectedArea().locs.locs.isEmpty()) { // LocationTitleTextField.setText(""); LocationDescriptionTextArea.setText(""); LocationImageURLTextField.setText(""); return "<Empty>"; } else { int sel = getSelectedArea().locs.selected; if (sel == -1) { // LocationTitleTextField.setText(""); LocationDescriptionTextArea.setText(""); LocationImageURLTextField.setText(""); return "<Select location>"; } else { // LocationTitleTextField.setText((String) getSelectedArea().locs.getSelected().title); LocationDescriptionTextArea.setText(getSelectedArea().locs.getSelected().description); LocationImageURLTextField.setText(getSelectedArea().locs.getSelected().imageURL); return getSelectedArea().locs.locs.get(sel).getParameter(Location.TITLE); } } } @Override public int getSize() { if (getSelectedArea() == null || getSelectedArea().locs == null) return 0; else return getSelectedArea().locs.locs.size(); } @Override public Object getElementAt(int index) { return getSelectedArea().locs.locs.get(index).getParameter(Location.TITLE); } }); LocationsComboBox.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { LocationsComboBox.setEditable(false); } }); // LocationTitleTextField.addCaretListener(new CaretListener() { // @Override // public void caretUpdate(CaretEvent e) { // if (getSelectedArea() == null || getSelectedArea().locs.getSelected() == null) return; // getSelectedArea().locs.getSelected().title = LocationTitleTextField.getText(); // } // }); // LocationTitleTextField.addCaretListener(new CaretListener() { // @Override // public void caretUpdate(CaretEvent e) { // if (getSelectedArea() == null || getSelectedArea().locs.getSelected() == null) return; // getSelectedArea().locs.getSelected().title = LocationTitleTextField.getText(); // } // }); LocationDescriptionTextArea.addCaretListener(new CaretListener() { @Override public void caretUpdate(CaretEvent e) { if (getSelectedArea() == null || getSelectedArea().locs.getSelected() == null) return; getSelectedArea().locs.getSelected().description = LocationDescriptionTextArea.getText(); } }); LocationImageURLTextField.addCaretListener(new CaretListener() { @Override public void caretUpdate(CaretEvent e) { if (getSelectedArea() == null || getSelectedArea().locs.getSelected() == null) return; getSelectedArea().locs.getSelected().imageURL = LocationImageURLTextField.getText(); } }); // MainTabbedPane.setModel(null); } // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JButton AddAreaButton; private javax.swing.JButton AddLocationButton; private javax.swing.JButton AddWayButton; private javax.swing.JComboBox AreasComboBox; private javax.swing.JPanel AreasPanel; private javax.swing.JScrollPane AreasScrollPane; private static javax.swing.JTable AreasTable; private javax.swing.JButton LoadAreasButton; private javax.swing.JButton LoadLocationsButton; private javax.swing.JTextArea LocationDescriptionTextArea; private javax.swing.JTextField LocationImageURLTextField; private javax.swing.JComboBox LocationsComboBox; private javax.swing.JPanel LocationsPanel; private javax.swing.JTabbedPane MainTabbedPane; private javax.swing.JButton RemoveAreaButton; private javax.swing.JButton RemoveLocationButton; private javax.swing.JButton RemoveWayButton; private javax.swing.JButton RenameLocationButton; private javax.swing.JButton SaveAreasButton; private javax.swing.JButton SaveLocationsButton; private javax.swing.JTable WaysTable; private javax.swing.JButton jButton3; private javax.swing.JLabel jLabel1; private javax.swing.JLabel jLabel2; private javax.swing.JLabel jLabel3; private javax.swing.JLabel jLabel4; private javax.swing.JLabel jLabel5; private javax.swing.JScrollPane jScrollPane2; private javax.swing.JScrollPane jScrollPane3; // End of variables declaration//GEN-END:variables }