1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1.2 +++ b/src/main/java/cz/frantovo/rozsireneatributy/gui/EditorNázvůAtributů.java Sat Dec 16 20:13:13 2023 +0100
1.3 @@ -0,0 +1,190 @@
1.4 +/**
1.5 + * Rozšířené atributy – program na správu rozšířených atributů souborů
1.6 + * Copyright © 2012 František Kučera (frantovo.cz)
1.7 + *
1.8 + * This program is free software: you can redistribute it and/or modify
1.9 + * it under the terms of the GNU General Public License as published by
1.10 + * the Free Software Foundation, either version 3 of the License.
1.11 + *
1.12 + * This program is distributed in the hope that it will be useful,
1.13 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
1.14 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
1.15 + * GNU General Public License for more details.
1.16 + *
1.17 + * You should have received a copy of the GNU General Public License
1.18 + * along with this program. If not, see <http://www.gnu.org/licenses/>.
1.19 + */
1.20 +package cz.frantovo.rozsireneatributy.gui;
1.21 +
1.22 +import cz.frantovo.rozsireneatributy.Konfigurace;
1.23 +import cz.frantovo.rozsireneatributy.Konfigurace.DefiniceAtributu;
1.24 +import java.awt.Component;
1.25 +import java.awt.event.ActionEvent;
1.26 +import java.awt.event.ActionListener;
1.27 +import java.util.EventObject;
1.28 +import javax.swing.JComboBox;
1.29 +import javax.swing.JTable;
1.30 +import javax.swing.event.CellEditorListener;
1.31 +import javax.swing.event.ChangeEvent;
1.32 +import javax.swing.event.EventListenerList;
1.33 +import javax.swing.table.TableCellEditor;
1.34 +
1.35 +/**
1.36 + * Umožňuje výběr názvu atributu z předvoleného seznamu
1.37 + * (standardizované atributy).
1.38 + *
1.39 + * @author Ing. František Kučera (frantovo.cz)
1.40 + */
1.41 +public class EditorNázvůAtributů
1.42 + extends JComboBox<String>
1.43 + implements TableCellEditor {
1.44 +
1.45 + private final Konfigurace konfigurace;
1.46 + protected EventListenerList posluchače = new EventListenerList();
1.47 + protected ChangeEvent událost = new ChangeEvent(this);
1.48 +
1.49 + public EditorNázvůAtributů(Konfigurace konfigurace) {
1.50 + super();
1.51 + this.konfigurace = konfigurace;
1.52 + setEditable(true);
1.53 + addActionListener(new ActionListener() {
1.54 +
1.55 + @Override
1.56 + public void actionPerformed(ActionEvent e) {
1.57 + fireEditiaceSkončila();
1.58 + }
1.59 + });
1.60 + }
1.61 +
1.62 + protected void fireEditiaceSkončila() {
1.63 + for (Object posluchač : posluchače.getListenerList()) {
1.64 + if (posluchač instanceof CellEditorListener) {
1.65 + ((CellEditorListener) posluchač).editingStopped(událost);
1.66 + }
1.67 + }
1.68 + }
1.69 +
1.70 + protected void fireEditiaceZrušena() {
1.71 + for (Object posluchač : posluchače.getListenerList()) {
1.72 + if (posluchač instanceof CellEditorListener) {
1.73 + ((CellEditorListener) posluchač).editingCanceled(událost);
1.74 + }
1.75 + }
1.76 + }
1.77 +
1.78 + /**
1.79 + * TODO:
1.80 + * - další standardní atributy
1.81 + * - načítat z XML souboru
1.82 + *
1.83 + * @see http://www.freedesktop.org/wiki/CommonExtendedAttributes
1.84 + */
1.85 + private void obnovHodnoty(Object názevAtributu) {
1.86 + removeAllItems();
1.87 +
1.88 + if (názevAtributu == null) {
1.89 + názevAtributu = "";
1.90 + } else if (!(názevAtributu instanceof String)) {
1.91 + názevAtributu = String.valueOf(názevAtributu);
1.92 + }
1.93 + addItem((String) názevAtributu);
1.94 + setSelectedItem(názevAtributu);
1.95 +
1.96 + for (DefiniceAtributu da : konfigurace.getAtributy()) {
1.97 + addItem(da.getNázev());
1.98 + }
1.99 +
1.100 + if (!konfigurace.getAtributy().isEmpty()) return;
1.101 +
1.102 + // General attributes in current use
1.103 + addItem("mime_type");
1.104 + addItem("charset");
1.105 + addItem("creator");
1.106 +
1.107 + // Proposed metadata attributes
1.108 + addItem("xdg.comment");
1.109 + addItem("xdg.origin.url");
1.110 + addItem("xdg.origin.email.subject");
1.111 + addItem("xdg.origin.email.from");
1.112 + addItem("xdg.origin.email.message-id");
1.113 + addItem("xdg.language");
1.114 + addItem("xdg.creator");
1.115 + addItem("xdg.publisher");
1.116 +
1.117 + // Proposed control attributes
1.118 + addItem("xdg.robots.index");
1.119 + addItem("xdg.robots.backup");
1.120 +
1.121 + // Dublin Core
1.122 + addItem("dublincore.title");
1.123 + addItem("dublincore.creator");
1.124 + addItem("dublincore.subject");
1.125 + addItem("dublincore.description");
1.126 + addItem("dublincore.publisher");
1.127 + addItem("dublincore.contributor");
1.128 + addItem("dublincore.date");
1.129 + addItem("dublincore.type");
1.130 + addItem("dublincore.format");
1.131 + addItem("dublincore.identifier");
1.132 + addItem("dublincore.source");
1.133 + addItem("dublincore.language");
1.134 + addItem("dublincore.relation");
1.135 + addItem("dublincore.coverage");
1.136 + addItem("dublincore.rights");
1.137 +
1.138 + // Application-specific attributes in current use
1.139 + addItem("mime_encoding");
1.140 + addItem("apache_handler");
1.141 + addItem("Beagle.AttrTime");
1.142 + addItem("Beagle.Fingerprint");
1.143 + addItem("Beagle.MTime");
1.144 + addItem("Beagle.Uid");
1.145 + }
1.146 +
1.147 + @Override
1.148 + public Component getTableCellEditorComponent(
1.149 + JTable tabulka,
1.150 + Object hodnota,
1.151 + boolean vybraná,
1.152 + int řádek,
1.153 + int sloupec) {
1.154 + obnovHodnoty(hodnota);
1.155 + return this;
1.156 + }
1.157 +
1.158 + @Override
1.159 + public Object getCellEditorValue() {
1.160 + return getSelectedItem();
1.161 + }
1.162 +
1.163 + @Override
1.164 + public boolean isCellEditable(EventObject anEvent) {
1.165 + return true;
1.166 + }
1.167 +
1.168 + @Override
1.169 + public boolean shouldSelectCell(EventObject anEvent) {
1.170 + return true;
1.171 + }
1.172 +
1.173 + @Override
1.174 + public boolean stopCellEditing() {
1.175 + fireEditiaceSkončila();
1.176 + return true;
1.177 + }
1.178 +
1.179 + @Override
1.180 + public void cancelCellEditing() {
1.181 + fireEditiaceZrušena();
1.182 + }
1.183 +
1.184 + @Override
1.185 + public void addCellEditorListener(CellEditorListener l) {
1.186 + posluchače.add(CellEditorListener.class, l);
1.187 + }
1.188 +
1.189 + @Override
1.190 + public void removeCellEditorListener(CellEditorListener l) {
1.191 + posluchače.remove(CellEditorListener.class, l);
1.192 + }
1.193 +}