/*
* Copyright (C) 2014 GG-Net GmbH - Oliver Günther
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package eu.ggnet.dwoss.receipt.product;
import java.util.*;
import javax.swing.DefaultComboBoxModel;
import javax.swing.UIManager;
import eu.ggnet.dwoss.receipt.CheckBoxTableNoteModel;
import eu.ggnet.dwoss.receipt.UiUtil;
import eu.ggnet.dwoss.spec.entity.BasicSpec;
import eu.ggnet.dwoss.spec.entity.BasicSpec.Color;
import eu.ggnet.dwoss.spec.entity.BasicSpec.VideoPort;
import eu.ggnet.dwoss.spec.entity.ProductSpec.Extra;
import eu.ggnet.dwoss.util.CloseType;
import eu.ggnet.dwoss.util.NamedEnumCellRenderer;
import eu.ggnet.dwoss.util.OkCancelDialog;
/**
*
* @author pascal.perau
*/
public class BasicView extends AbstractView<BasicSpec> {
CheckBoxTableNoteModel<Extra> extrasModel = new CheckBoxTableNoteModel(Arrays.asList(Extra.class.getEnumConstants()), "Ausstattung");
CheckBoxTableNoteModel<VideoPort> videoPortModel = new CheckBoxTableNoteModel(Arrays.asList(VideoPort.class.getEnumConstants()), "Ausstattung");
private BasicSpec basicSpec;
/** Creates new form BasicView */
public BasicView() {
initComponents();
extrasTable.setModel(extrasModel);
extrasModel.setTable(extrasTable);
videoPortTable.setModel(videoPortModel);
videoPortModel.setTable(videoPortTable);
Color[] colors = Arrays.copyOf(Color.values(), Color.values().length + 1);
NamedEnumCellRenderer renderer = new NamedEnumCellRenderer();
colorBox.setModel(new DefaultComboBoxModel(colors));
colorBox.setRenderer(renderer);
colorBox.setSelectedItem(null);
UiUtil.spaceSelection(extrasTable);
UiUtil.spaceSelection(videoPortTable);
}
@Override
public void setSpec(BasicSpec basicSpec) {
Set<Extra> extras = basicSpec.getDefaultExtras();
extras.addAll(basicSpec.getExtras());
extrasModel.setFiltered(extras);
extrasModel.setMarked(basicSpec.getExtras());
colorBox.setSelectedItem(basicSpec.getColor());
videoPortModel.setMarked(basicSpec.getVideoPorts());
noteArea.setText(basicSpec.getComment());
this.basicSpec = basicSpec;
}
@Override
public BasicSpec getSpec() {
if (basicSpec == null) basicSpec = new BasicSpec();
basicSpec.setColor((Color)colorBox.getSelectedItem());
basicSpec.setExtras(extrasModel.getMarked());
basicSpec.setVideoPorts(videoPortModel.getMarked());
basicSpec.setComment(noteArea.getText());
return basicSpec;
}
/** 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() {
colorBox = new javax.swing.JComboBox();
jLabel1 = new javax.swing.JLabel();
jScrollPane1 = new javax.swing.JScrollPane();
noteArea = new javax.swing.JTextArea();
jLabel2 = new javax.swing.JLabel();
jScrollPane2 = new javax.swing.JScrollPane();
videoPortTable = new javax.swing.JTable();
jScrollPane3 = new javax.swing.JScrollPane();
extrasTable = new javax.swing.JTable();
colorBox.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));
colorBox.setMinimumSize(new java.awt.Dimension(72, 28));
colorBox.setPreferredSize(new java.awt.Dimension(72, 28));
jLabel1.setText("Farbe:");
noteArea.setColumns(20);
noteArea.setLineWrap(true);
noteArea.setRows(5);
noteArea.setWrapStyleWord(true);
jScrollPane1.setViewportView(noteArea);
jLabel2.setText("Bemerkung/Beschreibung");
videoPortTable.setModel(new javax.swing.table.DefaultTableModel(
new Object [][] {
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null}
},
new String [] {
"Title 1", "Title 2", "Title 3", "Title 4"
}
));
jScrollPane2.setViewportView(videoPortTable);
extrasTable.setModel(new javax.swing.table.DefaultTableModel(
new Object [][] {
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null}
},
new String [] {
"Title 1", "Title 2", "Title 3", "Title 4"
}
));
jScrollPane3.setViewportView(extrasTable);
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
this.setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jScrollPane3, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE)
.addComponent(jLabel1)
.addComponent(colorBox, javax.swing.GroupLayout.PREFERRED_SIZE, 265, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addComponent(jLabel2)
.addGap(0, 0, Short.MAX_VALUE))
.addComponent(jScrollPane1, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 298, Short.MAX_VALUE)
.addComponent(jScrollPane2, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE))
.addContainerGap())
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addGap(0, 0, 0)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 163, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jLabel2)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 130, Short.MAX_VALUE))
.addGroup(layout.createSequentialGroup()
.addComponent(jScrollPane3, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jLabel1)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(colorBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))))
);
}// </editor-fold>//GEN-END:initComponents
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JComboBox colorBox;
private javax.swing.JTable extrasTable;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel2;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JScrollPane jScrollPane2;
private javax.swing.JScrollPane jScrollPane3;
private javax.swing.JTextArea noteArea;
private javax.swing.JTable videoPortTable;
// End of variables declaration//GEN-END:variables
public static void main(String[] args) throws Exception {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
BasicSpec basic = new BasicSpec();
basic.setColor(Color.RED);
basic.setComment("Der große Kommentar");
basic.setExtras(EnumSet.of(Extra.BLUETOOTH, Extra.CARD_READER));
basic.setVideoPorts(EnumSet.of(VideoPort.HDMI, VideoPort.VGA));
BasicView view = new BasicView();
view.setSpec(basic);
OkCancelDialog<BasicView> dialog = new OkCancelDialog<>("", view);
dialog.setVisible(true);
if (dialog.getCloseType() == CloseType.OK) {
System.out.println(view.getSpec());
}
System.exit(0);
}
}