2 * Rozšířené atributy – program na správu rozšířených atributů souborů
3 * Copyright © 2012 František Kučera (frantovo.cz)
5 * This program is free software: you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation, either version 3 of the License.
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
14 * You should have received a copy of the GNU General Public License
15 * along with this program. If not, see <http://www.gnu.org/licenses/>.
17 package cz.frantovo.rozsireneatributy.gui;
19 import cz.frantovo.rozsireneatributy.Atribut;
20 import cz.frantovo.rozsireneatributy.CSV;
21 import java.awt.Toolkit;
22 import java.awt.datatransfer.StringSelection;
23 import java.awt.event.KeyEvent;
24 import java.io.IOException;
25 import java.io.StringWriter;
26 import java.util.ResourceBundle;
27 import java.util.logging.Level;
28 import java.util.logging.Logger;
29 import javax.swing.JOptionPane;
30 import javax.swing.JTable;
31 import javax.swing.KeyStroke;
32 import javax.swing.ListSelectionModel;
33 import javax.swing.event.ListSelectionEvent;
34 import javax.swing.event.ListSelectionListener;
37 * @author Ing. František Kučera (frantovo.cz)
39 public class Panel extends javax.swing.JPanel {
41 public static final int SLOUPEC_NÁZVU = 0;
42 public static final int SLOUPEC_HODNOTY = 1;
43 private static final Logger log = Logger
44 .getLogger(Panel.class.getSimpleName());
45 private static final ResourceBundle překlady = ResourceBundle
46 .getBundle(Atribut.class.getPackageName() + ".Překlady");
48 private Atribut vybranýAtribut;
49 private JTable tabulka;
51 public Panel(Model model) {
55 tlačítkoZamknout.setEnabled(model.isZámekPodporovaný());
56 tlačítkoZamknout.setToolTipText(model.isZámekPodporovaný()
57 ? překlady.getString("zamknout.popis")
58 : překlady.getString("chyba.lzeZamknoutJenSoubor"));
60 tabulka = new JTable(model);
62 tabulka.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
63 posuvnýPanel.setViewportView(tabulka);
65 tabulka.setRowHeight((int) (tabulka.getRowHeight() * 1.3));
67 // Výběr aktuálního atributu v tabulce:
68 tabulka.getSelectionModel().addListSelectionListener(
69 new ListSelectionListener() {
72 public void valueChanged(ListSelectionEvent e) {
73 int řádek = tabulka.getSelectedRow();
75 vybranýAtribut = null;
76 tlačítkoSmazat.setEnabled(false);
78 vybranýAtribut = getModel().getAtribut(řádek);
79 tlačítkoSmazat.setEnabled(true);
84 // Buňky tabulky editovatelné po stisku mezerníku:
86 .put(KeyStroke.getKeyStroke(KeyEvent.VK_SPACE, 0), "startEditing");
89 private void nastavEditor() {
90 tabulka.getColumnModel().getColumn(SLOUPEC_NÁZVU)
91 .setCellEditor(new EditorNázvůAtributů(model.getKonfigurace()));
92 tabulka.getColumnModel().getColumn(SLOUPEC_HODNOTY)
93 .setCellEditor(new EditorHodnotAtributů(model.getKonfigurace()));
96 private Model getModel() {
100 public void setModel(Model model) {
102 tabulka.setModel(model);
106 private void zobrazChybovouHlášku(String hláška, Throwable chyba) {
107 JOptionPane.showMessageDialog(this, hláška + "\n"
108 + chyba.getLocalizedMessage(),
109 překlady.getString("chyba.titulek"), JOptionPane.ERROR_MESSAGE);
110 log.log(Level.WARNING, hláška, chyba);
113 private void kopírujDoSchránky() {
115 StringWriter výstup = new StringWriter();
116 CSV csv = new CSV(výstup);
118 csv.hodnota(překlady.getString("tabulka.název").toLowerCase());
119 csv.hodnota(překlady.getString("tabulka.hodnota").toLowerCase());
122 for (int i = 0; i < model.getRowCount(); i++) {
123 csv.hodnota(String.valueOf(model.getValueAt(i, 0)));
124 csv.hodnota(String.valueOf(model.getValueAt(i, 1)));
128 Toolkit.getDefaultToolkit().getSystemClipboard().setContents(
129 new StringSelection(výstup.toString()),
132 } catch (Exception e) {
133 zobrazChybovouHlášku(překlady
134 .getString("chyba.nepodařiloSeZkopírovat"), e);
138 @SuppressWarnings("unchecked")
139 // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
140 private void initComponents() {
142 posuvnýPanel = new javax.swing.JScrollPane();
143 tlačítkoPřidat = new javax.swing.JButton();
144 tlačítkoSmazat = new javax.swing.JButton();
145 tlačítkoZnovuNačíst = new javax.swing.JButton();
146 tlačítkoZamknout = new javax.swing.JToggleButton();
147 tlačítkoKopírovat = new javax.swing.JButton();
149 tlačítkoPřidat.setMnemonic('p');
150 java.util.ResourceBundle bundle = java.util.ResourceBundle.getBundle("cz/frantovo/rozsireneatributy/Překlady"); // NOI18N
151 tlačítkoPřidat.setText(bundle.getString("přidatAtribut")); // NOI18N
152 tlačítkoPřidat.addActionListener(new java.awt.event.ActionListener() {
153 public void actionPerformed(java.awt.event.ActionEvent evt) {
154 tlačítkoPřidatActionPerformed(evt);
158 tlačítkoSmazat.setMnemonic('s');
159 tlačítkoSmazat.setText(bundle.getString("smazatAtribut")); // NOI18N
160 tlačítkoSmazat.setEnabled(false);
161 tlačítkoSmazat.addActionListener(new java.awt.event.ActionListener() {
162 public void actionPerformed(java.awt.event.ActionEvent evt) {
163 tlačítkoSmazatActionPerformed(evt);
167 tlačítkoZnovuNačíst.setMnemonic('z');
168 tlačítkoZnovuNačíst.setText(bundle.getString("znovuNačíst")); // NOI18N
169 tlačítkoZnovuNačíst.addActionListener(new java.awt.event.ActionListener() {
170 public void actionPerformed(java.awt.event.ActionEvent evt) {
171 tlačítkoZnovuNačístActionPerformed(evt);
175 tlačítkoZamknout.setText(bundle.getString("zamknout")); // NOI18N
176 tlačítkoZamknout.addActionListener(new java.awt.event.ActionListener() {
177 public void actionPerformed(java.awt.event.ActionEvent evt) {
178 tlačítkoZamknoutActionPerformed(evt);
182 tlačítkoKopírovat.setText(bundle.getString("schránka.kopírovat")); // NOI18N
183 tlačítkoKopírovat.addActionListener(new java.awt.event.ActionListener() {
184 public void actionPerformed(java.awt.event.ActionEvent evt) {
185 tlačítkoKopírovatActionPerformed(evt);
189 javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
190 this.setLayout(layout);
191 layout.setHorizontalGroup(
192 layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
193 .addGroup(layout.createSequentialGroup()
195 .addComponent(tlačítkoPřidat)
196 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
197 .addComponent(tlačítkoSmazat)
198 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
199 .addComponent(tlačítkoZnovuNačíst)
200 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
201 .addComponent(tlačítkoZamknout)
202 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
203 .addComponent(tlačítkoKopírovat)
204 .addContainerGap(25, Short.MAX_VALUE))
205 .addComponent(posuvnýPanel, javax.swing.GroupLayout.DEFAULT_SIZE, 543, Short.MAX_VALUE)
207 layout.setVerticalGroup(
208 layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
209 .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
210 .addComponent(posuvnýPanel, javax.swing.GroupLayout.DEFAULT_SIZE, 277, Short.MAX_VALUE)
211 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
212 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
213 .addComponent(tlačítkoPřidat)
214 .addComponent(tlačítkoSmazat)
215 .addComponent(tlačítkoZnovuNačíst)
216 .addComponent(tlačítkoZamknout)
217 .addComponent(tlačítkoKopírovat))
220 }// </editor-fold>//GEN-END:initComponents
222 private void tlačítkoPřidatActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_tlačítkoPřidatActionPerformed
223 model.přidejAtribut(new Atribut());
224 }//GEN-LAST:event_tlačítkoPřidatActionPerformed
226 private void tlačítkoSmazatActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_tlačítkoSmazatActionPerformed
228 model.odeberAtribut(vybranýAtribut);
229 } catch (IOException e) {
230 zobrazChybovouHlášku(překlady
231 .getString("chyba.nepodařiloSeSmazat"), e);
233 }//GEN-LAST:event_tlačítkoSmazatActionPerformed
235 private void tlačítkoZnovuNačístActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_tlačítkoZnovuNačístActionPerformed
237 model.načtiAtributy();
238 } catch (IOException e) {
239 zobrazChybovouHlášku(překlady
240 .getString("chyba.nepodařiloSeNačíst"), e);
242 }//GEN-LAST:event_tlačítkoZnovuNačístActionPerformed
244 private void tlačítkoZamknoutActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_tlačítkoZamknoutActionPerformed
246 model.nastavZámek(tlačítkoZamknout.isSelected());
247 } catch (Exception e) {
248 zobrazChybovouHlášku(překlady
249 .getString("chyba.nepodařiloSeNastavitZámek"), e);
251 }//GEN-LAST:event_tlačítkoZamknoutActionPerformed
253 private void tlačítkoKopírovatActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_tlačítkoKopírovatActionPerformed
255 }//GEN-LAST:event_tlačítkoKopírovatActionPerformed
257 // Variables declaration - do not modify//GEN-BEGIN:variables
258 private javax.swing.JScrollPane posuvnýPanel;
259 private javax.swing.JButton tlačítkoKopírovat;
260 private javax.swing.JButton tlačítkoPřidat;
261 private javax.swing.JButton tlačítkoSmazat;
262 private javax.swing.JToggleButton tlačítkoZamknout;
263 private javax.swing.JButton tlačítkoZnovuNačíst;
264 // End of variables declaration//GEN-END:variables