/* Copyright 2012 Aguzzi Cristiano Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ package jada.ngeditor.guiviews; import jada.ngeditor.controller.CommandProcessor; import jada.ngeditor.listeners.ProprietiesListener; import jada.ngeditor.listeners.events.ElementEvent; import jada.ngeditor.listeners.events.RemoveElementEvent; import jada.ngeditor.listeners.events.SelectionChanged; import jada.ngeditor.model.GUI; import jada.ngeditor.model.GuiEditorModel; import jada.ngeditor.model.elements.GElement; import java.util.Map; import java.util.Observable; import java.util.Observer; import javax.swing.table.DefaultTableModel; /** * * @author cris */ public class ProprietesView extends javax.swing.JPanel implements Observer{ private ProprietiesListener listener; private PropTable jTable1; /** * Creates new form ProprietesView */ public ProprietesView() { initComponents(); jTable1 = new PropTable(); jScrollPane1.setViewportView(jTable1); listener=new ProprietiesListener(); jTable1.getModel().addTableModelListener(listener); CommandProcessor.getInstance().getObservable().addObserver(this); } /** * 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() { jScrollPane1 = new javax.swing.JScrollPane(); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); this.setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 185, Short.MAX_VALUE) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jScrollPane1, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 195, Short.MAX_VALUE) ); }// </editor-fold>//GEN-END:initComponents // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JScrollPane jScrollPane1; // End of variables declaration//GEN-END:variables @Override public void update(Observable o, Object arg) { if(o instanceof GuiEditorModel){ GUI current = ((GuiEditorModel)o).getCurrent(); current.addObserver(this); current.getSelection().addObserver(this); return; } // create a safe zone where to edit the table without changing the element this.jTable1.getModel().removeTableModelListener(listener); //Clear previous editing jTable1.clearSelection(); jTable1.editCellAt(-1, -1); jTable1.setColumnSelectionInterval(0, 0); DefaultTableModel model = (DefaultTableModel) this.jTable1.getModel(); this.clearTable(model); if(arg instanceof SelectionChanged){ SelectionChanged selectionEvent = (SelectionChanged)arg; if(selectionEvent.getNewSelection().isEmpty()){ this.clearTable(model); }else{ GElement first = selectionEvent.getNewSelection().getFirst(); this.fillTable(first, model); if(!selectionEvent.getOld().isEmpty()){ selectionEvent.getOld().getFirst().deleteObserver(this); } selectionEvent.getNewSelection().getFirst().addObserver(this); } } else if(arg instanceof RemoveElementEvent){ this.clearTable(model); }else if(arg instanceof ElementEvent){ ElementEvent event = (ElementEvent) arg; GElement ele = event.getElement(); fillTable(ele, model); } //end safe zone jTable1.getModel().addTableModelListener(listener); } protected void clearTable(DefaultTableModel model){ for(int i = 0;i<model.getRowCount();i++){ model.setValueAt("", i, 0); model.setValueAt("", i, 1); } } private void fillTable(GElement ele, DefaultTableModel model) { Map<String,String> attribut = ele.listAttributes(); model.setNumRows(attribut.keySet().size()); int line =0; for(String sel : attribut.keySet()){ model.setValueAt(sel, line, 0); model.setValueAt(attribut.get(sel), line, 1); line++; } } }