diff -r 64e564c2f069 -r d2414701ce09 src/main/java/cz/frantovo/rozsireneatributy/gui/Panel.java --- a/src/main/java/cz/frantovo/rozsireneatributy/gui/Panel.java Tue Dec 19 00:47:41 2023 +0100 +++ b/src/main/java/cz/frantovo/rozsireneatributy/gui/Panel.java Sun Dec 24 00:38:41 2023 +0100 @@ -18,6 +18,7 @@ import cz.frantovo.rozsireneatributy.Atribut; import cz.frantovo.rozsireneatributy.CSV; +import cz.frantovo.rozsireneatributy.Konfigurace; import java.awt.Toolkit; import java.awt.datatransfer.StringSelection; import java.awt.event.KeyEvent; @@ -32,6 +33,7 @@ import javax.swing.ListSelectionModel; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; +import javax.swing.table.TableCellEditor; /** * @author Ing. František Kučera (frantovo.cz) @@ -71,19 +73,50 @@ @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); - } + if (řádek < 0) vybranýAtribut = null; + else vybranýAtribut = getModel().getAtribut(řádek); + aktualizujPovolenéÚpravy(); } }); // Buňky tabulky editovatelné po stisku mezerníku: tabulka.getInputMap() .put(KeyStroke.getKeyStroke(KeyEvent.VK_SPACE, 0), "startEditing"); + + aktualizujPovolenéÚpravy(); + + // TODO: Provádět IO operace v jiném vlákně + // SwingWorker.doInBackground() + SwingUtilities.invokeLater() + } + + private void aktualizujPovolenéÚpravy() { + Konfigurace k = model.getKonfigurace(); + switch (k.getRežimZamykání()) { + case VYPNUTÉ: + tlačítkoZamknout.setVisible(false); + setPovolenéÚpravy(true); + break; + case VOLITELNÉ: + setPovolenéÚpravy(true); + break; + case POVINNÉ: + setPovolenéÚpravy(tlačítkoZamknout.isSelected()); + break; + default: + break; + } + } + + private void setPovolenéÚpravy(boolean povolené) { + if (!povolené) { + TableCellEditor ce = tabulka.getCellEditor(); + if (ce != null) ce.cancelCellEditing(); + tabulka.clearSelection(); + } + + tabulka.setEnabled(povolené); + tlačítkoPřidat.setEnabled(povolené); + tlačítkoSmazat.setEnabled(povolené && tabulka.getSelectedRow() > -1); } private void nastavEditor() { @@ -109,7 +142,7 @@ 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(); @@ -243,6 +276,7 @@ private void tlačítkoZamknoutActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_tlačítkoZamknoutActionPerformed try { + aktualizujPovolenéÚpravy(); model.nastavZámek(tlačítkoZamknout.isSelected()); } catch (Exception e) { zobrazChybovouHlášku(překlady