# HG changeset patch # User František Kučera # Date 1702732140 -3600 # Node ID 72ea1c6d836c2befbe500671ba99be86b0e79ffc # Parent c2ce9d9161031bcbf4da11e46267edfd0b4735cd kopírování atributů do schránky (ve formátu CSV) diff -r c2ce9d916103 -r 72ea1c6d836c java/rozsirene-atributy/src/cz/frantovo/rozsireneatributy/CSV.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/java/rozsirene-atributy/src/cz/frantovo/rozsireneatributy/CSV.java Sat Dec 16 14:09:00 2023 +0100 @@ -0,0 +1,65 @@ +/** + * Rozšířené atributy – program na správu rozšířených atributů souborů + * Copyright © 2023 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; + +import java.io.IOException; +import java.io.Writer; + +/** + * Generátor standardních CSV. + * + * @author Ing. František Kučera + */ +public class CSV { + + private final Writer výstup; + private int sloupec = 0; + private int početSloupců = -1; + + public CSV(Writer výstup) { + this.výstup = výstup; + } + + public void hodnota(String hodnota) throws IOException { + if (sloupec > 0) výstup.write(','); + if (hodnota != null && !hodnota.isEmpty()) { + výstup.write('"'); + for (char ch : hodnota.toCharArray()) { + if (ch == '"') výstup.write('"'); + výstup.write(ch); + } + výstup.write('"'); + } + sloupec++; + výstup.flush(); + } + + public void konecŘádku() throws IOException { + if (početSloupců < 0) početSloupců = sloupec; + if (sloupec == početSloupců) { + výstup.write("\r\n"); + sloupec = 0; + } else { + throw new IOException("Neodpovídá počet sloupců:" + + " aktuální=" + sloupec + + " celkový=" + početSloupců + ); + } + výstup.flush(); + } + +} diff -r c2ce9d916103 -r 72ea1c6d836c java/rozsirene-atributy/src/cz/frantovo/rozsireneatributy/Překlady_cs.properties --- a/java/rozsirene-atributy/src/cz/frantovo/rozsireneatributy/Překlady_cs.properties Fri Dec 15 20:41:41 2023 +0100 +++ b/java/rozsirene-atributy/src/cz/frantovo/rozsireneatributy/Překlady_cs.properties Sat Dec 16 14:09:00 2023 +0100 @@ -5,6 +5,7 @@ chyba.souborNeexistuje=Soubor neexistuje: {0} chyba.nepoda\u0159iloSeSmazat=Nepoda\u0159ilo se smazat atribut. chyba.nepoda\u0159iloSeNa\u010d\u00edst=Nepoda\u0159ilo se na\u010d\u00edst atributy. +chyba.nepoda\u0159iloSeZkop\u00edrovat=Nepoda\u0159ilo se zkop\u00edrovat atributy do schr\u00e1nky. chyba.nepoda\u0159iloSeNastavitZ\u00e1mek=Nepoda\u0159ilo se nastavit z\u00e1mek. chyba.lzeZamknoutJenSoubor=Je podporov\u00e1no zamyk\u00e1n\u00ed pouze norm\u00e1ln\u00edch sobour\u016f ne adres\u00e1\u0159\u016f atd. chyba.cli.nezn\u00e1m\u00fdParametr=Nezn\u00e1m\u00fd parametr: @@ -14,6 +15,9 @@ tabulka.n\u00e1zev=N\u00e1zev tabulka.hodnota=Hodnota +schr\u00e1nka.kop\u00edrovat=Kop\u00edrovat +schr\u00e1nka.vlo\u017eit=Vlo\u017eit + p\u0159idatAtribut=P\u0159idat atribut smazatAtribut=Smazat atribut znovuNa\u010d\u00edst=Znovu na\u010d\u00edst diff -r c2ce9d916103 -r 72ea1c6d836c java/rozsirene-atributy/src/cz/frantovo/rozsireneatributy/Překlady_en.properties --- a/java/rozsirene-atributy/src/cz/frantovo/rozsireneatributy/Překlady_en.properties Fri Dec 15 20:41:41 2023 +0100 +++ b/java/rozsirene-atributy/src/cz/frantovo/rozsireneatributy/Překlady_en.properties Sat Dec 16 14:09:00 2023 +0100 @@ -5,6 +5,7 @@ chyba.souborNeexistuje=File does not exist: {0} chyba.nepoda\u0159iloSeSmazat=Failed to delete the attribute. chyba.nepoda\u0159iloSeNa\u010d\u00edst=Failed to load attributes. +chyba.nepoda\u0159iloSeZkop\u00edrovat=Unable to copy attributes to the clipboard. chyba.nepoda\u0159iloSeNastavitZ\u00e1mek=Unable to lock the file. chyba.lzeZamknoutJenSoubor=File locking is supported only for regular files, not for directories or specials. chyba.cli.nezn\u00e1m\u00fdParametr=Unknown option: @@ -14,6 +15,9 @@ tabulka.n\u00e1zev=Name tabulka.hodnota=Value +schr\u00e1nka.kop\u00edrovat=Copy +schr\u00e1nka.vlo\u017eit=Paste + p\u0159idatAtribut=Add attribute smazatAtribut=Delete attribute znovuNa\u010d\u00edst=Reload all diff -r c2ce9d916103 -r 72ea1c6d836c java/rozsirene-atributy/src/cz/frantovo/rozsireneatributy/gui/Panel.form --- a/java/rozsirene-atributy/src/cz/frantovo/rozsireneatributy/gui/Panel.form Fri Dec 15 20:41:41 2023 +0100 +++ b/java/rozsirene-atributy/src/cz/frantovo/rozsireneatributy/gui/Panel.form Sat Dec 16 14:09:00 2023 +0100 @@ -25,7 +25,9 @@ - + + + @@ -40,6 +42,7 @@ + @@ -95,5 +98,15 @@ + + + + + + + + + + diff -r c2ce9d916103 -r 72ea1c6d836c java/rozsirene-atributy/src/cz/frantovo/rozsireneatributy/gui/Panel.java --- a/java/rozsirene-atributy/src/cz/frantovo/rozsireneatributy/gui/Panel.java Fri Dec 15 20:41:41 2023 +0100 +++ b/java/rozsirene-atributy/src/cz/frantovo/rozsireneatributy/gui/Panel.java Sat Dec 16 14:09:00 2023 +0100 @@ -17,8 +17,11 @@ package cz.frantovo.rozsireneatributy.gui; import cz.frantovo.rozsireneatributy.Atribut; -import java.awt.Dimension; +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; @@ -56,7 +59,7 @@ 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 */ @@ -100,6 +103,31 @@ 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 @@ -110,6 +138,7 @@ 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 @@ -144,6 +173,13 @@ } }); + 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( @@ -157,7 +193,9 @@ .addComponent(tlačítkoZnovuNačíst) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(tlačítkoZamknout) - .addContainerGap(122, Short.MAX_VALUE)) + .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( @@ -169,7 +207,8 @@ .addComponent(tlačítkoPřidat) .addComponent(tlačítkoSmazat) .addComponent(tlačítkoZnovuNačíst) - .addComponent(tlačítkoZamknout)) + .addComponent(tlačítkoZamknout) + .addComponent(tlačítkoKopírovat)) .addContainerGap()) ); }// //GEN-END:initComponents @@ -197,7 +236,7 @@ }//GEN-LAST:event_tlačítkoZnovuNačístActionPerformed private void tlačítkoZamknoutActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_tlačítkoZamknoutActionPerformed - try { + try { model.nastavZámek(tlačítkoZamknout.isSelected()); } catch (Exception e) { zobrazChybovouHlášku(překlady @@ -205,8 +244,13 @@ } }//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;