Package cli_fmw.directory.editors.writer

Source Code of cli_fmw.directory.editors.writer.PanelIntelWriterEditor

/*
* PanelIntelWriterEditor.java
*
* Created on 6 Август 2008 г., 10:26
*/
package cli_fmw.directory.editors.writer;

import cli_fmw.delegate.directory.DirectoryItemRO;
import cli_fmw.delegate.directory.complex.DirectoryIntelliWriter;
import cli_fmw.delegate.directory.complex.DirectoryLocator;
import cli_fmw.delegate.directory.simple.DirectorySimpleItem;
import cli_fmw.delegate.DelegateLine2;
import cli_fmw.delegate.directory.simple.iwtype.DirectoryIWTypeAbstract;
import cli_fmw.delegate.directory.simple.iwtype.DirectoryIWTypeItemAbstract;
import cli_fmw.main.PageContainer;
import cli_fmw.main.PageGeneric;
import cli_fmw.utils.MessageBox;
import cli_fmw.main.ClipsException;
import cli_fmw.main.Persistentable;
import cli_fmw.utils.table_config_states.StateSaver;
import java.awt.Rectangle;
import java.awt.event.MouseEvent;
import javax.swing.DefaultListModel;
import javax.swing.JOptionPane;
import javax.swing.ListSelectionModel;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;

/**
*
* @author  petr
*/
public class PanelIntelWriterEditor extends PageGeneric implements ListSelectionListener, Persistentable {

    private DirectoryIntelliWriter directoryWriterItems;
    private DirectoryIWTypeItemAbstract selectedType;
    private boolean canBeEdit;
    private String oldtext;
    private DirectoryIWTypeAbstract directoryTypes;
   

    public PanelIntelWriterEditor(PageContainer container) throws ClipsException {
        super(container);
        initComponents();
        directoryWriterItems = DirectoryLocator.getDirectory(DirectoryIntelliWriter.class, false);
        directoryTypes = DirectoryLocator.getDirectory(DirectoryIWTypeAbstract.class, false);
        canBeEdit = directoryWriterItems.canEdit();
        updateList();
        lstTypes.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);//выделять можно только 1 строку
        lstTypes.addListSelectionListener(this);//добавим листенер (сама панель)
       
        jTextArea1.getDocument().addDocumentListener( new DocumentListener() {

            @Override
            public void insertUpdate(DocumentEvent e) {
                changed();
            }

            @Override
            public void removeUpdate(DocumentEvent e) {
                changed();
            }

            @Override
            public void changedUpdate(DocumentEvent e) {
                changed();
            }
           
            public void changed() {
                //save();
                fireContainerEventStateChanged();
            }
        });
        updateEditor();
    StateSaver.attachTo(this);
    }
   
    private void updateList() throws ClipsException{
        DefaultListModel model = new DefaultListModel();
       
        model = new DefaultListModel();
        DirectoryItemRO[] items = directoryTypes.toArray();
        for (DirectoryItemRO itemRO : items) {
            model.addElement(itemRO);
        }
        lstTypes.setModel(model);
    }
   
   
    private void setEnabledComponents() {
        jTextArea1.setEditable(selectedType != null && canBeEdit);
    }
   
    private void updateEditor() throws ClipsException {
        oldtext = directoryWriterItems.getItemsAsText(selectedType);
        jTextArea1.setText(oldtext);
        jTextArea1.setCaretPosition(0);
        setEnabledComponents();
    }

    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        popupMenuTree = new javax.swing.JPopupMenu();
        rename = new javax.swing.JMenuItem();
        jSplitPane1 = new javax.swing.JSplitPane();
        jPanel1 = new javax.swing.JPanel();
        jScrollPane1 = new javax.swing.JScrollPane();
        lstTypes = new javax.swing.JList();
        jPanel3 = new javax.swing.JPanel();
        btAddType = new javax.swing.JButton();
        btDeleteType = new javax.swing.JButton();
        jScrollPane2 = new javax.swing.JScrollPane();
        jTextArea1 = new javax.swing.JTextArea();

        rename.setText("Переименовать");
        rename.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                renameActionPerformed(evt);
            }
        });
        popupMenuTree.add(rename);

        setBorder(javax.swing.BorderFactory.createEmptyBorder(5, 5, 5, 5));
        setLayout(new java.awt.BorderLayout());

        jSplitPane1.setDividerLocation(300);

        jPanel1.setLayout(new java.awt.BorderLayout());

        jScrollPane1.setBorder(javax.swing.BorderFactory.createTitledBorder("Типы"));

        lstTypes.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                lstTypesMouseClicked(evt);
            }
        });
        jScrollPane1.setViewportView(lstTypes);

        jPanel1.add(jScrollPane1, java.awt.BorderLayout.CENTER);

        jPanel3.setBorder(javax.swing.BorderFactory.createEmptyBorder(5, 1, 5, 1));
        jPanel3.setLayout(new java.awt.GridLayout(1, 0, 5, 0));

        btAddType.setText("Добавить");
        btAddType.setActionCommand("<html>Добавить <BR>   группу</html>");
        btAddType.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btAddTypeActionPerformed(evt);
            }
        });
        jPanel3.add(btAddType);

        btDeleteType.setText("Удалить");
        btDeleteType.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btDeleteTypeActionPerformed(evt);
            }
        });
        jPanel3.add(btDeleteType);

        jPanel1.add(jPanel3, java.awt.BorderLayout.SOUTH);

        jSplitPane1.setLeftComponent(jPanel1);

        jScrollPane2.setBorder(javax.swing.BorderFactory.createTitledBorder("Значения"));

        jTextArea1.setColumns(20);
        jTextArea1.setRows(5);
        jScrollPane2.setViewportView(jTextArea1);

        jSplitPane1.setRightComponent(jScrollPane2);

        add(jSplitPane1, java.awt.BorderLayout.CENTER);
    }// </editor-fold>//GEN-END:initComponents

