/*
* PanelExpTypesEdit.java
*
* Created on 13 Март 2008 г., 18:42
*/
package clips.administrator.expenditure;
import cli_fmw.delegate.directory.DirectoryItem;
import clips.delegate.directory.complex.DirectoryExpenditureType;
import clips.delegate.directory.complex.DirectoryExpenditureTypeItem;
import cli_fmw.delegate.directory.complex.DirectoryLocator;
import cli_fmw.delegate.DelegateLine2;
import clips.delegate.directory.simple.expenditureMetric.DirectoryExpenditureMetricItem;
import beans.directory.expenditure.entity.ExpenditureTypeDetails;
import cli_fmw.main.ClipsException;
import cli_fmw.main.MainWindow;
import cli_fmw.main.PageContainer;
import cli_fmw.main.PageGeneric;
import cli_fmw.main.PrintCreators;
import cli_fmw.main.Printable;
import cli_fmw.utils.Selector;
import cli_fmw.utils.MessageBox;
import cli_fmw.utils.SelectorEditableExceptional;
import cli_fmw.utils.table_config_states.StateSaver;
import clips.delegate.directory.simple.expenditureMetric.DirectoryExpenditureMetric;
import javax.swing.DefaultCellEditor;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JComboBox;
import javax.swing.JOptionPane;
import javax.swing.table.TableColumn;
/**
* Панель редактирования справочника материалов
* @author petr
*/
public class PanelExpTypesEdit extends PageGeneric implements Printable {
private DirectoryExpenditureType directory; // справочник
private JComboBox cbMetric = new JComboBox(); // комбо-бокс для выбора метрики
private SelectorEditableExceptional<DirectoryExpenditureTypeItem> cache;
/** Creates new form PanelExpTypesEdit */
public PanelExpTypesEdit(PageContainer container) throws ClipsException {
super(container);
initComponents();
directory = DirectoryLocator.getDirectory(DirectoryExpenditureType.class, false);
cache = directory.getItems();
DirectoryExpenditureMetric ds = DirectoryLocator.getDirectory(DirectoryExpenditureMetric.class);
Selector ii = ds.getItems();
DefaultComboBoxModel model = new DefaultComboBoxModel();// модель комбобокса
for (int i = 0; i < ii.size(); i++) {
model.addElement((DirectoryItem) ii.get(i));// заполнение модели
}
cbMetric.setModel(model); // комбобокс на панели
cbNewExpenMetrics.setModel(model); // комбобокс в окне создания нового материала
resetTable();//обновление таблицы
StateSaver.attachTo(this);
}
/**
* Обновление таблицы
*/
private void resetTable() {
TableModelExpenditureTypes model = new TableModelExpenditureTypes(cache, cbMetric); //заполнение модели таблицы
tblExpTypes.setModel(model); // установка модели
tblExpTypes.setSelectionMode(0); // выбирать можно только одну строку
// вешаем на последнюю колонку редактирование через комбобокс
TableColumn metricColumn = tblExpTypes.getColumnModel().getColumn(1);
metricColumn.setCellEditor(new DefaultCellEditor(cbMetric));
}
/** 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.
*/
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
private void initComponents() {
panelNewExpenType = new javax.swing.JPanel();
jPanel4 = new javax.swing.JPanel();
jPanel5 = new javax.swing.JPanel();
jLabel1 = new javax.swing.JLabel();
tfNewExpenTitle = new javax.swing.JTextField();
jPanel6 = new javax.swing.JPanel();
jLabel2 = new javax.swing.JLabel();
cbNewExpenMetrics = new javax.swing.JComboBox();
jPanel2 = new javax.swing.JPanel();
jPanel1 = new javax.swing.JPanel();
btAddExp = new javax.swing.JButton();
btRemoveExp = new javax.swing.JButton();
jScrollPane1 = new javax.swing.JScrollPane();
tblExpTypes = new cli_fmw.utils.sorted_table.SortedTable();
jPanel4.setLayout(new java.awt.GridLayout(1, 0, 20, 0));
jPanel5.setLayout(new java.awt.GridLayout(2, 0, 0, 2));
jLabel1.setText("Название");
jPanel5.add(jLabel1);
jPanel5.add(tfNewExpenTitle);
jPanel4.add(jPanel5);
jPanel6.setLayout(new java.awt.GridLayout(2, 0));
jLabel2.setText("Метрика");
jPanel6.add(jLabel2);
jPanel6.add(cbNewExpenMetrics);
jPanel4.add(jPanel6);
javax.swing.GroupLayout panelNewExpenTypeLayout = new javax.swing.GroupLayout(panelNewExpenType);
panelNewExpenType.setLayout(panelNewExpenTypeLayout);
panelNewExpenTypeLayout.setHorizontalGroup(
panelNewExpenTypeLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(panelNewExpenTypeLayout.createSequentialGroup()
.addContainerGap()
.addComponent(jPanel4, javax.swing.GroupLayout.DEFAULT_SIZE, 487, Short.MAX_VALUE)
.addContainerGap())
);
panelNewExpenTypeLayout.setVerticalGroup(
panelNewExpenTypeLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(panelNewExpenTypeLayout.createSequentialGroup()
.addContainerGap()
.addComponent(jPanel4, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
setBorder(javax.swing.BorderFactory.createEmptyBorder(5, 5, 5, 5));
setLayout(new java.awt.BorderLayout(5, 5));
jPanel2.setLayout(new java.awt.BorderLayout());
jPanel1.setLayout(new java.awt.GridLayout(1, 0, 10, 0));
btAddExp.setText("Добавить");
btAddExp.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btAddExpActionPerformed(evt);
}
});
jPanel1.add(btAddExp);
btRemoveExp.setText("Удалить");
btRemoveExp.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btRemoveExpActionPerformed(evt);
}
});
jPanel1.add(btRemoveExp);
jPanel2.add(jPanel1, java.awt.BorderLayout.EAST);
add(jPanel2, java.awt.BorderLayout.SOUTH);
jScrollPane1.setViewportView(tblExpTypes);
add(jScrollPane1, java.awt.BorderLayout.CENTER);
}// </editor-fold>//GEN-END:initComponents
/**
* Добавление нового типа
* @param evt
*/
private void btAddExpActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btAddExpActionPerformed
cbNewExpenMetrics.setSelectedItem(null); // ничего не выбрано
tfNewExpenTitle.setText("");//название не задано
// спрашиваем подтверждение
int res = JOptionPane.showConfirmDialog(MainWindow.mainWindow, panelNewExpenType, "Создание нового материала", JOptionPane.OK_CANCEL_OPTION);
if (res == JOptionPane.OK_OPTION) { // если подтверждение есть
try {// пробуем добавить новый итем в справочник
DirectoryExpenditureTypeItem item = new DirectoryExpenditureTypeItem(new ExpenditureTypeDetails());
item.setTitle(tfNewExpenTitle.getText());//название
item.setMetrics((DirectoryExpenditureMetricItem) cbNewExpenMetrics.getSelectedItem());//метрика
cache.append(item);//добвавляем в справочник
resetTable(); // обновляем таблицу
} catch (ClipsException ex) {
MessageBox.showException(ex);
}
}
}//GEN-LAST:event_btAddExpActionPerformed
/**
* Удаление выбранного типа
* @param evt
*/
private void btRemoveExpActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btRemoveExpActionPerformed
// спрашиваем подтверждение
if (MessageBox.showConfirmYesNo(MessageBox.C_DEL_EXPENDITURE)==MessageBox.ANSWER_OK) {// если подтверждение есть
try {// пробуем удалить итем из справочника
cache.remove(tblExpTypes.getSelectedRowSorted());
directory = DirectoryLocator.getDirectory(DirectoryExpenditureType.class);
cache = directory.getItems();
resetTable();//обновляем таблицу
} catch (ClipsException ex) {
MessageBox.showException(ex);
}
}
}//GEN-LAST:event_btRemoveExpActionPerformed
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JButton btAddExp;
private javax.swing.JButton btRemoveExp;
private javax.swing.JComboBox cbNewExpenMetrics;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel2;
private javax.swing.JPanel jPanel1;
private javax.swing.JPanel jPanel2;
private javax.swing.JPanel jPanel4;
private javax.swing.JPanel jPanel5;
private javax.swing.JPanel jPanel6;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JPanel panelNewExpenType;
private cli_fmw.utils.sorted_table.SortedTable tblExpTypes;
private javax.swing.JTextField tfNewExpenTitle;
// End of variables declaration//GEN-END:variables
public String getPageIcon() {
return null;
}
@Override
public String getPageTitle() {
return "Cправочник материалов";
}
@Override
public DelegateLine2 getDelegate() {
return null;
}
@Override
public boolean readyForPrint() {
return true;
}
@Override
public void print() {
if (readyForPrint()) {
if (tblExpTypes.isEditing()) {
tblExpTypes.getCellEditor().stopCellEditing();
}
String title = "Справочник материалов";
PrintCreators.createGeneratedReport(title, null, null, null, tblExpTypes.getModel(), getClass());
}
}
}