/*
* MediathekView
* Copyright (C) 2013 W. Xaver
* W.Xaver[at]googlemail.com
* http://zdfmediathk.sourceforge.net/
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package mediathek.tool;
import mediathek.config.MVConfig;
import javax.swing.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
public class BeobTableHeader extends MouseAdapter {
//rechhte Maustaste in der Tabelle
MVTable tabelle;
String[] columns;
boolean[] spaltenAnzeigen;
JCheckBoxMenuItem[] box;
int[] ausblenden;
int[] button;
boolean icon = false;
MVConfig.Configs configs;
public BeobTableHeader(MVTable tabelle, String[] columns, boolean[] spalten, int[] aausblenden, int[] bbutton, boolean icon, MVConfig.Configs configs) {
this.tabelle = tabelle;
this.columns = columns;
this.icon = icon;
spaltenAnzeigen = spalten;
this.ausblenden = aausblenden;
this.configs = configs;
button = bbutton;
}
@Override
public void mousePressed(MouseEvent arg0) {
if (arg0.isPopupTrigger()) {
showMenu(arg0);
}
}
@Override
public void mouseReleased(MouseEvent arg0) {
if (arg0.isPopupTrigger()) {
showMenu(arg0);
}
}
private boolean immer(int i) {
for (int ii : ausblenden) {
if (i == ii) {
return true;
}
}
return false;
}
private void showMenu(MouseEvent evt) {
JPopupMenu jPopupMenu = new JPopupMenu();
// Spalten ein-ausschalten
box = new JCheckBoxMenuItem[this.columns.length];
for (int i = 0; i < columns.length; ++i) {
if (immer(i)) {
continue;
}
box[i] = new JCheckBoxMenuItem(columns[i]);
box[i].setSelected(anzeigen(i));
box[i].addActionListener(e -> setSpalten());
jPopupMenu.add(box[i]);
}
// jetzt evtl. noch die Button
if (button.length > 0) {
//##Trenner##
jPopupMenu.addSeparator();
//##Trenner##
final JCheckBoxMenuItem item2 = new JCheckBoxMenuItem("Button anzeigen");
item2.setSelected(anzeigen(button[0])); //entweder alle oder keiner!
item2.addActionListener(e -> {
for (int i : button) {
setSpalten(i, item2.isSelected());
}
});
jPopupMenu.add(item2);
}
if (icon) {
//##Trenner##
jPopupMenu.addSeparator();
final JCheckBoxMenuItem item3 = new JCheckBoxMenuItem("Icons anzeigen");
item3.setSelected(tabelle.iconAnzeigen);
item3.addActionListener(e -> {
tabelle.iconAnzeigen = item3.isSelected();
setSpalten();
});
jPopupMenu.add(item3);
final JCheckBoxMenuItem item2 = new JCheckBoxMenuItem("kleine Icons anzeigen");
item2.setSelected(tabelle.iconKlein);
if (!tabelle.iconAnzeigen) {
item2.setEnabled(false);
} else {
item2.addActionListener(e -> {
tabelle.iconKlein = item2.isSelected();
setSpalten();
});
}
jPopupMenu.add(item2);
}
//##Trenner##
jPopupMenu.addSeparator();
// Tabellenspalten umbrechen
JCheckBoxMenuItem itemBr = new JCheckBoxMenuItem("Zeilen umbrechen");
itemBr.setSelected(tabelle.lineBreak);
itemBr.addActionListener(e -> {
tabelle.lineBreak = itemBr.isSelected();
MVConfig.add(configs, Boolean.toString(itemBr.isSelected()));
setSpalten();
});
jPopupMenu.add(itemBr);
//##Trenner##
jPopupMenu.addSeparator();
// Tabellenspalten zurücksetzen
JMenuItem item1 = new JMenuItem("Spalten zurücksetzen");
item1.addActionListener(e -> tabelle.resetTabelle());
jPopupMenu.add(item1);
//anzeigen
jPopupMenu.show(evt.getComponent(), evt.getX(), evt.getY());
}
private boolean anzeigen(int i) {
return spaltenAnzeigen == null || spaltenAnzeigen[i];
}
private void setSpalten() {
for (int i = 0; i < box.length; ++i) {
if (box[i] != null) {
spaltenAnzeigen[i] = box[i].isSelected();
}
}
tabelle.spaltenEinAus();
tabelle.setHeight();
}
private void setSpalten(int k, boolean anz) {
spaltenAnzeigen[k] = anz;
tabelle.spaltenEinAus();
}
}