# HG changeset patch # User František Kučera # Date 1292453914 -3600 # Node ID 9b399cde6a3b48281455c27c980521916a55cc13 # Parent ed2b6ebf138d8fbbdf08b15cd3c03add7b910a8d Klávesové zkratky, kontroly, čeština. diff -r ed2b6ebf138d -r 9b399cde6a3b java/rozsirene-atributy/src/cz/frantovo/rozsireneAtributy/Atribut.java --- a/java/rozsirene-atributy/src/cz/frantovo/rozsireneAtributy/Atribut.java Wed Dec 15 23:29:14 2010 +0100 +++ b/java/rozsirene-atributy/src/cz/frantovo/rozsireneAtributy/Atribut.java Wed Dec 15 23:58:34 2010 +0100 @@ -5,28 +5,46 @@ public class Atribut { - private String klic; + private String klíč; private String hodnota; - public Atribut(String klic, String hodnota) { - this.klic = klic; + public Atribut(String klíč, String hodnota) { + this.klíč = klíč; this.hodnota = hodnota; } - public Atribut(String klic, ByteBuffer hodnota) { - this.klic = klic; + public Atribut(String klíč, ByteBuffer hodnota) { + this.klíč = klíč; setHodnota(hodnota); } public Atribut() { } - public String getKlic() { - return klic; + public String getKlíč() { + return klíč; } - public void setKlic(String klic) { - this.klic = klic; + public void setKlíč(String klíč) { + this.klíč = klíč; + } + + /** + * Název atributu musí být nenulový a mít nějakou délku, aby šel uložit + * TODO: další kontroly? + * @return jestli je platný + */ + public boolean isPlatnýKlíč() { + return klíč != null && klíč.length() > 0; + } + + /** + * nulová hodnota → smazání atributu + * (ale může být prázdný řetězec) + * @return jestli je platná + */ + public boolean isPlatnáHodnota() { + return hodnota != null; } public String getHodnota() { diff -r ed2b6ebf138d -r 9b399cde6a3b java/rozsirene-atributy/src/cz/frantovo/rozsireneAtributy/Model.java --- a/java/rozsirene-atributy/src/cz/frantovo/rozsireneAtributy/Model.java Wed Dec 15 23:29:14 2010 +0100 +++ b/java/rozsirene-atributy/src/cz/frantovo/rozsireneAtributy/Model.java Wed Dec 15 23:58:34 2010 +0100 @@ -23,12 +23,12 @@ private static final Logger log = Logger.getLogger(Model.class.getSimpleName()); private String[] sloupečky = {"Název", "Hodnota"}; private HashSet posluchače = new HashSet(); - private UserDefinedFileAttributeView souborovySystem; + private UserDefinedFileAttributeView souborovýSystém; private ArrayList atributy = new ArrayList(); public Model(File soubor) throws IOException { Path cesta = soubor.toPath(); - souborovySystem = cesta.getFileAttributeView(UserDefinedFileAttributeView.class); + souborovýSystém = cesta.getFileAttributeView(UserDefinedFileAttributeView.class); načtiAtributy(); } @@ -54,7 +54,7 @@ public Object getValueAt(int m, int n) { if (n == 0) { - return atributy.get(m).getKlic(); + return atributy.get(m).getKlíč(); } else if (n == 1) { return atributy.get(m).getHodnota(); } else { @@ -68,19 +68,19 @@ if (n == 0) { /** Měníme klíč – název atributu */ String novýKlíč = String.valueOf(value.toString()); - if (!novýKlíč.equals(a.getKlic())) { - if (a.getKlic() != null) { - souborovySystem.delete(a.getKlic()); + if (!novýKlíč.equals(a.getKlíč())) { + if (a.isPlatnýKlíč()) { + souborovýSystém.delete(a.getKlíč()); } - a.setKlic(novýKlíč); - if (a.getHodnotaBajty() != null) { - souborovySystem.write(a.getKlic(), a.getHodnotaBajty()); + a.setKlíč(novýKlíč); + if (a.isPlatnáHodnota()) { + souborovýSystém.write(a.getKlíč(), a.getHodnotaBajty()); } } } else if (n == 1) { /** Měníme hodnotu atributu */ a.setHodnota(String.valueOf(value.toString())); - souborovySystem.write(a.getKlic(), a.getHodnotaBajty()); + souborovýSystém.write(a.getKlíč(), a.getHodnotaBajty()); } } catch (IOException e) { log.log(Level.SEVERE, "Selhalo ukládání atributu na souborový systém", e); @@ -110,16 +110,18 @@ public void odeberAtribut(Atribut a) throws IOException { atributy.remove(a); - souborovySystem.delete(a.getKlic()); + if (a.isPlatnýKlíč()) { + souborovýSystém.delete(a.getKlíč()); + } upozorniPosluchače(); } public final void načtiAtributy() throws IOException { - List jménaAtributů = souborovySystem.list(); + List jménaAtributů = souborovýSystém.list(); atributy.clear(); for (String jménoAtributu : jménaAtributů) { - ByteBuffer hodnotaAtributu = ByteBuffer.allocate(souborovySystem.size(jménoAtributu)); - souborovySystem.read(jménoAtributu, hodnotaAtributu); + ByteBuffer hodnotaAtributu = ByteBuffer.allocate(souborovýSystém.size(jménoAtributu)); + souborovýSystém.read(jménoAtributu, hodnotaAtributu); atributy.add(new Atribut(jménoAtributu, hodnotaAtributu)); } upozorniPosluchače(); diff -r ed2b6ebf138d -r 9b399cde6a3b java/rozsirene-atributy/src/cz/frantovo/rozsireneAtributy/Startér.java --- a/java/rozsirene-atributy/src/cz/frantovo/rozsireneAtributy/Startér.java Wed Dec 15 23:29:14 2010 +0100 +++ b/java/rozsirene-atributy/src/cz/frantovo/rozsireneAtributy/Startér.java Wed Dec 15 23:58:34 2010 +0100 @@ -2,12 +2,17 @@ import cz.frantovo.rozsireneAtributy.gui.Panel; import java.awt.BorderLayout; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.KeyEvent; import java.io.File; import java.io.IOException; import java.util.logging.Level; import java.util.logging.Logger; +import javax.swing.JComponent; import javax.swing.JFrame; import javax.swing.JOptionPane; +import javax.swing.KeyStroke; /** * Spouštěč programu @@ -39,12 +44,20 @@ Model model = new Model(soubor); - JFrame f = new JFrame(); + final JFrame f = new JFrame(); Panel p = new Panel(model); f.setLayout(new BorderLayout()); f.add(p, BorderLayout.CENTER); + /** Ukončení programu klávesou Escape */ + f.getRootPane().registerKeyboardAction(new ActionListener() { + + public void actionPerformed(ActionEvent ae) { + f.dispose(); + } + }, KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), JComponent.WHEN_IN_FOCUSED_WINDOW); + f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setTitle("Rozšířené stributy souboru: " + soubor); f.setSize(640, 240); diff -r ed2b6ebf138d -r 9b399cde6a3b java/rozsirene-atributy/src/cz/frantovo/rozsireneAtributy/gui/Panel.form --- a/java/rozsirene-atributy/src/cz/frantovo/rozsireneAtributy/gui/Panel.form Wed Dec 15 23:29:14 2010 +0100 +++ b/java/rozsirene-atributy/src/cz/frantovo/rozsireneAtributy/gui/Panel.form Wed Dec 15 23:58:34 2010 +0100 @@ -23,9 +23,9 @@ - + - + @@ -67,6 +67,7 @@ + @@ -75,6 +76,7 @@ + @@ -84,6 +86,7 @@ + diff -r ed2b6ebf138d -r 9b399cde6a3b java/rozsirene-atributy/src/cz/frantovo/rozsireneAtributy/gui/Panel.java --- a/java/rozsirene-atributy/src/cz/frantovo/rozsireneAtributy/gui/Panel.java Wed Dec 15 23:29:14 2010 +0100 +++ b/java/rozsirene-atributy/src/cz/frantovo/rozsireneAtributy/gui/Panel.java Wed Dec 15 23:58:34 2010 +0100 @@ -23,6 +23,8 @@ this.model = model; initComponents(); tabulka.setModel(model); + + /** Výběr aktuálního atributu v tabulce */ tabulka.getSelectionModel().addListSelectionListener(new ListSelectionListener() { public void valueChanged(ListSelectionEvent e) { @@ -71,6 +73,7 @@ tabulka.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION); posuvnýPanel.setViewportView(tabulka); + tlačítkoPřidat.setMnemonic('p'); tlačítkoPřidat.setText("Přidat atribut"); tlačítkoPřidat.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { @@ -78,6 +81,7 @@ } }); + tlačítkoSmazat.setMnemonic('s'); tlačítkoSmazat.setText("Smazat atribut"); tlačítkoSmazat.setEnabled(false); tlačítkoSmazat.addActionListener(new java.awt.event.ActionListener() { @@ -86,6 +90,7 @@ } }); + tlačítkoZnovuNačíst.setMnemonic('z'); tlačítkoZnovuNačíst.setText("Znovu načíst"); tlačítkoZnovuNačíst.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { @@ -104,8 +109,8 @@ .addComponent(tlačítkoSmazat) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(tlačítkoZnovuNačíst) - .addContainerGap(90, Short.MAX_VALUE)) - .addComponent(posuvnýPanel, javax.swing.GroupLayout.DEFAULT_SIZE, 447, Short.MAX_VALUE) + .addContainerGap(186, Short.MAX_VALUE)) + .addComponent(posuvnýPanel, javax.swing.GroupLayout.DEFAULT_SIZE, 543, Short.MAX_VALUE) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)