private void btAddTypeActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btAddTypeActionPerformed
        try {
            String result = JOptionPane.showInputDialog("Введите название");
            if (result == null) {
                return;
            }
            DirectorySimpleItem newItem = directoryTypes.initNewItem(result);
            directoryTypes.getItems().append(newItem);
            updateList();
            lstTypes.setSelectedValue(newItem, true);
        } catch (ClipsException ex) {
            MessageBox.showException(ex);
        }
}//GEN-LAST:event_btAddTypeActionPerformed

private void btDeleteTypeActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btDeleteTypeActionPerformed
        try {
            Object selectedValue = lstTypes.getSelectedValue();
            if (selectedValue == null) {
                return;
            }
            directoryTypes.getItems().remove(selectedType);
            updateList();
        } catch (ClipsException ex) {
            MessageBox.showException(ex);
        }
}//GEN-LAST:event_btDeleteTypeActionPerformed

private void renameActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_renameActionPerformed
        DirectorySimpleItem item = (DirectorySimpleItem) lstTypes.getSelectedValue();
        String result = JOptionPane.showInputDialog("Введите название");
        if (result == null) {
            return;
        }
        try {
            item.setTitle(result);//GEN-LAST:event_renameActionPerformed
        } catch (ClipsException ex) {
            MessageBox.showException(ex);
        }
}                                     

private void lstTypesMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_lstTypesMouseClicked

    int selectedIndex = lstTypes.getSelectedIndex();
    if (evt.getButton() == MouseEvent.BUTTON3 && selectedIndex >= 0) {
        Rectangle rect = lstTypes.getCellBounds(selectedIndex, selectedIndex);
        if (rect.contains(evt.getPoint())) {
            popupMenuTree.show(lstTypes, evt.getX(), evt.getY());
        }
    }
}//GEN-LAST:event_lstTypesMouseClicked

    @Override
    public String getPageTitle() {
        return "IntelWriter";
    }


    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton btAddType;
    private javax.swing.JButton btDeleteType;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JPanel jPanel3;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JScrollPane jScrollPane2;
    private javax.swing.JSplitPane jSplitPane1;
    private javax.swing.JTextArea jTextArea1;
    private javax.swing.JList lstTypes;
    private javax.swing.JPopupMenu popupMenuTree;
    private javax.swing.JMenuItem rename;
    // End of variables declaration//GEN-END:variables

    @Override
    public DelegateLine2 getDelegate() {
        return null;
    }

    @Override
    public void valueChanged(ListSelectionEvent e) {
        if (isDirty()){//если делегат грязный, то сохраняем
            try {
                //если делегат грязный, то спросим про сохранить
                int res = MessageBox.showConfirmYesNoCancel(MessageBox.C_SAVE_CHANGES);
                if (res == MessageBox.ANSWER_CANCEL) {
                    lstTypes.removeListSelectionListener(this);
                    lstTypes.setSelectedValue(selectedType, true);
                    lstTypes.addListSelectionListener(this);
                    return;
                } else if (res == MessageBox.ANSWER_YES) {
                    save();
                } else {
                    restore();
                }
                //Если не было отмены то обновляем редактор
                selectedType = (DirectoryIWTypeItemAbstract) lstTypes.getSelectedValue();
                fireContainerEventStateChanged();
                updateEditor();
            } catch (ClipsException ex) {
                MessageBox.showException(ex);
                lstTypes.removeListSelectionListener(this);
                lstTypes.setSelectedValue(selectedType, true);
                lstTypes.addListSelectionListener(this);
            }
        } else {
            try {
                selectedType = (DirectoryIWTypeItemAbstract) lstTypes.getSelectedValue();
                fireContainerEventStateChanged();
                updateEditor();
            } catch (ClipsException ex) {
                MessageBox.showException(ex);
            }
        }
    }

    @Override
    public boolean isDirty() {
        return !jTextArea1.getText().equals(oldtext);
    }

    @Override
    public void save() throws ClipsException {
        if (selectedType == null || !isDirty()) {
            return;
        }
        directoryWriterItems.setItemsAsText(selectedType, jTextArea1.getText());
       
        oldtext = jTextArea1.getText();
        fireContainerEventStateChanged();
    }

    @Override
    public void restore() {
        jTextArea1.setText(oldtext);
        jTextArea1.setCaretPosition(0);
        fireContainerEventStateChanged();
    }

    //Убрано - отладочная сохранялка
/*    private void saveToFile() {
        final String filename = "../IntellyWriter.log";
        File file = new File(filename);
    FileWriter writer = null;
        try {
            if (!file.exists()) {
                file.createNewFile();
            }
      writer = new FileWriter(file, true);
            writer.write("\n\n\n" + new GregorianCalendar().getTime().toString() + "\n");
            writer.write(selectedType.toString() + "\n");
            writer.write(jTextArea1.getText());
        } catch (IOException ex) {
            MessageBox.showExceptionOnly(new ClipsException("Ошибка при записи изменений редактора IntelWriter", ex));
        } finally {
            try {
                writer.close();
            } catch (IOException ex) {
                MessageBox.showExceptionOnly(ex);
            }
        }
    }
*/
TOP

Related Classes of cli_fmw.directory.editors.writer.PanelIntelWriterEditor

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.