src/main/java/cz/frantovo/rozsireneatributy/gui/Panel.java
branchv_0
changeset 39 ec0e970e0830
parent 35 72ea1c6d836c
child 41 64e564c2f069
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/src/main/java/cz/frantovo/rozsireneatributy/gui/Panel.java	Sat Dec 16 20:13:13 2023 +0100
     1.3 @@ -0,0 +1,259 @@
     1.4 +/**
     1.5 + * Rozšířené atributy – program na správu rozšířených atributů souborů
     1.6 + * Copyright © 2012 František Kučera (frantovo.cz)
     1.7 + *
     1.8 + * This program is free software: you can redistribute it and/or modify
     1.9 + * it under the terms of the GNU General Public License as published by
    1.10 + * the Free Software Foundation, either version 3 of the License.
    1.11 + *
    1.12 + * This program is distributed in the hope that it will be useful,
    1.13 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
    1.14 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
    1.15 + * GNU General Public License for more details.
    1.16 + *
    1.17 + * You should have received a copy of the GNU General Public License
    1.18 + * along with this program. If not, see <http://www.gnu.org/licenses/>.
    1.19 + */
    1.20 +package cz.frantovo.rozsireneatributy.gui;
    1.21 +
    1.22 +import cz.frantovo.rozsireneatributy.Atribut;
    1.23 +import cz.frantovo.rozsireneatributy.CSV;
    1.24 +import java.awt.Toolkit;
    1.25 +import java.awt.datatransfer.StringSelection;
    1.26 +import java.io.IOException;
    1.27 +import java.io.StringWriter;
    1.28 +import java.util.ResourceBundle;
    1.29 +import java.util.logging.Level;
    1.30 +import java.util.logging.Logger;
    1.31 +import javax.swing.JOptionPane;
    1.32 +import javax.swing.JTable;
    1.33 +import javax.swing.ListSelectionModel;
    1.34 +import javax.swing.event.ListSelectionEvent;
    1.35 +import javax.swing.event.ListSelectionListener;
    1.36 +
    1.37 +/**
    1.38 + * @author Ing. František Kučera (frantovo.cz)
    1.39 + */
    1.40 +public class Panel extends javax.swing.JPanel {
    1.41 +
    1.42 +	public static final int SLOUPEC_NÁZVU = 0;
    1.43 +	public static final int SLOUPEC_HODNOTY = 1;
    1.44 +	private static final Logger log = Logger
    1.45 +		.getLogger(Panel.class.getSimpleName());
    1.46 +	private static final ResourceBundle překlady = ResourceBundle
    1.47 +		.getBundle(Atribut.class.getPackageName() + ".Překlady");
    1.48 +	private Model model;
    1.49 +	private Atribut vybranýAtribut;
    1.50 +	private JTable tabulka;
    1.51 +
    1.52 +	public Panel(Model model) {
    1.53 +		this.model = model;
    1.54 +		initComponents();
    1.55 +
    1.56 +		tlačítkoZamknout.setEnabled(model.isZámekPodporovaný());
    1.57 +		tlačítkoZamknout.setToolTipText(model.isZámekPodporovaný()
    1.58 +			? překlady.getString("zamknout.popis")
    1.59 +			: překlady.getString("chyba.lzeZamknoutJenSoubor"));
    1.60 +
    1.61 +		tabulka = new JTable(model);
    1.62 +		nastavEditor();
    1.63 +		tabulka.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
    1.64 +		posuvnýPanel.setViewportView(tabulka);
    1.65 +
    1.66 +		tabulka.setRowHeight((int) (tabulka.getRowHeight() * 1.3));
    1.67 +
    1.68 +		/** Výběr aktuálního atributu v tabulce */
    1.69 +		tabulka.getSelectionModel().addListSelectionListener(
    1.70 +			new ListSelectionListener() {
    1.71 +
    1.72 +			@Override
    1.73 +			public void valueChanged(ListSelectionEvent e) {
    1.74 +				int řádek = tabulka.getSelectedRow();
    1.75 +				if (řádek < 0) {
    1.76 +					vybranýAtribut = null;
    1.77 +					tlačítkoSmazat.setEnabled(false);
    1.78 +				} else {
    1.79 +					vybranýAtribut = getModel().getAtribut(řádek);
    1.80 +					tlačítkoSmazat.setEnabled(true);
    1.81 +				}
    1.82 +			}
    1.83 +		});
    1.84 +	}
    1.85 +
    1.86 +	private void nastavEditor() {
    1.87 +		tabulka.getColumnModel().getColumn(SLOUPEC_NÁZVU)
    1.88 +			.setCellEditor(new EditorNázvůAtributů(model.getKonfigurace()));
    1.89 +		tabulka.getColumnModel().getColumn(SLOUPEC_HODNOTY)
    1.90 +			.setCellEditor(new EditorHodnotAtributů(model.getKonfigurace()));
    1.91 +	}
    1.92 +
    1.93 +	private Model getModel() {
    1.94 +		return model;
    1.95 +	}
    1.96 +
    1.97 +	public void setModel(Model model) {
    1.98 +		this.model = model;
    1.99 +		tabulka.setModel(model);
   1.100 +		nastavEditor();
   1.101 +	}
   1.102 +
   1.103 +	private void zobrazChybovouHlášku(String hláška, Throwable chyba) {
   1.104 +		JOptionPane.showMessageDialog(this, hláška + "\n"
   1.105 +			+ chyba.getLocalizedMessage(),
   1.106 +			překlady.getString("chyba.titulek"), JOptionPane.ERROR_MESSAGE);
   1.107 +		log.log(Level.WARNING, hláška, chyba);
   1.108 +	}
   1.109 +	
   1.110 +	private void kopírujDoSchránky() {
   1.111 +		try {
   1.112 +			StringWriter výstup = new StringWriter();
   1.113 +			CSV csv = new CSV(výstup);
   1.114 +
   1.115 +			csv.hodnota(překlady.getString("tabulka.název").toLowerCase());
   1.116 +			csv.hodnota(překlady.getString("tabulka.hodnota").toLowerCase());
   1.117 +			csv.konecŘádku();
   1.118 +
   1.119 +			for (int i = 0; i < model.getRowCount(); i++) {
   1.120 +				csv.hodnota(String.valueOf(model.getValueAt(i, 0)));
   1.121 +				csv.hodnota(String.valueOf(model.getValueAt(i, 1)));
   1.122 +				csv.konecŘádku();
   1.123 +			}
   1.124 +
   1.125 +			Toolkit.getDefaultToolkit().getSystemClipboard().setContents(
   1.126 +				new StringSelection(výstup.toString()),
   1.127 +				null
   1.128 +			);
   1.129 +		} catch (Exception e) {
   1.130 +			zobrazChybovouHlášku(překlady
   1.131 +				.getString("chyba.nepodařiloSeZkopírovat"), e);
   1.132 +		}
   1.133 +	}
   1.134 +
   1.135 +	@SuppressWarnings("unchecked")
   1.136 +    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
   1.137 +    private void initComponents() {
   1.138 +
   1.139 +        posuvnýPanel = new javax.swing.JScrollPane();
   1.140 +        tlačítkoPřidat = new javax.swing.JButton();
   1.141 +        tlačítkoSmazat = new javax.swing.JButton();
   1.142 +        tlačítkoZnovuNačíst = new javax.swing.JButton();
   1.143 +        tlačítkoZamknout = new javax.swing.JToggleButton();
   1.144 +        tlačítkoKopírovat = new javax.swing.JButton();
   1.145 +
   1.146 +        tlačítkoPřidat.setMnemonic('p');
   1.147 +        java.util.ResourceBundle bundle = java.util.ResourceBundle.getBundle("cz/frantovo/rozsireneatributy/Překlady"); // NOI18N
   1.148 +        tlačítkoPřidat.setText(bundle.getString("přidatAtribut")); // NOI18N
   1.149 +        tlačítkoPřidat.addActionListener(new java.awt.event.ActionListener() {
   1.150 +            public void actionPerformed(java.awt.event.ActionEvent evt) {
   1.151 +                tlačítkoPřidatActionPerformed(evt);
   1.152 +            }
   1.153 +        });
   1.154 +
   1.155 +        tlačítkoSmazat.setMnemonic('s');
   1.156 +        tlačítkoSmazat.setText(bundle.getString("smazatAtribut")); // NOI18N
   1.157 +        tlačítkoSmazat.setEnabled(false);
   1.158 +        tlačítkoSmazat.addActionListener(new java.awt.event.ActionListener() {
   1.159 +            public void actionPerformed(java.awt.event.ActionEvent evt) {
   1.160 +                tlačítkoSmazatActionPerformed(evt);
   1.161 +            }
   1.162 +        });
   1.163 +
   1.164 +        tlačítkoZnovuNačíst.setMnemonic('z');
   1.165 +        tlačítkoZnovuNačíst.setText(bundle.getString("znovuNačíst")); // NOI18N
   1.166 +        tlačítkoZnovuNačíst.addActionListener(new java.awt.event.ActionListener() {
   1.167 +            public void actionPerformed(java.awt.event.ActionEvent evt) {
   1.168 +                tlačítkoZnovuNačístActionPerformed(evt);
   1.169 +            }
   1.170 +        });
   1.171 +
   1.172 +        tlačítkoZamknout.setText(bundle.getString("zamknout")); // NOI18N
   1.173 +        tlačítkoZamknout.addActionListener(new java.awt.event.ActionListener() {
   1.174 +            public void actionPerformed(java.awt.event.ActionEvent evt) {
   1.175 +                tlačítkoZamknoutActionPerformed(evt);
   1.176 +            }
   1.177 +        });
   1.178 +
   1.179 +        tlačítkoKopírovat.setText(bundle.getString("schránka.kopírovat")); // NOI18N
   1.180 +        tlačítkoKopírovat.addActionListener(new java.awt.event.ActionListener() {
   1.181 +            public void actionPerformed(java.awt.event.ActionEvent evt) {
   1.182 +                tlačítkoKopírovatActionPerformed(evt);
   1.183 +            }
   1.184 +        });
   1.185 +
   1.186 +        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
   1.187 +        this.setLayout(layout);
   1.188 +        layout.setHorizontalGroup(
   1.189 +            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
   1.190 +            .addGroup(layout.createSequentialGroup()
   1.191 +                .addContainerGap()
   1.192 +                .addComponent(tlačítkoPřidat)
   1.193 +                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
   1.194 +                .addComponent(tlačítkoSmazat)
   1.195 +                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
   1.196 +                .addComponent(tlačítkoZnovuNačíst)
   1.197 +                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
   1.198 +                .addComponent(tlačítkoZamknout)
   1.199 +                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
   1.200 +                .addComponent(tlačítkoKopírovat)
   1.201 +                .addContainerGap(25, Short.MAX_VALUE))
   1.202 +            .addComponent(posuvnýPanel, javax.swing.GroupLayout.DEFAULT_SIZE, 543, Short.MAX_VALUE)
   1.203 +        );
   1.204 +        layout.setVerticalGroup(
   1.205 +            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
   1.206 +            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
   1.207 +                .addComponent(posuvnýPanel, javax.swing.GroupLayout.DEFAULT_SIZE, 277, Short.MAX_VALUE)
   1.208 +                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
   1.209 +                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
   1.210 +                    .addComponent(tlačítkoPřidat)
   1.211 +                    .addComponent(tlačítkoSmazat)
   1.212 +                    .addComponent(tlačítkoZnovuNačíst)
   1.213 +                    .addComponent(tlačítkoZamknout)
   1.214 +                    .addComponent(tlačítkoKopírovat))
   1.215 +                .addContainerGap())
   1.216 +        );
   1.217 +    }// </editor-fold>//GEN-END:initComponents
   1.218 +
   1.219 +	private void tlačítkoPřidatActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_tlačítkoPřidatActionPerformed
   1.220 +		model.přidejAtribut(new Atribut());
   1.221 +	}//GEN-LAST:event_tlačítkoPřidatActionPerformed
   1.222 +
   1.223 +	private void tlačítkoSmazatActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_tlačítkoSmazatActionPerformed
   1.224 +		try {
   1.225 +			model.odeberAtribut(vybranýAtribut);
   1.226 +		} catch (IOException e) {
   1.227 +			zobrazChybovouHlášku(překlady
   1.228 +				.getString("chyba.nepodařiloSeSmazat"), e);
   1.229 +		}
   1.230 +	}//GEN-LAST:event_tlačítkoSmazatActionPerformed
   1.231 +
   1.232 +	private void tlačítkoZnovuNačístActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_tlačítkoZnovuNačístActionPerformed
   1.233 +		try {
   1.234 +			model.načtiAtributy();
   1.235 +		} catch (IOException e) {
   1.236 +			zobrazChybovouHlášku(překlady
   1.237 +				.getString("chyba.nepodařiloSeNačíst"), e);
   1.238 +		}
   1.239 +	}//GEN-LAST:event_tlačítkoZnovuNačístActionPerformed
   1.240 +
   1.241 +    private void tlačítkoZamknoutActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_tlačítkoZamknoutActionPerformed
   1.242 +		try {
   1.243 +			model.nastavZámek(tlačítkoZamknout.isSelected());
   1.244 +		} catch (Exception e) {
   1.245 +			zobrazChybovouHlášku(překlady
   1.246 +				.getString("chyba.nepodařiloSeNastavitZámek"), e);
   1.247 +		}
   1.248 +    }//GEN-LAST:event_tlačítkoZamknoutActionPerformed
   1.249 +
   1.250 +    private void tlačítkoKopírovatActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_tlačítkoKopírovatActionPerformed
   1.251 +		kopírujDoSchránky();
   1.252 +    }//GEN-LAST:event_tlačítkoKopírovatActionPerformed
   1.253 +
   1.254 +    // Variables declaration - do not modify//GEN-BEGIN:variables
   1.255 +    private javax.swing.JScrollPane posuvnýPanel;
   1.256 +    private javax.swing.JButton tlačítkoKopírovat;
   1.257 +    private javax.swing.JButton tlačítkoPřidat;
   1.258 +    private javax.swing.JButton tlačítkoSmazat;
   1.259 +    private javax.swing.JToggleButton tlačítkoZamknout;
   1.260 +    private javax.swing.JButton tlačítkoZnovuNačíst;
   1.261 +    // End of variables declaration//GEN-END:variables
   1.262 +}