Klávesové zkratky, kontroly, čeština. v_0
authorFrantišek Kučera <franta-hg@frantovo.cz>
Wed, 15 Dec 2010 23:58:34 +0100
branchv_0
changeset 11cc6e58fb6aad
parent 10 b3aeabbb1b43
child 12 ea698b14618c
Klávesové zkratky, kontroly, čeština.
java/rozsirene-atributy/src/cz/frantovo/rozsireneAtributy/Atribut.java
java/rozsirene-atributy/src/cz/frantovo/rozsireneAtributy/Model.java
java/rozsirene-atributy/src/cz/frantovo/rozsireneAtributy/Startér.java
java/rozsirene-atributy/src/cz/frantovo/rozsireneAtributy/gui/Panel.form
java/rozsirene-atributy/src/cz/frantovo/rozsireneAtributy/gui/Panel.java
     1.1 --- a/java/rozsirene-atributy/src/cz/frantovo/rozsireneAtributy/Atribut.java	Wed Dec 15 23:29:14 2010 +0100
     1.2 +++ b/java/rozsirene-atributy/src/cz/frantovo/rozsireneAtributy/Atribut.java	Wed Dec 15 23:58:34 2010 +0100
     1.3 @@ -5,28 +5,46 @@
     1.4  
     1.5  public class Atribut {
     1.6  
     1.7 -	private String klic;
     1.8 +	private String klíč;
     1.9  	private String hodnota;
    1.10  
    1.11 -	public Atribut(String klic, String hodnota) {
    1.12 -		this.klic = klic;
    1.13 +	public Atribut(String klíč, String hodnota) {
    1.14 +		this.klíč = klíč;
    1.15  		this.hodnota = hodnota;
    1.16  	}
    1.17  
    1.18 -	public Atribut(String klic, ByteBuffer hodnota) {
    1.19 -		this.klic = klic;
    1.20 +	public Atribut(String klíč, ByteBuffer hodnota) {
    1.21 +		this.klíč = klíč;
    1.22  		setHodnota(hodnota);
    1.23  	}
    1.24  
    1.25  	public Atribut() {
    1.26  	}
    1.27  
    1.28 -	public String getKlic() {
    1.29 -		return klic;
    1.30 +	public String getKlíč() {
    1.31 +		return klíč;
    1.32  	}
    1.33  
    1.34 -	public void setKlic(String klic) {
    1.35 -		this.klic = klic;
    1.36 +	public void setKlíč(String klíč) {
    1.37 +		this.klíč = klíč;
    1.38 +	}
    1.39 +
    1.40 +	/**
    1.41 +	 * Název atributu musí být nenulový a mít nějakou délku, aby šel uložit
    1.42 +	 * TODO: další kontroly?
    1.43 +	 * @return jestli je platný
    1.44 +	 */
    1.45 +	public boolean isPlatnýKlíč() {
    1.46 +		return klíč != null && klíč.length() > 0;
    1.47 +	}
    1.48 +
    1.49 +	/**
    1.50 +	 * nulová hodnota → smazání atributu
    1.51 +	 * (ale může být prázdný řetězec)
    1.52 +	 * @return jestli je platná
    1.53 +	 */
    1.54 +	public boolean isPlatnáHodnota() {
    1.55 +		return hodnota != null;
    1.56  	}
    1.57  
    1.58  	public String getHodnota() {
     2.1 --- a/java/rozsirene-atributy/src/cz/frantovo/rozsireneAtributy/Model.java	Wed Dec 15 23:29:14 2010 +0100
     2.2 +++ b/java/rozsirene-atributy/src/cz/frantovo/rozsireneAtributy/Model.java	Wed Dec 15 23:58:34 2010 +0100
     2.3 @@ -23,12 +23,12 @@
     2.4  	private static final Logger log = Logger.getLogger(Model.class.getSimpleName());
     2.5  	private String[] sloupečky = {"Název", "Hodnota"};
     2.6  	private HashSet<TableModelListener> posluchače = new HashSet<TableModelListener>();
     2.7 -	private UserDefinedFileAttributeView souborovySystem;
     2.8 +	private UserDefinedFileAttributeView souborovýSystém;
     2.9  	private ArrayList<Atribut> atributy = new ArrayList<Atribut>();
    2.10  
    2.11  	public Model(File soubor) throws IOException {
    2.12  		Path cesta = soubor.toPath();
    2.13 -		souborovySystem = cesta.getFileAttributeView(UserDefinedFileAttributeView.class);
    2.14 +		souborovýSystém = cesta.getFileAttributeView(UserDefinedFileAttributeView.class);
    2.15  		načtiAtributy();
    2.16  	}
    2.17  
    2.18 @@ -54,7 +54,7 @@
    2.19  
    2.20  	public Object getValueAt(int m, int n) {
    2.21  		if (n == 0) {
    2.22 -			return atributy.get(m).getKlic();
    2.23 +			return atributy.get(m).getKlíč();
    2.24  		} else if (n == 1) {
    2.25  			return atributy.get(m).getHodnota();
    2.26  		} else {
    2.27 @@ -68,19 +68,19 @@
    2.28  			if (n == 0) {
    2.29  				/** Měníme klíč – název atributu */
    2.30  				String novýKlíč = String.valueOf(value.toString());
    2.31 -				if (!novýKlíč.equals(a.getKlic())) {
    2.32 -					if (a.getKlic() != null) {
    2.33 -						souborovySystem.delete(a.getKlic());
    2.34 +				if (!novýKlíč.equals(a.getKlíč())) {
    2.35 +					if (a.isPlatnýKlíč()) {
    2.36 +						souborovýSystém.delete(a.getKlíč());
    2.37  					}
    2.38 -					a.setKlic(novýKlíč);
    2.39 -					if (a.getHodnotaBajty() != null) {
    2.40 -						souborovySystem.write(a.getKlic(), a.getHodnotaBajty());
    2.41 +					a.setKlíč(novýKlíč);
    2.42 +					if (a.isPlatnáHodnota()) {
    2.43 +						souborovýSystém.write(a.getKlíč(), a.getHodnotaBajty());
    2.44  					}
    2.45  				}
    2.46  			} else if (n == 1) {
    2.47  				/** Měníme hodnotu atributu */
    2.48  				a.setHodnota(String.valueOf(value.toString()));
    2.49 -				souborovySystem.write(a.getKlic(), a.getHodnotaBajty());
    2.50 +				souborovýSystém.write(a.getKlíč(), a.getHodnotaBajty());
    2.51  			}
    2.52  		} catch (IOException e) {
    2.53  			log.log(Level.SEVERE, "Selhalo ukládání atributu na souborový systém", e);
    2.54 @@ -110,16 +110,18 @@
    2.55  
    2.56  	public void odeberAtribut(Atribut a) throws IOException {
    2.57  		atributy.remove(a);
    2.58 -		souborovySystem.delete(a.getKlic());
    2.59 +		if (a.isPlatnýKlíč()) {
    2.60 +			souborovýSystém.delete(a.getKlíč());
    2.61 +		}
    2.62  		upozorniPosluchače();
    2.63  	}
    2.64  
    2.65  	public final void načtiAtributy() throws IOException {
    2.66 -		List<String> jménaAtributů = souborovySystem.list();
    2.67 +		List<String> jménaAtributů = souborovýSystém.list();
    2.68  		atributy.clear();
    2.69  		for (String jménoAtributu : jménaAtributů) {
    2.70 -			ByteBuffer hodnotaAtributu = ByteBuffer.allocate(souborovySystem.size(jménoAtributu));
    2.71 -			souborovySystem.read(jménoAtributu, hodnotaAtributu);
    2.72 +			ByteBuffer hodnotaAtributu = ByteBuffer.allocate(souborovýSystém.size(jménoAtributu));
    2.73 +			souborovýSystém.read(jménoAtributu, hodnotaAtributu);
    2.74  			atributy.add(new Atribut(jménoAtributu, hodnotaAtributu));
    2.75  		}
    2.76  		upozorniPosluchače();
     3.1 --- a/java/rozsirene-atributy/src/cz/frantovo/rozsireneAtributy/Startér.java	Wed Dec 15 23:29:14 2010 +0100
     3.2 +++ b/java/rozsirene-atributy/src/cz/frantovo/rozsireneAtributy/Startér.java	Wed Dec 15 23:58:34 2010 +0100
     3.3 @@ -2,12 +2,17 @@
     3.4  
     3.5  import cz.frantovo.rozsireneAtributy.gui.Panel;
     3.6  import java.awt.BorderLayout;
     3.7 +import java.awt.event.ActionEvent;
     3.8 +import java.awt.event.ActionListener;
     3.9 +import java.awt.event.KeyEvent;
    3.10  import java.io.File;
    3.11  import java.io.IOException;
    3.12  import java.util.logging.Level;
    3.13  import java.util.logging.Logger;
    3.14 +import javax.swing.JComponent;
    3.15  import javax.swing.JFrame;
    3.16  import javax.swing.JOptionPane;
    3.17 +import javax.swing.KeyStroke;
    3.18  
    3.19  /**
    3.20   * Spouštěč programu
    3.21 @@ -39,12 +44,20 @@
    3.22  
    3.23  				Model model = new Model(soubor);
    3.24  
    3.25 -				JFrame f = new JFrame();
    3.26 +				final JFrame f = new JFrame();
    3.27  				Panel p = new Panel(model);
    3.28  
    3.29  				f.setLayout(new BorderLayout());
    3.30  				f.add(p, BorderLayout.CENTER);
    3.31  
    3.32 +				/** Ukončení programu klávesou Escape */
    3.33 +				f.getRootPane().registerKeyboardAction(new ActionListener() {
    3.34 +
    3.35 +					public void actionPerformed(ActionEvent ae) {
    3.36 +						f.dispose();
    3.37 +					}
    3.38 +				}, KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), JComponent.WHEN_IN_FOCUSED_WINDOW);
    3.39 +
    3.40  				f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    3.41  				f.setTitle("Rozšířené stributy souboru: " + soubor);
    3.42  				f.setSize(640, 240);
     4.1 --- a/java/rozsirene-atributy/src/cz/frantovo/rozsireneAtributy/gui/Panel.form	Wed Dec 15 23:29:14 2010 +0100
     4.2 +++ b/java/rozsirene-atributy/src/cz/frantovo/rozsireneAtributy/gui/Panel.form	Wed Dec 15 23:58:34 2010 +0100
     4.3 @@ -23,9 +23,9 @@
     4.4                <Component id="tlačítkoSmazat" min="-2" max="-2" attributes="0"/>
     4.5                <EmptySpace max="-2" attributes="0"/>
     4.6                <Component id="tlačítkoZnovuNačíst" min="-2" max="-2" attributes="0"/>
     4.7 -              <EmptySpace pref="90" max="32767" attributes="0"/>
     4.8 +              <EmptySpace pref="186" max="32767" attributes="0"/>
     4.9            </Group>
    4.10 -          <Component id="posuvnýPanel" alignment="0" pref="447" max="32767" attributes="0"/>
    4.11 +          <Component id="posuvnýPanel" alignment="0" pref="543" max="32767" attributes="0"/>
    4.12        </Group>
    4.13      </DimensionLayout>
    4.14      <DimensionLayout dim="1">
    4.15 @@ -67,6 +67,7 @@
    4.16      </Container>
    4.17      <Component class="javax.swing.JButton" name="tla&#x10d;&#xed;tkoP&#x159;idat">
    4.18        <Properties>
    4.19 +        <Property name="mnemonic" type="int" value="112"/>
    4.20          <Property name="text" type="java.lang.String" value="P&#x159;idat atribut"/>
    4.21        </Properties>
    4.22        <Events>
    4.23 @@ -75,6 +76,7 @@
    4.24      </Component>
    4.25      <Component class="javax.swing.JButton" name="tla&#x10d;&#xed;tkoSmazat">
    4.26        <Properties>
    4.27 +        <Property name="mnemonic" type="int" value="115"/>
    4.28          <Property name="text" type="java.lang.String" value="Smazat atribut"/>
    4.29          <Property name="enabled" type="boolean" value="false"/>
    4.30        </Properties>
    4.31 @@ -84,6 +86,7 @@
    4.32      </Component>
    4.33      <Component class="javax.swing.JButton" name="tla&#x10d;&#xed;tkoZnovuNa&#x10d;&#xed;st">
    4.34        <Properties>
    4.35 +        <Property name="mnemonic" type="int" value="122"/>
    4.36          <Property name="text" type="java.lang.String" value="Znovu na&#x10d;&#xed;st"/>
    4.37        </Properties>
    4.38        <Events>
     5.1 --- a/java/rozsirene-atributy/src/cz/frantovo/rozsireneAtributy/gui/Panel.java	Wed Dec 15 23:29:14 2010 +0100
     5.2 +++ b/java/rozsirene-atributy/src/cz/frantovo/rozsireneAtributy/gui/Panel.java	Wed Dec 15 23:58:34 2010 +0100
     5.3 @@ -23,6 +23,8 @@
     5.4  		this.model = model;
     5.5  		initComponents();
     5.6  		tabulka.setModel(model);
     5.7 +		
     5.8 +		/** Výběr aktuálního atributu v tabulce */
     5.9  		tabulka.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
    5.10  
    5.11  			public void valueChanged(ListSelectionEvent e) {
    5.12 @@ -71,6 +73,7 @@
    5.13          tabulka.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
    5.14          posuvnýPanel.setViewportView(tabulka);
    5.15  
    5.16 +        tlačítkoPřidat.setMnemonic('p');
    5.17          tlačítkoPřidat.setText("Přidat atribut");
    5.18          tlačítkoPřidat.addActionListener(new java.awt.event.ActionListener() {
    5.19              public void actionPerformed(java.awt.event.ActionEvent evt) {
    5.20 @@ -78,6 +81,7 @@
    5.21              }
    5.22          });
    5.23  
    5.24 +        tlačítkoSmazat.setMnemonic('s');
    5.25          tlačítkoSmazat.setText("Smazat atribut");
    5.26          tlačítkoSmazat.setEnabled(false);
    5.27          tlačítkoSmazat.addActionListener(new java.awt.event.ActionListener() {
    5.28 @@ -86,6 +90,7 @@
    5.29              }
    5.30          });
    5.31  
    5.32 +        tlačítkoZnovuNačíst.setMnemonic('z');
    5.33          tlačítkoZnovuNačíst.setText("Znovu načíst");
    5.34          tlačítkoZnovuNačíst.addActionListener(new java.awt.event.ActionListener() {
    5.35              public void actionPerformed(java.awt.event.ActionEvent evt) {
    5.36 @@ -104,8 +109,8 @@
    5.37                  .addComponent(tlačítkoSmazat)
    5.38                  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
    5.39                  .addComponent(tlačítkoZnovuNačíst)
    5.40 -                .addContainerGap(90, Short.MAX_VALUE))
    5.41 -            .addComponent(posuvnýPanel, javax.swing.GroupLayout.DEFAULT_SIZE, 447, Short.MAX_VALUE)
    5.42 +                .addContainerGap(186, Short.MAX_VALUE))
    5.43 +            .addComponent(posuvnýPanel, javax.swing.GroupLayout.DEFAULT_SIZE, 543, Short.MAX_VALUE)
    5.44          );
    5.45          layout.setVerticalGroup(
    5.46              layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)