diff -r 41e91ea94acb -r ec0e970e0830 src/main/java/cz/frantovo/rozsireneatributy/gui/Panel.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/cz/frantovo/rozsireneatributy/gui/Panel.java Sat Dec 16 20:13:13 2023 +0100
@@ -0,0 +1,259 @@
+/**
+ * Rozšířené atributy – program na správu rozšířených atributů souborů
+ * Copyright © 2012 František Kučera (frantovo.cz)
+ *
+ * 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.
+ *
+ * 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 .
+ */
+package cz.frantovo.rozsireneatributy.gui;
+
+import cz.frantovo.rozsireneatributy.Atribut;
+import cz.frantovo.rozsireneatributy.CSV;
+import java.awt.Toolkit;
+import java.awt.datatransfer.StringSelection;
+import java.io.IOException;
+import java.io.StringWriter;
+import java.util.ResourceBundle;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import javax.swing.JOptionPane;
+import javax.swing.JTable;
+import javax.swing.ListSelectionModel;
+import javax.swing.event.ListSelectionEvent;
+import javax.swing.event.ListSelectionListener;
+
+/**
+ * @author Ing. František Kučera (frantovo.cz)
+ */
+public class Panel extends javax.swing.JPanel {
+
+ public static final int SLOUPEC_NÁZVU = 0;
+ public static final int SLOUPEC_HODNOTY = 1;
+ private static final Logger log = Logger
+ .getLogger(Panel.class.getSimpleName());
+ private static final ResourceBundle překlady = ResourceBundle
+ .getBundle(Atribut.class.getPackageName() + ".Překlady");
+ private Model model;
+ private Atribut vybranýAtribut;
+ private JTable tabulka;
+
+ public Panel(Model model) {
+ this.model = model;
+ initComponents();
+
+ tlačítkoZamknout.setEnabled(model.isZámekPodporovaný());
+ tlačítkoZamknout.setToolTipText(model.isZámekPodporovaný()
+ ? překlady.getString("zamknout.popis")
+ : překlady.getString("chyba.lzeZamknoutJenSoubor"));
+
+ tabulka = new JTable(model);
+ nastavEditor();
+ tabulka.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
+ posuvnýPanel.setViewportView(tabulka);
+
+ tabulka.setRowHeight((int) (tabulka.getRowHeight() * 1.3));
+
+ /** Výběr aktuálního atributu v tabulce */
+ tabulka.getSelectionModel().addListSelectionListener(
+ new ListSelectionListener() {
+
+ @Override
+ public void valueChanged(ListSelectionEvent e) {
+ int řádek = tabulka.getSelectedRow();
+ if (řádek < 0) {
+ vybranýAtribut = null;
+ tlačítkoSmazat.setEnabled(false);
+ } else {
+ vybranýAtribut = getModel().getAtribut(řádek);
+ tlačítkoSmazat.setEnabled(true);
+ }
+ }
+ });
+ }
+
+ private void nastavEditor() {
+ tabulka.getColumnModel().getColumn(SLOUPEC_NÁZVU)
+ .setCellEditor(new EditorNázvůAtributů(model.getKonfigurace()));
+ tabulka.getColumnModel().getColumn(SLOUPEC_HODNOTY)
+ .setCellEditor(new EditorHodnotAtributů(model.getKonfigurace()));
+ }
+
+ private Model getModel() {
+ return model;
+ }
+
+ public void setModel(Model model) {
+ this.model = model;
+ tabulka.setModel(model);
+ nastavEditor();
+ }
+
+ private void zobrazChybovouHlášku(String hláška, Throwable chyba) {
+ JOptionPane.showMessageDialog(this, hláška + "\n"
+ + chyba.getLocalizedMessage(),
+ překlady.getString("chyba.titulek"), JOptionPane.ERROR_MESSAGE);
+ log.log(Level.WARNING, hláška, chyba);
+ }
+
+ private void kopírujDoSchránky() {
+ try {
+ StringWriter výstup = new StringWriter();
+ CSV csv = new CSV(výstup);
+
+ csv.hodnota(překlady.getString("tabulka.název").toLowerCase());
+ csv.hodnota(překlady.getString("tabulka.hodnota").toLowerCase());
+ csv.konecŘádku();
+
+ for (int i = 0; i < model.getRowCount(); i++) {
+ csv.hodnota(String.valueOf(model.getValueAt(i, 0)));
+ csv.hodnota(String.valueOf(model.getValueAt(i, 1)));
+ csv.konecŘádku();
+ }
+
+ Toolkit.getDefaultToolkit().getSystemClipboard().setContents(
+ new StringSelection(výstup.toString()),
+ null
+ );
+ } catch (Exception e) {
+ zobrazChybovouHlášku(překlady
+ .getString("chyba.nepodařiloSeZkopírovat"), e);
+ }
+ }
+
+ @SuppressWarnings("unchecked")
+ // //GEN-BEGIN:initComponents
+ private void initComponents() {
+
+ posuvnýPanel = new javax.swing.JScrollPane();
+ tlačítkoPřidat = new javax.swing.JButton();
+ tlačítkoSmazat = new javax.swing.JButton();
+ tlačítkoZnovuNačíst = new javax.swing.JButton();
+ tlačítkoZamknout = new javax.swing.JToggleButton();
+ tlačítkoKopírovat = new javax.swing.JButton();
+
+ tlačítkoPřidat.setMnemonic('p');
+ java.util.ResourceBundle bundle = java.util.ResourceBundle.getBundle("cz/frantovo/rozsireneatributy/Překlady"); // NOI18N
+ tlačítkoPřidat.setText(bundle.getString("přidatAtribut")); // NOI18N
+ tlačítkoPřidat.addActionListener(new java.awt.event.ActionListener() {
+ public void actionPerformed(java.awt.event.ActionEvent evt) {
+ tlačítkoPřidatActionPerformed(evt);
+ }
+ });
+
+ tlačítkoSmazat.setMnemonic('s');
+ tlačítkoSmazat.setText(bundle.getString("smazatAtribut")); // NOI18N
+ tlačítkoSmazat.setEnabled(false);
+ tlačítkoSmazat.addActionListener(new java.awt.event.ActionListener() {
+ public void actionPerformed(java.awt.event.ActionEvent evt) {
+ tlačítkoSmazatActionPerformed(evt);
+ }
+ });
+
+ tlačítkoZnovuNačíst.setMnemonic('z');
+ tlačítkoZnovuNačíst.setText(bundle.getString("znovuNačíst")); // NOI18N
+ tlačítkoZnovuNačíst.addActionListener(new java.awt.event.ActionListener() {
+ public void actionPerformed(java.awt.event.ActionEvent evt) {
+ tlačítkoZnovuNačístActionPerformed(evt);
+ }
+ });
+
+ tlačítkoZamknout.setText(bundle.getString("zamknout")); // NOI18N
+ tlačítkoZamknout.addActionListener(new java.awt.event.ActionListener() {
+ public void actionPerformed(java.awt.event.ActionEvent evt) {
+ tlačítkoZamknoutActionPerformed(evt);
+ }
+ });
+
+ tlačítkoKopírovat.setText(bundle.getString("schránka.kopírovat")); // NOI18N
+ tlačítkoKopírovat.addActionListener(new java.awt.event.ActionListener() {
+ public void actionPerformed(java.awt.event.ActionEvent evt) {
+ tlačítkoKopírovatActionPerformed(evt);
+ }
+ });
+
+ 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()
+ .addComponent(tlačítkoPřidat)
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+ .addComponent(tlačítkoSmazat)
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+ .addComponent(tlačítkoZnovuNačíst)
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+ .addComponent(tlačítkoZamknout)
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+ .addComponent(tlačítkoKopírovat)
+ .addContainerGap(25, Short.MAX_VALUE))
+ .addComponent(posuvnýPanel, javax.swing.GroupLayout.DEFAULT_SIZE, 543, Short.MAX_VALUE)
+ );
+ layout.setVerticalGroup(
+ layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+ .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
+ .addComponent(posuvnýPanel, javax.swing.GroupLayout.DEFAULT_SIZE, 277, Short.MAX_VALUE)
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+ .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+ .addComponent(tlačítkoPřidat)
+ .addComponent(tlačítkoSmazat)
+ .addComponent(tlačítkoZnovuNačíst)
+ .addComponent(tlačítkoZamknout)
+ .addComponent(tlačítkoKopírovat))
+ .addContainerGap())
+ );
+ }// //GEN-END:initComponents
+
+ private void tlačítkoPřidatActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_tlačítkoPřidatActionPerformed
+ model.přidejAtribut(new Atribut());
+ }//GEN-LAST:event_tlačítkoPřidatActionPerformed
+
+ private void tlačítkoSmazatActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_tlačítkoSmazatActionPerformed
+ try {
+ model.odeberAtribut(vybranýAtribut);
+ } catch (IOException e) {
+ zobrazChybovouHlášku(překlady
+ .getString("chyba.nepodařiloSeSmazat"), e);
+ }
+ }//GEN-LAST:event_tlačítkoSmazatActionPerformed
+
+ private void tlačítkoZnovuNačístActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_tlačítkoZnovuNačístActionPerformed
+ try {
+ model.načtiAtributy();
+ } catch (IOException e) {
+ zobrazChybovouHlášku(překlady
+ .getString("chyba.nepodařiloSeNačíst"), e);
+ }
+ }//GEN-LAST:event_tlačítkoZnovuNačístActionPerformed
+
+ private void tlačítkoZamknoutActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_tlačítkoZamknoutActionPerformed
+ try {
+ model.nastavZámek(tlačítkoZamknout.isSelected());
+ } catch (Exception e) {
+ zobrazChybovouHlášku(překlady
+ .getString("chyba.nepodařiloSeNastavitZámek"), e);
+ }
+ }//GEN-LAST:event_tlačítkoZamknoutActionPerformed
+
+ private void tlačítkoKopírovatActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_tlačítkoKopírovatActionPerformed
+ kopírujDoSchránky();
+ }//GEN-LAST:event_tlačítkoKopírovatActionPerformed
+
+ // Variables declaration - do not modify//GEN-BEGIN:variables
+ private javax.swing.JScrollPane posuvnýPanel;
+ private javax.swing.JButton tlačítkoKopírovat;
+ private javax.swing.JButton tlačítkoPřidat;
+ private javax.swing.JButton tlačítkoSmazat;
+ private javax.swing.JToggleButton tlačítkoZamknout;
+ private javax.swing.JButton tlačítkoZnovuNačíst;
+ // End of variables declaration//GEN-END:variables
+}