/* Copyright (C) 2005-2011 Fabio Riccardi */
package com.lightcrafts.ui.metadata2;
import com.lightcrafts.image.metadata.ImageMetadata;
import static com.lightcrafts.ui.metadata2.Locale.LOCALE;
import com.lightcrafts.ui.toolkit.IconFactory;
import com.lightcrafts.ui.toolkit.CoolButton;
import com.lightcrafts.ui.LightZoneSkin;
import com.lightcrafts.prefs.ApplicationMode;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent;
import java.util.HashMap;
import java.util.Map;
/**
* A tall component that goes alongside a MetadataTable and holds the button
* that lets a user specify that the IPTC copyright field should be assigned
* from its preferences default.
*/
class DefaultButtons extends JPanel {
private final static Icon icon = IconFactory.createInvertedIcon(
DefaultButtons.class, "left_arrow.png", 12
);
// We need to know the size of the buttons to calculate our preferred size.
private final static Dimension ButtonSize;
static {
CoolButton button = new CoolButton();
button.setIcon(icon);
ButtonSize = button.getPreferredSize();
}
private MetadataTable table;
private ImageMetadata meta;
// Buttons to set the default value on every entry that has a default
private Map<MetadataEntry, JButton> buttons;
DefaultButtons(MetadataTable table, ImageMetadata meta) {
this.table = table;
this.meta = meta;
setBackground(LightZoneSkin.Colors.ToolPanesBackground);
setOpaque(true);
setLayout(null);
initButtons();
updateButtons();
// The button location must track the table layout.
table.addComponentListener(
new ComponentAdapter() {
public void componentResized(ComponentEvent e) {
updateButtons();
repaint();
}
}
);
}
public Dimension getPreferredSize() {
return new Dimension(
ButtonSize.width, table.getPreferredSize().height
);
}
private void initButtons() {
buttons = new HashMap<MetadataEntry, JButton>();
final MetadataTableModel model = (MetadataTableModel) table.getModel();
for (int row=0; row<model.getRowCount(); row++) {
final MetadataEntry entry = model.getEntryAt(row);
if (entry.hasDefaultValue()) {
JButton button = new CoolButton();
button.setIcon(icon);
button.setToolTipText(LOCALE.get("DefaultButtonToolTip"));
buttons.put(entry, button);
button.addActionListener(
new ActionListener() {
public void actionPerformed(ActionEvent e) {
entry.setDefaultValue(meta);
model.commit();
table.repaint();
}
}
);
add(button);
button.setEnabled(! ApplicationMode.isBasicMode());
ApplicationMode.maybeSetToolTip(button);
}
}
}
private void updateButtons() {
MetadataTableModel model = (MetadataTableModel) table.getModel();
int rowHeight = table.getRowHeight();
for (int row=0; row<model.getRowCount(); row++) {
final MetadataEntry entry = model.getEntryAt(row);
if (entry.hasDefaultValue()) {
JButton button = buttons.get(entry);
Dimension buttonSize = button.getPreferredSize();
button.setSize(buttonSize);
button.setEnabled(
(! ApplicationMode.isBasicMode()) && entry.hasDefaultValue()
);
int y = row * rowHeight + rowHeight / 2 - buttonSize.height / 2;
button.setLocation(0, y);
}
}
}
}